From 09fdb879b0385e0d7a986551ab4fcb1ac1845417 Mon Sep 17 00:00:00 2001 From: Jeffrey Date: Sat, 3 Feb 2024 15:49:29 +0100 Subject: [PATCH 1/9] replace isitemsimilar --- .../slimefun4/core/guide/SlimefunGuide.java | 3 +- .../core/guide/options/GuideModeOption.java | 2 +- .../networks/cargo/AbstractItemNetwork.java | 2 +- .../core/networks/cargo/CargoUtils.java | 8 ++--- .../core/networks/cargo/ItemFilter.java | 2 +- .../items/androids/ProgrammableAndroid.java | 2 +- .../autocrafters/SlimefunItemRecipe.java | 2 +- .../items/blocks/Composter.java | 2 +- .../implementation/items/blocks/Crucible.java | 2 +- .../items/electric/machines/AutoAnvil.java | 2 +- .../electric/machines/ElectricDustWasher.java | 7 ++-- .../electric/machines/ElectricSmeltery.java | 2 +- .../items/electric/machines/FluidPump.java | 4 +-- .../machines/HeatedPressureChamber.java | 2 +- .../accelerators/AnimalGrowthAccelerator.java | 2 +- .../accelerators/CropGrowthAccelerator.java | 2 +- .../accelerators/TreeGrowthAccelerator.java | 2 +- .../entities/AbstractEntityAssembler.java | 6 ++-- .../machines/entities/AutoBreeder.java | 2 +- .../machines/entities/ProduceCollector.java | 2 +- .../items/electric/reactors/Reactor.java | 4 +-- .../implementation/items/food/Juice.java | 4 +-- .../implementation/items/geo/OilPump.java | 2 +- .../items/magical/MagicEyeOfEnder.java | 8 ++--- .../items/magical/talismans/Talisman.java | 2 +- .../items/multiblocks/AbstractSmeltery.java | 6 ++-- .../items/multiblocks/ArmorForge.java | 2 +- .../items/multiblocks/Compressor.java | 2 +- .../multiblocks/EnhancedCraftingTable.java | 10 ++---- .../items/multiblocks/GrindStone.java | 2 +- .../items/multiblocks/Juicer.java | 2 +- .../items/multiblocks/MagicWorkbench.java | 11 ++----- .../items/multiblocks/OreCrusher.java | 2 +- .../items/multiblocks/OreWasher.java | 6 ++-- .../items/multiblocks/PressureChamber.java | 2 +- .../implementation/items/tools/GoldPan.java | 2 +- .../listeners/AncientAltarListener.java | 8 ++--- .../listeners/BlockListener.java | 5 +++ .../listeners/DebugFishListener.java | 2 +- .../listeners/SlimefunGuideListener.java | 2 +- .../SlimefunItemInteractListener.java | 2 +- .../slimefun4/utils/SlimefunUtils.java | 32 +++++++++++++++++++ .../abstractItems/AContainer.java | 2 +- .../abstractItems/AGenerator.java | 2 +- .../abstractItems/MachineFuel.java | 2 +- .../api/geo/TestResourceRegistration.java | 2 +- .../core/commands/TestBackpackCommand.java | 2 +- .../listeners/TestSlimefunGuideListener.java | 2 +- .../listeners/TestSoulboundListener.java | 2 +- .../slimefun4/utils/TestItemStackWrapper.java | 6 ++-- 50 files changed, 111 insertions(+), 85 deletions(-) diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/core/guide/SlimefunGuide.java b/src/main/java/io/github/thebusybiscuit/slimefun4/core/guide/SlimefunGuide.java index 91f70a6c80..03ade3b8bd 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/core/guide/SlimefunGuide.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/core/guide/SlimefunGuide.java @@ -116,7 +116,8 @@ public static boolean isGuideItem(@Nullable ItemStack item) { } else if (item instanceof SlimefunGuideItem) { return true; } else { - return SlimefunUtils.isItemSimilar(item, getItem(SlimefunGuideMode.SURVIVAL_MODE), true) || SlimefunUtils.isItemSimilar(item, getItem(SlimefunGuideMode.CHEAT_MODE), true); + return SlimefunUtils.compareItem(item, getItem(SlimefunGuideMode.SURVIVAL_MODE)) + || SlimefunUtils.compareItem(item, getItem(SlimefunGuideMode.CHEAT_MODE)); } } diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/core/guide/options/GuideModeOption.java b/src/main/java/io/github/thebusybiscuit/slimefun4/core/guide/options/GuideModeOption.java index f86694211d..44089c9e27 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/core/guide/options/GuideModeOption.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/core/guide/options/GuideModeOption.java @@ -101,7 +101,7 @@ private SlimefunGuideMode getNextMode(@Nonnull Player p, @Nonnull SlimefunGuideM @Nonnull @Override public Optional getSelectedOption(@Nonnull Player p, @Nonnull ItemStack guide) { - if (SlimefunUtils.isItemSimilar(guide, SlimefunGuide.getItem(SlimefunGuideMode.CHEAT_MODE), true, false)) { + if (SlimefunUtils.compareItem(guide, SlimefunGuide.getItem(SlimefunGuideMode.CHEAT_MODE))) { return Optional.of(SlimefunGuideMode.CHEAT_MODE); } else { return Optional.of(SlimefunGuideMode.SURVIVAL_MODE); diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/core/networks/cargo/AbstractItemNetwork.java b/src/main/java/io/github/thebusybiscuit/slimefun4/core/networks/cargo/AbstractItemNetwork.java index 2cce2bb796..518d1575b1 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/core/networks/cargo/AbstractItemNetwork.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/core/networks/cargo/AbstractItemNetwork.java @@ -104,7 +104,7 @@ private void filter(@Nullable ItemStack stack, List items, boolean add = true; for (ItemStackAndInteger item : items) { - if (SlimefunUtils.isItemSimilar(stack, item.getItemStackWrapper(), true, false)) { + if (SlimefunUtils.compareItem(stack, item.getItemStackWrapper())) { add = false; item.add(stack.getAmount()); } diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/core/networks/cargo/CargoUtils.java b/src/main/java/io/github/thebusybiscuit/slimefun4/core/networks/cargo/CargoUtils.java index ff8da96d0a..90bc761503 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/core/networks/cargo/CargoUtils.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/core/networks/cargo/CargoUtils.java @@ -146,7 +146,7 @@ static ItemStack withdraw(AbstractItemNetwork network, Map ItemStack is = menu.getItemInSlot(slot); ItemStackWrapper wrapperItemInSlot = ItemStackWrapper.wrap(is); - if (SlimefunUtils.isItemSimilar(wrapperItemInSlot, wrapperTemplate, true) && matchesFilter(network, node, wrapperItemInSlot)) { + if (SlimefunUtils.compareItem(wrapperItemInSlot, wrapperTemplate) && matchesFilter(network, node, wrapperItemInSlot)) { if (is.getAmount() > template.getAmount()) { is.setAmount(is.getAmount() - template.getAmount()); menu.replaceExistingItem(slot, is); @@ -178,7 +178,7 @@ static ItemStack withdrawFromVanillaInventory(AbstractItemNetwork network, Block } ItemStackWrapper wrapperInSlot = ItemStackWrapper.wrap(itemInSlot); - if (SlimefunUtils.isItemSimilar(wrapperInSlot, wrapper, true, false) && matchesFilter(network, node, wrapperInSlot)) { + if (SlimefunUtils.compareItem(wrapperInSlot, wrapper) && matchesFilter(network, node, wrapperInSlot)) { if (itemInSlot.getAmount() > template.getAmount()) { itemInSlot.setAmount(itemInSlot.getAmount() - template.getAmount()); return template; @@ -289,7 +289,7 @@ static ItemStack insert(AbstractItemNetwork network, Map in continue; } - if (SlimefunUtils.isItemSimilar(itemInSlot, wrapper, true, false)) { + if (SlimefunUtils.compareItem(itemInSlot, wrapper)) { if (currentAmount < maxStackSize) { int amount = currentAmount + stack.getAmount(); @@ -342,7 +342,7 @@ private static ItemStack insertIntoVanillaInventory(@Nonnull ItemStack stack, @N continue; } - if (SlimefunUtils.isItemSimilar(itemInSlot, wrapper, true, false)) { + if (SlimefunUtils.compareItem(itemInSlot, wrapper)) { if (currentAmount < maxStackSize) { int amount = currentAmount + stack.getAmount(); diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/core/networks/cargo/ItemFilter.java b/src/main/java/io/github/thebusybiscuit/slimefun4/core/networks/cargo/ItemFilter.java index 1de4b4a4a4..511b5ca429 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/core/networks/cargo/ItemFilter.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/core/networks/cargo/ItemFilter.java @@ -200,7 +200,7 @@ public boolean test(@Nonnull ItemStack item) { * and thus only perform .getItemMeta() once */ for (ItemStackWrapper stack : items) { - if (SlimefunUtils.isItemSimilar(subject, stack, checkLore, false)) { + if (SlimefunUtils.compareItem(subject, stack)) { /* * The filter has found a match, we can return the opposite * of our default value. If we exclude items, this is where we diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/androids/ProgrammableAndroid.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/androids/ProgrammableAndroid.java index 471551575b..2db46bb557 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/androids/ProgrammableAndroid.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/androids/ProgrammableAndroid.java @@ -806,7 +806,7 @@ private boolean insertFuel(BlockMenu menu, Inventory dispenser, int slot, ItemSt menu.replaceExistingItem(43, newFuel); dispenser.setItem(slot, null); return true; - } else if (SlimefunUtils.isItemSimilar(newFuel, currentFuel, true, false)) { + } else if (SlimefunUtils.compareItem(newFuel, currentFuel)) { int rest = newFuel.getType().getMaxStackSize() - currentFuel.getAmount(); if (rest > 0) { diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/autocrafters/SlimefunItemRecipe.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/autocrafters/SlimefunItemRecipe.java index 32cede3e95..0d74279867 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/autocrafters/SlimefunItemRecipe.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/autocrafters/SlimefunItemRecipe.java @@ -45,7 +45,7 @@ private static Collection> getInputs(@Nonnull SlimefunItem ItemStack ingredient = item.getRecipe()[i]; if (ingredient != null && !ingredient.getType().isAir()) { - predicates.add(stack -> SlimefunUtils.isItemSimilar(stack, ingredient, true)); + predicates.add(stack -> SlimefunUtils.compareItem(stack, ingredient)); } } diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/blocks/Composter.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/blocks/Composter.java index ee0e546090..7f1bc67639 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/blocks/Composter.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/blocks/Composter.java @@ -128,7 +128,7 @@ private ItemStack getOutput(Player p, ItemStack input) { for (int i = 0; i < recipes.size(); i += 2) { ItemStack convert = recipes.get(i); - if (convert != null && SlimefunUtils.isItemSimilar(input, convert, true)) { + if (convert != null && SlimefunUtils.compareItem(input, convert)) { ItemStack removing = input.clone(); removing.setAmount(convert.getAmount()); p.getInventory().removeItem(removing); diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/blocks/Crucible.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/blocks/Crucible.java index 2e0d31b489..db19ec2a5c 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/blocks/Crucible.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/blocks/Crucible.java @@ -141,7 +141,7 @@ private boolean craft(Player p, ItemStack input) { for (int i = 0; i < recipes.size(); i += 2) { ItemStack catalyst = recipes.get(i); - if (SlimefunUtils.isItemSimilar(input, catalyst, true)) { + if (SlimefunUtils.compareItem(input, catalyst)) { ItemStack removing = input.clone(); removing.setAmount(catalyst.getAmount()); p.getInventory().removeItem(removing); diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/AutoAnvil.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/AutoAnvil.java index 16329948bf..12d1a646c4 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/AutoAnvil.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/AutoAnvil.java @@ -49,7 +49,7 @@ protected MachineRecipe findNextRecipe(BlockMenu menu) { ItemStack item = menu.getItemInSlot(slot); if (item != null && item.getType().getMaxDurability() > 0 && ((Damageable) item.getItemMeta()).getDamage() > 0) { - if (SlimefunUtils.isItemSimilar(ductTape, SlimefunItems.DUCT_TAPE, true, false)) { + if (SlimefunUtils.compareItem(ductTape, SlimefunItems.DUCT_TAPE)) { ItemStack repairedItem = repair(item); if (!menu.fits(repairedItem, getOutputSlots())) { diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/ElectricDustWasher.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/ElectricDustWasher.java index ad56c3d8a9..d0c575f525 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/ElectricDustWasher.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/ElectricDustWasher.java @@ -48,7 +48,7 @@ protected MachineRecipe findNextRecipe(BlockMenu menu) { for (int slot : getInputSlots()) { ItemStack input = menu.getItemInSlot(slot); MachineRecipe recipe = null; - if (SlimefunUtils.isItemSimilar(input, SlimefunItems.SIFTED_ORE, true, false)) { + if (SlimefunUtils.compareItem(input, SlimefunItems.SIFTED_ORE)) { if (!legacyMode && !hasFreeSlot(menu)) { return null; } @@ -59,9 +59,10 @@ protected MachineRecipe findNextRecipe(BlockMenu menu) { menu.consumeItem(slot); return recipe; } - } else if (SlimefunUtils.isItemSimilar(input, SlimefunItems.PULVERIZED_ORE, true)) { + + } else if (SlimefunUtils.compareItem(input, SlimefunItems.PULVERIZED_ORE)) { recipe = new MachineRecipe(4 / getSpeed(), new ItemStack[] { SlimefunItems.PULVERIZED_ORE }, new ItemStack[] { SlimefunItems.PURE_ORE_CLUSTER }); - } else if (SlimefunUtils.isItemSimilar(input, new ItemStack(Material.SAND), true)) { + } else if (SlimefunUtils.compareItem(input, new ItemStack(Material.SAND))) { recipe = new MachineRecipe(4 / getSpeed(), new ItemStack[] { new ItemStack(Material.SAND) }, new ItemStack[] { SlimefunItems.SALT }); } diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/ElectricSmeltery.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/ElectricSmeltery.java index 24e0e0c33e..942a34de7f 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/ElectricSmeltery.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/ElectricSmeltery.java @@ -76,7 +76,7 @@ public int[] getSlotsAccessedByItemTransport(DirtyChestMenu menu, ItemTransportF for (int slot : getInputSlots()) { ItemStack stack = menu.getItemInSlot(slot); - if (stack != null && SlimefunUtils.isItemSimilar(stack, item, true, false)) { + if (stack != null && SlimefunUtils.compareItem(stack, item)) { if (stack.getAmount() >= stack.getMaxStackSize()) { fullSlots++; } diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/FluidPump.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/FluidPump.java index b0bfacd9de..8087b7c81c 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/FluidPump.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/FluidPump.java @@ -144,7 +144,7 @@ protected void tick(@Nonnull Block b) { for (int slot : getInputSlots()) { ItemStack itemInSlot = menu.getItemInSlot(slot); - if (SlimefunUtils.isItemSimilar(itemInSlot, emptyBucket, true, false)) { + if (SlimefunUtils.compareItem(itemInSlot, emptyBucket)) { ItemStack bucket = getFilledBucket(fluid); if (!menu.fits(bucket, getOutputSlots())) { @@ -161,7 +161,7 @@ protected void tick(@Nonnull Block b) { } return; - } else if (SlimefunUtils.isItemSimilar(itemInSlot, emptyBottle, true, false)) { + } else if (SlimefunUtils.compareItem(itemInSlot, emptyBottle)) { ItemStack bottle = getFilledBottle(fluid); if (!menu.fits(bottle, getOutputSlots())) { diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/HeatedPressureChamber.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/HeatedPressureChamber.java index 97505f6dd8..b87216ebfd 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/HeatedPressureChamber.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/HeatedPressureChamber.java @@ -58,7 +58,7 @@ public int[] getSlotsAccessedByItemTransport(DirtyChestMenu menu, ItemTransportF List slots = new ArrayList<>(); for (int slot : getInputSlots()) { - if (SlimefunUtils.isItemSimilar(menu.getItemInSlot(slot), item, true)) { + if (SlimefunUtils.compareItem(menu.getItemInSlot(slot), item)) { slots.add(slot); } } diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/accelerators/AnimalGrowthAccelerator.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/accelerators/AnimalGrowthAccelerator.java index 68a570f8a5..72db2b36cf 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/accelerators/AnimalGrowthAccelerator.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/accelerators/AnimalGrowthAccelerator.java @@ -40,7 +40,7 @@ protected void tick(Block b) { for (Entity n : b.getWorld().getNearbyEntities(b.getLocation(), RADIUS, RADIUS, RADIUS, this::isReadyToGrow)) { for (int slot : getInputSlots()) { - if (SlimefunUtils.isItemSimilar(inv.getItemInSlot(slot), organicFood, false, false)) { + if (SlimefunUtils.compareItem(inv.getItemInSlot(slot), organicFood)) { if (getCharge(b.getLocation()) < ENERGY_CONSUMPTION) { return; } diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/accelerators/CropGrowthAccelerator.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/accelerators/CropGrowthAccelerator.java index 5649c70c73..bb48325e3d 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/accelerators/CropGrowthAccelerator.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/accelerators/CropGrowthAccelerator.java @@ -58,7 +58,7 @@ private boolean grow(Block machine, BlockMenu inv, Block crop) { if (ageable.getAge() < ageable.getMaximumAge()) { for (int slot : getInputSlots()) { - if (SlimefunUtils.isItemSimilar(inv.getItemInSlot(slot), organicFertilizer, false, false)) { + if (SlimefunUtils.compareItem(inv.getItemInSlot(slot), organicFertilizer)) { removeCharge(machine.getLocation(), getEnergyConsumption()); inv.consumeItem(slot); diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/accelerators/TreeGrowthAccelerator.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/accelerators/TreeGrowthAccelerator.java index e6e79311db..a00652b5a3 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/accelerators/TreeGrowthAccelerator.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/accelerators/TreeGrowthAccelerator.java @@ -120,7 +120,7 @@ private boolean updateSaplingData(Block machine, Block block, BlockMenu inv, Sap } protected boolean isFertilizer(@Nullable ItemStack item) { - return SlimefunUtils.isItemSimilar(item, organicFertilizer, false, false); + return SlimefunUtils.compareItem(item, organicFertilizer); } } diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/entities/AbstractEntityAssembler.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/entities/AbstractEntityAssembler.java index 338c262da5..61ab15275a 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/entities/AbstractEntityAssembler.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/entities/AbstractEntityAssembler.java @@ -233,7 +233,7 @@ private boolean findResource(BlockMenu menu, ItemStack item, int[] slots) { int found = 0; for (int slot : slots) { - if (SlimefunUtils.isItemSimilar(menu.getItemInSlot(slot), item, true, false)) { + if (SlimefunUtils.compareItem(menu.getItemInSlot(slot), item)) { found += menu.getItemInSlot(slot).getAmount(); if (found >= item.getAmount()) { @@ -250,7 +250,7 @@ private void consumeResources(BlockMenu inv) { int headCount = getHead().getAmount(); for (int slot : bodySlots) { - if (SlimefunUtils.isItemSimilar(inv.getItemInSlot(slot), getBody(), true, false)) { + if (SlimefunUtils.compareItem(inv.getItemInSlot(slot), getBody())) { int amount = inv.getItemInSlot(slot).getAmount(); if (amount >= bodyCount) { @@ -264,7 +264,7 @@ private void consumeResources(BlockMenu inv) { } for (int slot : headSlots) { - if (SlimefunUtils.isItemSimilar(inv.getItemInSlot(slot), getHead(), true, false)) { + if (SlimefunUtils.compareItem(inv.getItemInSlot(slot), getHead())) { int amount = inv.getItemInSlot(slot).getAmount(); if (amount >= headCount) { diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/entities/AutoBreeder.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/entities/AutoBreeder.java index e62fd7951d..f0e542a496 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/entities/AutoBreeder.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/entities/AutoBreeder.java @@ -111,7 +111,7 @@ protected void tick(Block b) { for (Entity n : b.getWorld().getNearbyEntities(b.getLocation(), 4.0, 2.0, 4.0, this::canBreed)) { for (int slot : getInputSlots()) { - if (SlimefunUtils.isItemSimilar(inv.getItemInSlot(slot), organicFood, false)) { + if (SlimefunUtils.compareItem(inv.getItemInSlot(slot), organicFood)) { if (getCharge(b.getLocation()) < ENERGY_CONSUMPTION) { return; } diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/entities/ProduceCollector.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/entities/ProduceCollector.java index 24ecf5d86d..dcbc93044d 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/entities/ProduceCollector.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/entities/ProduceCollector.java @@ -136,7 +136,7 @@ public boolean isSynchronized() { for (AnimalProduce produce : animalProduces) { ItemStack item = inv.getItemInSlot(slot); - if (!SlimefunUtils.isItemSimilar(item, produce.getInput()[0], true) || !InvUtils.fits(inv.toInventory(), produce.getOutput()[0], getOutputSlots())) { + if (!SlimefunUtils.compareItem(item, produce.getInput()[0]) || !InvUtils.fits(inv.toInventory(), produce.getOutput()[0], getOutputSlots())) { continue; } diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/reactors/Reactor.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/reactors/Reactor.java index 47b524616f..eb6dfdc5a6 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/reactors/Reactor.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/reactors/Reactor.java @@ -421,7 +421,7 @@ private boolean hasEnoughCoolant(@Nonnull Location reactor, @Nonnull BlockMenu m if (accessPort != null) { for (int slot : getCoolantSlots()) { - if (SlimefunUtils.isItemSimilar(accessPort.getItemInSlot(slot), coolant, true, false)) { + if (SlimefunUtils.compareItem(accessPort.getItemInSlot(slot), coolant)) { ItemStack remainingItem = menu.pushItem(accessPort.getItemInSlot(slot), getCoolantSlots()); accessPort.replaceExistingItem(slot, remainingItem); } @@ -429,7 +429,7 @@ private boolean hasEnoughCoolant(@Nonnull Location reactor, @Nonnull BlockMenu m } for (int slot : getCoolantSlots()) { - if (SlimefunUtils.isItemSimilar(menu.getItemInSlot(slot), coolant, true, false)) { + if (SlimefunUtils.compareItem(menu.getItemInSlot(slot), coolant)) { menu.consumeItem(slot); updateHologram(reactor.getBlock(), "&b\u2744 &7100%"); return true; diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/food/Juice.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/food/Juice.java index f8b61543e1..8f2b95f5f0 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/food/Juice.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/food/Juice.java @@ -84,13 +84,13 @@ public ItemConsumptionHandler getItemHandler() { */ @ParametersAreNonnullByDefault private void removeGlassBottle(Player p, ItemStack item) { - if (SlimefunUtils.isItemSimilar(item, p.getInventory().getItemInMainHand(), true)) { + if (SlimefunUtils.compareItem(item, p.getInventory().getItemInMainHand())) { if (p.getInventory().getItemInMainHand().getAmount() == 1) { p.getEquipment().getItemInMainHand().setAmount(0); } else { p.getInventory().removeItem(new ItemStack(Material.GLASS_BOTTLE, 1)); } - } else if (SlimefunUtils.isItemSimilar(item, p.getInventory().getItemInOffHand(), true)) { + } else if (SlimefunUtils.compareItem(item, p.getInventory().getItemInOffHand())) { if (p.getInventory().getItemInOffHand().getAmount() == 1) { p.getEquipment().getItemInOffHand().setAmount(0); } else { diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/geo/OilPump.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/geo/OilPump.java index 4422117526..a8a6f0971d 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/geo/OilPump.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/geo/OilPump.java @@ -93,7 +93,7 @@ protected MachineRecipe findNextRecipe(BlockMenu inv) { Block b = inv.getBlock(); for (int slot : getInputSlots()) { - if (SlimefunUtils.isItemSimilar(inv.getItemInSlot(slot), emptyBucket, true, false)) { + if (SlimefunUtils.compareItem(inv.getItemInSlot(slot), emptyBucket)) { OptionalInt supplies = Slimefun.getGPSNetwork().getResourceManager().getSupplies(oil, b.getWorld(), b.getX() >> 4, b.getZ() >> 4); if (supplies.isPresent() && supplies.getAsInt() > 0) { diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/magical/MagicEyeOfEnder.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/magical/MagicEyeOfEnder.java index 302029c59d..ccad8532ff 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/magical/MagicEyeOfEnder.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/magical/MagicEyeOfEnder.java @@ -47,10 +47,10 @@ public MagicEyeOfEnder(ItemGroup itemGroup, SlimefunItemStack item, RecipeType r private boolean hasArmor(@Nonnull PlayerInventory inv) { // @formatter:off - return SlimefunUtils.isItemSimilar(inv.getHelmet(), SlimefunItems.ENDER_HELMET, true) - && SlimefunUtils.isItemSimilar(inv.getChestplate(), SlimefunItems.ENDER_CHESTPLATE, true) - && SlimefunUtils.isItemSimilar(inv.getLeggings(), SlimefunItems.ENDER_LEGGINGS, true) - && SlimefunUtils.isItemSimilar(inv.getBoots(), SlimefunItems.ENDER_BOOTS, true); + return SlimefunUtils.compareItem(inv.getHelmet(), SlimefunItems.ENDER_HELMET) + && SlimefunUtils.compareItem(inv.getChestplate(), SlimefunItems.ENDER_CHESTPLATE) + && SlimefunUtils.compareItem(inv.getLeggings(), SlimefunItems.ENDER_LEGGINGS) + && SlimefunUtils.compareItem(inv.getBoots(), SlimefunItems.ENDER_BOOTS); // @formatter:on } } diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/magical/talismans/Talisman.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/magical/talismans/Talisman.java index 9f97f19892..3c8a71953d 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/magical/talismans/Talisman.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/magical/talismans/Talisman.java @@ -233,7 +233,7 @@ private static void consumeItem(Inventory inv, Talisman talisman, ItemStack tali for (int i = 0; i < contents.length; i++) { ItemStack item = contents[i]; - if (SlimefunUtils.isItemSimilar(item, talismanItem, true, false)) { + if (SlimefunUtils.compareItem(item, talismanItem)) { ItemUtils.consumeItem(item, false); return; } diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/AbstractSmeltery.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/AbstractSmeltery.java index 7f2f27f0cb..850a511686 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/AbstractSmeltery.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/AbstractSmeltery.java @@ -75,9 +75,9 @@ private boolean canCraft(Inventory inv, List inputs, int i) { for (ItemStack expectedInput : inputs.get(i)) { if (expectedInput != null) { for (int j = 0; j < inv.getContents().length; j++) { - if (j == (inv.getContents().length - 1) && !SlimefunUtils.isItemSimilar(inv.getContents()[j], expectedInput, true)) { + if (j == (inv.getContents().length - 1) && !SlimefunUtils.compareItem(inv.getContents()[j], expectedInput)) { return false; - } else if (SlimefunUtils.isItemSimilar(inv.getContents()[j], expectedInput, true)) { + } else if (SlimefunUtils.compareItem(inv.getContents()[j], expectedInput)) { break; } } @@ -90,7 +90,7 @@ private boolean canCraft(Inventory inv, List inputs, int i) { protected void craft(Player p, Block b, Inventory inv, ItemStack[] recipe, ItemStack output, Inventory outputInv) { for (ItemStack removing : recipe) { if (removing != null) { - InvUtils.removeItem(inv, removing.getAmount(), true, stack -> SlimefunUtils.isItemSimilar(stack, removing, true)); + InvUtils.removeItem(inv, removing.getAmount(), true, stack -> SlimefunUtils.compareItem(stack, removing)); } } diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/ArmorForge.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/ArmorForge.java index 4ee70ac722..1d3003c3f6 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/ArmorForge.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/ArmorForge.java @@ -65,7 +65,7 @@ public void onInteract(Player p, Block b) { private boolean isCraftable(Inventory inv, ItemStack[] recipe) { for (int j = 0; j < inv.getContents().length; j++) { - if (!SlimefunUtils.isItemSimilar(inv.getContents()[j], recipe[j], true)) { + if (!SlimefunUtils.compareItem(inv.getContents()[j], recipe[j])) { return false; } } diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/Compressor.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/Compressor.java index f0b48882e6..77b4e9bf4e 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/Compressor.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/Compressor.java @@ -65,7 +65,7 @@ public void onInteract(Player p, Block b) { for (ItemStack item : inv.getContents()) { for (ItemStack recipeInput : RecipeType.getRecipeInputs(this)) { - if (recipeInput != null && SlimefunUtils.isItemSimilar(item, recipeInput, true)) { + if (recipeInput != null && SlimefunUtils.compareItem(item, recipeInput)) { ItemStack output = RecipeType.getRecipeOutput(this, recipeInput); Inventory outputInv = findOutputInventory(output, dispBlock, inv); MultiBlockCraftEvent event = new MultiBlockCraftEvent(p, this, item, output); diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/EnhancedCraftingTable.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/EnhancedCraftingTable.java index 4486197b62..62d13693cf 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/EnhancedCraftingTable.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/EnhancedCraftingTable.java @@ -93,14 +93,8 @@ private void craft(Inventory inv, Block dispenser, Player p, Block b, ItemStack private boolean isCraftable(Inventory inv, ItemStack[] recipe) { for (int j = 0; j < inv.getContents().length; j++) { - if (!SlimefunUtils.isItemSimilar(inv.getContents()[j], recipe[j], true, true, false)) { - if (SlimefunItem.getByItem(recipe[j]) instanceof SlimefunBackpack) { - if (!SlimefunUtils.isItemSimilar(inv.getContents()[j], recipe[j], false, true, false)) { - return false; - } - } else { - return false; - } + if (!SlimefunUtils.compareItem(inv.getContents()[j], recipe[j])) { + return false; } } return true; diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/GrindStone.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/GrindStone.java index f149093042..9f0b541c99 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/GrindStone.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/GrindStone.java @@ -125,7 +125,7 @@ public void onInteract(Player p, Block b) { for (ItemStack current : inv.getContents()) { for (ItemStack convert : RecipeType.getRecipeInputs(this)) { - if (convert != null && SlimefunUtils.isItemSimilar(current, convert, true)) { + if (convert != null && SlimefunUtils.compareItem(current, convert)) { ItemStack output = RecipeType.getRecipeOutput(this, convert); Inventory outputInv = findOutputInventory(output, possibleDispenser, inv); MultiBlockCraftEvent event = new MultiBlockCraftEvent(p, this, current, output); diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/Juicer.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/Juicer.java index a81c731434..8a4506e8d4 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/Juicer.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/Juicer.java @@ -61,7 +61,7 @@ public void onInteract(Player p, Block b) { for (ItemStack current : inv.getContents()) { for (ItemStack convert : RecipeType.getRecipeInputs(this)) { - if (convert != null && SlimefunUtils.isItemSimilar(current, convert, true)) { + if (convert != null && SlimefunUtils.compareItem(current, convert)) { ItemStack adding = RecipeType.getRecipeOutput(this, convert); Inventory outputInv = findOutputInventory(adding, possibleDispenser, inv); MultiBlockCraftEvent event = new MultiBlockCraftEvent(p, this, current, adding); diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/MagicWorkbench.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/MagicWorkbench.java index 25ce8cdcc8..f52c2d1c63 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/MagicWorkbench.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/MagicWorkbench.java @@ -134,17 +134,10 @@ private Block locateDispenser(Block b) { private boolean isCraftable(Inventory inv, ItemStack[] recipe) { for (int j = 0; j < inv.getContents().length; j++) { - if (!SlimefunUtils.isItemSimilar(inv.getContents()[j], recipe[j], true, true, false)) { - if (SlimefunItem.getByItem(recipe[j]) instanceof SlimefunBackpack) { - if (!SlimefunUtils.isItemSimilar(inv.getContents()[j], recipe[j], false, true, false)) { - return false; - } - } else { - return false; - } + if (!SlimefunUtils.compareItem(inv.getContents()[j], recipe[j])) { + return false; } } - return true; } diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/OreCrusher.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/OreCrusher.java index ea5141f099..6956a63d42 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/OreCrusher.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/OreCrusher.java @@ -189,7 +189,7 @@ public void onInteract(Player p, Block b) { for (ItemStack current : inv.getContents()) { for (ItemStack convert : RecipeType.getRecipeInputs(this)) { - if (convert != null && SlimefunUtils.isItemSimilar(current, convert, true)) { + if (convert != null && SlimefunUtils.compareItem(current, convert)) { ItemStack adding = RecipeType.getRecipeOutput(this, convert); Inventory outputInv = findOutputInventory(adding, possibleDispenser, inv); MultiBlockCraftEvent event = new MultiBlockCraftEvent(p, this, current, adding); diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/OreWasher.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/OreWasher.java index 25a3282369..4611753616 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/OreWasher.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/OreWasher.java @@ -99,7 +99,7 @@ public void onInteract(Player p, Block b) { for (ItemStack input : inv.getContents()) { if (input != null) { - if (SlimefunUtils.isItemSimilar(input, SlimefunItems.SIFTED_ORE, true)) { + if (SlimefunUtils.compareItem(input, SlimefunItems.SIFTED_ORE)) { ItemStack output = getRandomDust(); Inventory outputInv; @@ -131,7 +131,7 @@ public void onInteract(Player p, Block b) { } return; - } else if (SlimefunUtils.isItemSimilar(input, new ItemStack(Material.SAND, 2), false)) { + } else if (SlimefunUtils.compareItem(input, new ItemStack(Material.SAND))) { ItemStack output = SlimefunItems.SALT; Inventory outputInv = findOutputInventory(output, dispBlock, inv); @@ -143,7 +143,7 @@ public void onInteract(Player p, Block b) { removeItem(p, b, inv, outputInv, input, event.getOutput(), 2); return; - } else if (SlimefunUtils.isItemSimilar(input, SlimefunItems.PULVERIZED_ORE, true)) { + } else if (SlimefunUtils.compareItem(input, SlimefunItems.PULVERIZED_ORE)) { ItemStack output = SlimefunItems.PURE_ORE_CLUSTER; Inventory outputInv = findOutputInventory(output, dispBlock, inv); MultiBlockCraftEvent event = new MultiBlockCraftEvent(p, this, input, output); diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/PressureChamber.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/PressureChamber.java index c8b75de5a3..edb5bc5d46 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/PressureChamber.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/PressureChamber.java @@ -50,7 +50,7 @@ public void onInteract(Player p, Block b) { for (ItemStack current : inv.getContents()) { for (ItemStack convert : RecipeType.getRecipeInputs(this)) { - if (convert != null && SlimefunUtils.isItemSimilar(current, convert, true)) { + if (convert != null && SlimefunUtils.compareItem(current, convert)) { ItemStack output = RecipeType.getRecipeOutput(this, convert); Inventory outputInv = findOutputInventory(output, possibleDispenser, inv); MultiBlockCraftEvent event = new MultiBlockCraftEvent(p, this, current, output); diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/tools/GoldPan.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/tools/GoldPan.java index 08f69ec27a..b4ce9252b0 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/tools/GoldPan.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/tools/GoldPan.java @@ -209,7 +209,7 @@ public boolean isValidInput(@Nullable ItemStack itemStack) { } Material material = itemStack.getType(); - return isValidInputMaterial(material) && SlimefunUtils.isItemSimilar(itemStack, new ItemStack(material), true, false); + return isValidInputMaterial(material) && SlimefunUtils.compareItem(itemStack, new ItemStack(material)); } /** diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/AncientAltarListener.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/AncientAltarListener.java index bf06243d86..82cc34499d 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/AncientAltarListener.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/AncientAltarListener.java @@ -316,7 +316,7 @@ public void onBlockPlace(BlockPlaceEvent e) { ItemStackWrapper wrapper = ItemStackWrapper.wrap(catalyst); List items = ItemStackWrapper.wrapList(inputs); - if (SlimefunUtils.isItemSimilar(wrapper, SlimefunItems.BROKEN_SPAWNER, false, false)) { + if (SlimefunUtils.compareItem(wrapper, SlimefunItems.BROKEN_SPAWNER)) { if (!checkRecipe(SlimefunItems.BROKEN_SPAWNER, items).isPresent()) { return Optional.empty(); } @@ -330,7 +330,7 @@ public void onBlockPlace(BlockPlaceEvent e) { private @Nonnull Optional checkRecipe(@Nonnull ItemStack catalyst, @Nonnull List items) { for (AltarRecipe recipe : altarItem.getRecipes()) { - if (SlimefunUtils.isItemSimilar(catalyst, recipe.getCatalyst(), true)) { + if (SlimefunUtils.compareItem(catalyst, recipe.getCatalyst())) { Optional optional = checkPedestals(items, recipe); if (optional.isPresent()) { @@ -344,9 +344,9 @@ public void onBlockPlace(BlockPlaceEvent e) { private @Nonnull Optional checkPedestals(@Nonnull List items, @Nonnull AltarRecipe recipe) { for (int i = 0; i < 8; i++) { - if (SlimefunUtils.isItemSimilar(items.get(i), recipe.getInput().get(0), true)) { + if (SlimefunUtils.compareItem(items.get(i), recipe.getInput().get(0))) { for (int j = 1; j < 8; j++) { - if (!SlimefunUtils.isItemSimilar(items.get((i + j) % items.size()), recipe.getInput().get(j), true)) { + if (!SlimefunUtils.compareItem(items.get((i + j) % items.size()), recipe.getInput().get(j))) { break; } else if (j == 7) { return Optional.of(recipe.getOutput()); diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/BlockListener.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/BlockListener.java index 12937e45a4..91cc35c91e 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/BlockListener.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/BlockListener.java @@ -24,6 +24,7 @@ import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.block.BlockBreakEvent; +import org.bukkit.event.block.BlockDropItemEvent; import org.bukkit.event.block.BlockPlaceEvent; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; @@ -132,6 +133,9 @@ public void onBlockPlace(BlockPlaceEvent e) { } } + @EventHandler + public void blockdrop(BlockDropItemEvent ) + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onBlockBreak(BlockBreakEvent e) { // Simply ignore any events that were faked by other plugins @@ -331,6 +335,7 @@ private void checkForSensitiveBlocks(Block block, int count, boolean isDropItems Block relative = block.getRelative(face); if (!isDropItems) { for (ItemStack drop : relative.getDrops()) { + block.getWorld().dropItemNaturally(relative.getLocation(), drop); } } diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/DebugFishListener.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/DebugFishListener.java index 37cb3116d6..9eb1a6bcf3 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/DebugFishListener.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/DebugFishListener.java @@ -61,7 +61,7 @@ public void onDebug(PlayerInteractEvent e) { Player p = e.getPlayer(); - if (SlimefunUtils.isItemSimilar(e.getItem(), SlimefunItems.DEBUG_FISH, true, false)) { + if (SlimefunUtils.compareItem(e.getItem(), SlimefunItems.DEBUG_FISH)) { e.setCancelled(true); if (p.hasPermission("slimefun.debugging")) { diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/SlimefunGuideListener.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/SlimefunGuideListener.java index 53897013a2..750c6981e6 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/SlimefunGuideListener.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/SlimefunGuideListener.java @@ -81,7 +81,7 @@ private void openGuide(Player p, PlayerRightClickEvent e, SlimefunGuideMode layo @ParametersAreNonnullByDefault private Result tryOpenGuide(Player p, PlayerRightClickEvent e, SlimefunGuideMode layout) { ItemStack item = e.getItem(); - if (SlimefunUtils.isItemSimilar(item, SlimefunGuide.getItem(layout), false, false)) { + if (SlimefunUtils.compareItem(item, SlimefunGuide.getItem(layout))) { if (!Slimefun.getWorldSettingsService().isWorldEnabled(p.getWorld())) { Slimefun.getLocalization().sendMessage(p, "messages.disabled-item", true); diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/SlimefunItemInteractListener.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/SlimefunItemInteractListener.java index fd776e1baa..73fdf6c73e 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/SlimefunItemInteractListener.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/SlimefunItemInteractListener.java @@ -53,7 +53,7 @@ public SlimefunItemInteractListener(@Nonnull Slimefun plugin) { public void onRightClick(PlayerInteractEvent e) { if (e.getAction() == Action.RIGHT_CLICK_AIR || e.getAction() == Action.RIGHT_CLICK_BLOCK) { // Exclude the Debug Fish here because it is handled in a seperate Listener - if (SlimefunUtils.isItemSimilar(e.getItem(), SlimefunItems.DEBUG_FISH, true)) { + if (SlimefunUtils.compareItem(e.getItem(), SlimefunItems.DEBUG_FISH)) { return; } diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/utils/SlimefunUtils.java b/src/main/java/io/github/thebusybiscuit/slimefun4/utils/SlimefunUtils.java index 5fc3bda47f..6ef82a8be3 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/utils/SlimefunUtils.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/utils/SlimefunUtils.java @@ -286,6 +286,7 @@ public static boolean containsSimilarItem(Inventory inventory, ItemStack item, b * * @return True if the given {@link ItemStack}s are similar under the given constraints */ + @Deprecated(since = "RC - 37") public static boolean isItemSimilar(@Nullable ItemStack item, @Nullable ItemStack sfitem, boolean checkLore) { return isItemSimilar(item, sfitem, checkLore, true, true); } @@ -308,6 +309,7 @@ public static boolean isItemSimilar(@Nullable ItemStack item, @Nullable ItemStac * * @return True if the given {@link ItemStack}s are similar under the given constraints */ + @Deprecated(since = "RC - 37") public static boolean isItemSimilar(@Nullable ItemStack item, @Nullable ItemStack sfitem, boolean checkLore, boolean checkAmount) { return isItemSimilar(item, sfitem, checkLore, checkAmount, true); } @@ -331,6 +333,7 @@ public static boolean isItemSimilar(@Nullable ItemStack item, @Nullable ItemStac * * @return True if the given {@link ItemStack}s are similar under the given constraints */ + @Deprecated(since = "RC - 37") public static boolean isItemSimilar(@Nullable ItemStack item, @Nullable ItemStack sfitem, boolean checkLore, boolean checkAmount, boolean checkDistinction) { if (item == null) { return sfitem == null; @@ -424,6 +427,35 @@ public static boolean isItemSimilar(@Nullable ItemStack item, @Nullable ItemStac } } + public static boolean compareItem(@Nullable ItemStack itemOne, @Nullable ItemStack itemTwo) { + if (itemOne == null && itemTwo == null) { + return true; + } else if (itemOne == null || itemTwo == null) { + return false; + } + + ItemMeta itemMetaOne = itemOne.getItemMeta(); + ItemMeta itemMetaTwo = itemTwo.getItemMeta(); + if (itemMetaOne == null && itemMetaTwo == null) { + return true; + } else if (itemMetaOne == null || itemMetaTwo == null) { + return false; + } + + Optional itemDataOne = Slimefun.getItemDataService().getItemData(itemMetaOne); + Optional itemDataTwo = Slimefun.getItemDataService().getItemData(itemMetaTwo); + if (itemDataOne.isPresent() && itemDataOne.equals(itemDataTwo)) { + Optional distinctiveItemOne = getDistinctiveItem(itemDataOne.get()); + Optional distinctiveItemTwo = getDistinctiveItem(itemDataTwo.get()); + if (distinctiveItemOne.isPresent() && distinctiveItemTwo.isPresent()) { + return distinctiveItemOne.get().canStack(itemMetaOne, itemMetaTwo); + } + return true; + } + + return itemOne.equals(itemTwo); + } + private static @Nonnull Optional getDistinctiveItem(@Nonnull String id) { SlimefunItem slimefunItem = SlimefunItem.getById(id); if (slimefunItem instanceof DistinctiveItem distinctive) { diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AContainer.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AContainer.java index be71fbe598..45ba0dd2c7 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AContainer.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AContainer.java @@ -421,7 +421,7 @@ protected MachineRecipe findNextRecipe(BlockMenu inv) { for (MachineRecipe recipe : recipes) { for (ItemStack input : recipe.getInput()) { for (int slot : getInputSlots()) { - if (SlimefunUtils.isItemSimilar(inventory.get(slot), input, true)) { + if (SlimefunUtils.compareItem(inventory.get(slot), input)) { found.put(slot, input.getAmount()); break; } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AGenerator.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AGenerator.java index 0bc27e5d17..6a596f61de 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AGenerator.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AGenerator.java @@ -205,7 +205,7 @@ private boolean isBucket(@Nullable ItemStack item) { } ItemStackWrapper wrapper = ItemStackWrapper.wrap(item); - return item.getType() == Material.LAVA_BUCKET || SlimefunUtils.isItemSimilar(wrapper, SlimefunItems.FUEL_BUCKET, true) || SlimefunUtils.isItemSimilar(wrapper, SlimefunItems.OIL_BUCKET, true); + return item.getType() == Material.LAVA_BUCKET || SlimefunUtils.compareItem(wrapper, SlimefunItems.FUEL_BUCKET) || SlimefunUtils.compareItem(wrapper, SlimefunItems.OIL_BUCKET); } private MachineFuel findRecipe(BlockMenu menu, Map found) { diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/MachineFuel.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/MachineFuel.java index b333bde74f..19f53697ea 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/MachineFuel.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/MachineFuel.java @@ -52,7 +52,7 @@ public int getTicks() { @Override public boolean test(ItemStack item) { - return SlimefunUtils.isItemSimilar(item, wrapper, true); + return SlimefunUtils.compareItem(item, wrapper); } } diff --git a/src/test/java/io/github/thebusybiscuit/slimefun4/api/geo/TestResourceRegistration.java b/src/test/java/io/github/thebusybiscuit/slimefun4/api/geo/TestResourceRegistration.java index 53f9eb906b..cf431904e0 100644 --- a/src/test/java/io/github/thebusybiscuit/slimefun4/api/geo/TestResourceRegistration.java +++ b/src/test/java/io/github/thebusybiscuit/slimefun4/api/geo/TestResourceRegistration.java @@ -63,7 +63,7 @@ void testDoubleRegistration() { GEOResource resource = optional.get(); Assertions.assertEquals(name, resource.getName()); Assertions.assertEquals(miner, resource.isObtainableFromGEOMiner()); - Assertions.assertTrue(SlimefunUtils.isItemSimilar(resource.getItem(), item, true)); + Assertions.assertTrue(SlimefunUtils.compareItem(resource.getItem(), item)); Assertions.assertEquals(deviation, resource.getMaxDeviation()); return resource; } diff --git a/src/test/java/io/github/thebusybiscuit/slimefun4/core/commands/TestBackpackCommand.java b/src/test/java/io/github/thebusybiscuit/slimefun4/core/commands/TestBackpackCommand.java index 9b876fc822..4fce4de4ba 100644 --- a/src/test/java/io/github/thebusybiscuit/slimefun4/core/commands/TestBackpackCommand.java +++ b/src/test/java/io/github/thebusybiscuit/slimefun4/core/commands/TestBackpackCommand.java @@ -41,7 +41,7 @@ public static void unload() { private boolean hasBackpack(Player player, int id) { for (ItemStack item : player.getInventory()) { - if (SlimefunUtils.isItemSimilar(item, SlimefunItems.RESTORED_BACKPACK, false)) { + if (SlimefunUtils.compareItem(item, SlimefunItems.RESTORED_BACKPACK)) { List lore = item.getItemMeta().getLore(); if (lore.get(2).equals(ChatColor.GRAY + "ID: " + player.getUniqueId() + "#" + id)) { diff --git a/src/test/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/TestSlimefunGuideListener.java b/src/test/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/TestSlimefunGuideListener.java index 6b58f849b7..c1b1aa46e1 100644 --- a/src/test/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/TestSlimefunGuideListener.java +++ b/src/test/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/TestSlimefunGuideListener.java @@ -56,7 +56,7 @@ void testFirstJoin(boolean hasPlayedBefore, boolean giveSlimefunGuide) { } private boolean hasSlimefunGuide(Player player, ItemStack guide) { - return SlimefunUtils.isItemSimilar(player.getInventory().getItem(0), guide, true); + return SlimefunUtils.compareItem(player.getInventory().getItem(0), guide); } /** diff --git a/src/test/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/TestSoulboundListener.java b/src/test/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/TestSoulboundListener.java index ad0e2fc916..19ec649552 100644 --- a/src/test/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/TestSoulboundListener.java +++ b/src/test/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/TestSoulboundListener.java @@ -91,7 +91,7 @@ void testItemRecover(boolean soulbound) { server.getPluginManager().assertEventFired(PlayerRespawnEvent.class, event -> { ItemStack stack = player.getInventory().getItem(6); - return SlimefunUtils.isItemSimilar(stack, item, true) == soulbound; + return SlimefunUtils.compareItem(stack, item) == soulbound; }); } diff --git a/src/test/java/io/github/thebusybiscuit/slimefun4/utils/TestItemStackWrapper.java b/src/test/java/io/github/thebusybiscuit/slimefun4/utils/TestItemStackWrapper.java index 510584bbfc..ac59c631d8 100644 --- a/src/test/java/io/github/thebusybiscuit/slimefun4/utils/TestItemStackWrapper.java +++ b/src/test/java/io/github/thebusybiscuit/slimefun4/utils/TestItemStackWrapper.java @@ -41,7 +41,7 @@ void testEqualityWithItemMeta() { Assertions.assertEquals(item.getType(), wrapper.getType()); Assertions.assertEquals(item.hasItemMeta(), wrapper.hasItemMeta()); Assertions.assertEquals(item.getItemMeta(), wrapper.getItemMeta()); - Assertions.assertTrue(SlimefunUtils.isItemSimilar(wrapper, item, true)); + Assertions.assertTrue(SlimefunUtils.compareItem(wrapper, item)); } @Test @@ -53,7 +53,7 @@ void testEqualityWithoutItemMeta() { Assertions.assertEquals(item.getType(), wrapper.getType()); Assertions.assertEquals(item.hasItemMeta(), wrapper.hasItemMeta()); // Assertions.assertEquals(item.getItemMeta(), wrapper.getItemMeta()); - Assertions.assertTrue(SlimefunUtils.isItemSimilar(wrapper, item, true)); + Assertions.assertTrue(SlimefunUtils.compareItem(wrapper, item)); } @Test @@ -135,7 +135,7 @@ private void assertWrapped(@Nullable ItemStack expected, @Nullable ItemStack act Assertions.assertNull(actual); } else { Assertions.assertTrue(actual instanceof ItemStackWrapper); - Assertions.assertTrue(SlimefunUtils.isItemSimilar(actual, expected, true)); + Assertions.assertTrue(SlimefunUtils.compareItem(actual, expected)); } } } From f91ee0eb72d99df6a7cd1593ff0f92f1e7a76089 Mon Sep 17 00:00:00 2001 From: Jeffrey Date: Mon, 5 Feb 2024 19:42:38 +0100 Subject: [PATCH 2/9] not sure what i did --- .../slimefun4/implementation/listeners/BlockListener.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/BlockListener.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/BlockListener.java index 91cc35c91e..00711cd4cd 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/BlockListener.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/BlockListener.java @@ -133,9 +133,6 @@ public void onBlockPlace(BlockPlaceEvent e) { } } - @EventHandler - public void blockdrop(BlockDropItemEvent ) - @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onBlockBreak(BlockBreakEvent e) { // Simply ignore any events that were faked by other plugins From 2aa1f0c3f07bd4f9a5326abbc6ebf4b5e75e1558 Mon Sep 17 00:00:00 2001 From: Jeffrey Date: Mon, 5 Feb 2024 20:11:27 +0100 Subject: [PATCH 3/9] fix tests --- .../thebusybiscuit/slimefun4/utils/SlimefunUtils.java | 11 +++++++++++ .../slimefun4/utils/itemstack/ItemStackWrapper.java | 5 ----- .../slimefun4/utils/TestItemStackWrapper.java | 1 - 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/utils/SlimefunUtils.java b/src/main/java/io/github/thebusybiscuit/slimefun4/utils/SlimefunUtils.java index 6ef82a8be3..a766055da2 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/utils/SlimefunUtils.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/utils/SlimefunUtils.java @@ -434,6 +434,17 @@ public static boolean compareItem(@Nullable ItemStack itemOne, @Nullable ItemSta return false; } + boolean itemOneHasMeta = itemOne.hasItemMeta(); + boolean itemTwoHasMeta = itemTwo.hasItemMeta(); + + if ((!itemOneHasMeta && itemTwoHasMeta) || (itemOneHasMeta && !itemTwoHasMeta)) { + return false; + } + + if (!itemOneHasMeta && !itemTwoHasMeta) { + return itemOne.getType() == itemTwo.getType(); + } + ItemMeta itemMetaOne = itemOne.getItemMeta(); ItemMeta itemMetaTwo = itemTwo.getItemMeta(); if (itemMetaOne == null && itemMetaTwo == null) { diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/utils/itemstack/ItemStackWrapper.java b/src/main/java/io/github/thebusybiscuit/slimefun4/utils/itemstack/ItemStackWrapper.java index 9091db07b8..e14044f673 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/utils/itemstack/ItemStackWrapper.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/utils/itemstack/ItemStackWrapper.java @@ -69,11 +69,6 @@ public int getAmount() { return amount; } - @Override - public boolean equals(Object obj) { - throw new UnsupportedOperationException(ERROR_MESSAGE); - } - @Override public int hashCode() { throw new UnsupportedOperationException(ERROR_MESSAGE); diff --git a/src/test/java/io/github/thebusybiscuit/slimefun4/utils/TestItemStackWrapper.java b/src/test/java/io/github/thebusybiscuit/slimefun4/utils/TestItemStackWrapper.java index ac59c631d8..63a1521c9b 100644 --- a/src/test/java/io/github/thebusybiscuit/slimefun4/utils/TestItemStackWrapper.java +++ b/src/test/java/io/github/thebusybiscuit/slimefun4/utils/TestItemStackWrapper.java @@ -68,7 +68,6 @@ void testImmutability() { Assertions.assertThrows(UnsupportedOperationException.class, () -> wrapper.addUnsafeEnchantment(null, 1)); Assertions.assertThrows(UnsupportedOperationException.class, () -> wrapper.hashCode()); Assertions.assertThrows(UnsupportedOperationException.class, () -> wrapper.clone()); - Assertions.assertThrows(UnsupportedOperationException.class, () -> wrapper.equals(wrapper)); } @Test From c013fad690e36478ebdf3ef6f5faea8da2e1851a Mon Sep 17 00:00:00 2001 From: Daniel Walsh Date: Wed, 14 Feb 2024 14:56:33 +0000 Subject: [PATCH 4/9] Fixes exhaustion when loading large profiles (#4127) --- .../thebusybiscuit/slimefun4/Threads.java | 23 +++++++++++++++++++ .../slimefun4/api/player/PlayerProfile.java | 2 ++ 2 files changed, 25 insertions(+) create mode 100644 src/main/java/io/github/thebusybiscuit/slimefun4/Threads.java diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/Threads.java b/src/main/java/io/github/thebusybiscuit/slimefun4/Threads.java new file mode 100644 index 0000000000..d109bcae9d --- /dev/null +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/Threads.java @@ -0,0 +1,23 @@ +package io.github.thebusybiscuit.slimefun4; + +import javax.annotation.ParametersAreNonnullByDefault; + +import org.bukkit.plugin.java.JavaPlugin; + +public class Threads { + + @ParametersAreNonnullByDefault + public static void newThread(JavaPlugin plugin, String name, Runnable runnable) { + // TODO: Change to thread pool + new Thread(runnable, plugin.getName() + " - " + name).start(); + } + + public static String getCaller() { + // First item will be getting the call stack + // Second item will be this call + // Third item will be the func we care about being called + // And finally will be the caller + StackTraceElement element = Thread.currentThread().getStackTrace()[3]; + return element.getClassName() + "." + element.getMethodName() + ":" + element.getLineNumber(); + } +} diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/api/player/PlayerProfile.java b/src/main/java/io/github/thebusybiscuit/slimefun4/api/player/PlayerProfile.java index 8dfc7414f8..3450ba2862 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/api/player/PlayerProfile.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/api/player/PlayerProfile.java @@ -30,6 +30,7 @@ import io.github.bakedlibs.dough.common.ChatColors; import io.github.bakedlibs.dough.common.CommonPatterns; import io.github.bakedlibs.dough.config.Config; +import io.github.thebusybiscuit.slimefun4.Threads; import io.github.thebusybiscuit.slimefun4.api.events.AsyncProfileLoadEvent; import io.github.thebusybiscuit.slimefun4.api.gps.Waypoint; import io.github.thebusybiscuit.slimefun4.api.items.HashedArmorpiece; @@ -394,6 +395,7 @@ public static boolean get(@Nonnull OfflinePlayer p, @Nonnull Consumer { PlayerData data = Slimefun.getPlayerStorage().loadPlayerData(p.getUniqueId()); + loading.remove(uuid); AsyncProfileLoadEvent event = new AsyncProfileLoadEvent(new PlayerProfile(p, data)); Bukkit.getPluginManager().callEvent(event); From 5fbef63e6a4b3e70839d18c0842a5fa044935368 Mon Sep 17 00:00:00 2001 From: Daniel Walsh Date: Sat, 17 Feb 2024 16:23:39 +0000 Subject: [PATCH 5/9] Add new analytics service (#4067) Co-authored-by: Alessio Colombo <37039432+Sfiguz7@users.noreply.github.com> --- .../thebusybiscuit/slimefun4/Threads.java | 23 ------------------- .../slimefun4/api/player/PlayerProfile.java | 1 - 2 files changed, 24 deletions(-) delete mode 100644 src/main/java/io/github/thebusybiscuit/slimefun4/Threads.java diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/Threads.java b/src/main/java/io/github/thebusybiscuit/slimefun4/Threads.java deleted file mode 100644 index d109bcae9d..0000000000 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/Threads.java +++ /dev/null @@ -1,23 +0,0 @@ -package io.github.thebusybiscuit.slimefun4; - -import javax.annotation.ParametersAreNonnullByDefault; - -import org.bukkit.plugin.java.JavaPlugin; - -public class Threads { - - @ParametersAreNonnullByDefault - public static void newThread(JavaPlugin plugin, String name, Runnable runnable) { - // TODO: Change to thread pool - new Thread(runnable, plugin.getName() + " - " + name).start(); - } - - public static String getCaller() { - // First item will be getting the call stack - // Second item will be this call - // Third item will be the func we care about being called - // And finally will be the caller - StackTraceElement element = Thread.currentThread().getStackTrace()[3]; - return element.getClassName() + "." + element.getMethodName() + ":" + element.getLineNumber(); - } -} diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/api/player/PlayerProfile.java b/src/main/java/io/github/thebusybiscuit/slimefun4/api/player/PlayerProfile.java index 3450ba2862..29ca7e5034 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/api/player/PlayerProfile.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/api/player/PlayerProfile.java @@ -30,7 +30,6 @@ import io.github.bakedlibs.dough.common.ChatColors; import io.github.bakedlibs.dough.common.CommonPatterns; import io.github.bakedlibs.dough.config.Config; -import io.github.thebusybiscuit.slimefun4.Threads; import io.github.thebusybiscuit.slimefun4.api.events.AsyncProfileLoadEvent; import io.github.thebusybiscuit.slimefun4.api.gps.Waypoint; import io.github.thebusybiscuit.slimefun4.api.items.HashedArmorpiece; From cbb40efda0b689fc5cb97a5edb96b5703aab8170 Mon Sep 17 00:00:00 2001 From: Daniel Walsh Date: Mon, 19 Feb 2024 02:24:19 +0000 Subject: [PATCH 6/9] More work and tests --- .../slimefun4/api/player/PlayerProfile.java | 1 - .../slimefun4/utils/SlimefunUtils.java | 34 ++- .../slimefun4/utils/TestSlimefunUtils.java | 199 ++++++++++++++++++ 3 files changed, 231 insertions(+), 3 deletions(-) create mode 100644 src/test/java/io/github/thebusybiscuit/slimefun4/utils/TestSlimefunUtils.java diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/api/player/PlayerProfile.java b/src/main/java/io/github/thebusybiscuit/slimefun4/api/player/PlayerProfile.java index 29ca7e5034..8dfc7414f8 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/api/player/PlayerProfile.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/api/player/PlayerProfile.java @@ -394,7 +394,6 @@ public static boolean get(@Nonnull OfflinePlayer p, @Nonnull Consumer { PlayerData data = Slimefun.getPlayerStorage().loadPlayerData(p.getUniqueId()); - loading.remove(uuid); AsyncProfileLoadEvent event = new AsyncProfileLoadEvent(new PlayerProfile(p, data)); Bukkit.getPluginManager().callEvent(event); diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/utils/SlimefunUtils.java b/src/main/java/io/github/thebusybiscuit/slimefun4/utils/SlimefunUtils.java index a766055da2..eee9895c9e 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/utils/SlimefunUtils.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/utils/SlimefunUtils.java @@ -427,9 +427,15 @@ public static boolean isItemSimilar(@Nullable ItemStack item, @Nullable ItemStac } } + /** + * returns true if equal or false if not + */ public static boolean compareItem(@Nullable ItemStack itemOne, @Nullable ItemStack itemTwo) { + // If they are both null, they are equal if (itemOne == null && itemTwo == null) { return true; + + // If one is null and the other is not, they are not equal } else if (itemOne == null || itemTwo == null) { return false; } @@ -437,34 +443,58 @@ public static boolean compareItem(@Nullable ItemStack itemOne, @Nullable ItemSta boolean itemOneHasMeta = itemOne.hasItemMeta(); boolean itemTwoHasMeta = itemTwo.hasItemMeta(); + // If one has meta and the other does not, they are not equal if ((!itemOneHasMeta && itemTwoHasMeta) || (itemOneHasMeta && !itemTwoHasMeta)) { return false; } + // If neither have meta, compare the types and return if (!itemOneHasMeta && !itemTwoHasMeta) { return itemOne.getType() == itemTwo.getType(); } ItemMeta itemMetaOne = itemOne.getItemMeta(); ItemMeta itemMetaTwo = itemTwo.getItemMeta(); + // If both metas are null, compare the types and return if (itemMetaOne == null && itemMetaTwo == null) { - return true; + return itemOne.getType() == itemTwo.getType(); + + // If one meta is null and the other is not, they are not equal } else if (itemMetaOne == null || itemMetaTwo == null) { return false; } Optional itemDataOne = Slimefun.getItemDataService().getItemData(itemMetaOne); Optional itemDataTwo = Slimefun.getItemDataService().getItemData(itemMetaTwo); + // If one item has a Slimefun ID and the other does not, they are not equal + if ((itemDataOne.isPresent() && !itemDataTwo.isPresent()) || (!itemDataOne.isPresent() && itemDataTwo.isPresent())) { + return false; + } + + // If the IDs are not equal, the items are not equal + if (itemDataOne.isPresent() && itemDataTwo.isPresent() && !itemDataOne.equals(itemDataTwo)) { + return false; + } + + // If both items have a Slimefun ID and are equal if (itemDataOne.isPresent() && itemDataOne.equals(itemDataTwo)) { Optional distinctiveItemOne = getDistinctiveItem(itemDataOne.get()); Optional distinctiveItemTwo = getDistinctiveItem(itemDataTwo.get()); + + // If both items are distinctive, compare them if (distinctiveItemOne.isPresent() && distinctiveItemTwo.isPresent()) { return distinctiveItemOne.get().canStack(itemMetaOne, itemMetaTwo); } + + // Otherwise return true since the IDs are equal return true; } - return itemOne.equals(itemTwo); + // -- Vanilla items -- + // This should only be vanilla items now + // Compare types and metas + return itemOne.getType() == itemTwo.getType() + && itemMetaOne.equals(itemMetaTwo); } private static @Nonnull Optional getDistinctiveItem(@Nonnull String id) { diff --git a/src/test/java/io/github/thebusybiscuit/slimefun4/utils/TestSlimefunUtils.java b/src/test/java/io/github/thebusybiscuit/slimefun4/utils/TestSlimefunUtils.java new file mode 100644 index 0000000000..47cde7e5bf --- /dev/null +++ b/src/test/java/io/github/thebusybiscuit/slimefun4/utils/TestSlimefunUtils.java @@ -0,0 +1,199 @@ +package io.github.thebusybiscuit.slimefun4.utils; + +import java.util.Arrays; +import java.util.OptionalInt; + +import org.bukkit.Material; +import org.bukkit.NamespacedKey; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import be.seeseemelk.mockbukkit.MockBukkit; +import io.github.bakedlibs.dough.data.persistent.PersistentDataAPI; +import io.github.thebusybiscuit.slimefun4.api.items.SlimefunItem; +import io.github.thebusybiscuit.slimefun4.api.items.SlimefunItemStack; +import io.github.thebusybiscuit.slimefun4.api.recipes.RecipeType; +import io.github.thebusybiscuit.slimefun4.core.attributes.DistinctiveItem; +import io.github.thebusybiscuit.slimefun4.implementation.Slimefun; +import io.github.thebusybiscuit.slimefun4.test.TestUtilities; + +class TestSlimefunUtils { + + private static SlimefunItem distinctiveDiamond; + + @BeforeAll + public static void load() { + MockBukkit.mock(); + MockBukkit.load(Slimefun.class); + + distinctiveDiamond = new DistinctiveDiamond(); + distinctiveDiamond.register(Slimefun.instance()); + } + + @AfterAll + public static void unload() { + MockBukkit.unmock(); + } + + @Test + @DisplayName("compareItem() with both ItemStack's being null") + public void testCompareItem_bothNull() { + // Both null should return true + Assertions.assertTrue(SlimefunUtils.compareItem(null, null)); + } + + @Test + @DisplayName("compareItem() with one ItemStack being null") + public void testCompareItem_oneIsNull() { + // One null should return false + Assertions.assertFalse(SlimefunUtils.compareItem(new ItemStack(Material.DIAMOND), null)); + Assertions.assertFalse(SlimefunUtils.compareItem(null, new ItemStack(Material.DIAMOND))); + } + + @Test + @DisplayName("compareItem() with both ItemStack's not having ItemMeta") + public void testCompareItem_noItemMeta() { + // Vanilla item with no rename/lore should return true if the type is the same + Assertions.assertTrue(SlimefunUtils.compareItem(new ItemStack(Material.DIAMOND), new ItemStack(Material.DIAMOND))); + + // Different types should return false + Assertions.assertFalse(SlimefunUtils.compareItem(new ItemStack(Material.DIAMOND), new ItemStack(Material.IRON_INGOT))); + Assertions.assertFalse(SlimefunUtils.compareItem(new ItemStack(Material.IRON_INGOT), new ItemStack(Material.DIAMOND))); + } + + @Test + @DisplayName("compareItem() with one ItemStack having a ItemMeta") + public void testCompareItem_oneHasItemMeta() { + ItemStack plainDiamond = new ItemStack(Material.DIAMOND); + + ItemStack renamedDiamond = new ItemStack(Material.DIAMOND); + ItemMeta meta = renamedDiamond.getItemMeta(); + meta.setDisplayName("Renamed diamond"); + renamedDiamond.setItemMeta(meta); + + Assertions.assertFalse(SlimefunUtils.compareItem(plainDiamond, renamedDiamond)); + Assertions.assertFalse(SlimefunUtils.compareItem(renamedDiamond, plainDiamond)); + } + + @Test + @DisplayName("compareItem() with both ItemStack's having a ItemMeta") + public void testCompareItem_bothHaveItemMeta() { + // Basic display name comparison + ItemStack renamedDiamond = new ItemStack(Material.DIAMOND); + ItemMeta meta = renamedDiamond.getItemMeta(); + meta.setDisplayName("Renamed diamond"); + renamedDiamond.setItemMeta(meta); + + Assertions.assertTrue(SlimefunUtils.compareItem(renamedDiamond, renamedDiamond)); + Assertions.assertFalse(SlimefunUtils.compareItem(new ItemStack(Material.DIAMOND), renamedDiamond)); + + // Different lores + ItemStack loreDiamond = new ItemStack(Material.DIAMOND); + ItemMeta loreMeta = loreDiamond.getItemMeta(); + loreMeta.setLore(Arrays.asList("Lore 1", "Lore 2")); + loreDiamond.setItemMeta(loreMeta); + + Assertions.assertTrue(SlimefunUtils.compareItem(loreDiamond, loreDiamond)); + Assertions.assertFalse(SlimefunUtils.compareItem(new ItemStack(Material.DIAMOND), loreDiamond)); + + // Different enchants + ItemStack enchantedDiamond = new ItemStack(Material.DIAMOND_SWORD); + enchantedDiamond.addUnsafeEnchantment(Enchantment.DAMAGE_ALL, 1); + + Assertions.assertTrue(SlimefunUtils.compareItem(enchantedDiamond, enchantedDiamond)); + Assertions.assertFalse(SlimefunUtils.compareItem(new ItemStack(Material.DIAMOND_SWORD), enchantedDiamond)); + + // Different damage + ItemStack damagedDiamond = new ItemStack(Material.DIAMOND); + damagedDiamond.setDurability((short) 1); + + Assertions.assertTrue(SlimefunUtils.compareItem(damagedDiamond, damagedDiamond)); + Assertions.assertFalse(SlimefunUtils.compareItem(new ItemStack(Material.DIAMOND), damagedDiamond)); + } + + @Test + @DisplayName("compareItem() with both ItemStack's having a ItemMeta and a Slimefun ID") + public void testCompareItem_slimefunIds() { + // Same IDs + ItemStack diamond = new ItemStack(Material.DIAMOND); + ItemMeta meta = diamond.getItemMeta(); + Slimefun.getItemDataService().setItemData(meta, "test_item"); + diamond.setItemMeta(meta); + + Assertions.assertTrue(SlimefunUtils.compareItem(diamond, diamond)); + + // Different IDs + ItemStack emerald = new ItemStack(Material.EMERALD); + ItemMeta emeraldMeta = emerald.getItemMeta(); + Slimefun.getItemDataService().setItemData(emeraldMeta, "test_item_two"); + emerald.setItemMeta(emeraldMeta); + + Assertions.assertFalse(SlimefunUtils.compareItem(diamond, emerald)); + Assertions.assertFalse(SlimefunUtils.compareItem(emerald, diamond)); + } + + @Test + @DisplayName("compareItem() with DistinctiveItem") + public void testCompareItem_oneDistinctiveItem() { + // Compare vanilla item and distinctive item + SlimefunItemStack distinctiveDiamond = createDistinctiveItem(1); + ItemStack diamond = new ItemStack(Material.DIAMOND); + + Assertions.assertFalse(SlimefunUtils.compareItem(diamond, distinctiveDiamond)); + Assertions.assertFalse(SlimefunUtils.compareItem(distinctiveDiamond, diamond)); + + // Compare Slimefun item not distinctive with distinctive item + Slimefun.getItemDataService().setItemData(diamond, "NOT_DISTINCTIVE_DIAMOND"); + + Assertions.assertFalse(SlimefunUtils.compareItem(diamond, distinctiveDiamond)); + Assertions.assertFalse(SlimefunUtils.compareItem(distinctiveDiamond, diamond)); + + // Compare two distinctive items which are not the same + SlimefunItemStack differentDistinctiveItem = createDistinctiveItem(2); + + Assertions.assertFalse(SlimefunUtils.compareItem(distinctiveDiamond, differentDistinctiveItem)); + Assertions.assertFalse(SlimefunUtils.compareItem(differentDistinctiveItem, distinctiveDiamond)); + + // Compare two distinctive items which are the same + SlimefunItemStack anotherDistinctiveDiamond = createDistinctiveItem(1); + + Assertions.assertTrue(SlimefunUtils.compareItem(distinctiveDiamond, anotherDistinctiveDiamond)); + Assertions.assertTrue(SlimefunUtils.compareItem(anotherDistinctiveDiamond, distinctiveDiamond)); + } + + private static SlimefunItemStack createDistinctiveItem(int mode) { + ItemStack diamond = new ItemStack(Material.DIAMOND); + ItemMeta meta = diamond.getItemMeta(); + PersistentDataAPI.setInt(meta, new NamespacedKey(Slimefun.instance(), "test_mode"), mode); + diamond.setItemMeta(meta); + + return new SlimefunItemStack("DISTINCTIVE_DIAMOND", diamond); + } + + protected static class DistinctiveDiamond extends SlimefunItem implements DistinctiveItem { + + protected DistinctiveDiamond() { + super( + TestUtilities.getItemGroup(Slimefun.instance(), "test"), + new SlimefunItemStack("DISTINCTIVE_DIAMOND", new ItemStack(Material.DIAMOND)), + "DISTINCTIVE_DIAMOND", + RecipeType.NULL, + null + ); + } + + @Override + public boolean canStack(ItemMeta itemMetaOne, ItemMeta itemMetaTwo) { + OptionalInt modeOne = PersistentDataAPI.getOptionalInt(itemMetaOne, new NamespacedKey(Slimefun.instance(), "test_mode")); + OptionalInt modeTwo = PersistentDataAPI.getOptionalInt(itemMetaTwo, new NamespacedKey(Slimefun.instance(), "test_mode")); + + return modeOne.isPresent() && modeTwo.isPresent() && modeOne.getAsInt() == modeTwo.getAsInt(); + } + } +} From cbb1f2599d8ce4882796ce7e0edca11d94ab4c78 Mon Sep 17 00:00:00 2001 From: Jeffrey Date: Mon, 19 Feb 2024 19:42:25 +0100 Subject: [PATCH 7/9] quick exist for item typs --- .../github/thebusybiscuit/slimefun4/utils/SlimefunUtils.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/utils/SlimefunUtils.java b/src/main/java/io/github/thebusybiscuit/slimefun4/utils/SlimefunUtils.java index eee9895c9e..7f0c85d683 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/utils/SlimefunUtils.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/utils/SlimefunUtils.java @@ -440,6 +440,11 @@ public static boolean compareItem(@Nullable ItemStack itemOne, @Nullable ItemSta return false; } + // If types aren't equal items aren't equal + if (itemOne.getType() != itemTwo.getType()) { + return false; + } + boolean itemOneHasMeta = itemOne.hasItemMeta(); boolean itemTwoHasMeta = itemTwo.hasItemMeta(); From 8542e269898387b497e33ee631ab7b979fb6a138 Mon Sep 17 00:00:00 2001 From: Jeffrey Date: Sat, 24 Feb 2024 20:34:18 +0100 Subject: [PATCH 8/9] check for ammount --- .../items/multiblocks/EnhancedCraftingTable.java | 4 +++- .../implementation/items/multiblocks/MagicWorkbench.java | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/EnhancedCraftingTable.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/EnhancedCraftingTable.java index 62d13693cf..f2186b2140 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/EnhancedCraftingTable.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/EnhancedCraftingTable.java @@ -93,7 +93,9 @@ private void craft(Inventory inv, Block dispenser, Player p, Block b, ItemStack private boolean isCraftable(Inventory inv, ItemStack[] recipe) { for (int j = 0; j < inv.getContents().length; j++) { - if (!SlimefunUtils.compareItem(inv.getContents()[j], recipe[j])) { + if (!SlimefunUtils.compareItem(inv.getContents()[j], recipe[j]) + && inv.getContents()[j].getAmount() < recipe[j].getAmount() + ) { return false; } } diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/MagicWorkbench.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/MagicWorkbench.java index f52c2d1c63..0f652da51c 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/MagicWorkbench.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/MagicWorkbench.java @@ -134,7 +134,9 @@ private Block locateDispenser(Block b) { private boolean isCraftable(Inventory inv, ItemStack[] recipe) { for (int j = 0; j < inv.getContents().length; j++) { - if (!SlimefunUtils.compareItem(inv.getContents()[j], recipe[j])) { + if (!SlimefunUtils.compareItem(inv.getContents()[j], recipe[j]) + && inv.getContents()[j].getAmount() < recipe[j].getAmount() + ) { return false; } } From 22e07730f7a5eedc13c0462a1ee8fd8b225e2743 Mon Sep 17 00:00:00 2001 From: Jeffrey Date: Sat, 24 Feb 2024 21:18:42 +0100 Subject: [PATCH 9/9] requested changes --- .../slimefun4/implementation/items/multiblocks/OreWasher.java | 2 +- .../slimefun4/implementation/listeners/BlockListener.java | 1 - .../github/thebusybiscuit/slimefun4/utils/SlimefunUtils.java | 4 ++-- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/OreWasher.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/OreWasher.java index 4611753616..f8d6a3e6ba 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/OreWasher.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/OreWasher.java @@ -131,7 +131,7 @@ public void onInteract(Player p, Block b) { } return; - } else if (SlimefunUtils.compareItem(input, new ItemStack(Material.SAND))) { + } else if (SlimefunUtils.compareItem(input, new ItemStack(Material.SAND, 2))) { ItemStack output = SlimefunItems.SALT; Inventory outputInv = findOutputInventory(output, dispBlock, inv); diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/BlockListener.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/BlockListener.java index 00711cd4cd..3dbdd0c153 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/BlockListener.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/BlockListener.java @@ -24,7 +24,6 @@ import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.block.BlockBreakEvent; -import org.bukkit.event.block.BlockDropItemEvent; import org.bukkit.event.block.BlockPlaceEvent; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/utils/SlimefunUtils.java b/src/main/java/io/github/thebusybiscuit/slimefun4/utils/SlimefunUtils.java index 7f0c85d683..f4776b1d9d 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/utils/SlimefunUtils.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/utils/SlimefunUtils.java @@ -449,7 +449,7 @@ public static boolean compareItem(@Nullable ItemStack itemOne, @Nullable ItemSta boolean itemTwoHasMeta = itemTwo.hasItemMeta(); // If one has meta and the other does not, they are not equal - if ((!itemOneHasMeta && itemTwoHasMeta) || (itemOneHasMeta && !itemTwoHasMeta)) { + if (itemOneHasMeta != itemTwoHasMeta) { return false; } @@ -472,7 +472,7 @@ public static boolean compareItem(@Nullable ItemStack itemOne, @Nullable ItemSta Optional itemDataOne = Slimefun.getItemDataService().getItemData(itemMetaOne); Optional itemDataTwo = Slimefun.getItemDataService().getItemData(itemMetaTwo); // If one item has a Slimefun ID and the other does not, they are not equal - if ((itemDataOne.isPresent() && !itemDataTwo.isPresent()) || (!itemDataOne.isPresent() && itemDataTwo.isPresent())) { + if (itemDataOne.isPresent() != itemDataTwo.isPresent()) { return false; }