From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Jake Potrebic Date: Sat, 15 May 2021 22:11:11 -0700 Subject: [PATCH] ItemStack repair check API diff --git a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java index 28f8a85c35c9c160bb223b8cd4245949b259dd5c..952a8147947fa0e2a960628fc760212d3d206ce6 100644 --- a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java +++ b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java @@ -550,6 +550,14 @@ public final class CraftMagicNumbers implements UnsafeValues { public int getProtocolVersion() { return net.minecraft.SharedConstants.getCurrentVersion().getProtocolVersion(); } + + @Override + public boolean isValidRepairItemStack(org.bukkit.inventory.ItemStack itemToBeRepaired, org.bukkit.inventory.ItemStack repairMaterial) { + if (!itemToBeRepaired.getType().isItem() || !repairMaterial.getType().isItem()) { + return false; + } + return CraftMagicNumbers.getItem(itemToBeRepaired.getType()).isValidRepairItem(CraftItemStack.asNMSCopy(itemToBeRepaired), CraftItemStack.asNMSCopy(repairMaterial)); + } // Paper end @Override diff --git a/src/test/java/io/papermc/paper/util/ItemStackRepairCheckTest.java b/src/test/java/io/papermc/paper/util/ItemStackRepairCheckTest.java new file mode 100644 index 0000000000000000000000000000000000000000..6b8d360ef86e181a680ad77f28b7dd7368dddfe7 --- /dev/null +++ b/src/test/java/io/papermc/paper/util/ItemStackRepairCheckTest.java @@ -0,0 +1,48 @@ +package io.papermc.paper.util; + +import org.bukkit.Material; +import org.bukkit.inventory.ItemStack; +import org.bukkit.support.AbstractTestingBase; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; + +public class ItemStackRepairCheckTest extends AbstractTestingBase { + + @Test + public void testIsRepariableBy() { + ItemStack diamondPick = new ItemStack(Material.DIAMOND_PICKAXE); + + assertTrue(diamondPick.isRepairableBy(new ItemStack(Material.DIAMOND)), "diamond pick isn't repairable by a diamond"); + } + + @Test + public void testCanRepair() { + ItemStack diamond = new ItemStack(Material.DIAMOND); + + assertTrue(diamond.canRepair(new ItemStack(Material.DIAMOND_AXE)), "diamond can't repair a diamond axe"); + } + + @Test + public void testIsNotRepairableBy() { + ItemStack notDiamondPick = new ItemStack(Material.ACACIA_SAPLING); + + assertFalse(notDiamondPick.isRepairableBy(new ItemStack(Material.DIAMOND)), "acacia sapling is repairable by a diamond"); + } + + @Test + public void testCanNotRepair() { + ItemStack diamond = new ItemStack(Material.DIAMOND); + + assertFalse(diamond.canRepair(new ItemStack(Material.OAK_BUTTON)), "diamond can repair oak button"); + } + + @Test + public void testInvalidItem() { + ItemStack badItemStack = new ItemStack(Material.ACACIA_WALL_SIGN); + + assertFalse(badItemStack.isRepairableBy(new ItemStack(Material.DIAMOND)), "acacia wall sign is repairable by diamond"); + } +}