From 734e5f526c032171f723da1d5383fb2f0bd4df70 Mon Sep 17 00:00:00 2001 From: CarmJos Date: Wed, 2 Mar 2022 04:20:17 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B0=9D=E8=AF=95=E6=94=AF=E6=8C=81=E6=97=A7?= =?UTF-8?q?=E7=89=88=E6=9C=AC=E7=89=A9=E5=93=81=E7=9A=84=E8=AF=BB=E5=8F=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../userprefix/wrapper/ItemStackWrapper.java | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/main/java/cc/carm/plugin/userprefix/wrapper/ItemStackWrapper.java b/src/main/java/cc/carm/plugin/userprefix/wrapper/ItemStackWrapper.java index 6fcfd3a..404e824 100644 --- a/src/main/java/cc/carm/plugin/userprefix/wrapper/ItemStackWrapper.java +++ b/src/main/java/cc/carm/plugin/userprefix/wrapper/ItemStackWrapper.java @@ -12,10 +12,12 @@ public class ItemStackWrapper implements ConfigurationSerializable { private static boolean unsafeAvailable; static { + // 用于判断是否支持unsafe try { Class.forName("org.bukkit.UnsafeValues"); + int dataVersion = Bukkit.getServer().getUnsafe().getDataVersion(); unsafeAvailable = true; - } catch (ClassNotFoundException e) { + } catch (Exception e) { unsafeAvailable = false; } } @@ -31,11 +33,15 @@ public class ItemStackWrapper implements ConfigurationSerializable { // static define will cause problem, lazy load it if (unsafeAvailable) { if (!args.containsKey("v")) { - Material material = Material.matchMaterial(args.get("type").toString()); - if (material == null) { - throw new IllegalArgumentException("物品 "+args.get("type")+" 不存在"); + String itemName = args.get("type").toString(); + Material legacyMaterial = Material.matchMaterial(itemName, true); + if (legacyMaterial == null) { + Material material = Material.matchMaterial(args.get("type").toString()); + if (material == null) { + throw new IllegalArgumentException("物品 " + args.get("type") + " 不存在"); + } + args.put("v", Bukkit.getServer().getUnsafe().getDataVersion()); } - args.put("v", Bukkit.getServer().getUnsafe().getDataVersion()); } } return ItemStack.deserialize(args);