diff --git a/src/main/java/carpet/fakes/BlockEntityInterface.java b/src/main/java/carpet/fakes/BlockEntityInterface.java new file mode 100644 index 00000000..ca734897 --- /dev/null +++ b/src/main/java/carpet/fakes/BlockEntityInterface.java @@ -0,0 +1,8 @@ +package carpet.fakes; + +import net.minecraft.util.math.BlockPos; + +public interface BlockEntityInterface +{ + void setCMPos(BlockPos pos); +} diff --git a/src/main/java/carpet/mixins/BlockEntity_movableBEMixin.java b/src/main/java/carpet/mixins/BlockEntity_movableBEMixin.java index 3c9c13e3..a848ee2e 100644 --- a/src/main/java/carpet/mixins/BlockEntity_movableBEMixin.java +++ b/src/main/java/carpet/mixins/BlockEntity_movableBEMixin.java @@ -1,13 +1,21 @@ package carpet.mixins; +import carpet.fakes.BlockEntityInterface; import net.minecraft.block.entity.BlockEntity; import net.minecraft.util.math.BlockPos; +import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Accessor; +import org.spongepowered.asm.mixin.Mutable; +import org.spongepowered.asm.mixin.Shadow; @Mixin(BlockEntity.class) -public interface BlockEntity_movableBEMixin +public abstract class BlockEntity_movableBEMixin implements BlockEntityInterface { - @Accessor - void setPos(BlockPos pos); + @Mutable + @Shadow @Final protected BlockPos pos; + + public void setCMPos(BlockPos newPos) + { + pos = newPos; + }; } diff --git a/src/main/java/carpet/mixins/PistonBlockEntity_movableTEMixin.java b/src/main/java/carpet/mixins/PistonBlockEntity_movableTEMixin.java index c3ac3ff0..a8a8bacd 100644 --- a/src/main/java/carpet/mixins/PistonBlockEntity_movableTEMixin.java +++ b/src/main/java/carpet/mixins/PistonBlockEntity_movableTEMixin.java @@ -1,6 +1,7 @@ package carpet.mixins; import carpet.CarpetSettings; +import carpet.fakes.BlockEntityInterface; import carpet.fakes.PistonBlockEntityInterface; import carpet.fakes.WorldInterface; import net.minecraft.block.Block; @@ -57,7 +58,7 @@ public abstract class PistonBlockEntity_movableTEMixin extends BlockEntity imple this.carriedBlockEntity = blockEntity; if (this.carriedBlockEntity != null) { - ((BlockEntity_movableBEMixin)carriedBlockEntity).setPos(pos); + ((BlockEntityInterface)carriedBlockEntity).setCMPos(pos); // this might be little dangerous since pos is final for a hashing reason? if (world != null) carriedBlockEntity.setWorld(world); }