4d40e87b33
Had to drop some hunks modifying getEntities, as those methods were rewritten by Mojang in 1.17
79 lines
3.4 KiB
Diff
79 lines
3.4 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Jake Potrebic <jake.m.potrebic@gmail.com>
|
|
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 3feebd181d0fb7ea5e08c38eb132efd2c4aac47e..47b14e0700dca279347e5a6b5252ceba2e6a6c72 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java
|
|
@@ -485,6 +485,14 @@ public final class CraftMagicNumbers implements UnsafeValues {
|
|
return io.papermc.paper.inventory.ItemRarity.values()[getItem(itemStack.getType()).getRarity(CraftItemStack.asNMSCopy(itemStack)).ordinal()];
|
|
}
|
|
|
|
+ @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));
|
|
+ }
|
|
+
|
|
@Override
|
|
public int getProtocolVersion() {
|
|
return net.minecraft.SharedConstants.getCurrentVersion().getProtocolVersion();
|
|
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..8d9c9b3bd53d407391d4fcb7fc773153d1a7b402
|
|
--- /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.Test;
|
|
+
|
|
+import static org.junit.Assert.assertFalse;
|
|
+import static org.junit.Assert.assertThrows;
|
|
+import static org.junit.Assert.assertTrue;
|
|
+
|
|
+public class ItemStackRepairCheckTest extends AbstractTestingBase {
|
|
+
|
|
+ @Test
|
|
+ public void testIsRepariableBy() {
|
|
+ ItemStack diamondPick = new ItemStack(Material.DIAMOND_PICKAXE);
|
|
+
|
|
+ assertTrue("diamond pick isn't repairable by a diamond", diamondPick.isRepairableBy(new ItemStack(Material.DIAMOND)));
|
|
+ }
|
|
+
|
|
+ @Test
|
|
+ public void testCanRepair() {
|
|
+ ItemStack diamond = new ItemStack(Material.DIAMOND);
|
|
+
|
|
+ assertTrue("diamond can't repair a diamond axe", diamond.canRepair(new ItemStack(Material.DIAMOND_AXE)));
|
|
+ }
|
|
+
|
|
+ @Test
|
|
+ public void testIsNotRepairableBy() {
|
|
+ ItemStack notDiamondPick = new ItemStack(Material.ACACIA_SAPLING);
|
|
+
|
|
+ assertFalse("acacia sapling is repairable by a diamond", notDiamondPick.isRepairableBy(new ItemStack(Material.DIAMOND)));
|
|
+ }
|
|
+
|
|
+ @Test
|
|
+ public void testCanNotRepair() {
|
|
+ ItemStack diamond = new ItemStack(Material.DIAMOND);
|
|
+
|
|
+ assertFalse("diamond can repair oak button", diamond.canRepair(new ItemStack(Material.OAK_BUTTON)));
|
|
+ }
|
|
+
|
|
+ @Test
|
|
+ public void testInvalidItem() {
|
|
+ ItemStack badItemStack = new ItemStack(Material.ACACIA_WALL_SIGN);
|
|
+
|
|
+ assertFalse("acacia wall sign is repairable by diamond", badItemStack.isRepairableBy(new ItemStack(Material.DIAMOND)));
|
|
+ }
|
|
+}
|