diff --git a/src/main/java/carpet/helpers/BlockRotator.java b/src/main/java/carpet/helpers/BlockRotator.java index ce33f5b5..f54d43b2 100644 --- a/src/main/java/carpet/helpers/BlockRotator.java +++ b/src/main/java/carpet/helpers/BlockRotator.java @@ -1,7 +1,26 @@ package carpet.helpers; import carpet.CarpetSettings; -import net.minecraft.block.*; +import net.minecraft.block.AbstractRedstoneGateBlock; +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; +import net.minecraft.block.ComparatorBlock; +import net.minecraft.block.DispenserBlock; +import net.minecraft.block.EndRodBlock; +import net.minecraft.block.FacingBlock; +import net.minecraft.block.FenceGateBlock; +import net.minecraft.block.GlazedTerracottaBlock; +import net.minecraft.block.HopperBlock; +import net.minecraft.block.HorizontalFacingBlock; +import net.minecraft.block.LeverBlock; +import net.minecraft.block.ObserverBlock; +import net.minecraft.block.PistonBlock; +import net.minecraft.block.RailBlock; +import net.minecraft.block.RepeaterBlock; +import net.minecraft.block.SlabBlock; +import net.minecraft.block.StairsBlock; +import net.minecraft.block.TrapdoorBlock; import net.minecraft.block.enums.BlockHalf; import net.minecraft.block.enums.ComparatorMode; import net.minecraft.block.enums.SlabType; @@ -12,7 +31,11 @@ import net.minecraft.item.ItemPlacementContext; import net.minecraft.item.ItemStack; import net.minecraft.util.BlockRotation; import net.minecraft.util.Hand; -import net.minecraft.util.math.*; +import net.minecraft.util.math.BlockPointer; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Direction; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.Vec3d; import net.minecraft.world.World; public class BlockRotator @@ -30,16 +53,26 @@ public class BlockRotator { //actual alternative block placement code // + if (true) throw new UnsupportedOperationException("Alternative Block Placement / client controlled / is not implemnted"); + Direction facing; Vec3d vec3d = context.getPos(); float hitX = (float) vec3d.x; + + if (hitX<2) // vanilla + return null; + int code = (int)(hitX-2)/2; + // + // now it would be great if hitX was adjusted in context to original range from 0.0 to 1.0 + // since its actually using it. Its private - maybe with Reflections? + // PlayerEntity placer = context.getPlayer(); BlockPos pos = context.getBlockPos(); World world = context.getWorld(); if (block instanceof GlazedTerracottaBlock) { - facing = Direction.byId((int)hitX - 2); + facing = Direction.byId(code); if(facing == Direction.UP || facing == Direction.DOWN) { facing = placer.getHorizontalFacing().getOpposite(); @@ -49,37 +82,37 @@ public class BlockRotator else if (block instanceof ObserverBlock) { return block.getDefaultState() - .with(FacingBlock.FACING, Direction.byId((int)hitX - 2)) + .with(FacingBlock.FACING, Direction.byId(code)) .with(ObserverBlock.POWERED, true); } else if (block instanceof RepeaterBlock) { - facing = Direction.byId((((int)hitX) % 10) - 2); + facing = Direction.byId(code % 16); if(facing == Direction.UP || facing == Direction.DOWN) { facing = placer.getHorizontalFacing().getOpposite(); } return block.getDefaultState() .with(HorizontalFacingBlock.FACING, facing) - .with(RepeaterBlock.DELAY, MathHelper.clamp((((int) hitX) / 10) + 1, 1, 4)) + .with(RepeaterBlock.DELAY, MathHelper.clamp(code / 16, 1, 4)) .with(RepeaterBlock.LOCKED, Boolean.FALSE); } else if (block instanceof TrapdoorBlock) { return block.getDefaultState() - .with(TrapdoorBlock.FACING, Direction.byId((((int)hitX) % 10) - 2)) + .with(TrapdoorBlock.FACING, Direction.byId(code % 16)) .with(TrapdoorBlock.OPEN, Boolean.FALSE) - .with(TrapdoorBlock.HALF, (hitX > 10) ? BlockHalf.TOP : BlockHalf.BOTTOM) + .with(TrapdoorBlock.HALF, (code >= 16) ? BlockHalf.TOP : BlockHalf.BOTTOM) .with(TrapdoorBlock.OPEN, world.isReceivingRedstonePower(pos)); } else if (block instanceof ComparatorBlock) { - facing = Direction.byId((((int)hitX) % 10) - 2); + facing = Direction.byId(code % 16); if((facing == Direction.UP) || (facing == Direction.DOWN)) { facing = placer.getHorizontalFacing().getOpposite(); } - ComparatorMode m = (hitX > 10)?ComparatorMode.SUBTRACT: ComparatorMode.COMPARE; + ComparatorMode m = (hitX >= 16)?ComparatorMode.SUBTRACT: ComparatorMode.COMPARE; return block.getDefaultState() .with(HorizontalFacingBlock.FACING, facing) .with(ComparatorBlock.POWERED, Boolean.FALSE) @@ -88,20 +121,20 @@ public class BlockRotator else if (block instanceof DispenserBlock) { return block.getDefaultState() - .with(DispenserBlock.FACING, Direction.byId((int)hitX - 2)) + .with(DispenserBlock.FACING, Direction.byId(code)) .with(DispenserBlock.TRIGGERED, Boolean.FALSE); } else if (block instanceof PistonBlock) { return block.getDefaultState() - .with(FacingBlock.FACING, Direction.byId((int)hitX - 2) ) + .with(FacingBlock.FACING, Direction.byId(code)) .with(PistonBlock.EXTENDED, Boolean.FALSE); } else if (block instanceof StairsBlock) { return block.getPlacementState(context)//worldIn, pos, facing, hitX, hitY, hitZ, meta, placer) - .with(StairsBlock.FACING, Direction.byId((((int)hitX) % 10) - 2)) - .with(StairsBlock.HALF, ( hitX > 10)?BlockHalf.TOP : BlockHalf.BOTTOM); + .with(StairsBlock.FACING, Direction.byId(code % 16)) + .with(StairsBlock.HALF, ( hitX >= 16)?BlockHalf.TOP : BlockHalf.BOTTOM); } return null; }