From 45f006b7bf897cd725d00197ca0dcebb83d99846 Mon Sep 17 00:00:00 2001 From: "georgii.imeshkenov" Date: Thu, 2 Feb 2023 21:24:34 +0300 Subject: [PATCH 1/4] de- and serialization of NBTTagByteArray from json based on post-array "b" suffix --- .../java/noppes/npcs/util/NBTJsonUtil.java | 49 +++++++++++++++++-- 1 file changed, 45 insertions(+), 4 deletions(-) diff --git a/src/main/java/noppes/npcs/util/NBTJsonUtil.java b/src/main/java/noppes/npcs/util/NBTJsonUtil.java index d7176cf9d..c347009c6 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; @@ -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)) From 112305f0597c2eb36c9d835680cec92d7f0ee188 Mon Sep 17 00:00:00 2001 From: "georgii.imeshkenov" Date: Fri, 3 Feb 2023 00:23:22 +0300 Subject: [PATCH 2/4] wow looks like this string was not committed --- src/main/java/noppes/npcs/util/NBTJsonUtil.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/noppes/npcs/util/NBTJsonUtil.java b/src/main/java/noppes/npcs/util/NBTJsonUtil.java index c347009c6..b6d25a333 100644 --- a/src/main/java/noppes/npcs/util/NBTJsonUtil.java +++ b/src/main/java/noppes/npcs/util/NBTJsonUtil.java @@ -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); From ed5cfad00d9c47f3894894f3441ea51d575ce650 Mon Sep 17 00:00:00 2001 From: "Luis C.M" <42545778+c0508383@users.noreply.github.com> Date: Sat, 20 May 2023 15:00:58 -0500 Subject: [PATCH 3/4] IDBCPlayer: -Changed mastery functions to use a boolean for racial or non-racial forms. --- src/api | 2 +- .../npcs/scripted/entity/ScriptDBCPlayer.java | 29 +++++++++++++++++-- 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/src/api b/src/api index 5685f9a0f..c55c42c4f 160000 --- a/src/api +++ b/src/api @@ -1 +1 @@ -Subproject commit 5685f9a0f856879edc7e1f722da2fee98be187e2 +Subproject commit c55c42c4f23a60cf0cc09cee8e5f885b800fa877 diff --git a/src/main/java/noppes/npcs/scripted/entity/ScriptDBCPlayer.java b/src/main/java/noppes/npcs/scripted/entity/ScriptDBCPlayer.java index d64f4bcc3..432e90aa5 100644 --- a/src/main/java/noppes/npcs/scripted/entity/ScriptDBCPlayer.java +++ b/src/main/java/noppes/npcs/scripted/entity/ScriptDBCPlayer.java @@ -522,8 +522,9 @@ public class ScriptDBCPlayer extends ScriptPlayer i return player.getEntityData().getCompoundTag("PlayerPersisted").getByte("jrmcState2"); } - public double getFormMastery(String formTree, byte form) { + public double getFormMastery(boolean racialForm, byte form) { try { + String formTree = this.getFormTreeName(racialForm); if (player.getEntityData().getCompoundTag("PlayerPersisted").hasKey("jrmcFormMastery" + formTree)) { String[] formMasteries = player.getEntityData().getCompoundTag("PlayerPersisted"). getString("jrmcFormMastery" + formTree).split(";"); @@ -534,8 +535,9 @@ public class ScriptDBCPlayer extends ScriptPlayer i return 0.0D; } - public void setFormMastery(String formTree, byte form, double value) { + public void setFormMastery(boolean racialForm, byte form, double value) { try { + String formTree = this.getFormTreeName(racialForm); if (player.getEntityData().getCompoundTag("PlayerPersisted").hasKey("jrmcFormMastery" + formTree)) { String[] formMasteries = player.getEntityData().getCompoundTag("PlayerPersisted"). getString("jrmcFormMastery" + formTree).split(";"); @@ -558,8 +560,9 @@ public class ScriptDBCPlayer extends ScriptPlayer i } catch (Exception ignored) {} } - public void addFormMastery(String formTree, byte form, double value) { + public void addFormMastery(boolean racialForm, byte form, double value) { try { + String formTree = this.getFormTreeName(racialForm); if (player.getEntityData().getCompoundTag("PlayerPersisted").hasKey("jrmcFormMastery" + formTree)) { String[] formMasteries = player.getEntityData().getCompoundTag("PlayerPersisted"). getString("jrmcFormMastery" + formTree).split(";"); @@ -583,6 +586,26 @@ public class ScriptDBCPlayer extends ScriptPlayer i } catch (Exception ignored) {} } + private String getFormTreeName(boolean racialForm) { + if (racialForm) { + 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 "NonRacial"; + } + public void setPowerPoints(int points){ player.getEntityData().getCompoundTag("PlayerPersisted").setInteger("jrmcArcRsrv",points); } From 8df94aaf67cab9d4f85b7c9b9c25258636c17530 Mon Sep 17 00:00:00 2001 From: "Luis C.M" <42545778+c0508383@users.noreply.github.com> Date: Sat, 20 May 2023 16:13:15 -0500 Subject: [PATCH 4/4] IDBCPlayer: -Created separate mastery functions for racial and non-racial forms. --- .../npcs/scripted/entity/ScriptDBCPlayer.java | 133 ++++++++++++++---- 1 file changed, 104 insertions(+), 29 deletions(-) diff --git a/src/main/java/noppes/npcs/scripted/entity/ScriptDBCPlayer.java b/src/main/java/noppes/npcs/scripted/entity/ScriptDBCPlayer.java index 432e90aa5..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,9 +516,9 @@ public class ScriptDBCPlayer extends ScriptPlayer i return player.getEntityData().getCompoundTag("PlayerPersisted").getByte("jrmcState2"); } - public double getFormMastery(boolean racialForm, byte form) { + public double getRacialFormMastery(byte form) { try { - String formTree = this.getFormTreeName(racialForm); + String formTree = this.getRacialTreeName(); if (player.getEntityData().getCompoundTag("PlayerPersisted").hasKey("jrmcFormMastery" + formTree)) { String[] formMasteries = player.getEntityData().getCompoundTag("PlayerPersisted"). getString("jrmcFormMastery" + formTree).split(";"); @@ -535,9 +529,9 @@ public class ScriptDBCPlayer extends ScriptPlayer i return 0.0D; } - public void setFormMastery(boolean racialForm, byte form, double value) { + public void setRacialFormMastery(byte form, double value) { try { - String formTree = this.getFormTreeName(racialForm); + String formTree = this.getRacialTreeName(); if (player.getEntityData().getCompoundTag("PlayerPersisted").hasKey("jrmcFormMastery" + formTree)) { String[] formMasteries = player.getEntityData().getCompoundTag("PlayerPersisted"). getString("jrmcFormMastery" + formTree).split(";"); @@ -560,9 +554,9 @@ public class ScriptDBCPlayer extends ScriptPlayer i } catch (Exception ignored) {} } - public void addFormMastery(boolean racialForm, byte form, double value) { + public void addRacialFormMastery(byte form, double value) { try { - String formTree = this.getFormTreeName(racialForm); + String formTree = this.getRacialTreeName(); if (player.getEntityData().getCompoundTag("PlayerPersisted").hasKey("jrmcFormMastery" + formTree)) { String[] formMasteries = player.getEntityData().getCompoundTag("PlayerPersisted"). getString("jrmcFormMastery" + formTree).split(";"); @@ -586,24 +580,105 @@ public class ScriptDBCPlayer extends ScriptPlayer i } catch (Exception ignored) {} } - private String getFormTreeName(boolean racialForm) { - if (racialForm) { - 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"; - } + 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 "NonRacial"; + 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){