From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Jake Potrebic Date: Sat, 15 May 2021 22:10:50 -0700 Subject: [PATCH] ItemStack repair check API diff --git a/src/main/java/org/bukkit/UnsafeValues.java b/src/main/java/org/bukkit/UnsafeValues.java index 5a5e5bd70322700c92fd8caf781dab662643c824..b134d63351faa0d6e5469e0a09442ab82f8d60e3 100644 --- a/src/main/java/org/bukkit/UnsafeValues.java +++ b/src/main/java/org/bukkit/UnsafeValues.java @@ -160,6 +160,16 @@ public interface UnsafeValues { */ public io.papermc.paper.inventory.ItemRarity getItemStackRarity(ItemStack itemStack); + /** + * Checks if an itemstack can be repaired with another itemstack. + * Returns false if either argument's type is not an item ({@link Material#isItem()}). + * + * @param itemToBeRepaired the itemstack to be repaired + * @param repairMaterial the repair material + * @return true if valid repair, false if not + */ + public boolean isValidRepairItemStack(@org.jetbrains.annotations.NotNull ItemStack itemToBeRepaired, @org.jetbrains.annotations.NotNull ItemStack repairMaterial); + /** * Returns the server's protocol version. * diff --git a/src/main/java/org/bukkit/inventory/ItemStack.java b/src/main/java/org/bukkit/inventory/ItemStack.java index d4bc360cf7f0b0fbed07dc10b5778605fde7c219..99768256af87b72b3366898278b52acef4ae4ded 100644 --- a/src/main/java/org/bukkit/inventory/ItemStack.java +++ b/src/main/java/org/bukkit/inventory/ItemStack.java @@ -936,5 +936,27 @@ public class ItemStack implements Cloneable, ConfigurationSerializable, Translat public io.papermc.paper.inventory.ItemRarity getRarity() { return Bukkit.getUnsafe().getItemStackRarity(this); } + + /** + * Checks if an itemstack can repair this itemstack. + * Returns false if {@code this} or {@code repairMaterial}'s type is not an item ({@link Material#isItem()}). + * + * @param repairMaterial the repair material + * @return true if it is repairable by, false if not + */ + public boolean isRepairableBy(@NotNull ItemStack repairMaterial) { + return Bukkit.getUnsafe().isValidRepairItemStack(this, repairMaterial); + } + + /** + * Checks if this itemstack can repair another. + * Returns false if {@code this} or {@code toBeRepaired}'s type is not an item ({@link Material#isItem()}). + * + * @param toBeRepaired the itemstack to be repaired + * @return true if it can repair, false if not + */ + public boolean canRepair(@NotNull ItemStack toBeRepaired) { + return Bukkit.getUnsafe().isValidRepairItemStack(toBeRepaired, this); + } // Paper end }