diff --git a/src/main/java/noppes/npcs/scripted/entity/ScriptDBCPlayer.java b/src/main/java/noppes/npcs/scripted/entity/ScriptDBCPlayer.java index d64f4bcc3..c7762f77a 100644 --- a/src/main/java/noppes/npcs/scripted/entity/ScriptDBCPlayer.java +++ b/src/main/java/noppes/npcs/scripted/entity/ScriptDBCPlayer.java @@ -1,8 +1,5 @@ package noppes.npcs.scripted.entity; -import net.minecraft.entity.Entity; -import net.minecraft.entity.IProjectile; -import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; @@ -12,9 +9,6 @@ import noppes.npcs.api.item.IItemStack; import noppes.npcs.scripted.CustomNPCsException; import noppes.npcs.scripted.NpcAPI; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; - public class ScriptDBCPlayer extends ScriptPlayer implements IDBCPlayer { public T player; @@ -522,8 +516,9 @@ public class ScriptDBCPlayer extends ScriptPlayer i return player.getEntityData().getCompoundTag("PlayerPersisted").getByte("jrmcState2"); } - public double getFormMastery(String formTree, byte form) { + public double getRacialFormMastery(byte form) { try { + String formTree = this.getRacialTreeName(); if (player.getEntityData().getCompoundTag("PlayerPersisted").hasKey("jrmcFormMastery" + formTree)) { String[] formMasteries = player.getEntityData().getCompoundTag("PlayerPersisted"). getString("jrmcFormMastery" + formTree).split(";"); @@ -534,8 +529,9 @@ public class ScriptDBCPlayer extends ScriptPlayer i return 0.0D; } - public void setFormMastery(String formTree, byte form, double value) { + public void setRacialFormMastery(byte form, double value) { try { + String formTree = this.getRacialTreeName(); if (player.getEntityData().getCompoundTag("PlayerPersisted").hasKey("jrmcFormMastery" + formTree)) { String[] formMasteries = player.getEntityData().getCompoundTag("PlayerPersisted"). getString("jrmcFormMastery" + formTree).split(";"); @@ -558,8 +554,9 @@ public class ScriptDBCPlayer extends ScriptPlayer i } catch (Exception ignored) {} } - public void addFormMastery(String formTree, byte form, double value) { + public void addRacialFormMastery(byte form, double value) { try { + String formTree = this.getRacialTreeName(); if (player.getEntityData().getCompoundTag("PlayerPersisted").hasKey("jrmcFormMastery" + formTree)) { String[] formMasteries = player.getEntityData().getCompoundTag("PlayerPersisted"). getString("jrmcFormMastery" + formTree).split(";"); @@ -583,6 +580,107 @@ public class ScriptDBCPlayer extends ScriptPlayer i } catch (Exception ignored) {} } + private String getRacialTreeName() { + switch (this.getRace()) { + case 0: + return "Racial_Human"; + case 1: + return "Racial_Saiyan"; + case 2: + return "Racial_Half-Saiyan"; + case 3: + return "Racial_Namekian"; + case 4: + return "Racial_Arcosian"; + case 5: + return "Racial_Majin"; + } + return "Racial_Human"; + } + + public double getOtherFormMastery(String formName) { + try { + if (player.getEntityData().getCompoundTag("PlayerPersisted").hasKey("jrmcFormMasteryNonRacial")) { + String masteryData = player.getEntityData().getCompoundTag("PlayerPersisted"). + getString("jrmcFormMasteryNonRacial"); + if (!masteryData.contains(formName)) { + return 0.0D; + } + + String[] formMasteries = masteryData.split(";"); + for (String masteryString : formMasteries) { + if (masteryString.split(",")[0].equals(formName)) { + return Double.parseDouble(masteryString.split(",")[1]); + } + } + } + } catch (Exception ignored) {} + return 0.0D; + } + + public void setOtherFormMastery(String formName, double value) { + try { + if (player.getEntityData().getCompoundTag("PlayerPersisted").hasKey("jrmcFormMasteryNonRacial")) { + String masteryData = player.getEntityData().getCompoundTag("PlayerPersisted"). + getString("jrmcFormMasteryNonRacial"); + if (!masteryData.contains(formName)) { + return; + } + String[] formMasteries = masteryData.split(";"); + + for (int i = 0; i < formMasteries.length; i++) { + String name = formMasteries[i].split(",")[0]; + if (name.equals(formName)) { + formMasteries[i] = name + "," + value; + } + } + + StringBuilder masteryString = new StringBuilder(); + for (int i = 0; i < formMasteries.length; i++) { + masteryString.append(formMasteries[i]); + if (i < formMasteries.length - 1) { + masteryString.append(';'); + } + } + + player.getEntityData().getCompoundTag("PlayerPersisted"). + setString("jrmcFormMasteryNonRacial", String.valueOf(masteryString)); + } + } catch (Exception ignored) {} + } + + public void addOtherFormMastery(String formName, double value) { + try { + if (player.getEntityData().getCompoundTag("PlayerPersisted").hasKey("jrmcFormMasteryNonRacial")) { + String masteryData = player.getEntityData().getCompoundTag("PlayerPersisted"). + getString("jrmcFormMasteryNonRacial"); + if (!masteryData.contains(formName)) { + return; + } + String[] formMasteries = masteryData.split(";"); + + for (int i = 0; i < formMasteries.length; i++) { + String name = formMasteries[i].split(",")[0]; + if (name.equals(formName)) { + double newMastery = Double.parseDouble(formMasteries[i].split(",")[1]) + value; + formMasteries[i] = name + "," + newMastery; + } + } + + StringBuilder masteryString = new StringBuilder(); + for (int i = 0; i < formMasteries.length; i++) { + masteryString.append(formMasteries[i]); + if (i < formMasteries.length - 1) { + masteryString.append(';'); + } + } + + player.getEntityData().getCompoundTag("PlayerPersisted"). + setString("jrmcFormMasteryNonRacial", String.valueOf(masteryString)); + } + } catch (Exception ignored) {} + } + public void setPowerPoints(int points){ player.getEntityData().getCompoundTag("PlayerPersisted").setInteger("jrmcArcRsrv",points); } diff --git a/src/main/java/noppes/npcs/util/NBTJsonUtil.java b/src/main/java/noppes/npcs/util/NBTJsonUtil.java index d7176cf9d..b6d25a333 100644 --- a/src/main/java/noppes/npcs/util/NBTJsonUtil.java +++ b/src/main/java/noppes/npcs/util/NBTJsonUtil.java @@ -24,8 +24,8 @@ public class NBTJsonUtil { json = json.trim(); JsonFile file = new JsonFile(json); if(!json.startsWith("{") || !json.endsWith("}")) - throw new JsonException("Not properly incapsulated between { }", file); - + throw new JsonException("Not properly encapsulated between { }", file); + NBTTagCompound compound = new NBTTagCompound(); FillCompound(compound, file); return compound; @@ -36,7 +36,7 @@ public class NBTJsonUtil { json.cut(1); if(json.startsWith("}")) return; - int index = json.indexOf(":"); + int index = json.findObjectColonIndex(); if(index < 1) throw new JsonException("Expected key after ," ,json); @@ -85,6 +85,16 @@ public class NBTJsonUtil { if(!json.startsWith("]")){ throw new JsonException("Expected ]", json); } + + if (json.startsWith("]b")) { + json.cut(2); + byte[] arr = new byte[list.tagCount()]; + for(int i = 0; list.tagCount() > 0 ; i++){ + arr[i] = ((NBTTagInt)list.removeTag(0)).func_150290_f(); + } + return new NBTTagByteArray(arr); + } + json.cut(1); if(list.func_150303_d() == 3){ @@ -156,7 +166,19 @@ public class NBTJsonUtil { private static JsonLine ReadTag(String name, NBTBase base, List list){ if(!name.isEmpty()) name = "\"" + name + "\": "; - if(base.getId() == 8){//NBTTagString + if (base.getId() == 7) {//NBTTagByteArray + list.add(new JsonLine(name + "[")); + byte[] bytes = ((NBTTagByteArray) base).func_150292_c(); + + for(int i = 0; i < (bytes.length-1); i++) { + list.add(new JsonLine(String.format("%s,", bytes[i]))); + } + if (bytes.length > 0) { + list.add(new JsonLine(String.format("%s", bytes[bytes.length-1]))); + } + list.add(new JsonLine("]b")); + } + else if(base.getId() == 8){//NBTTagString String data = ((NBTTagString)base).func_150285_a_(); data = data.replace("\"", "\\\""); //replace " with \" list.add(new JsonLine(name + "\"" + data + "\"")); @@ -225,7 +247,8 @@ public class NBTJsonUtil { public boolean reduceTab(){ int length = line.length(); return length == 1 && (line.endsWith("}") || line.endsWith("]")) - || length == 2 && (line.endsWith("},") ||line.endsWith("],")); + || length == 2 && (line.endsWith("},") ||line.endsWith("],") || line.endsWith("]b")) + || length == 3 && (line.endsWith("]b,")); } public boolean increaseTab(){ @@ -283,6 +306,24 @@ public class NBTJsonUtil { return "Line: " + lines.length + ", Pos: " + pos + ", Text: " + line; } + public int findObjectColonIndex() { + int trueQuotesAmount = 0; + + for (int i = 0; i < text.length(); i++) { + if (text.charAt(i) == '"') { + if (i > 1 && text.charAt(i-1) != '\\' || i == 0) { + trueQuotesAmount++; + } + } + + if (trueQuotesAmount == 2) { + return text.indexOf(":", i); + } + } + + return -1; + } + public boolean startsWith(String... ss) { for(String s : ss) if(text.startsWith(s))