From 28764042288212f33634fc7b437e2b46171b03dd Mon Sep 17 00:00:00 2001 From: Vlamonster Date: Thu, 13 Feb 2025 01:57:55 +0100 Subject: [PATCH] Ring of Loki support for Cover Copy/Paste Tool --- .../java/gregtech/api/util/GTUtility.java | 53 ++++++++++--------- .../items/behaviors/BehaviourCoverTool.java | 18 +++++++ 2 files changed, 46 insertions(+), 25 deletions(-) diff --git a/src/main/java/gregtech/api/util/GTUtility.java b/src/main/java/gregtech/api/util/GTUtility.java index 409a3c4b654..1f515ea74d4 100644 --- a/src/main/java/gregtech/api/util/GTUtility.java +++ b/src/main/java/gregtech/api/util/GTUtility.java @@ -3798,54 +3798,57 @@ public static float[] getClickedFacingCoords(ForgeDirection side, float aX, floa /** * This Function determines the direction a Block gets when being Wrenched. returns -1 if invalid. Even though that - * could never happen. + * could never happen. Normalizes values into the range [0.0f, 1.0f]. */ public static ForgeDirection determineWrenchingSide(ForgeDirection side, float aX, float aY, float aZ) { + float modX = (aX % 1.0f + 1.0f) % 1.0f; + float modY = (aY % 1.0f + 1.0f) % 1.0f; + float modZ = (aZ % 1.0f + 1.0f) % 1.0f; ForgeDirection tBack = side.getOpposite(); switch (side) { case DOWN, UP -> { - if (aX < 0.25) { - if (aZ < 0.25) return tBack; - if (aZ > 0.75) return tBack; + if (modX < 0.25) { + if (modZ < 0.25) return tBack; + if (modZ > 0.75) return tBack; return WEST; } - if (aX > 0.75) { - if (aZ < 0.25) return tBack; - if (aZ > 0.75) return tBack; + if (modX > 0.75) { + if (modZ < 0.25) return tBack; + if (modZ > 0.75) return tBack; return EAST; } - if (aZ < 0.25) return NORTH; - if (aZ > 0.75) return SOUTH; + if (modZ < 0.25) return NORTH; + if (modZ > 0.75) return SOUTH; return side; } case NORTH, SOUTH -> { - if (aX < 0.25) { - if (aY < 0.25) return tBack; - if (aY > 0.75) return tBack; + if (modX < 0.25) { + if (modY < 0.25) return tBack; + if (modY > 0.75) return tBack; return WEST; } - if (aX > 0.75) { - if (aY < 0.25) return tBack; - if (aY > 0.75) return tBack; + if (modX > 0.75) { + if (modY < 0.25) return tBack; + if (modY > 0.75) return tBack; return EAST; } - if (aY < 0.25) return DOWN; - if (aY > 0.75) return UP; + if (modY < 0.25) return DOWN; + if (modY > 0.75) return UP; return side; } case WEST, EAST -> { - if (aZ < 0.25) { - if (aY < 0.25) return tBack; - if (aY > 0.75) return tBack; + if (modZ < 0.25) { + if (modY < 0.25) return tBack; + if (modY > 0.75) return tBack; return NORTH; } - if (aZ > 0.75) { - if (aY < 0.25) return tBack; - if (aY > 0.75) return tBack; + if (modZ > 0.75) { + if (modY < 0.25) return tBack; + if (modY > 0.75) return tBack; return SOUTH; } - if (aY < 0.25) return DOWN; - if (aY > 0.75) return UP; + if (modY < 0.25) return DOWN; + if (modY > 0.75) return UP; return side; } } diff --git a/src/main/java/gregtech/common/items/behaviors/BehaviourCoverTool.java b/src/main/java/gregtech/common/items/behaviors/BehaviourCoverTool.java index cb169ce686c..67f6d14271d 100644 --- a/src/main/java/gregtech/common/items/behaviors/BehaviourCoverTool.java +++ b/src/main/java/gregtech/common/items/behaviors/BehaviourCoverTool.java @@ -35,6 +35,24 @@ public class BehaviourCoverTool extends BehaviourNone { private int mCoverType; private int mTickRateAddition = 0; + @Override + public boolean shouldInterruptBlockActivation(final EntityPlayer player, final TileEntity tileEntity, + final ForgeDirection side) { + return tileEntity instanceof ICoverable; + } + + @Override + // Included for Ring of Loki support. + public boolean onItemUse(final MetaBaseItem aItem, final ItemStack aStack, final EntityPlayer aPlayer, + final World aWorld, final int aX, final int aY, final int aZ, final int ordinalSide, final float hitX, + final float hitY, final float hitZ) { + if (aWorld.getTileEntity(aX, aY, aZ) instanceof ICoverable) { + final ForgeDirection side = ForgeDirection.getOrientation(ordinalSide); + return onItemUseFirst(aItem, aStack, aPlayer, aWorld, aX, aY, aZ, side, hitX, hitY, hitZ); + } + return false; + } + @Override public boolean onItemUseFirst(MetaBaseItem aItem, ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, int aY, int aZ, ForgeDirection side, float hitX, float hitY, float hitZ) {