chainstone supports now properly end rods

This commit is contained in:
gnembon committed 2020-10-14 09:50:57 -03:00
1 parent fc3ceae767
commit a51c8ca707
1 file changed
+16 -2
@@ -6,6 +6,7 @@ import net.minecraft.block.BlockState;
import net.minecraft.block.Blocks;
import net.minecraft.block.ChainBlock;
import net.minecraft.block.ChestBlock;
import net.minecraft.block.EndRodBlock;
import net.minecraft.block.enums.ChestType;
import net.minecraft.block.piston.PistonHandler;
import net.minecraft.util.math.BlockPos;
@@ -113,6 +114,7 @@ public abstract class PistonHandler_customStickyMixin
if (previousState.getBlock() == Blocks.CHAIN && isChainOnAxis(previousState, motionDirection))
{
if ( (currentState.getBlock() == Blocks.CHAIN && isChainOnAxis(currentState, motionDirection))
|| isEndRodOnAxis(currentState, motionDirection.getAxis())
|| Block.sideCoversSmallSquare(world, currentPos, motionDirection.getOpposite()))
{
return true;
@@ -125,7 +127,7 @@ public abstract class PistonHandler_customStickyMixin
/**
* Handles blocks besides the slimeblock that are sticky. Currently only supports blocks that are sticky on one side.
* This never seems to run
* This runs in U style structures with something in the middle on retraction.
* @author 2No2Name
*/
@Inject(method = "tryMove", locals = LocalCapture.CAPTURE_FAILHARD, cancellable = true, at = @At(
@@ -213,7 +215,8 @@ public abstract class PistonHandler_customStickyMixin
{
if (CarpetSettings.chainStone)
{
if (world.getBlockState(blockPos3).getBlock() == Blocks.CHAIN && !canMoveAdjacentBlock(blockPos3))
BlockState chainState = world.getBlockState(blockPos3);
if (chainState.getBlock() == Blocks.CHAIN && !isChainOnAxis(chainState, motionDirection) && !canMoveAdjacentBlock(blockPos3))
{
cir.setReturnValue(false);
}
@@ -237,6 +240,7 @@ public abstract class PistonHandler_customStickyMixin
if (blockState.getBlock() == Blocks.CHAIN && isChainOnAxis(blockState, direction))
{
if ((blockState2.getBlock() == Blocks.CHAIN && (blockState.get(ChainBlock.AXIS) == blockState2.get(ChainBlock.AXIS)))
|| isEndRodOnAxis(blockState2, blockState.get(ChainBlock.AXIS))
|| Block.sideCoversSmallSquare(world, blockPos, direction.getOpposite()))
{
if (!tryMove(blockPos, direction))
@@ -292,4 +296,14 @@ public abstract class PistonHandler_customStickyMixin
}catch(IllegalArgumentException e){return false;}
return stickDirection.getAxis() == axis;
}
private boolean isEndRodOnAxis(BlockState state, Direction.Axis stickAxis)
{
if (state.getBlock() != Blocks.END_ROD) return false;
Direction facing;
try {
facing = state.get(EndRodBlock.FACING);
}catch(IllegalArgumentException e){return false;}
return stickAxis == facing.getAxis();
}
}