From 52ea4cbaf81cee333f2443c62833f8a2705b4e62 Mon Sep 17 00:00:00 2001 From: mcmonkey Date: Fri, 28 Dec 2018 05:34:31 -0800 Subject: [PATCH] handle legacy item ids less brokenly --- .../net/aufdemrand/denizen/objects/dItem.java | 10 ++++++++-- .../denizen/utilities/MaterialCompat.java | 20 +++++++++++++++++++ 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/plugin/src/main/java/net/aufdemrand/denizen/objects/dItem.java b/plugin/src/main/java/net/aufdemrand/denizen/objects/dItem.java index 0baf1b5f6b..f5f88d7a0d 100644 --- a/plugin/src/main/java/net/aufdemrand/denizen/objects/dItem.java +++ b/plugin/src/main/java/net/aufdemrand/denizen/objects/dItem.java @@ -7,6 +7,7 @@ import net.aufdemrand.denizen.scripts.containers.core.ItemScriptContainer; import net.aufdemrand.denizen.scripts.containers.core.ItemScriptHelper; import net.aufdemrand.denizen.tags.BukkitTagContext; +import net.aufdemrand.denizen.utilities.MaterialCompat; import net.aufdemrand.denizen.utilities.debugging.dB; import net.aufdemrand.denizencore.objects.*; import net.aufdemrand.denizencore.objects.notable.Notable; @@ -225,12 +226,17 @@ public dItem(Material material) { @Deprecated public dItem(int itemId) { - this(new ItemStack(dMaterial.getLegacyMaterial(itemId))); + this(MaterialCompat.updateItem(itemId)); + } + + private static ItemStack fixQty(ItemStack item, int qty) { + item.setAmount(qty); + return item; } @Deprecated public dItem(int itemId, int qty) { - this(new ItemStack(dMaterial.getLegacyMaterial(itemId), qty)); + this(fixQty(MaterialCompat.updateItem(itemId), qty)); } public dItem(Material material, int qty) { diff --git a/plugin/src/main/java/net/aufdemrand/denizen/utilities/MaterialCompat.java b/plugin/src/main/java/net/aufdemrand/denizen/utilities/MaterialCompat.java index ba55d35511..7d1457c9d8 100644 --- a/plugin/src/main/java/net/aufdemrand/denizen/utilities/MaterialCompat.java +++ b/plugin/src/main/java/net/aufdemrand/denizen/utilities/MaterialCompat.java @@ -2,8 +2,11 @@ import net.aufdemrand.denizen.nms.NMSHandler; import net.aufdemrand.denizen.nms.NMSVersion; +import net.aufdemrand.denizen.objects.dMaterial; +import org.bukkit.Bukkit; import org.bukkit.DyeColor; import org.bukkit.Material; +import org.bukkit.block.data.BlockData; import org.bukkit.inventory.ItemStack; public class MaterialCompat { @@ -109,6 +112,23 @@ public static ItemStack createPlayerHead() { } } + public static ItemStack updateItem(int oldMat) { + if (NMSHandler.getVersion().isAtLeast(NMSVersion.v1_13_R2)) { + Material mat = Bukkit.getUnsafe().fromLegacy(dMaterial.getLegacyMaterial(oldMat)); + return new ItemStack(mat); + } + return new ItemStack(dMaterial.getLegacyMaterial(oldMat)); + } + + public static ItemStack updateItem(int oldMat, byte bit) { + if (NMSHandler.getVersion().isAtLeast(NMSVersion.v1_13_R2)) { + BlockData blockDat = Bukkit.getUnsafe().fromLegacy(dMaterial.getLegacyMaterial(oldMat), bit); + Material mat = blockDat.getMaterial(); + return new ItemStack(mat); + } + return new ItemStack(dMaterial.getLegacyMaterial(oldMat), bit); + } + public static boolean isBannerOrShield(Material material) { if (NMSHandler.getVersion().isAtLeast(NMSVersion.v1_9_R2) && material == Material.SHIELD) { return true;