diff --git a/src/main/java/com/simibubi/create/content/kinetics/chainConveyor/ChainConveyorInteractionHandler.java b/src/main/java/com/simibubi/create/content/kinetics/chainConveyor/ChainConveyorInteractionHandler.java index cca47498dc..529b567895 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/chainConveyor/ChainConveyorInteractionHandler.java +++ b/src/main/java/com/simibubi/create/content/kinetics/chainConveyor/ChainConveyorInteractionHandler.java @@ -52,8 +52,7 @@ public static void clientTick() { } Minecraft mc = Minecraft.getInstance(); - ItemStack mainHandItem = mc.player.getMainHandItem(); - boolean isWrench = AllItemTags.CHAIN_RIDEABLE.matches(mainHandItem); + boolean isWrench = mc.player.isHolding(AllItemTags.CHAIN_RIDEABLE::matches); boolean dismantling = isWrench && mc.player.isShiftKeyDown(); double range = mc.player.getAttribute(ForgeMod.BLOCK_REACH.get()) .getValue() + 1; @@ -114,9 +113,9 @@ public static void clientTick() { private static boolean isActive() { Minecraft mc = Minecraft.getInstance(); - ItemStack mainHandItem = mc.player.getMainHandItem(); - return AllItemTags.CHAIN_RIDEABLE.matches(mainHandItem) || AllBlocks.PACKAGE_FROGPORT.isIn(mainHandItem) - || PackageItem.isPackage(mainHandItem); + return mc.player.isHolding(AllItemTags.CHAIN_RIDEABLE::matches) + || mc.player.isHolding(s->AllBlocks.PACKAGE_FROGPORT.isIn(s)) + || mc.player.isHolding(PackageItem::isPackage); } public static boolean onUse() { @@ -125,8 +124,10 @@ public static boolean onUse() { Minecraft mc = Minecraft.getInstance(); ItemStack mainHandItem = mc.player.getMainHandItem(); + ItemStack offHandItem = mc.player.getOffhandItem(); + if (mc.player.isHolding(AllItemTags.CHAIN_RIDEABLE::matches)) { + ItemStack usedItem = AllItemTags.CHAIN_RIDEABLE.matches(mainHandItem) ? mainHandItem : offHandItem; - if (AllItemTags.CHAIN_RIDEABLE.matches(mainHandItem)) { if (!mc.player.isShiftKeyDown()) { ChainConveyorRidingHandler.embark(selectedLift, selectedChainPosition, selectedConnection); return true; @@ -134,21 +135,22 @@ public static boolean onUse() { AllPackets.getChannel() .sendToServer(new ChainConveyorConnectionPacket(selectedLift, selectedLift.offset(selectedConnection), - mainHandItem, false)); + usedItem, false)); return true; } - if (AllBlocks.PACKAGE_FROGPORT.isIn(mainHandItem)) { + if (mc.player.isHolding(s->AllBlocks.PACKAGE_FROGPORT.isIn(s))) { PackagePortTargetSelectionHandler.exactPositionOfTarget = selectedBakedPosition; PackagePortTargetSelectionHandler.activePackageTarget = new PackagePortTarget.ChainConveyorFrogportTarget(selectedLift, selectedChainPosition, selectedConnection); return true; } - if (PackageItem.isPackage(mainHandItem)) { + if (mc.player.isHolding(PackageItem::isPackage)) { + ItemStack usedItem = PackageItem.isPackage(mainHandItem) ? mainHandItem : offHandItem; AllPackets.getChannel() .sendToServer(new ChainPackageInteractionPacket(selectedLift, selectedConnection, selectedChainPosition, - mainHandItem)); + usedItem)); return true; } diff --git a/src/main/java/com/simibubi/create/content/kinetics/chainConveyor/ChainConveyorRidingHandler.java b/src/main/java/com/simibubi/create/content/kinetics/chainConveyor/ChainConveyorRidingHandler.java index 883caa0da0..f46fec14e3 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/chainConveyor/ChainConveyorRidingHandler.java +++ b/src/main/java/com/simibubi/create/content/kinetics/chainConveyor/ChainConveyorRidingHandler.java @@ -46,7 +46,7 @@ public static void clientTick() { Minecraft mc = Minecraft.getInstance(); if (mc.isPaused()) return; - if (!AllItemTags.CHAIN_RIDEABLE.matches(mc.player.getMainHandItem())) { + if (!mc.player.isHolding(AllItemTags.CHAIN_RIDEABLE::matches)) { stopRiding(); return; } diff --git a/src/main/java/com/simibubi/create/content/kinetics/chainConveyor/ChainPackageInteractionPacket.java b/src/main/java/com/simibubi/create/content/kinetics/chainConveyor/ChainPackageInteractionPacket.java index c1e01c23ac..463e26b696 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/chainConveyor/ChainPackageInteractionPacket.java +++ b/src/main/java/com/simibubi/create/content/kinetics/chainConveyor/ChainPackageInteractionPacket.java @@ -77,9 +77,13 @@ protected void applySettings(ServerPlayer player, ChainConveyorBlockEntity be) { if (best == null) return; - if (player.getMainHandItem() - .isEmpty()) - player.setItemInHand(InteractionHand.MAIN_HAND, best.item.copy()); + if (player.isHolding(stack -> stack.isEmpty())) { + if (player.getMainHandItem().isEmpty()) { + player.setItemInHand(InteractionHand.MAIN_HAND, best.item.copy()); + } else { + player.setItemInHand(InteractionHand.OFF_HAND, best.item.copy()); + } + } else player.getInventory() .placeItemBackInInventory(best.item.copy()); @@ -95,11 +99,15 @@ protected void applySettings(ServerPlayer player, ChainConveyorBlockEntity be) { return; if (!player.isCreative()) { - player.getMainHandItem() - .shrink(1); - if (player.getMainHandItem() - .isEmpty()) - player.setItemInHand(InteractionHand.MAIN_HAND, ItemStack.EMPTY); + player.getMainHandItem().shrink(1); + player.getOffhandItem().shrink(1); + if (player.isHolding(stack -> stack.isEmpty())) { + if (player.getMainHandItem().isEmpty()) { + player.setItemInHand(InteractionHand.MAIN_HAND, ItemStack.EMPTY); + } else { + player.setItemInHand(InteractionHand.OFF_HAND, ItemStack.EMPTY); + } + } } if (selectedConnection.equals(BlockPos.ZERO))