diff --git a/src/main/java/pers/xanadu/enderdragon/nms/NMSItem/v1_12_R1/CraftNBTTagConfigSerializer.java b/src/main/java/pers/xanadu/enderdragon/nms/NMSItem/v1_12_R1/CraftNBTTagConfigSerializer.java deleted file mode 100644 index ce86e30..0000000 --- a/src/main/java/pers/xanadu/enderdragon/nms/NMSItem/v1_12_R1/CraftNBTTagConfigSerializer.java +++ /dev/null @@ -1,146 +0,0 @@ -package pers.xanadu.enderdragon.nms.NMSItem.v1_12_R1; - -import net.minecraft.server.v1_12_R1.*; - -import java.lang.reflect.Constructor; -import java.lang.reflect.Method; -import java.util.*; -import java.util.regex.Pattern; - -public class CraftNBTTagConfigSerializer { - private static final Pattern ARRAY = Pattern.compile("^\\[.*]"); - private static final Pattern INTEGER = Pattern.compile("[-+]?(?:0|[1-9][0-9]*)?i", 2); - private static final Pattern DOUBLE = Pattern.compile("[-+]?(?:[0-9]+[.]?|[0-9]*[.][0-9]+)(?:e[-+]?[0-9]+)?d", 2); - private static final Pattern byte_format = Pattern.compile("[-+]?(?:0|[1-9][0-9]*)b", 2); - private static final Pattern short_format = Pattern.compile("[-+]?(?:0|[1-9][0-9]*)s", 2); - private static final Pattern integer_format = Pattern.compile("[-+]?(?:0|[1-9][0-9]*)"); - private static final Pattern long_format = Pattern.compile("[-+]?(?:0|[1-9][0-9]*)l", 2); - private static final Pattern float_format = Pattern.compile("[-+]?(?:[0-9]+[.]?|[0-9]*[.][0-9]+)(?:e[-+]?[0-9]+)?f", 2); - private static final Pattern double_format = Pattern.compile("[-+]?(?:[0-9]+[.]?|[0-9]*[.][0-9]+)(?:e[-+]?[0-9]+)?d", 2); - private static final Pattern double_format2 = Pattern.compile("[-+]?(?:[0-9]+[.]|[0-9]*[.][0-9]+)(?:e[-+]?[0-9]+)?", 2); - - - public CraftNBTTagConfigSerializer() { - } - - public static Object serialize(NBTBase base) { - if (base instanceof NBTTagCompound) { - Map innerMap = new HashMap(); - - for (String key : ((NBTTagCompound) base).c()) { - innerMap.put(key, serialize(((NBTTagCompound) base).get(key))); - } - - return innerMap; - } - if (base instanceof NBTTagString) { - return ((NBTTagString) base).c_(); - } - else { - return base instanceof NBTTagInt ? base + "i" : base.toString(); - } - - } - - public static NBTBase deserialize(Object object) { - if (object instanceof Map) { - NBTTagCompound compound = new NBTTagCompound(); - for (Object obj : ((Map) object).entrySet()) { - Map.Entry entry = (Map.Entry) obj; - compound.set(entry.getKey(), deserialize(entry.getValue())); - } - return compound; - } else if (!(object instanceof List)) { - if (object instanceof String) { - String string = (String)object; - if (ARRAY.matcher(string).matches()) { - try { - Constructor constructor = MojangsonParser.class.getDeclaredConstructor(String.class); - MojangsonParser parser = constructor.newInstance(string); - Method parseArray = MojangsonParser.class.getDeclaredMethod("k"); - parseArray.setAccessible(true); - return (NBTBase) parseArray.invoke(parser); - } catch (Throwable e) { - throw new RuntimeException("Could not deserialize found list ", e); - } - } else if (INTEGER.matcher(string).matches()) { - return new NBTTagInt(Integer.parseInt(string.substring(0, string.length() - 1))); - } else if (DOUBLE.matcher(string).matches()) { - return new NBTTagDouble(Double.parseDouble(string.substring(0, string.length() - 1))); - } else { - try{ - Constructor constructor = MojangsonParser.class.getDeclaredConstructor(String.class); - MojangsonParser parser = constructor.newInstance(""); - Method parseLiteral = MojangsonParser.class.getDeclaredMethod("c", String.class); - parseLiteral.setAccessible(true); - NBTBase nbtBase = (NBTBase) parseLiteral.invoke(parser,string); - if (nbtBase instanceof NBTTagInt) { - return new NBTTagString(nbtBase.toString()); - } else { - return (nbtBase instanceof NBTTagDouble ? new NBTTagString(String.valueOf(((NBTTagDouble)nbtBase).asDouble())) : nbtBase); - } - }catch (ReflectiveOperationException e){ - throw new RuntimeException("Could not deserialize NBTBase"); - } - - } - } else { - throw new RuntimeException("Could not deserialize NBTBase"); - } - } else { - List list = (List)object; - if (list.isEmpty()) { - return new NBTTagList(); - } - else { - NBTTagList tagList = new NBTTagList(); - for (Object tag : list) { - tagList.add(deserialize(tag)); - } - return tagList; - } - } - } - public static NBTBase v1_12_R1_c(String raw) { - try { - if (float_format.matcher(raw).matches()) { - return new NBTTagFloat(Float.parseFloat(raw.substring(0, raw.length() - 1))); - } - - if (byte_format.matcher(raw).matches()) { - return new NBTTagByte(Byte.parseByte(raw.substring(0, raw.length() - 1))); - } - - if (long_format.matcher(raw).matches()) { - return new NBTTagLong(Long.parseLong(raw.substring(0, raw.length() - 1))); - } - - if (short_format.matcher(raw).matches()) { - return new NBTTagShort(Short.parseShort(raw.substring(0, raw.length() - 1))); - } - - if (integer_format.matcher(raw).matches()) { - return new NBTTagInt(Integer.parseInt(raw)); - } - - if (double_format.matcher(raw).matches()) { - return new NBTTagDouble(Double.parseDouble(raw.substring(0, raw.length() - 1))); - } - - if (double_format2.matcher(raw).matches()) { - return new NBTTagDouble(Double.parseDouble(raw)); - } - - if ("true".equalsIgnoreCase(raw)) { - return new NBTTagByte((byte)1); - } - - if ("false".equalsIgnoreCase(raw)) { - return new NBTTagByte((byte)0); - } - } catch (NumberFormatException e) { - e.printStackTrace(); - } - return new NBTTagString(raw); - } -} diff --git a/src/main/java/pers/xanadu/enderdragon/nms/NMSItem/v1_13_R1/CraftNBTTagConfigSerializer.java b/src/main/java/pers/xanadu/enderdragon/nms/NMSItem/v1_13_R1/CraftNBTTagConfigSerializer.java deleted file mode 100644 index d0b6947..0000000 --- a/src/main/java/pers/xanadu/enderdragon/nms/NMSItem/v1_13_R1/CraftNBTTagConfigSerializer.java +++ /dev/null @@ -1,151 +0,0 @@ -package pers.xanadu.enderdragon.nms.NMSItem.v1_13_R1; - -import com.mojang.brigadier.StringReader; -import net.minecraft.server.v1_13_R1.*; - -import java.lang.reflect.Method; -import java.util.*; -import java.util.regex.Pattern; - -public class CraftNBTTagConfigSerializer { - private static final Pattern ARRAY = Pattern.compile("^\\[.*]"); - private static final Pattern INTEGER = Pattern.compile("[-+]?(?:0|[1-9][0-9]*)?i", 2); - private static final Pattern DOUBLE = Pattern.compile("[-+]?(?:[0-9]+[.]?|[0-9]*[.][0-9]+)(?:e[-+]?[0-9]+)?d", 2); - public static final MojangsonParser MOJANGSON_PARSER = new MojangsonParser(new StringReader("")); - private static final Pattern byte_format = Pattern.compile("[-+]?(?:0|[1-9][0-9]*)b", 2); - private static final Pattern short_format = Pattern.compile("[-+]?(?:0|[1-9][0-9]*)s", 2); - private static final Pattern integer_format = Pattern.compile("[-+]?(?:0|[1-9][0-9]*)"); - private static final Pattern long_format = Pattern.compile("[-+]?(?:0|[1-9][0-9]*)l", 2); - private static final Pattern float_format = Pattern.compile("[-+]?(?:[0-9]+[.]?|[0-9]*[.][0-9]+)(?:e[-+]?[0-9]+)?f", 2); - private static final Pattern double_format = Pattern.compile("[-+]?(?:[0-9]+[.]?|[0-9]*[.][0-9]+)(?:e[-+]?[0-9]+)?d", 2); - private static final Pattern double_format_2 = Pattern.compile("[-+]?(?:[0-9]+[.]|[0-9]*[.][0-9]+)(?:e[-+]?[0-9]+)?", 2); - - public CraftNBTTagConfigSerializer() { - } - - public static Object serialize(NBTBase base) { - if (base instanceof NBTTagCompound) { - Map innerMap = new HashMap(); - Iterator var3 = ((NBTTagCompound)base).getKeys().iterator(); - - while(var3.hasNext()) { - String key = (String)var3.next(); - innerMap.put(key, serialize(((NBTTagCompound)base).get(key))); - } - - return innerMap; - } else if (!(base instanceof NBTTagList)) { - if (base instanceof NBTTagString) { - return base.b_(); - } else { - return base instanceof NBTTagInt ? base + "i" : base.toString(); - } - } else { - List baseList = new ArrayList(); - - for(int i = 0; i < ((NBTList)base).size(); ++i) { - baseList.add(serialize(((NBTList)base).get(i))); - } - - return baseList; - } - } - - public static NBTBase v1_13_R1_b(String str) { - try { - if (float_format.matcher(str).matches()) { - return new NBTTagFloat(Float.parseFloat(str.substring(0, str.length() - 1))); - } - - if (byte_format.matcher(str).matches()) { - return new NBTTagByte(Byte.parseByte(str.substring(0, str.length() - 1))); - } - - if (long_format.matcher(str).matches()) { - return new NBTTagLong(Long.parseLong(str.substring(0, str.length() - 1))); - } - - if (short_format.matcher(str).matches()) { - return new NBTTagShort(Short.parseShort(str.substring(0, str.length() - 1))); - } - - if (integer_format.matcher(str).matches()) { - return new NBTTagInt(Integer.parseInt(str)); - } - - if (double_format.matcher(str).matches()) { - return new NBTTagDouble(Double.parseDouble(str.substring(0, str.length() - 1))); - } - - if (double_format_2.matcher(str).matches()) { - return new NBTTagDouble(Double.parseDouble(str)); - } - - if ("true".equalsIgnoreCase(str)) { - return new NBTTagByte((byte)1); - } - - if ("false".equalsIgnoreCase(str)) { - return new NBTTagByte((byte)0); - } - } catch (NumberFormatException e) { - e.printStackTrace(); - } - return new NBTTagString(str); - } - - public static NBTBase deserialize(Object object) { - if (object instanceof Map) { - NBTTagCompound compound = new NBTTagCompound(); - for (Object obj : ((Map) object).entrySet()) { - Map.Entry entry = (Map.Entry) obj; - compound.set(entry.getKey(), deserialize(entry.getValue())); - } - return compound; - } else if (!(object instanceof List)) { - if (object instanceof String) { - String string = (String)object; - if (ARRAY.matcher(string).matches()) { - try { - Method parseArray = MojangsonParser.class.getDeclaredMethod("h"); - parseArray.setAccessible(true); - MojangsonParser parser = new MojangsonParser(new StringReader(string)); - return (NBTBase) parseArray.invoke(parser); - } catch (Throwable e) { - throw new RuntimeException("Could not deserialize found list ", e); - } - } else if (INTEGER.matcher(string).matches()) { - return new NBTTagInt(Integer.parseInt(string.substring(0, string.length() - 1))); - } else if (DOUBLE.matcher(string).matches()) { - return new NBTTagDouble(Double.parseDouble(string.substring(0, string.length() - 1))); - } else { - try{ - Method parseLiteral = MojangsonParser.class.getDeclaredMethod("b", String.class); - parseLiteral.setAccessible(true); - NBTBase nbtBase = (NBTBase) parseLiteral.invoke(MOJANGSON_PARSER,string); - if (nbtBase instanceof NBTTagInt) { - return new NBTTagString(nbtBase.b_()); - } else { - return (nbtBase instanceof NBTTagDouble ? new NBTTagString(String.valueOf(((NBTTagDouble)nbtBase).asDouble())) : nbtBase); - } - }catch (ReflectiveOperationException e){ - throw new RuntimeException("Could not deserialize NBTBase"); - } - } - } else { - throw new RuntimeException("Could not deserialize NBTBase"); - } - } else { - List list = (List)object; - if (list.isEmpty()) { - return new NBTTagList(); - } else { - NBTTagList tagList = new NBTTagList(); - for (Object tag : list) { - tagList.add(deserialize(tag)); - } - return tagList; - } - } - } -} diff --git a/src/main/java/pers/xanadu/enderdragon/util/NMSUtil.java b/src/main/java/pers/xanadu/enderdragon/util/NMSUtil.java index 25f8c33..5bc3abe 100644 --- a/src/main/java/pers/xanadu/enderdragon/util/NMSUtil.java +++ b/src/main/java/pers/xanadu/enderdragon/util/NMSUtil.java @@ -1,18 +1,14 @@ package pers.xanadu.enderdragon.util; import org.bukkit.Bukkit; -import org.bukkit.Material; import org.bukkit.World; import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.persistence.PersistentDataContainer; -import org.jetbrains.annotations.TestOnly; import pers.xanadu.enderdragon.EnderDragon; import pers.xanadu.enderdragon.config.Config; import java.lang.reflect.Field; import java.lang.reflect.Method; -import java.util.HashMap; import java.util.Map; public class NMSUtil { @@ -26,18 +22,13 @@ public class NMSUtil { */ private Method asCraftCopy; private Method NMSItemStack_save; - private Method NMSItemStack_setTag; private Method cpdToEi; private Method stringToCPD; private Method stringToNBTBase; - private Method serializeNBTBase; - private Method deserializeObject; private Method PDCtoCPD; private Method PersistentDataContainer_putAll; private Method NBTTagCompound_set; private Field unhandledTags; - private Field internalTag; - private Field MOJANGSON_PARSER; private Field world_c_environment; private Field NBTTagCompound_map; private Class WorldClass; @@ -51,7 +42,6 @@ public class NMSUtil { private Class NBTTagCompoundClass; private Class NBTBaseClass; private Class MojangsonParserClass; - private Class CraftNBTTagConfigSerializerClass; private Class CraftPersistentDataContainerClass; public void init(){ @@ -70,8 +60,6 @@ public class NMSUtil { this.CraftMetaItemClass = Class.forName("org.bukkit.craftbukkit." + version + ".inventory.CraftMetaItem"); this.unhandledTags = CraftMetaItemClass.getDeclaredField("unhandledTags"); unhandledTags.setAccessible(true); - this.internalTag = CraftMetaItemClass.getDeclaredField("internalTag"); - internalTag.setAccessible(true); this.NMSItemStackClass = CraftItemStackClass.getDeclaredField("handle").getType(); this.CraftEntityClass = Class.forName("org.bukkit.craftbukkit."+version+".entity.CraftEntity"); init_NBTTagCompoundClass(); @@ -84,7 +72,6 @@ public class NMSUtil { this.asCraftMirror = CraftItemStackClass.getMethod("asCraftMirror",NMSItemStackClass); this.asCraftCopy = CraftItemStackClass.getMethod("asCraftCopy",ItemStack.class); this.NMSItemStack_save = NMSItemStackClass.getMethod(getMethodName(ReflectiveMethod.NMSItemStack_save),NBTTagCompoundClass); - this.NMSItemStack_setTag = NMSItemStackClass.getMethod(getMethodName(ReflectiveMethod.NMSItemStack_setTag),NBTTagCompoundClass); if(Version.mcMainVersion>=13) this.cpdToEi = NMSItemStackClass.getMethod("a",NBTTagCompoundClass); if(Version.mcMainVersion<=16) this.MojangsonParserClass = Class.forName("net.minecraft.server."+version+".MojangsonParser"); @@ -93,13 +80,6 @@ public class NMSUtil { this.stringToNBTBase = MojangsonParserClass.getDeclaredMethod(getMethodName(ReflectiveMethod.MojangsonParser_parseLiteral),String.class); stringToNBTBase.setAccessible(true); - if(Version.mcMainVersion>13 || "v1_13_R2".equals(Version.getVersion())){ - this.CraftNBTTagConfigSerializerClass = Class.forName("org.bukkit.craftbukkit." + version + ".util.CraftNBTTagConfigSerializer"); - this.serializeNBTBase = CraftNBTTagConfigSerializerClass.getMethods()[0]; - this.deserializeObject = CraftNBTTagConfigSerializerClass.getMethod("deserialize",Object.class); - this.MOJANGSON_PARSER = CraftNBTTagConfigSerializerClass.getDeclaredField("MOJANGSON_PARSER"); - MOJANGSON_PARSER.setAccessible(true); - } if(Version.mcMainVersion>=14){ this.CraftPersistentDataContainerClass = Class.forName("org.bukkit.craftbukkit." + version + ".persistence.CraftPersistentDataContainer"); this.PDCtoCPD = CraftPersistentDataContainerClass.getDeclaredMethod("toTagCompound"); @@ -123,16 +103,6 @@ public class NMSUtil { e.printStackTrace(); } } -// public Object getMetaCPD(ItemMeta meta){ -// try{ -// Object craft_meta = CraftMetaItemClass.cast(meta); -// Object internalTag = this.internalTag.get(craft_meta); -// return internalTag; -// }catch (ReflectiveOperationException e){ -// e.printStackTrace(); -// return null; -// } -// } /** * 只保留物品type和amount @@ -175,14 +145,6 @@ public class NMSUtil { return null; } } - public Object StringParseLiteral(final String str){ - try{ - return stringToNBTBase.invoke(MOJANGSON_PARSER.get(null),str); - }catch (ReflectiveOperationException e){ - e.printStackTrace(); - return null; - } - } public void setPersistentDataContainer(final PersistentDataContainer dataContainer,final Object cpd){ try{ Object PDC = CraftPersistentDataContainerClass.cast(dataContainer); @@ -201,55 +163,6 @@ public class NMSUtil { } } - public Object deserializeObject(final Object object){ - try{ - return deserializeObject.invoke(null,object); - }catch (ReflectiveOperationException e){ - e.printStackTrace(); - return null; - } - } - public Object serializeNBTBase(final Object nbt_base){ - try{ - return serializeNBTBase.invoke(null, nbt_base); - }catch (ReflectiveOperationException e){ - e.printStackTrace(); - return null; - } - } - @TestOnly - public void setUnhandledTags(final ItemMeta meta, Map unhandledTags){ - try{ - Object craft_meta = CraftMetaItemClass.cast(meta); - this.unhandledTags.set(craft_meta, unhandledTags); - }catch (ReflectiveOperationException e){ - e.printStackTrace(); - } - } - /** - * @return meta中unhandledTags的引用 - */ - @TestOnly - public Map getUnhandledTags(final ItemMeta meta){ - try{ - Object craft_meta = CraftMetaItemClass.cast(meta); - Object unhandledTags = this.unhandledTags.get(craft_meta); - return (Map) unhandledTags; - }catch (ReflectiveOperationException e){ - e.printStackTrace(); - return null; - } - } - public ItemStack applyItemTag(final ItemStack item,final Object cpd){ - try{ - Object ei = asNMSCopy.invoke(null,item); - NMSItemStack_setTag.invoke(ei,cpd); - return (ItemStack) asBukkitCopy.invoke(null,ei); - }catch (ReflectiveOperationException e){ - e.printStackTrace(); - return new ItemStack(Material.AIR); - } - } public String getNBT(final ItemStack item){ try{ Object ci = CraftItemStackClass.isInstance(item)?CraftItemStackClass.cast(item):asCraftCopy.invoke(null,item);//浅拷贝unhandledTags