From 6166eb3fbfcc2227997a32c99744c59294129ba1 Mon Sep 17 00:00:00 2001 From: gnembon Date: Sun, 22 Sep 2019 17:02:21 -0300 Subject: [PATCH] better pistons rotators --- .../carpet/fakes/PistonBlockInterface.java | 10 +++++++++ .../java/carpet/helpers/BlockRotator.java | 10 +++++++-- .../mixins/PistonBlock_rotatorBlockMixin.java | 21 +++++++++++++++++++ src/main/resources/carpet.mixins.json | 1 + 4 files changed, 40 insertions(+), 2 deletions(-) create mode 100644 src/main/java/carpet/fakes/PistonBlockInterface.java create mode 100644 src/main/java/carpet/mixins/PistonBlock_rotatorBlockMixin.java diff --git a/src/main/java/carpet/fakes/PistonBlockInterface.java b/src/main/java/carpet/fakes/PistonBlockInterface.java new file mode 100644 index 00000000..d4ebc9fd --- /dev/null +++ b/src/main/java/carpet/fakes/PistonBlockInterface.java @@ -0,0 +1,10 @@ +package carpet.fakes; + +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Direction; +import net.minecraft.world.World; + +public interface PistonBlockInterface +{ + boolean publicShouldExtend(World world_1, BlockPos blockPos_1, Direction direction_1); +} diff --git a/src/main/java/carpet/helpers/BlockRotator.java b/src/main/java/carpet/helpers/BlockRotator.java index 564afcc0..3cae6c7a 100644 --- a/src/main/java/carpet/helpers/BlockRotator.java +++ b/src/main/java/carpet/helpers/BlockRotator.java @@ -1,5 +1,6 @@ package carpet.helpers; +import carpet.fakes.PistonBlockInterface; import carpet.settings.CarpetSettings; import net.minecraft.block.AbstractRedstoneGateBlock; import net.minecraft.block.BedBlock; @@ -27,6 +28,7 @@ import net.minecraft.block.dispenser.FallibleItemDispenserBehavior; import net.minecraft.block.enums.BlockHalf; import net.minecraft.block.enums.ComparatorMode; import net.minecraft.block.enums.SlabType; +import net.minecraft.block.piston.PistonHandler; import net.minecraft.entity.Entity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.BlockItem; @@ -157,10 +159,14 @@ public class BlockRotator // Block rotation for blocks that can be placed in all 6 or 4 rotations. if(block instanceof FacingBlock || block instanceof DispenserBlock) { - if (block instanceof PistonBlock && (world.isReceivingRedstonePower(blockpos) || iblockstate.get(PistonBlock.EXTENDED))) + Direction face = iblockstate.get(FacingBlock.FACING); + if (block instanceof PistonBlock && ( + iblockstate.get(PistonBlock.EXTENDED) + || ( ((PistonBlockInterface)block).publicShouldExtend(world, blockpos, face) && (new PistonHandler(world, blockpos, face, true)).calculatePush() ) + ) + ) return stack; - Direction face = iblockstate.get(FacingBlock.FACING); Direction rotated_face = face.rotateClockwise(sourceFace.getAxis()); if(sourceFace.getId() % 2 == 0 || rotated_face == face) { // Flip to make blocks always rotate clockwise relative to the dispenser diff --git a/src/main/java/carpet/mixins/PistonBlock_rotatorBlockMixin.java b/src/main/java/carpet/mixins/PistonBlock_rotatorBlockMixin.java new file mode 100644 index 00000000..17ed7a29 --- /dev/null +++ b/src/main/java/carpet/mixins/PistonBlock_rotatorBlockMixin.java @@ -0,0 +1,21 @@ +package carpet.mixins; + +import carpet.fakes.PistonBlockInterface; +import net.minecraft.block.PistonBlock; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Direction; +import net.minecraft.world.World; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; + +@Mixin(PistonBlock.class) +public abstract class PistonBlock_rotatorBlockMixin implements PistonBlockInterface +{ + @Shadow protected abstract boolean shouldExtend(World world_1, BlockPos blockPos_1, Direction direction_1); + + @Override + public boolean publicShouldExtend(World world_1, BlockPos blockPos_1, Direction direction_1) + { + return shouldExtend(world_1, blockPos_1,direction_1); + } +} diff --git a/src/main/resources/carpet.mixins.json b/src/main/resources/carpet.mixins.json index 5b9b5a54..bbda0dea 100644 --- a/src/main/resources/carpet.mixins.json +++ b/src/main/resources/carpet.mixins.json @@ -81,6 +81,7 @@ "HopperBlock_cactusMixin", "ItemUsageContext_cactusMixin", "DispenserBlock_cactusMixin", + "PistonBlock_rotatorBlockMixin", "ServerPlayNetworkHandler_antiCheatDisabledMixin",