From 3dfaa8f4aa34a7cdcc22bc935f68ba1babc26246 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Tue, 15 Dec 2020 04:23:20 +0100 Subject: [PATCH] Moved facing translation to utility class. --- .../entity/RedstoneInterfaceTileEntity.java | 19 ++++---- .../oc2/common/util/HorizontalBlockUtils.java | 45 +++++++++++++++++++ 2 files changed, 53 insertions(+), 11 deletions(-) create mode 100644 src/main/java/li/cil/oc2/common/util/HorizontalBlockUtils.java diff --git a/src/main/java/li/cil/oc2/common/block/entity/RedstoneInterfaceTileEntity.java b/src/main/java/li/cil/oc2/common/block/entity/RedstoneInterfaceTileEntity.java index 0d7b7c34..0fd82973 100644 --- a/src/main/java/li/cil/oc2/common/block/entity/RedstoneInterfaceTileEntity.java +++ b/src/main/java/li/cil/oc2/common/block/entity/RedstoneInterfaceTileEntity.java @@ -5,8 +5,8 @@ import li.cil.oc2.api.bus.device.object.Callback; import li.cil.oc2.api.bus.device.object.DocumentedDevice; import li.cil.oc2.api.bus.device.object.NamedDevice; import li.cil.oc2.api.bus.device.object.Parameter; +import li.cil.oc2.common.util.HorizontalBlockUtils; import net.minecraft.block.BlockState; -import net.minecraft.block.HorizontalBlock; import net.minecraft.nbt.CompoundNBT; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.Direction; @@ -18,9 +18,9 @@ import net.minecraft.world.World; import java.util.Collection; import static java.util.Collections.singletonList; +import static li.cil.oc2.common.util.HorizontalBlockUtils.HORIZONTAL_DIRECTION_COUNT; public class RedstoneInterfaceTileEntity extends TileEntity implements NamedDevice, DocumentedDevice { - private static final int HORIZONTAL_DIRECTION_COUNT = 4; private static final String OUTPUT_NBT_TAG_NAME = "output"; private static final String GET_REDSTONE_INPUT = "getRedstoneInput"; @@ -71,12 +71,9 @@ public class RedstoneInterfaceTileEntity extends TileEntity implements NamedDevi return 0; } - final Direction facing = getBlockState().get(HorizontalBlock.HORIZONTAL_FACING); - final int toGlobal = facing.getHorizontalIndex(); - final int rotatedIndex = (side + toGlobal) % HORIZONTAL_DIRECTION_COUNT; - final BlockPos pos = getPos(); - final Direction direction = Direction.byHorizontalIndex(rotatedIndex); + final Direction direction = HorizontalBlockUtils.toGlobal(getBlockState(), Direction.byHorizontalIndex(side)); + assert direction != null; final BlockPos neighborPos = pos.offset(direction); final ChunkPos chunkPos = new ChunkPos(neighborPos.getX(), neighborPos.getZ()); @@ -143,10 +140,10 @@ public class RedstoneInterfaceTileEntity extends TileEntity implements NamedDevi return 0; } - final Direction facing = getBlockState().get(HorizontalBlock.HORIZONTAL_FACING); - final int toLocal = HORIZONTAL_DIRECTION_COUNT - facing.getHorizontalIndex(); - final int rotatedIndex = (direction.getHorizontalIndex() + toLocal) % HORIZONTAL_DIRECTION_COUNT; - return output[rotatedIndex]; + final Direction localDirection = HorizontalBlockUtils.toLocal(getBlockState(), direction); + assert localDirection != null; + + return output[localDirection.getHorizontalIndex()]; } /////////////////////////////////////////////////////////////////// diff --git a/src/main/java/li/cil/oc2/common/util/HorizontalBlockUtils.java b/src/main/java/li/cil/oc2/common/util/HorizontalBlockUtils.java new file mode 100644 index 00000000..496d625b --- /dev/null +++ b/src/main/java/li/cil/oc2/common/util/HorizontalBlockUtils.java @@ -0,0 +1,45 @@ +package li.cil.oc2.common.util; + +import net.minecraft.block.BlockState; +import net.minecraft.block.HorizontalBlock; +import net.minecraft.util.Direction; + +import javax.annotation.Nullable; + +public final class HorizontalBlockUtils { + public static final int HORIZONTAL_DIRECTION_COUNT = 4; + + @Nullable + public static Direction toLocal(final BlockState blockState, @Nullable final Direction direction) { + if (direction == null) { + return null; + } + + final int index = direction.getHorizontalIndex(); + if (index < 0) { + return direction; + } + + final Direction facing = blockState.get(HorizontalBlock.HORIZONTAL_FACING); + final int toLocal = HORIZONTAL_DIRECTION_COUNT - facing.getHorizontalIndex(); + final int rotatedIndex = (index + toLocal) % HORIZONTAL_DIRECTION_COUNT; + return Direction.byHorizontalIndex(rotatedIndex); + } + + @Nullable + public static Direction toGlobal(final BlockState blockState, @Nullable final Direction direction) { + if (direction == null) { + return null; + } + + final int index = direction.getHorizontalIndex(); + if (index < 0) { + return direction; + } + + final Direction facing = blockState.get(HorizontalBlock.HORIZONTAL_FACING); + final int toGlobal = facing.getHorizontalIndex(); + final int rotatedIndex = (index + toGlobal) % HORIZONTAL_DIRECTION_COUNT; + return Direction.byHorizontalIndex(rotatedIndex); + } +}