Skip to content

Commit a1b8a4b

Browse files
committed
Fix lectern controller dupe
Closes #192
1 parent f68fc62 commit a1b8a4b

4 files changed

Lines changed: 82 additions & 0 deletions

File tree

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package dev.ryanhcode.sable.neoforge.mixin.compatibility.create.lectern_controller;
2+
3+
import com.simibubi.create.content.redstone.link.controller.LecternControllerBlockEntity;
4+
import com.simibubi.create.foundation.blockEntity.SmartBlockEntity;
5+
import dev.ryanhcode.sable.neoforge.mixinterface.compatibility.create.LecternControllerBlockEntityExtension;
6+
import net.minecraft.core.BlockPos;
7+
import net.minecraft.server.level.ServerLevel;
8+
import net.minecraft.world.entity.Entity;
9+
import net.minecraft.world.entity.player.Player;
10+
import net.minecraft.world.level.block.entity.BlockEntityType;
11+
import net.minecraft.world.level.block.state.BlockState;
12+
import org.spongepowered.asm.mixin.Mixin;
13+
import org.spongepowered.asm.mixin.Shadow;
14+
import org.spongepowered.asm.mixin.Unique;
15+
import org.spongepowered.asm.mixin.injection.At;
16+
import org.spongepowered.asm.mixin.injection.Inject;
17+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
18+
19+
import java.util.UUID;
20+
21+
@Mixin(LecternControllerBlockEntity.class)
22+
public abstract class LecternControllerBlockEntityMixin extends SmartBlockEntity implements LecternControllerBlockEntityExtension {
23+
24+
public LecternControllerBlockEntityMixin(final BlockEntityType<?> type, final BlockPos pos, final BlockState state) {
25+
super(type, pos, state);
26+
}
27+
28+
@Shadow
29+
protected abstract void stopUsing(Player player);
30+
31+
@Shadow
32+
private UUID user;
33+
@Unique
34+
private boolean sable$noDrop;
35+
36+
@Inject(method = "dropController", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/Level;addFreshEntity(Lnet/minecraft/world/entity/Entity;)Z"), cancellable = true)
37+
public void dropController(final BlockState state, final CallbackInfo ci) {
38+
if (!this.sable$noDrop) {
39+
return;
40+
}
41+
42+
ci.cancel();
43+
final Entity entity = ((ServerLevel) this.level).getEntity(this.user);
44+
if (entity instanceof final Player player) {
45+
this.stopUsing(player);
46+
}
47+
}
48+
49+
@Override
50+
public void sable$setNoDrop() {
51+
this.sable$noDrop = true;
52+
}
53+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package dev.ryanhcode.sable.neoforge.mixin.compatibility.create.lectern_controller;
2+
3+
import com.simibubi.create.content.redstone.link.controller.LecternControllerBlock;
4+
import com.simibubi.create.content.redstone.link.controller.LecternControllerBlockEntity;
5+
import dev.ryanhcode.sable.api.block.BlockSubLevelAssemblyListener;
6+
import dev.ryanhcode.sable.neoforge.mixinterface.compatibility.create.LecternControllerBlockEntityExtension;
7+
import net.minecraft.core.BlockPos;
8+
import net.minecraft.server.level.ServerLevel;
9+
import net.minecraft.world.level.block.state.BlockState;
10+
import org.spongepowered.asm.mixin.Mixin;
11+
12+
@Mixin(LecternControllerBlock.class)
13+
public class LecternControllerBlockMixin implements BlockSubLevelAssemblyListener {
14+
15+
@Override
16+
public void afterMove(final ServerLevel originLevel, final ServerLevel resultingLevel, final BlockState newState, final BlockPos oldPos, final BlockPos newPos) {
17+
if (originLevel.getBlockEntity(oldPos) instanceof final LecternControllerBlockEntity be) {
18+
((LecternControllerBlockEntityExtension) be).sable$setNoDrop();
19+
}
20+
}
21+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package dev.ryanhcode.sable.neoforge.mixinterface.compatibility.create;
2+
3+
public interface LecternControllerBlockEntityExtension {
4+
5+
void sable$setNoDrop();
6+
}

neoforge/src/main/resources/sable-neoforge.mixins.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,8 @@
117117
"compatibility.create.impact.AbstractBellBlockMixin",
118118
"compatibility.create.inventory_manipulation.CapManipulationBehaviourBaseMixin",
119119
"compatibility.create.inventory_manipulation.ChuteBlockEntityMixin",
120+
"compatibility.create.lectern_controller.LecternControllerBlockEntityMixin",
121+
"compatibility.create.lectern_controller.LecternControllerBlockMixin",
120122
"compatibility.create.logistics.StockKeeperCategoryMenuMixin",
121123
"compatibility.create.mechnical_arm.MechanicalArmSublevelFailure",
122124
"compatibility.create.nozzle.NozzleBlockEntityAccessor",

0 commit comments

Comments
 (0)