From f0b8e49d1d3d58068ef23fae7184dd635ed14154 Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Wed, 9 Oct 2024 12:59:46 +0200 Subject: [PATCH] Mirror, Mirror on the Vault - Vaults and tanks no longer multi-place when a symmetry wand is active --- .../symmetryWand/SymmetryHandler.java | 19 +++++-------------- .../symmetryWand/SymmetryWandItem.java | 10 ++++++++++ .../content/fluids/tank/FluidTankItem.java | 3 +++ .../logistics/vault/ItemVaultItem.java | 3 +++ 4 files changed, 21 insertions(+), 14 deletions(-) diff --git a/src/main/java/com/simibubi/create/content/equipment/symmetryWand/SymmetryHandler.java b/src/main/java/com/simibubi/create/content/equipment/symmetryWand/SymmetryHandler.java index 06e1c2e07..116235545 100644 --- a/src/main/java/com/simibubi/create/content/equipment/symmetryWand/SymmetryHandler.java +++ b/src/main/java/com/simibubi/create/content/equipment/symmetryWand/SymmetryHandler.java @@ -52,19 +52,13 @@ public class SymmetryHandler { if (event.getLevel() .isClientSide()) return; - if (!(event.getEntity() instanceof Player)) + if (!(event.getEntity() instanceof Player player)) return; - Player player = (Player) event.getEntity(); Inventory inv = player.getInventory(); - for (int i = 0; i < Inventory.getSelectionSize(); i++) { - if (!inv.getItem(i) - .isEmpty() - && inv.getItem(i) - .getItem() == AllItems.WAND_OF_SYMMETRY.get()) { + for (int i = 0; i < Inventory.getSelectionSize(); i++) + if (AllItems.WAND_OF_SYMMETRY.isIn(inv.getItem(i))) SymmetryWandItem.apply(player.level(), inv.getItem(i), player, event.getPos(), event.getPlacedBlock()); - } - } } @SubscribeEvent(priority = EventPriority.LOWEST) @@ -75,12 +69,9 @@ public class SymmetryHandler { Player player = event.getPlayer(); Inventory inv = player.getInventory(); - for (int i = 0; i < Inventory.getSelectionSize(); i++) { - if (!inv.getItem(i) - .isEmpty() && AllItems.WAND_OF_SYMMETRY.isIn(inv.getItem(i))) { + for (int i = 0; i < Inventory.getSelectionSize(); i++) + if (AllItems.WAND_OF_SYMMETRY.isIn(inv.getItem(i))) SymmetryWandItem.remove(player.level(), inv.getItem(i), player, event.getPos()); - } - } } @OnlyIn(Dist.CLIENT) diff --git a/src/main/java/com/simibubi/create/content/equipment/symmetryWand/SymmetryWandItem.java b/src/main/java/com/simibubi/create/content/equipment/symmetryWand/SymmetryWandItem.java index c74f0aee9..c203e7976 100644 --- a/src/main/java/com/simibubi/create/content/equipment/symmetryWand/SymmetryWandItem.java +++ b/src/main/java/com/simibubi/create/content/equipment/symmetryWand/SymmetryWandItem.java @@ -9,6 +9,7 @@ import java.util.function.Consumer; import javax.annotation.Nonnull; import com.simibubi.create.AllBlocks; +import com.simibubi.create.AllItems; import com.simibubi.create.AllPackets; import com.simibubi.create.content.contraptions.mounted.CartAssemblerBlock; import com.simibubi.create.content.equipment.symmetryWand.mirror.CrossPlaneMirror; @@ -27,6 +28,7 @@ import net.minecraft.nbt.CompoundTag; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; import net.minecraft.world.InteractionResultHolder; +import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.Item; @@ -328,5 +330,13 @@ public class SymmetryWandItem extends Item { public void initializeClient(Consumer consumer) { consumer.accept(SimpleCustomRenderer.create(this, new SymmetryWandItemRenderer())); } + + public static boolean presentInHotbar(Player player) { + Inventory inv = player.getInventory(); + for (int i = 0; i < Inventory.getSelectionSize(); i++) + if (AllItems.WAND_OF_SYMMETRY.isIn(inv.getItem(i))) + return true; + return false; + } } diff --git a/src/main/java/com/simibubi/create/content/fluids/tank/FluidTankItem.java b/src/main/java/com/simibubi/create/content/fluids/tank/FluidTankItem.java index 3dc6d500c..c86304e6b 100644 --- a/src/main/java/com/simibubi/create/content/fluids/tank/FluidTankItem.java +++ b/src/main/java/com/simibubi/create/content/fluids/tank/FluidTankItem.java @@ -3,6 +3,7 @@ package com.simibubi.create.content.fluids.tank; import com.simibubi.create.AllBlockEntityTypes; import com.simibubi.create.AllBlocks; import com.simibubi.create.api.connectivity.ConnectivityHandler; +import com.simibubi.create.content.equipment.symmetryWand.SymmetryWandItem; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; @@ -75,6 +76,8 @@ public class FluidTankItem extends BlockItem { if (!FluidTankBlock.isTank(placedOnState)) return; + if (SymmetryWandItem.presentInHotbar(player)) + return; boolean creative = getBlock().equals(AllBlocks.CREATIVE_FLUID_TANK.get()); FluidTankBlockEntity tankAt = ConnectivityHandler.partAt( creative ? AllBlockEntityTypes.CREATIVE_FLUID_TANK.get() : AllBlockEntityTypes.FLUID_TANK.get(), world, placedOnPos diff --git a/src/main/java/com/simibubi/create/content/logistics/vault/ItemVaultItem.java b/src/main/java/com/simibubi/create/content/logistics/vault/ItemVaultItem.java index 260e86d37..dac93a634 100644 --- a/src/main/java/com/simibubi/create/content/logistics/vault/ItemVaultItem.java +++ b/src/main/java/com/simibubi/create/content/logistics/vault/ItemVaultItem.java @@ -2,6 +2,7 @@ package com.simibubi.create.content.logistics.vault; import com.simibubi.create.AllBlockEntityTypes; import com.simibubi.create.api.connectivity.ConnectivityHandler; +import com.simibubi.create.content.equipment.symmetryWand.SymmetryWandItem; import com.simibubi.create.foundation.utility.VecHelper; import net.minecraft.core.BlockPos; @@ -65,6 +66,8 @@ public class ItemVaultItem extends BlockItem { if (!ItemVaultBlock.isVault(placedOnState)) return; + if (SymmetryWandItem.presentInHotbar(player)) + return; ItemVaultBlockEntity tankAt = ConnectivityHandler.partAt(AllBlockEntityTypes.ITEM_VAULT.get(), world, placedOnPos); if (tankAt == null) return;