From 0b4cb17ca1999bf501992ceac2d3c961c2877371 Mon Sep 17 00:00:00 2001 From: TheBukor Date: Mon, 14 Mar 2016 11:22:35 -0300 Subject: [PATCH] Actually applied the changes I did to the 1.9 NMS methods into the 1.8.. ..and the 1.7 NMS methods. Added a new expression to get the item type from a minecraft ID (e.g minecraft:clock) Little cleanup on the NMS methods. --- src/me/TheBukor/SkStuff/SkStuff.java | 12 +- .../conditions/CondSelectionContains.java | 4 +- .../expressions/ExprFlagOfWGRegion.java | 25 +-- .../SkStuff/expressions/ExprMCIdToItem.java | 46 +++++ .../expressions/ExprSelectionArea.java | 4 +- .../TheBukor/SkStuff/util/NMSInterface.java | 4 +- src/me/TheBukor/SkStuff/util/NMS_v1_7_R4.java | 162 +++++++++--------- src/me/TheBukor/SkStuff/util/NMS_v1_8_R1.java | 103 ++++------- src/me/TheBukor/SkStuff/util/NMS_v1_8_R2.java | 107 ++++-------- src/me/TheBukor/SkStuff/util/NMS_v1_8_R3.java | 112 ++++-------- src/me/TheBukor/SkStuff/util/NMS_v1_9_R1.java | 59 +++---- 11 files changed, 271 insertions(+), 367 deletions(-) create mode 100644 src/me/TheBukor/SkStuff/expressions/ExprMCIdToItem.java diff --git a/src/me/TheBukor/SkStuff/SkStuff.java b/src/me/TheBukor/SkStuff/SkStuff.java index 0094cb5..6aa2293 100644 --- a/src/me/TheBukor/SkStuff/SkStuff.java +++ b/src/me/TheBukor/SkStuff/SkStuff.java @@ -65,6 +65,7 @@ import me.TheBukor.SkStuff.expressions.ExprFlagsOfWGRegion; import me.TheBukor.SkStuff.expressions.ExprGlideState; import me.TheBukor.SkStuff.expressions.ExprItemNBT; import me.TheBukor.SkStuff.expressions.ExprMCIdOf; +import me.TheBukor.SkStuff.expressions.ExprMCIdToItem; import me.TheBukor.SkStuff.expressions.ExprNBTListContents; import me.TheBukor.SkStuff.expressions.ExprNBTListIndex; import me.TheBukor.SkStuff.expressions.ExprNBTOf; @@ -115,7 +116,7 @@ public class SkStuff extends JavaPlugin { effAmount += 2; exprAmount += 6; if (Skript.isRunningMinecraft(1, 9)) { - getLogger().info("WOW! You're using Minecraft 1.9! Lemme register some cool stuff right away!"); + getLogger().info("WOW! You're using Minecraft 1.9! Lemme register some cool elytra stuff right away!"); Skript.registerEvent("Elytra glide toggle", SimpleEvent.class, EntityToggleGlideEvent.class, "[entity] elytra (fl(y|ight)|glid(e|ing)) toggl(e|ing)", "[entity] toggle elytra (fl(y|ight)|glid(e|ing))"); Skript.registerExpression(ExprGlideState.class, Boolean.class, ExpressionType.PROPERTY, "elytra (fl(y|ight)|glid(e|ing)) state of %livingentity%", "%livingentity%'s elytra (fl(y|ight)|glid(e|ing)) state"); @@ -146,11 +147,12 @@ public class SkStuff extends JavaPlugin { Skript.registerExpression(ExprNoClip.class, Boolean.class, ExpressionType.PROPERTY, "no[( |-)]clip (state|mode) of %entities%", "%entities%'s no[( |-)]clip (state|mode)"); Skript.registerExpression(ExprFireProof.class, Boolean.class, ExpressionType.PROPERTY, "fire[ ]proof (state|mode) of %entities%", "%entities%'s fire[ ]proof (state|mode)"); Skript.registerExpression(ExprEndermanBlocks.class, ItemStack.class, ExpressionType.PROPERTY, "blocks that %entity% can (carry|hold|grab|steal)"); - Skript.registerExpression(ExprMCIdOf.class, String.class, ExpressionType.PROPERTY, "minecraft [(string|native)] id of %itemtype%", "%itemtype%'s minecraft [(string|native)] id"); + Skript.registerExpression(ExprMCIdOf.class, String.class, ExpressionType.PROPERTY, "(mc|minecraft) [(string|native)] id of %itemtype%", "%itemtype%'s minecraft [(string|native)] id"); + Skript.registerExpression(ExprMCIdToItem.class, ItemStack.class, ExpressionType.SIMPLE, "item[[ ](stack|type)] (of|from) (mc|minecraft) [(string|native)] id %string%"); nmsMethods.registerCompoundClassInfo(); nmsMethods.registerNBTListClassInfo(); effAmount += 5; - exprAmount += 10; + exprAmount += 11; typeAmount += 2; } if (Bukkit.getPluginManager().getPlugin("WorldEdit") != null) { @@ -208,7 +210,7 @@ public class SkStuff extends JavaPlugin { Plugin skRambled = Bukkit.getPluginManager().getPlugin("SkRambled"); boolean registerNewTypes = (umbaska == null && skRambled == null); if (registerNewTypes) { - Skript.registerExpression(ExprFlagOfWGRegion.class, Flag.class, ExpressionType.PROPERTY, "[w[orld[ ]]g[uard]] flag %wgflag% of %wgregion%"); + Skript.registerExpression(ExprFlagOfWGRegion.class, String.class, ExpressionType.PROPERTY, "[w[orld[ ]]g[uard]] flag %wgflag% of %wgregion%"); Skript.registerExpression(ExprFlagsOfWGRegion.class, Flag.class, ExpressionType.PROPERTY, "all [w[orld[ ]]g[uard]] flags of %wgregion%"); Classes.registerClass(new ClassInfo(Flag.class, "wgflag").name("WorldGuard Flag").user("(w(orld ?)?g(uard)? )?flags?").defaultExpression(new EventValueExpression(Flag.class)).parser(new Parser>() { @@ -263,7 +265,7 @@ public class SkStuff extends JavaPlugin { })); } else { - Skript.registerExpression(ExprFlagOfWGRegion.class, Flag.class, ExpressionType.PROPERTY, "[skstuff] [w[orld[ ]]g[uard]] flag %flag% of %protectedregion%"); + Skript.registerExpression(ExprFlagOfWGRegion.class, String.class, ExpressionType.PROPERTY, "[skstuff] [w[orld[ ]]g[uard]] flag %flag% of %protectedregion%"); Skript.registerExpression(ExprFlagsOfWGRegion.class, Flag.class, ExpressionType.PROPERTY, "[skstuff] [all] [w[orld[ ]]g[uard]] flags of %protectedregion%"); } exprAmount += 2; diff --git a/src/me/TheBukor/SkStuff/conditions/CondSelectionContains.java b/src/me/TheBukor/SkStuff/conditions/CondSelectionContains.java index aa105a6..9153a53 100644 --- a/src/me/TheBukor/SkStuff/conditions/CondSelectionContains.java +++ b/src/me/TheBukor/SkStuff/conditions/CondSelectionContains.java @@ -1,5 +1,7 @@ package me.TheBukor.SkStuff.conditions; +import javax.annotation.Nullable; + import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.entity.Player; @@ -7,8 +9,6 @@ import org.bukkit.event.Event; import com.sk89q.worldedit.bukkit.WorldEditPlugin; -import javax.annotation.Nullable; - import ch.njol.skript.lang.Condition; import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.SkriptParser.ParseResult; diff --git a/src/me/TheBukor/SkStuff/expressions/ExprFlagOfWGRegion.java b/src/me/TheBukor/SkStuff/expressions/ExprFlagOfWGRegion.java index 8f1267f..58ae4a8 100644 --- a/src/me/TheBukor/SkStuff/expressions/ExprFlagOfWGRegion.java +++ b/src/me/TheBukor/SkStuff/expressions/ExprFlagOfWGRegion.java @@ -1,16 +1,10 @@ package me.TheBukor.SkStuff.expressions; -import java.util.HashSet; -import java.util.Set; - import org.bukkit.craftbukkit.libs.jline.internal.Nullable; -import org.bukkit.entity.EntityType; import org.bukkit.event.Event; import com.sk89q.worldguard.protection.flags.BooleanFlag; -import com.sk89q.worldguard.protection.flags.EntityTypeFlag; import com.sk89q.worldguard.protection.flags.Flag; -import com.sk89q.worldguard.protection.flags.SetFlag; import com.sk89q.worldguard.protection.flags.StateFlag; import com.sk89q.worldguard.protection.flags.StateFlag.State; import com.sk89q.worldguard.protection.flags.StringFlag; @@ -25,8 +19,7 @@ import ch.njol.skript.lang.util.SimpleExpression; import ch.njol.util.Kleenean; import ch.njol.util.coll.CollectionUtils; -@SuppressWarnings("rawtypes") -public class ExprFlagOfWGRegion extends SimpleExpression { +public class ExprFlagOfWGRegion extends SimpleExpression { private Expression> flag; private Expression region; @@ -39,10 +32,10 @@ public class ExprFlagOfWGRegion extends SimpleExpression { } @Override - protected Flag[] get(final Event e) { + protected String[] get(final Event e) { ProtectedRegion region = this.region.getSingle(e); Flag flag = this.flag.getSingle(e); - return new Flag[] { (Flag) region.getFlag(flag) }; + return new String[] { region.getFlag(flag).toString() }; } @Override @@ -50,10 +43,9 @@ public class ExprFlagOfWGRegion extends SimpleExpression { return true; } - @SuppressWarnings("unchecked") @Override - public Class> getReturnType() { - return (Class>) Flag.class; + public Class getReturnType() { + return String.class; } @Override @@ -61,7 +53,6 @@ public class ExprFlagOfWGRegion extends SimpleExpression { return "worldguard flag " + flag.toString(e, debug) + " of " + region.toString(e, debug); } - @SuppressWarnings("unchecked") @Override public void change(Event e, Object[] delta, ChangeMode mode) { ProtectedRegion region = this.region.getSingle(e); @@ -82,6 +73,7 @@ public class ExprFlagOfWGRegion extends SimpleExpression { } else if (flag instanceof BooleanFlag && delta[0] instanceof Boolean) { boolean newValue = (boolean) delta[0]; region.setFlag((BooleanFlag) flag, newValue); + /* } else if (flag instanceof SetFlag) { if (delta instanceof EntityData[]) { if (((SetFlag) flag).getType() instanceof EntityTypeFlag) { @@ -98,10 +90,7 @@ public class ExprFlagOfWGRegion extends SimpleExpression { } } region.setFlag((SetFlag) flag, newSet); - } else { - Skript.error("Sorry, this flag type isn't supported yet! Flag type: SetFlag of type " + ((SetFlag) flag).getType().getName()); - } - } + */ } else { Skript.error("Sorry, this flag type isn't supported yet! Flag type: " + flag.getClass().getSimpleName()); } diff --git a/src/me/TheBukor/SkStuff/expressions/ExprMCIdToItem.java b/src/me/TheBukor/SkStuff/expressions/ExprMCIdToItem.java new file mode 100644 index 0000000..23fe158 --- /dev/null +++ b/src/me/TheBukor/SkStuff/expressions/ExprMCIdToItem.java @@ -0,0 +1,46 @@ +package me.TheBukor.SkStuff.expressions; + +import javax.annotation.Nullable; + +import org.bukkit.event.Event; +import org.bukkit.inventory.ItemStack; + +import ch.njol.skript.lang.Expression; +import ch.njol.skript.lang.SkriptParser.ParseResult; +import ch.njol.skript.lang.util.SimpleExpression; +import ch.njol.util.Kleenean; +import me.TheBukor.SkStuff.SkStuff; + +public class ExprMCIdToItem extends SimpleExpression { + private Expression mcId; + + @Override + public boolean isSingle() { + return true; + } + + @Override + public Class getReturnType() { + return ItemStack.class; + } + + @SuppressWarnings("unchecked") + @Override + public boolean init(Expression[] expr, int matchedPattern, Kleenean isDelayed, ParseResult parseResult) { + mcId = (Expression) expr[0]; + return true; + } + + @Override + public String toString(@Nullable Event e, boolean debug) { + return "item from minecraft id " + mcId.toString(e, debug); + } + + @Override + @Nullable + protected ItemStack[] get(Event e) { + String id = mcId.getSingle(e); + return new ItemStack[] { SkStuff.getNMSMethods().getItemFromMcId(id) }; + } + +} diff --git a/src/me/TheBukor/SkStuff/expressions/ExprSelectionArea.java b/src/me/TheBukor/SkStuff/expressions/ExprSelectionArea.java index bd6f5b1..8e90c61 100644 --- a/src/me/TheBukor/SkStuff/expressions/ExprSelectionArea.java +++ b/src/me/TheBukor/SkStuff/expressions/ExprSelectionArea.java @@ -1,5 +1,7 @@ package me.TheBukor.SkStuff.expressions; +import javax.annotation.Nullable; + import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.bukkit.event.Event; @@ -7,8 +9,6 @@ import org.bukkit.event.Event; import com.sk89q.worldedit.bukkit.WorldEditPlugin; import com.sk89q.worldedit.bukkit.selections.Selection; -import javax.annotation.Nullable; - import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.skript.lang.util.SimpleExpression; diff --git a/src/me/TheBukor/SkStuff/util/NMSInterface.java b/src/me/TheBukor/SkStuff/util/NMSInterface.java index 04c8c13..dcf265c 100644 --- a/src/me/TheBukor/SkStuff/util/NMSInterface.java +++ b/src/me/TheBukor/SkStuff/util/NMSInterface.java @@ -14,8 +14,6 @@ public interface NMSInterface { public Object parseRawNBT(String rawNBT); - public int getContentsId(Object nbtList); - public Object[] getContents(Object nbtList); public void addToList(Object nbtList, Object toAdd); @@ -57,4 +55,6 @@ public interface NMSInterface { public Object convertToNBT(String string); public String getMCId(ItemStack itemStack); + + public ItemStack getItemFromMcId(String mcId); } diff --git a/src/me/TheBukor/SkStuff/util/NMS_v1_7_R4.java b/src/me/TheBukor/SkStuff/util/NMS_v1_7_R4.java index 9576693..bbe17e0 100644 --- a/src/me/TheBukor/SkStuff/util/NMS_v1_7_R4.java +++ b/src/me/TheBukor/SkStuff/util/NMS_v1_7_R4.java @@ -6,7 +6,9 @@ import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; +import java.io.NotSerializableException; import java.io.OutputStream; +import java.io.StreamCorruptedException; import java.util.HashMap; import java.util.Iterator; import java.util.List; @@ -27,9 +29,11 @@ import ch.njol.skript.Skript; import ch.njol.skript.classes.Changer; import ch.njol.skript.classes.ClassInfo; import ch.njol.skript.classes.Parser; +import ch.njol.skript.classes.Serializer; import ch.njol.skript.lang.ParseContext; import ch.njol.skript.registrations.Classes; import ch.njol.util.coll.CollectionUtils; +import ch.njol.yggdrasil.Fields; import net.minecraft.server.v1_7_R4.Item; import net.minecraft.server.v1_7_R4.MojangsonParser; import net.minecraft.server.v1_7_R4.NBTBase; @@ -45,6 +49,7 @@ import net.minecraft.server.v1_7_R4.NBTTagShort; import net.minecraft.server.v1_7_R4.NBTTagString; import net.minecraft.server.v1_7_R4.TileEntity; import net.minecraft.server.v1_7_R4.World; +import net.minecraft.server.v1_9_R1.MinecraftKey; public class NMS_v1_7_R4 implements NMSInterface { @@ -89,14 +94,6 @@ public class NMS_v1_7_R4 implements NMSInterface { return parsedNBT; } - @Override - public int getContentsId(Object nbtList) { - if (nbtList instanceof NBTTagList) { - return ((NBTTagList) nbtList).d(); - } - return 0; - } - @Override public Object[] getContents(Object nbtList) { if (nbtList instanceof NBTTagList) { @@ -132,7 +129,7 @@ public class NMS_v1_7_R4 implements NMSInterface { @Override public void setIndex(Object nbtList, int index, Object toSet) { if (nbtList instanceof NBTTagList && index >= 0 && index < ((NBTTagList) nbtList).size()) { - int typeId = getContentsId(nbtList); + int typeId = ((NBTTagList) nbtList).d(); //Contents ID NBTBase toSetNBT = null; if (toSet instanceof NBTBase) toSetNBT = (NBTBase) toSet; @@ -149,8 +146,7 @@ public class NMS_v1_7_R4 implements NMSInterface { Skript.warning("Adding mismatching tag types to NBT list"); return; } - List actualList = null; - actualList = (List) ReflectionUtils.getField("list", NBTTagList.class, nbtList); + List actualList = (List) ReflectionUtils.getField("list", NBTTagList.class, nbtList); actualList.set(index, toSetNBT); } } @@ -190,22 +186,15 @@ public class NMS_v1_7_R4 implements NMSInterface { @Override @Nullable public Class[] acceptChange(ChangeMode mode) { - if (mode == ChangeMode.ADD || mode == ChangeMode.REMOVE || mode == ChangeMode.SET) { - return CollectionUtils.array(String[].class, NBTTagCompound[].class); + if (mode == ChangeMode.ADD || mode == ChangeMode.REMOVE) { + return CollectionUtils.array(String.class, NBTTagCompound.class); } return null; } @Override public void change(NBTTagCompound[] NBT, @Nullable Object[] delta, ChangeMode mode) { - if (mode == ChangeMode.SET) { - if (delta[0] instanceof NBTTagCompound) { - NBT[0] = (NBTTagCompound) delta[0]; - } else { - NBTTagCompound parsedNBT = parseRawNBT((String) delta[0]); - NBT[0] = parsedNBT; - } - } else if (mode == ChangeMode.ADD) { + if (mode == ChangeMode.ADD) { if (delta[0] instanceof String) { NBTTagCompound parsedNBT = parseRawNBT((String) delta[0]); addToCompound(NBT[0], parsedNBT); @@ -233,9 +222,6 @@ public class NMS_v1_7_R4 implements NMSInterface { if (rawNBT.startsWith("nbt:{") && rawNBT.endsWith("}")) { rawNBT.substring(4); NBTTagCompound NBT = parseRawNBT(rawNBT); - if (NBT.toString().equals("{}")) { - return null; - } return NBT; } return null; @@ -248,7 +234,7 @@ public class NMS_v1_7_R4 implements NMSInterface { @Override public String toVariableNameString(NBTTagCompound compound) { - return "nbt:" + compound.toString(); + return compound.toString(); } })); @@ -262,53 +248,22 @@ public class NMS_v1_7_R4 implements NMSInterface { @Override @Nullable public Class[] acceptChange(ChangeMode mode) { - if (mode == ChangeMode.ADD || mode == ChangeMode.SET || mode == ChangeMode.DELETE || mode == ChangeMode.RESET) { - return CollectionUtils.array(Float[].class, Double[].class, String[].class, NBTTagCompound[].class, Integer[].class, NBTTagList[].class); + if (mode == ChangeMode.ADD) { + return CollectionUtils.array(Byte.class, Short.class, Integer.class, Long.class, Float.class, Double.class, String.class, NBTBase.class); } return null; } @Override public void change(NBTTagList[] nbtList, @Nullable Object[] delta, ChangeMode mode) { - int typeId = 0; - if (delta instanceof Float[]) { - typeId = 5; - } else if (delta instanceof Double[]) { - typeId = 6; - } else if (delta instanceof String[]) { - typeId = 8; - } else if (delta instanceof NBTTagList[]) { - typeId = 9; - } else if (delta instanceof NBTTagCompound[]) { - typeId = 10; - } else if (delta instanceof Integer[]) { - typeId = 11; - } else { + if (delta.length == 0) return; - } - if (mode == ChangeMode.SET) { - if (typeId == 9) - nbtList[0] = (NBTTagList) delta[0]; - } else if (mode == ChangeMode.ADD) { - if (getContentsId(nbtList[0]) == typeId) { - if (typeId == 5) { - NBTTagFloat floatTag = new NBTTagFloat((float) delta[0]); - addToList(nbtList[0], floatTag); - } else if (typeId == 6) { - NBTTagDouble doubleTag = new NBTTagDouble((double) delta[0]); - addToList(nbtList[0], doubleTag); - } else if (typeId == 8) { - NBTTagString stringTag = new NBTTagString((String) delta [0]); - addToList(nbtList[0], stringTag); - } else if (typeId == 10) { - addToList(nbtList[0], delta[0]); - } else if (typeId == 11) { - NBTTagInt intTag = new NBTTagInt((int) delta[0]); - addToList(nbtList[0], intTag); - } - } - } else if (mode == ChangeMode.DELETE || mode == ChangeMode.RESET) { - nbtList[0] = new NBTTagList(); + if (delta[0] instanceof Number) { + addToList(nbtList, convertToNBT((Number) delta[0])); + } else if (delta[0] instanceof String) { + addToList(nbtList, convertToNBT((String) delta[0])); + } else if (delta[0] instanceof NBTBase) { + addToList(nbtList, delta[0]); } } }).parser(new Parser() { @@ -320,7 +275,12 @@ public class NMS_v1_7_R4 implements NMSInterface { @Override @Nullable - public NBTTagList parse(String ignored, ParseContext context) { + public NBTTagList parse(String listString, ParseContext context) { + if (listString.startsWith("[") && listString.endsWith("]")) { + NBTTagCompound tempNBT = parseRawNBT("{SkStuffIsCool:[0:" + listString.substring(1) + "}"); + NBTTagList parsedList = (NBTTagList) tempNBT.get("SkStuffIsCool"); + return parsedList; + } return null; } @@ -333,6 +293,45 @@ public class NMS_v1_7_R4 implements NMSInterface { public String toVariableNameString(NBTTagList nbtList) { return nbtList.toString(); } + }).serializer(new Serializer() { + + @Override + public Fields serialize(NBTTagList nbtList) throws NotSerializableException { + Fields f = new Fields(); + f.putObject("asString", nbtList.toString()); + return f; + } + + @Override + public void deserialize(NBTTagList nbtList, Fields f) throws StreamCorruptedException, NotSerializableException { + assert false; + } + + @Override + protected boolean canBeInstantiated() { + return false; + } + + @Override + protected NBTTagList deserialize(Fields fields) throws StreamCorruptedException, NotSerializableException { + String s = fields.getObject("asString", String.class); + NBTTagCompound tempNBT = parseRawNBT("{SkStuffIsCool:" + s + "}"); + NBTTagList nbtList = (NBTTagList) tempNBT.get("SkStuffIsCool"); + return nbtList; + } + + @Override + @Nullable + public NBTTagList deserialize(String s) { + NBTTagCompound tempNBT = parseRawNBT("{SkStuffIsCool:" + s + "}"); + NBTTagList nbtList = (NBTTagList) tempNBT.get("SkStuffIsCool"); + return nbtList; + } + + @Override + public boolean mustSyncDeserialization() { + return true; + } })); } @@ -357,13 +356,9 @@ public class NMS_v1_7_R4 implements NMSInterface { @Override public NBTTagCompound getItemNBT(ItemStack itemStack) { - if (itemStack.getType() == Material.AIR) - return null; - NBTTagCompound NBT = new NBTTagCompound(); - net.minecraft.server.v1_7_R4.ItemStack nmsItem = CraftItemStack.asNMSCopy(itemStack); - NBT = nmsItem.getTag(); - if (NBT == null || NBT.toString().equals("{}")) //Null or empty. + if (itemStack == null || itemStack.getType() == Material.AIR) return null; + NBTTagCompound NBT = CraftItemStack.asNMSCopy(itemStack).getTag(); return NBT; } @@ -390,17 +385,21 @@ public class NMS_v1_7_R4 implements NMSInterface { @Override public ItemStack getItemWithNBT(ItemStack itemStack, Object compound) { - if (compound instanceof NBTTagCompound) { - if (itemStack.getType() == Material.AIR || itemStack == null) + net.minecraft.server.v1_7_R4.ItemStack nmsItem = CraftItemStack.asNMSCopy(itemStack); + if (compound instanceof NBTTagCompound && itemStack != null) { + if (itemStack.getType() == Material.AIR) return null; - if (compound == null || compound.toString().equals("{}")) + if (((NBTTagCompound) compound).isEmpty()) return itemStack; - net.minecraft.server.v1_7_R4.ItemStack nmsItem = CraftItemStack.asNMSCopy(itemStack); nmsItem.setTag((NBTTagCompound) compound); - ItemStack newItem = CraftItemStack.asCraftMirror(nmsItem); + ItemStack newItem = CraftItemStack.asBukkitCopy(nmsItem); + return newItem; + } else if (compound == null) { + nmsItem.setTag(null); + ItemStack newItem = CraftItemStack.asBukkitCopy(nmsItem); return newItem; } - return null; + return itemStack; } @Override @@ -486,4 +485,11 @@ public class NMS_v1_7_R4 implements NMSInterface { String test = Item.REGISTRY.c(nmsItem.getItem()); return test; } + + @Override + public ItemStack getItemFromMcId(String mcId) { + MinecraftKey mcKey = new MinecraftKey(mcId); + Item nmsItem = (Item) Item.REGISTRY.get(mcKey); + return CraftItemStack.asNewCraftStack(nmsItem); + } } \ No newline at end of file diff --git a/src/me/TheBukor/SkStuff/util/NMS_v1_8_R1.java b/src/me/TheBukor/SkStuff/util/NMS_v1_8_R1.java index d144ab0..c192053 100644 --- a/src/me/TheBukor/SkStuff/util/NMS_v1_8_R1.java +++ b/src/me/TheBukor/SkStuff/util/NMS_v1_8_R1.java @@ -32,6 +32,8 @@ import ch.njol.util.coll.CollectionUtils; import ch.njol.yggdrasil.Fields; import net.minecraft.server.v1_8_R1.BlockPosition; import net.minecraft.server.v1_8_R1.EntityInsentient; +import net.minecraft.server.v1_8_R1.Item; +import net.minecraft.server.v1_8_R1.MinecraftKey; import net.minecraft.server.v1_8_R1.MojangsonParser; import net.minecraft.server.v1_8_R1.NBTBase; import net.minecraft.server.v1_8_R1.NBTCompressedStreamTools; @@ -48,8 +50,6 @@ import net.minecraft.server.v1_8_R1.PathfinderGoal; import net.minecraft.server.v1_8_R1.PathfinderGoalSelector; import net.minecraft.server.v1_8_R1.TileEntity; import net.minecraft.server.v1_8_R1.World; -import net.minecraft.server.v1_8_R1.Item; -import net.minecraft.server.v1_8_R1.MinecraftKey; public class NMS_v1_8_R1 implements NMSInterface { @@ -76,14 +76,6 @@ public class NMS_v1_8_R1 implements NMSInterface { return parsedNBT; } - @Override - public int getContentsId(Object nbtList) { - if (nbtList instanceof NBTTagList) { - return ((NBTTagList) nbtList).f(); - } - return 0; - } - @Override public Object[] getContents(Object nbtList) { if (nbtList instanceof NBTTagList) { @@ -143,7 +135,7 @@ public class NMS_v1_8_R1 implements NMSInterface { return ((NBTTagDouble) value).g(); //Double inside a NBTNumber } else if (value instanceof NBTTagString) { return ((NBTTagString) value).a_(); //String inside the NBTTagString - } else if (value instanceof NBTTagList || value instanceof NBTTagCompound) { + } else if (value instanceof NBTBase) { return value; //No need to convert anything, these are registered by the addon. } } @@ -201,26 +193,17 @@ public class NMS_v1_8_R1 implements NMSInterface { @Override @Nullable public Class[] acceptChange(ChangeMode mode) { - if (mode == ChangeMode.ADD || mode == ChangeMode.REMOVE || mode == ChangeMode.SET) { - return CollectionUtils.array(String[].class, NBTTagCompound[].class); + if (mode == ChangeMode.ADD || mode == ChangeMode.REMOVE) { + return CollectionUtils.array(String.class, NBTTagCompound.class); } return null; } @Override public void change(NBTTagCompound[] NBT, @Nullable Object[] delta, ChangeMode mode) { - if (mode == ChangeMode.SET) { - if (delta[0] instanceof NBTTagCompound) { - NBT[0] = (NBTTagCompound) delta[0]; - } else { - NBTTagCompound parsedNBT = null; - parsedNBT = parseRawNBT((String) delta[0]); - NBT[0] = parsedNBT; - } - } else if (mode == ChangeMode.ADD) { + if (mode == ChangeMode.ADD) { if (delta[0] instanceof String) { - NBTTagCompound parsedNBT = null; - parsedNBT = parseRawNBT((String) delta[0]); + NBTTagCompound parsedNBT = parseRawNBT((String) delta[0]); addToCompound(NBT[0], parsedNBT); } else { addToCompound(NBT[0], delta[0]); @@ -258,7 +241,7 @@ public class NMS_v1_8_R1 implements NMSInterface { @Override public String toVariableNameString(NBTTagCompound compound) { - return "nbt:" + compound.toString(); + return compound.toString(); } }).serializer(new Serializer() { @@ -282,16 +265,14 @@ public class NMS_v1_8_R1 implements NMSInterface { @Override protected NBTTagCompound deserialize(Fields fields) throws StreamCorruptedException, NotSerializableException { String s = fields.getObject("asString", String.class); - NBTTagCompound compound = null; - compound = parseRawNBT(s); + NBTTagCompound compound = parseRawNBT(s); return compound; } @Override @Nullable public NBTTagCompound deserialize(String s) { - NBTTagCompound compound = null; - compound = parseRawNBT(s); + NBTTagCompound compound = parseRawNBT(s); return compound; } @@ -312,49 +293,21 @@ public class NMS_v1_8_R1 implements NMSInterface { @Nullable public Class[] acceptChange(ChangeMode mode) { if (mode == ChangeMode.ADD || mode == ChangeMode.SET || mode == ChangeMode.DELETE || mode == ChangeMode.RESET) { - return CollectionUtils.array(Float[].class, Double[].class, String[].class, NBTTagCompound[].class, Integer[].class, NBTTagList[].class); + return CollectionUtils.array(Byte.class, Short.class, Integer.class, Long.class, Float.class, Double.class, String.class, NBTBase.class); } return null; } @Override public void change(NBTTagList[] nbtList, @Nullable Object[] delta, ChangeMode mode) { - int typeId = 0; - if (delta instanceof Byte[]) { - typeId = 1; - } else if (delta instanceof Short[]) { - typeId = 2; - } else if (delta instanceof Integer[]) { - typeId = 3; - } else if (delta instanceof Long[]) { - typeId = 4; - } else if (delta instanceof Float[]) { - typeId = 5; - } else if (delta instanceof Double[]) { - typeId = 6; - } else if (delta instanceof String[]) { - typeId = 8; - } else if (delta instanceof NBTTagList[]) { - typeId = 9; - } else if (delta instanceof NBTTagCompound[]) { - typeId = 10; - } else { + if (delta.length == 0) return; - } - if (mode == ChangeMode.SET) { - if (typeId == 9) - nbtList[0] = (NBTTagList) delta[0]; - } else if (mode == ChangeMode.ADD) { - if (getContentsId(nbtList[0]) == typeId) { - if (delta[0] instanceof Number) - addToList(nbtList, convertToNBT((Number) delta[0])); - else if (delta[0] instanceof String) - addToList(nbtList, convertToNBT((String) delta[0])); - else if (delta[0] instanceof NBTTagCompound || delta[0] instanceof NBTTagList) - addToList(nbtList, delta[0]); - } - } else if (mode == ChangeMode.DELETE || mode == ChangeMode.RESET) { - nbtList[0] = new NBTTagList(); + if (delta[0] instanceof Number) { + addToList(nbtList, convertToNBT((Number) delta[0])); + } else if (delta[0] instanceof String) { + addToList(nbtList, convertToNBT((String) delta[0])); + } else if (delta[0] instanceof NBTBase) { + addToList(nbtList, delta[0]); } } }).parser(new Parser() { @@ -368,8 +321,7 @@ public class NMS_v1_8_R1 implements NMSInterface { @Nullable public NBTTagList parse(String listString, ParseContext context) { if (listString.startsWith("[") && listString.endsWith("]")) { - NBTTagCompound tempNBT = null; - tempNBT = parseRawNBT("{SkStuffIsCool:[0:" + listString.substring(1) + "}"); + NBTTagCompound tempNBT = parseRawNBT("{SkStuffIsCool:[0:" + listString.substring(1) + "}"); NBTTagList parsedList = (NBTTagList) tempNBT.get("SkStuffIsCool"); return parsedList; } @@ -407,8 +359,7 @@ public class NMS_v1_8_R1 implements NMSInterface { @Override protected NBTTagList deserialize(Fields fields) throws StreamCorruptedException, NotSerializableException { String s = fields.getObject("asString", String.class); - NBTTagCompound tempNBT = null; - tempNBT = parseRawNBT("{SkStuffIsCool:" + s + "}"); + NBTTagCompound tempNBT = parseRawNBT("{SkStuffIsCool:" + s + "}"); NBTTagList nbtList = (NBTTagList) tempNBT.get("SkStuffIsCool"); return nbtList; } @@ -416,8 +367,7 @@ public class NMS_v1_8_R1 implements NMSInterface { @Override @Nullable public NBTTagList deserialize(String s) { - NBTTagCompound tempNBT = null; - tempNBT = parseRawNBT("{SkStuffIsCool:" + s + "}"); + NBTTagCompound tempNBT = parseRawNBT("{SkStuffIsCool:" + s + "}"); NBTTagList nbtList = (NBTTagList) tempNBT.get("SkStuffIsCool"); return nbtList; } @@ -450,10 +400,10 @@ public class NMS_v1_8_R1 implements NMSInterface { @Override public NBTTagCompound getItemNBT(ItemStack itemStack) { - if (itemStack.getType() == Material.AIR) + if (itemStack == null || itemStack.getType() == Material.AIR) return null; NBTTagCompound itemNBT = CraftItemStack.asNMSCopy(itemStack).getTag(); - if (String.valueOf(itemNBT).equals("{}")) + if (itemNBT.isEmpty()) itemNBT = null; return itemNBT; } @@ -569,4 +519,11 @@ public class NMS_v1_8_R1 implements NMSInterface { MinecraftKey mcKey = (MinecraftKey) Item.REGISTRY.c(nmsItem.getItem()); return mcKey.toString(); } + + @Override + public ItemStack getItemFromMcId(String mcId) { + MinecraftKey mcKey = new MinecraftKey(mcId); + Item nmsItem = (Item) Item.REGISTRY.get(mcKey); + return CraftItemStack.asNewCraftStack(nmsItem); + } } \ No newline at end of file diff --git a/src/me/TheBukor/SkStuff/util/NMS_v1_8_R2.java b/src/me/TheBukor/SkStuff/util/NMS_v1_8_R2.java index 430bcbd..093b7ac 100644 --- a/src/me/TheBukor/SkStuff/util/NMS_v1_8_R2.java +++ b/src/me/TheBukor/SkStuff/util/NMS_v1_8_R2.java @@ -33,6 +33,8 @@ import ch.njol.util.coll.CollectionUtils; import ch.njol.yggdrasil.Fields; import net.minecraft.server.v1_8_R2.BlockPosition; import net.minecraft.server.v1_8_R2.EntityInsentient; +import net.minecraft.server.v1_8_R2.Item; +import net.minecraft.server.v1_8_R2.MinecraftKey; import net.minecraft.server.v1_8_R2.MojangsonParseException; import net.minecraft.server.v1_8_R2.MojangsonParser; import net.minecraft.server.v1_8_R2.NBTBase; @@ -50,8 +52,6 @@ import net.minecraft.server.v1_8_R2.PathfinderGoal; import net.minecraft.server.v1_8_R2.PathfinderGoalSelector; import net.minecraft.server.v1_8_R2.TileEntity; import net.minecraft.server.v1_8_R2.World; -import net.minecraft.server.v1_8_R2.Item; -import net.minecraft.server.v1_8_R2.MinecraftKey; public class NMS_v1_8_R2 implements NMSInterface { @@ -78,18 +78,11 @@ public class NMS_v1_8_R2 implements NMSInterface { parsedNBT = MojangsonParser.parse(rawNBT); } catch (MojangsonParseException ex) { Skript.warning("Error when parsing NBT - " + ex.getMessage()); + return null; } return parsedNBT; } - @Override - public int getContentsId(Object nbtList) { - if (nbtList instanceof NBTTagList) { - return ((NBTTagList) nbtList).f(); - } - return 0; - } - @Override public Object[] getContents(Object nbtList) { if (nbtList instanceof NBTTagList) { @@ -207,26 +200,17 @@ public class NMS_v1_8_R2 implements NMSInterface { @Override @Nullable public Class[] acceptChange(ChangeMode mode) { - if (mode == ChangeMode.ADD || mode == ChangeMode.REMOVE || mode == ChangeMode.SET) { - return CollectionUtils.array(String[].class, NBTTagCompound[].class); + if (mode == ChangeMode.ADD || mode == ChangeMode.REMOVE) { + return CollectionUtils.array(String.class, NBTTagCompound.class); } return null; } @Override public void change(NBTTagCompound[] NBT, @Nullable Object[] delta, ChangeMode mode) { - if (mode == ChangeMode.SET) { - if (delta[0] instanceof NBTTagCompound) { - NBT[0] = (NBTTagCompound) delta[0]; - } else { - NBTTagCompound parsedNBT = null; - parsedNBT = parseRawNBT((String) delta[0]); - NBT[0] = parsedNBT; - } - } else if (mode == ChangeMode.ADD) { + if (mode == ChangeMode.ADD) { if (delta[0] instanceof String) { - NBTTagCompound parsedNBT = null; - parsedNBT = parseRawNBT((String) delta[0]); + NBTTagCompound parsedNBT = parseRawNBT((String) delta[0]); addToCompound(NBT[0], parsedNBT); } else { addToCompound(NBT[0], delta[0]); @@ -250,8 +234,7 @@ public class NMS_v1_8_R2 implements NMSInterface { @Nullable public NBTTagCompound parse(String rawNBT, ParseContext context) { if (rawNBT.startsWith("nbt:{") && rawNBT.endsWith("}")) { - NBTTagCompound NBT = null; - NBT = parseRawNBT(rawNBT.substring(4)); + NBTTagCompound NBT = parseRawNBT(rawNBT.substring(4)); return NBT; } return null; @@ -264,7 +247,7 @@ public class NMS_v1_8_R2 implements NMSInterface { @Override public String toVariableNameString(NBTTagCompound compound) { - return "nbt:" + compound.toString(); + return compound.toString(); } }).serializer(new Serializer() { @@ -288,16 +271,14 @@ public class NMS_v1_8_R2 implements NMSInterface { @Override protected NBTTagCompound deserialize(Fields fields) throws StreamCorruptedException, NotSerializableException { String s = fields.getObject("asString", String.class); - NBTTagCompound compound = null; - compound = parseRawNBT(s); + NBTTagCompound compound = parseRawNBT(s); return compound; } @Override @Nullable public NBTTagCompound deserialize(String s) { - NBTTagCompound compound = null; - compound = parseRawNBT(s); + NBTTagCompound compound = parseRawNBT(s); return compound; } @@ -317,50 +298,22 @@ public class NMS_v1_8_R2 implements NMSInterface { @Override @Nullable public Class[] acceptChange(ChangeMode mode) { - if (mode == ChangeMode.ADD || mode == ChangeMode.SET || mode == ChangeMode.DELETE || mode == ChangeMode.RESET) { - return CollectionUtils.array(Float[].class, Double[].class, String[].class, NBTTagCompound[].class, Integer[].class, NBTTagList[].class); + if (mode == ChangeMode.ADD) { + return CollectionUtils.array(Byte.class, Short.class, Integer.class, Long.class, Float.class, Double.class, String.class, NBTBase.class); } return null; } @Override public void change(NBTTagList[] nbtList, @Nullable Object[] delta, ChangeMode mode) { - int typeId = 0; - if (delta instanceof Byte[]) { - typeId = 1; - } else if (delta instanceof Short[]) { - typeId = 2; - } else if (delta instanceof Integer[]) { - typeId = 3; - } else if (delta instanceof Long[]) { - typeId = 4; - } else if (delta instanceof Float[]) { - typeId = 5; - } else if (delta instanceof Double[]) { - typeId = 6; - } else if (delta instanceof String[]) { - typeId = 8; - } else if (delta instanceof NBTTagList[]) { - typeId = 9; - } else if (delta instanceof NBTTagCompound[]) { - typeId = 10; - } else { + if (delta.length == 0) return; - } - if (mode == ChangeMode.SET) { - if (typeId == 9) - nbtList[0] = (NBTTagList) delta[0]; - } else if (mode == ChangeMode.ADD) { - if (getContentsId(nbtList[0]) == typeId) { - if (delta[0] instanceof Number) - addToList(nbtList, convertToNBT((Number) delta[0])); - else if (delta[0] instanceof String) - addToList(nbtList, convertToNBT((String) delta[0])); - else if (delta[0] instanceof NBTTagCompound || delta[0] instanceof NBTTagList) - addToList(nbtList, delta[0]); - } - } else if (mode == ChangeMode.DELETE || mode == ChangeMode.RESET) { - nbtList[0] = new NBTTagList(); + if (delta[0] instanceof Number) { + addToList(nbtList, convertToNBT((Number) delta[0])); + } else if (delta[0] instanceof String) { + addToList(nbtList, convertToNBT((String) delta[0])); + } else if (delta[0] instanceof NBTBase) { + addToList(nbtList, delta[0]); } } }).parser(new Parser() { @@ -374,8 +327,7 @@ public class NMS_v1_8_R2 implements NMSInterface { @Nullable public NBTTagList parse(String listString, ParseContext context) { if (listString.startsWith("[") && listString.endsWith("]")) { - NBTTagCompound tempNBT = null; - tempNBT = parseRawNBT("{SkStuffIsCool:[0:" + listString.substring(1) + "}"); + NBTTagCompound tempNBT = parseRawNBT("{SkStuffIsCool:[0:" + listString.substring(1) + "}"); NBTTagList parsedList = (NBTTagList) tempNBT.get("SkStuffIsCool"); return parsedList; } @@ -413,8 +365,7 @@ public class NMS_v1_8_R2 implements NMSInterface { @Override protected NBTTagList deserialize(Fields fields) throws StreamCorruptedException, NotSerializableException { String s = fields.getObject("asString", String.class); - NBTTagCompound tempNBT = null; - tempNBT = parseRawNBT("{SkStuffIsCool:" + s + "}"); + NBTTagCompound tempNBT = parseRawNBT("{SkStuffIsCool:" + s + "}"); NBTTagList nbtList = (NBTTagList) tempNBT.get("SkStuffIsCool"); return nbtList; } @@ -422,8 +373,7 @@ public class NMS_v1_8_R2 implements NMSInterface { @Override @Nullable public NBTTagList deserialize(String s) { - NBTTagCompound tempNBT = null; - tempNBT = parseRawNBT("{SkStuffIsCool:" + s + "}"); + NBTTagCompound tempNBT = parseRawNBT("{SkStuffIsCool:" + s + "}"); NBTTagList nbtList = (NBTTagList) tempNBT.get("SkStuffIsCool"); return nbtList; } @@ -456,10 +406,10 @@ public class NMS_v1_8_R2 implements NMSInterface { @Override public NBTTagCompound getItemNBT(ItemStack itemStack) { - if (itemStack.getType() == Material.AIR) + if (itemStack == null || itemStack.getType() == Material.AIR) return null; NBTTagCompound itemNBT = CraftItemStack.asNMSCopy(itemStack).getTag(); - if (String.valueOf(itemNBT).equals("{}")) + if (itemNBT.isEmpty()) itemNBT = null; return itemNBT; } @@ -575,4 +525,11 @@ public class NMS_v1_8_R2 implements NMSInterface { MinecraftKey mcKey = Item.REGISTRY.c(nmsItem.getItem()); return mcKey.toString(); } + + @Override + public ItemStack getItemFromMcId(String mcId) { + MinecraftKey mcKey = new MinecraftKey(mcId); + Item nmsItem = (Item) Item.REGISTRY.get(mcKey); + return CraftItemStack.asNewCraftStack(nmsItem); + } } \ No newline at end of file diff --git a/src/me/TheBukor/SkStuff/util/NMS_v1_8_R3.java b/src/me/TheBukor/SkStuff/util/NMS_v1_8_R3.java index ced3578..c1ea172 100644 --- a/src/me/TheBukor/SkStuff/util/NMS_v1_8_R3.java +++ b/src/me/TheBukor/SkStuff/util/NMS_v1_8_R3.java @@ -33,6 +33,8 @@ import ch.njol.util.coll.CollectionUtils; import ch.njol.yggdrasil.Fields; import net.minecraft.server.v1_8_R3.BlockPosition; import net.minecraft.server.v1_8_R3.EntityInsentient; +import net.minecraft.server.v1_8_R3.Item; +import net.minecraft.server.v1_8_R3.MinecraftKey; import net.minecraft.server.v1_8_R3.MojangsonParseException; import net.minecraft.server.v1_8_R3.MojangsonParser; import net.minecraft.server.v1_8_R3.NBTBase; @@ -50,8 +52,6 @@ import net.minecraft.server.v1_8_R3.PathfinderGoal; import net.minecraft.server.v1_8_R3.PathfinderGoalSelector; import net.minecraft.server.v1_8_R3.TileEntity; import net.minecraft.server.v1_8_R3.World; -import net.minecraft.server.v1_8_R3.Item; -import net.minecraft.server.v1_8_R3.MinecraftKey; public class NMS_v1_8_R3 implements NMSInterface { @@ -78,18 +78,11 @@ public class NMS_v1_8_R3 implements NMSInterface { parsedNBT = MojangsonParser.parse(rawNBT); } catch (MojangsonParseException ex) { Skript.warning("Error when parsing NBT - " + ex.getMessage()); + return null; } return parsedNBT; } - @Override - public int getContentsId(Object nbtList) { - if (nbtList instanceof NBTTagList) { - return ((NBTTagList) nbtList).f(); - } - return 0; - } - @Override public Object[] getContents(Object nbtList) { if (nbtList instanceof NBTTagList) { @@ -149,8 +142,8 @@ public class NMS_v1_8_R3 implements NMSInterface { return ((NBTTagDouble) value).g(); //Double inside a NBTNumber } else if (value instanceof NBTTagString) { return ((NBTTagString) value).a_(); //String inside the NBTTagString - } else if (value instanceof NBTTagList || value instanceof NBTTagCompound) { - return value; //No need to convert anything, these are registered by the addon. + } else if (value instanceof NBTBase) { + return value; //No need to convert this. } } return null; @@ -207,26 +200,17 @@ public class NMS_v1_8_R3 implements NMSInterface { @Override @Nullable public Class[] acceptChange(ChangeMode mode) { - if (mode == ChangeMode.ADD || mode == ChangeMode.REMOVE || mode == ChangeMode.SET) { - return CollectionUtils.array(String[].class, NBTTagCompound[].class); + if (mode == ChangeMode.ADD || mode == ChangeMode.REMOVE) { + return CollectionUtils.array(String.class, NBTTagCompound.class); } return null; } @Override public void change(NBTTagCompound[] NBT, @Nullable Object[] delta, ChangeMode mode) { - if (mode == ChangeMode.SET) { - if (delta[0] instanceof NBTTagCompound) { - NBT[0] = (NBTTagCompound) delta[0]; - } else { - NBTTagCompound parsedNBT = null; - parsedNBT = parseRawNBT((String) delta[0]); - NBT[0] = parsedNBT; - } - } else if (mode == ChangeMode.ADD) { + if (mode == ChangeMode.ADD) { if (delta[0] instanceof String) { - NBTTagCompound parsedNBT = null; - parsedNBT = parseRawNBT((String) delta[0]); + NBTTagCompound parsedNBT = parseRawNBT((String) delta[0]); addToCompound(NBT[0], parsedNBT); } else { addToCompound(NBT[0], delta[0]); @@ -250,8 +234,7 @@ public class NMS_v1_8_R3 implements NMSInterface { @Nullable public NBTTagCompound parse(String rawNBT, ParseContext context) { if (rawNBT.startsWith("nbt:{") && rawNBT.endsWith("}")) { - NBTTagCompound NBT = null; - NBT = parseRawNBT(rawNBT.substring(4)); + NBTTagCompound NBT = parseRawNBT(rawNBT.substring(4)); return NBT; } return null; @@ -264,7 +247,7 @@ public class NMS_v1_8_R3 implements NMSInterface { @Override public String toVariableNameString(NBTTagCompound compound) { - return "nbt:" + compound.toString(); + return compound.toString(); } }).serializer(new Serializer() { @@ -288,16 +271,14 @@ public class NMS_v1_8_R3 implements NMSInterface { @Override protected NBTTagCompound deserialize(Fields fields) throws StreamCorruptedException, NotSerializableException { String s = fields.getObject("asString", String.class); - NBTTagCompound compound = null; - compound = parseRawNBT(s); + NBTTagCompound compound = parseRawNBT(s); return compound; } @Override @Nullable public NBTTagCompound deserialize(String s) { - NBTTagCompound compound = null; - compound = parseRawNBT(s); + NBTTagCompound compound = parseRawNBT(s); return compound; } @@ -317,50 +298,22 @@ public class NMS_v1_8_R3 implements NMSInterface { @Override @Nullable public Class[] acceptChange(ChangeMode mode) { - if (mode == ChangeMode.ADD || mode == ChangeMode.SET || mode == ChangeMode.DELETE || mode == ChangeMode.RESET) { - return CollectionUtils.array(Float[].class, Double[].class, String[].class, NBTTagCompound[].class, Integer[].class, NBTTagList[].class); + if (mode == ChangeMode.ADD) { + return CollectionUtils.array(Byte.class, Short.class, Integer.class, Long.class, Float.class, Double.class, String.class, NBTTagCompound.class, NBTTagList.class); } return null; } @Override public void change(NBTTagList[] nbtList, @Nullable Object[] delta, ChangeMode mode) { - int typeId = 0; - if (delta instanceof Byte[]) { - typeId = 1; - } else if (delta instanceof Short[]) { - typeId = 2; - } else if (delta instanceof Integer[]) { - typeId = 3; - } else if (delta instanceof Long[]) { - typeId = 4; - } else if (delta instanceof Float[]) { - typeId = 5; - } else if (delta instanceof Double[]) { - typeId = 6; - } else if (delta instanceof String[]) { - typeId = 8; - } else if (delta instanceof NBTTagList[]) { - typeId = 9; - } else if (delta instanceof NBTTagCompound[]) { - typeId = 10; - } else { + if (delta.length == 0) return; - } - if (mode == ChangeMode.SET) { - if (typeId == 9) - nbtList[0] = (NBTTagList) delta[0]; - } else if (mode == ChangeMode.ADD) { - if (getContentsId(nbtList[0]) == typeId) { - if (delta[0] instanceof Number) - addToList(nbtList, convertToNBT((Number) delta[0])); - else if (delta[0] instanceof String) - addToList(nbtList, convertToNBT((String) delta[0])); - else if (delta[0] instanceof NBTTagCompound || delta[0] instanceof NBTTagList) - addToList(nbtList, delta[0]); - } - } else if (mode == ChangeMode.DELETE || mode == ChangeMode.RESET) { - nbtList[0] = new NBTTagList(); + if (delta[0] instanceof Number) { + addToList(nbtList, convertToNBT((Number) delta[0])); + } else if (delta[0] instanceof String) { + addToList(nbtList, convertToNBT((String) delta[0])); + } else if (delta[0] instanceof NBTBase) { + addToList(nbtList, delta[0]); } } }).parser(new Parser() { @@ -374,8 +327,7 @@ public class NMS_v1_8_R3 implements NMSInterface { @Nullable public NBTTagList parse(String listString, ParseContext context) { if (listString.startsWith("[") && listString.endsWith("]")) { - NBTTagCompound tempNBT = null; - tempNBT = parseRawNBT("{SkStuffIsCool:[0:" + listString.substring(1) + "}"); + NBTTagCompound tempNBT = parseRawNBT("{SkStuffIsCool:[0:" + listString.substring(1) + "}"); NBTTagList parsedList = (NBTTagList) tempNBT.get("SkStuffIsCool"); return parsedList; } @@ -413,8 +365,7 @@ public class NMS_v1_8_R3 implements NMSInterface { @Override protected NBTTagList deserialize(Fields fields) throws StreamCorruptedException, NotSerializableException { String s = fields.getObject("asString", String.class); - NBTTagCompound tempNBT = null; - tempNBT = parseRawNBT("{SkStuffIsCool:" + s + "}"); + NBTTagCompound tempNBT = parseRawNBT("{SkStuffIsCool:" + s + "}"); NBTTagList nbtList = (NBTTagList) tempNBT.get("SkStuffIsCool"); return nbtList; } @@ -422,8 +373,7 @@ public class NMS_v1_8_R3 implements NMSInterface { @Override @Nullable public NBTTagList deserialize(String s) { - NBTTagCompound tempNBT = null; - tempNBT = parseRawNBT("{SkStuffIsCool:" + s + "}"); + NBTTagCompound tempNBT = parseRawNBT("{SkStuffIsCool:" + s + "}"); NBTTagList nbtList = (NBTTagList) tempNBT.get("SkStuffIsCool"); return nbtList; } @@ -456,11 +406,9 @@ public class NMS_v1_8_R3 implements NMSInterface { @Override public NBTTagCompound getItemNBT(ItemStack itemStack) { - if (itemStack.getType() == Material.AIR) + if (itemStack == null || itemStack.getType() == Material.AIR) return null; NBTTagCompound itemNBT = CraftItemStack.asNMSCopy(itemStack).getTag(); - if (String.valueOf(itemNBT).equals("{}")) - itemNBT = null; return itemNBT; } @@ -548,6 +496,7 @@ public class NMS_v1_8_R3 implements NMSInterface { } } + @Override public NBTBase convertToNBT(Number number) { if (number instanceof Byte) { return new NBTTagByte((byte) number); @@ -575,4 +524,11 @@ public class NMS_v1_8_R3 implements NMSInterface { MinecraftKey mcKey = Item.REGISTRY.c(nmsItem.getItem()); return mcKey.toString(); } + + @Override + public ItemStack getItemFromMcId(String mcId) { + MinecraftKey mcKey = new MinecraftKey(mcId); + Item nmsItem = (Item) Item.REGISTRY.get(mcKey); + return CraftItemStack.asNewCraftStack(nmsItem); + } } \ No newline at end of file diff --git a/src/me/TheBukor/SkStuff/util/NMS_v1_9_R1.java b/src/me/TheBukor/SkStuff/util/NMS_v1_9_R1.java index efe3b8a..269ed3f 100644 --- a/src/me/TheBukor/SkStuff/util/NMS_v1_9_R1.java +++ b/src/me/TheBukor/SkStuff/util/NMS_v1_9_R1.java @@ -79,18 +79,11 @@ public class NMS_v1_9_R1 implements NMSInterface { parsedNBT = MojangsonParser.parse(rawNBT); } catch (MojangsonParseException ex) { Skript.warning("Error when parsing NBT - " + ex.getMessage()); + return null; } return parsedNBT; } - @Override - public int getContentsId(Object nbtList) { - if (nbtList instanceof NBTTagList) { - return ((NBTTagList) nbtList).d(); - } - return 0; - } - @Override public Object[] getContents(Object nbtList) { if (nbtList instanceof NBTTagList) { @@ -150,8 +143,8 @@ public class NMS_v1_9_R1 implements NMSInterface { return ((NBTTagDouble) value).g(); //Double inside a NBTNumber } else if (value instanceof NBTTagString) { return ((NBTTagString) value).a_(); //String inside the NBTTagString - } else if (value instanceof NBTTagList || value instanceof NBTTagCompound) { - return value; //No need to convert anything, these are registered by the addon. + } else if (value instanceof NBTBase) { + return value; //No need to convert this } } return null; @@ -218,8 +211,7 @@ public class NMS_v1_9_R1 implements NMSInterface { public void change(NBTTagCompound[] NBT, @Nullable Object[] delta, ChangeMode mode) { if (mode == ChangeMode.ADD) { if (delta[0] instanceof String) { - NBTTagCompound parsedNBT = null; - parsedNBT = parseRawNBT((String) delta[0]); + NBTTagCompound parsedNBT = parseRawNBT((String) delta[0]); addToCompound(NBT[0], parsedNBT); } else { addToCompound(NBT[0], delta[0]); @@ -243,8 +235,7 @@ public class NMS_v1_9_R1 implements NMSInterface { @Nullable public NBTTagCompound parse(String rawNBT, ParseContext context) { if (rawNBT.startsWith("nbt:{") && rawNBT.endsWith("}")) { - NBTTagCompound NBT = null; - NBT = parseRawNBT(rawNBT.substring(4)); + NBTTagCompound NBT = parseRawNBT(rawNBT.substring(4)); return NBT; } return null; @@ -257,7 +248,7 @@ public class NMS_v1_9_R1 implements NMSInterface { @Override public String toVariableNameString(NBTTagCompound compound) { - return "nbt:" + compound.toString(); + return compound.toString(); } }).serializer(new Serializer() { @@ -281,16 +272,14 @@ public class NMS_v1_9_R1 implements NMSInterface { @Override protected NBTTagCompound deserialize(Fields fields) throws StreamCorruptedException, NotSerializableException { String s = fields.getObject("asString", String.class); - NBTTagCompound compound = null; - compound = parseRawNBT(s); + NBTTagCompound compound = parseRawNBT(s); return compound; } @Override @Nullable public NBTTagCompound deserialize(String s) { - NBTTagCompound compound = null; - compound = parseRawNBT(s); + NBTTagCompound compound = parseRawNBT(s); return compound; } @@ -320,14 +309,12 @@ public class NMS_v1_9_R1 implements NMSInterface { public void change(NBTTagList[] nbtList, @Nullable Object[] delta, ChangeMode mode) { if (delta.length == 0) return; - if (mode == ChangeMode.ADD) { - if (delta[0] instanceof Number) { - addToList(nbtList[0], convertToNBT((Number) delta[0])); - } else if (delta[0] instanceof String) { - addToList(nbtList[0], convertToNBT((String) delta[0])); - } else if (delta[0] instanceof NBTBase) { - addToList(nbtList[0], delta[0]); - } + if (delta[0] instanceof Number) { + addToList(nbtList[0], convertToNBT((Number) delta[0])); + } else if (delta[0] instanceof String) { + addToList(nbtList[0], convertToNBT((String) delta[0])); + } else if (delta[0] instanceof NBTBase) { + addToList(nbtList[0], delta[0]); } } }).parser(new Parser() { @@ -341,8 +328,7 @@ public class NMS_v1_9_R1 implements NMSInterface { @Nullable public NBTTagList parse(String listString, ParseContext context) { if (listString.startsWith("[") && listString.endsWith("]")) { - NBTTagCompound tempNBT = null; - tempNBT = parseRawNBT("{SkStuffIsCool:[0:" + listString.substring(1) + "}"); + NBTTagCompound tempNBT = parseRawNBT("{SkStuffIsCool:[0:" + listString.substring(1) + "}"); NBTTagList parsedList = (NBTTagList) tempNBT.get("SkStuffIsCool"); return parsedList; } @@ -380,8 +366,7 @@ public class NMS_v1_9_R1 implements NMSInterface { @Override protected NBTTagList deserialize(Fields fields) throws StreamCorruptedException, NotSerializableException { String s = fields.getObject("asString", String.class); - NBTTagCompound tempNBT = null; - tempNBT = parseRawNBT("{SkStuffIsCool:" + s + "}"); + NBTTagCompound tempNBT = parseRawNBT("{SkStuffIsCool:" + s + "}"); NBTTagList nbtList = (NBTTagList) tempNBT.get("SkStuffIsCool"); return nbtList; } @@ -389,8 +374,7 @@ public class NMS_v1_9_R1 implements NMSInterface { @Override @Nullable public NBTTagList deserialize(String s) { - NBTTagCompound tempNBT = null; - tempNBT = parseRawNBT("{SkStuffIsCool:" + s + "}"); + NBTTagCompound tempNBT = parseRawNBT("{SkStuffIsCool:" + s + "}"); NBTTagList nbtList = (NBTTagList) tempNBT.get("SkStuffIsCool"); return nbtList; } @@ -426,7 +410,7 @@ public class NMS_v1_9_R1 implements NMSInterface { if (itemStack == null || itemStack.getType() == Material.AIR) return null; NBTTagCompound itemNBT = CraftItemStack.asNMSCopy(itemStack).getTag(); - if (String.valueOf(itemNBT).equals("{}")) + if (itemNBT.isEmpty()) itemNBT = null; return itemNBT; } @@ -545,4 +529,11 @@ public class NMS_v1_9_R1 implements NMSInterface { MinecraftKey mcKey = Item.REGISTRY.b(nmsItem.getItem()); return mcKey.toString(); } + + @Override + public ItemStack getItemFromMcId(String mcId) { + MinecraftKey mcKey = new MinecraftKey(mcId); + Item nmsItem = (Item) Item.REGISTRY.get(mcKey); + return CraftItemStack.asNewCraftStack(nmsItem); + } } \ No newline at end of file