diff --git a/MMOItems-API/src/main/java/net/Indyuce/mmoitems/stat/history/LegacyStatHistoryFormat.java b/MMOItems-API/src/main/java/net/Indyuce/mmoitems/stat/history/LegacyStatHistoryFormat.java index 86f3287e..3f045eb1 100644 --- a/MMOItems-API/src/main/java/net/Indyuce/mmoitems/stat/history/LegacyStatHistoryFormat.java +++ b/MMOItems-API/src/main/java/net/Indyuce/mmoitems/stat/history/LegacyStatHistoryFormat.java @@ -1,20 +1,23 @@ package net.Indyuce.mmoitems.stat.history; import io.lumine.mythic.lib.api.item.ItemTag; +import io.lumine.mythic.lib.api.item.NBTCompound; +import io.lumine.mythic.lib.api.item.NBTItem; import io.lumine.mythic.lib.gson.JsonElement; import io.lumine.mythic.lib.gson.JsonObject; import io.lumine.mythic.lib.util.annotation.BackwardsCompatibility; import net.Indyuce.mmoitems.MMOItems; import net.Indyuce.mmoitems.api.item.mmoitem.MMOItem; +import net.Indyuce.mmoitems.api.item.mmoitem.VolatileMMOItem; import net.Indyuce.mmoitems.stat.component.StatComponent; import net.Indyuce.mmoitems.stat.type.ItemStat; import net.Indyuce.mmoitems.util.MMOUtils; +import org.bukkit.Material; +import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; -import java.util.ArrayList; -import java.util.Map; -import java.util.Set; -import java.util.UUID; +import java.util.*; public class LegacyStatHistoryFormat { @@ -78,20 +81,18 @@ public class LegacyStatHistoryFormat { } // To know the stat it was - StatComponent component; + StatComponent sData; if (ogStatsEncode != null) { // Decompress tags ArrayList ogDecoded = ItemTag.decompressTags(ogStatsEncode.getAsJsonArray()); - - - sData = stat.getLoadedNBT(ogDecoded); + sData = proxy(stat, ogDecoded); // OG Not included (because its clear) } else { // Just generate as clear - sData = stat.getClearStatData(); + sData = stat.generateEmptyComponent(); } // Validate non null @@ -99,6 +100,7 @@ public class LegacyStatHistoryFormat { return null; } + // Can now generate stat history StatHistory sHistory = new StatHistory(iSource, stat, sData); @@ -136,7 +138,7 @@ public class LegacyStatHistoryFormat { ArrayList tags = ItemTag.decompressTags(compressedTags.getAsJsonArray()); // Generate data - StatData gemData = stat.getLoadedNBT(tags); + StatComponent gemData = proxy(stat, tags); // Validated? if (gemData != null) { @@ -164,7 +166,7 @@ public class LegacyStatHistoryFormat { ArrayList tags = ItemTag.decompressTags(elmnt.getAsJsonArray()); // Generate data - StatData exData = stat.getLoadedNBT(tags); + StatComponent exData = proxy(stat, tags); // Validated? if (exData != null) { @@ -211,7 +213,7 @@ public class LegacyStatHistoryFormat { ArrayList tags = ItemTag.decompressTags(compressedTags.getAsJsonArray()); // Generate data - StatData modData = stat.getLoadedNBT(tags); + StatComponent modData = proxy(stat, tags); // Validated? if (modData != null) { @@ -229,4 +231,113 @@ public class LegacyStatHistoryFormat { return sHistory; } + @Nullable + private static StatComponent proxy(ItemStat itemStat, ArrayList tags) { + ItemTag found = ItemTag.getTagAtPath(itemStat.getNBTPath(), tags); + if (found == null) return null; + + return itemStat.read(new VolatileMMOItem(new FakeNBTItem(found))); + } + + public static class FakeNBTItem extends NBTItem { + private final String key; + private final Object value; + + public FakeNBTItem(ItemTag itemTag) { + super(null); + + this.key = itemTag.getPath(); + this.value = itemTag.getValue(); + } + + @Override + public ItemStack getItem() { + throw new RuntimeException("not supported"); + } + + @Override + public Object get(String s) { + return s.equals(key) ? value : null; + } + + @Override + public String getString(String s) { + return s.equals(key) ? (String) value : null; + } + + @Override + public boolean hasTag(String s) { + return s.equals(key); + } + + @Override + public boolean getBoolean(String s) { + return s.equals(key) ? (Boolean) value : false; + } + + @Override + public double getDouble(String s) { + return s.equals(key) ? (Double) value : 0; + } + + @Override + public int getInteger(String s) { + return s.equals(key) ? (Integer) value : 0; + } + + @Override + public NBTItem setInteger(String s, int i) { + throw new RuntimeException("not supported"); + } + + @Override + public NBTItem setDouble(String s, double v) { + throw new RuntimeException("not supported"); + } + + @Override + public NBTItem setString(String s, @NotNull String s1) { + throw new RuntimeException("not supported"); + } + + @Override + public NBTItem setBoolean(String s, boolean b) { + throw new RuntimeException("not supported"); + } + + @Override + public NBTCompound getNBTCompound(String s) { + throw new RuntimeException("not supported"); + } + + @Override + public NBTItem addTag(List list) { + throw new RuntimeException("not supported"); + } + + @Override + public NBTItem removeTag(String... strings) { + throw new RuntimeException("not supported"); + } + + @Override + public Set getTags() { + throw new RuntimeException("not supported"); + } + + @Override + public ItemStack toItem() { + throw new RuntimeException("not supported"); + } + + @Override + public int getTypeId(String s) { + throw new RuntimeException("not supported"); + } + + @Override + public void setCanMine(Collection collection) { + throw new RuntimeException("not supported"); + } + } } diff --git a/MMOItems-API/src/main/java/net/Indyuce/mmoitems/stat/nbt/LegacyStatHistoryTagContainer.java b/MMOItems-API/src/main/java/net/Indyuce/mmoitems/stat/nbt/LegacyStatHistoryTagContainer.java new file mode 100644 index 00000000..b56f2217 --- /dev/null +++ b/MMOItems-API/src/main/java/net/Indyuce/mmoitems/stat/nbt/LegacyStatHistoryTagContainer.java @@ -0,0 +1,70 @@ +package net.Indyuce.mmoitems.stat.nbt; + +import io.lumine.mythic.lib.api.item.ItemTag; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.List; + +@Deprecated +public class LegacyStatHistoryTagContainer implements TagContainer { + private final List tags; + + public LegacyStatHistoryTagContainer(List tags) { + this.tags = tags; + } + + @Override + public void remove(@NotNull String... keys) { + throw new RuntimeException("Not supported"); + } + + @Nullable + @Override + public String getString(@NotNull String key) { + for (ItemTag tag : tags) + if (tag.getPath().equals(key)) return String.valueOf(tag.getValue()); + return null; + } + + @Override + public double getDouble(@NotNull String key) { + for (ItemTag tag : tags) + if (tag.getPath().equals(key)) return (Double) tag.getValue(); + return 0; + } + + @Override + public int getInteger(@NotNull String key) { + for (ItemTag tag : tags) + if (tag.getPath().equals(key)) return (Integer) tag.getValue(); + return 0; + } + + @Override + public boolean getBoolean(@NotNull String key) { + for (ItemTag tag : tags) + if (tag.getPath().equals(key)) return (Boolean) tag.getValue(); + return false; + } + + @Override + public void setString(@NotNull String key, String value) { + throw new RuntimeException("Not supported"); + } + + @Override + public void setDouble(@NotNull String key, double value) { + throw new RuntimeException("Not supported"); + } + + @Override + public void setInteger(@NotNull String key, int value) { + throw new RuntimeException("Not supported"); + } + + @Override + public void setBoolean(@NotNull String key, boolean value) { + throw new RuntimeException("Not supported"); + } +} diff --git a/MMOItems-API/src/main/java/net/Indyuce/mmoitems/stat/nbt/StatHistoryTagContainer.java b/MMOItems-API/src/main/java/net/Indyuce/mmoitems/stat/nbt/StatHistoryTagContainer.java deleted file mode 100644 index 1190bd5a..00000000 --- a/MMOItems-API/src/main/java/net/Indyuce/mmoitems/stat/nbt/StatHistoryTagContainer.java +++ /dev/null @@ -1,55 +0,0 @@ -package net.Indyuce.mmoitems.stat.nbt; - -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -public class StatHistoryTagContainer implements TagContainer { - - // TODO - - @Override - public void remove(@NotNull String... keys) { - - } - - @Nullable - @Override - public String getString(@NotNull String key) { - return ""; - } - - @Override - public double getDouble(@NotNull String key) { - return 0; - } - - @Override - public int getInteger(@NotNull String key) { - return 0; - } - - @Override - public boolean getBoolean(@NotNull String key) { - return false; - } - - @Override - public void setString(@NotNull String key, String value) { - - } - - @Override - public void setDouble(@NotNull String key, double value) { - - } - - @Override - public void setInteger(@NotNull String key, int value) { - - } - - @Override - public void setBoolean(@NotNull String key, boolean value) { - - } -} diff --git a/MMOItems-Dist/src/main/java/net/Indyuce/mmoitems/listener/reforging/RFGKeepExternalSH.java b/MMOItems-Dist/src/main/java/net/Indyuce/mmoitems/listener/reforging/RFGKeepExternalSH.java index e0aa89f9..9e5b8b0e 100644 --- a/MMOItems-Dist/src/main/java/net/Indyuce/mmoitems/listener/reforging/RFGKeepExternalSH.java +++ b/MMOItems-Dist/src/main/java/net/Indyuce/mmoitems/listener/reforging/RFGKeepExternalSH.java @@ -2,6 +2,7 @@ package net.Indyuce.mmoitems.listener.reforging; import net.Indyuce.mmoitems.ItemStats; import net.Indyuce.mmoitems.api.event.MMOItemReforgeEvent; +import net.Indyuce.mmoitems.stat.component.StatComponent; import net.Indyuce.mmoitems.stat.data.type.StatData; import net.Indyuce.mmoitems.stat.history.StatHistory; import org.bukkit.event.EventHandler; @@ -21,7 +22,7 @@ public class RFGKeepExternalSH implements Listener { //RFG// MMOItems.log("§8Reforge §4EFG§7 Keeping EXSH"); // Through all the old histories - for (StatHistory oldHist : event.getOldMMOItem().getStatHistories()) { + for (StatHistory oldHist : event.getOldMMOItem().getStatHistories()) { // Skip enchantments tho if (oldHist.getItemStat() == ItemStats.ENCHANTS) { continue; } @@ -30,7 +31,7 @@ public class RFGKeepExternalSH implements Listener { StatHistory newHist = event.getNewMMOItem().computeStatHistory(oldHist.getItemStat()); // Through all EXSH - for (StatData exSH : oldHist.getExternalData()) { + for (StatComponent exSH : oldHist.getExternalData()) { // Add to the new one newHist.registerExternalData(exSH); diff --git a/MMOItems-Dist/src/main/java/net/Indyuce/mmoitems/listener/reforging/RFGKeepLore.java b/MMOItems-Dist/src/main/java/net/Indyuce/mmoitems/listener/reforging/RFGKeepLore.java index 2f19a6c4..b6bb1b91 100644 --- a/MMOItems-Dist/src/main/java/net/Indyuce/mmoitems/listener/reforging/RFGKeepLore.java +++ b/MMOItems-Dist/src/main/java/net/Indyuce/mmoitems/listener/reforging/RFGKeepLore.java @@ -4,7 +4,6 @@ import net.Indyuce.mmoitems.ItemStats; import net.Indyuce.mmoitems.api.event.MMOItemReforgeEvent; import net.Indyuce.mmoitems.stat.component.builtin.ArrayComponent; import net.Indyuce.mmoitems.stat.component.builtin.StringComponent; -import net.Indyuce.mmoitems.stat.data.StringListData; import net.Indyuce.mmoitems.stat.history.StatHistory; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; @@ -15,13 +14,13 @@ import java.util.List; /** * Transfers the lore from the old MMOItem to the new one. - * + *

* This operation is intended to allow refreshing the lore, * but keeping external things too. * * @author Gunging */ -public class RFGKeepLore implements Listener { +public class RFGKeepLore implements Listener { @EventHandler public void onReforge(MMOItemReforgeEvent event) { @@ -39,11 +38,11 @@ public class RFGKeepLore implements Listener { if (extraLore.isEmpty()) return; // All right set it as the original in the Stat History - StatHistory hist = event.getNewMMOItem().computeStatHistory(ItemStats.LORE); + StatHistory> hist = event.getNewMMOItem().computeStatHistory(ItemStats.LORE); // UUH just add it to the original I guess bruh - StringListData original = (StringListData) hist.getOriginalData(); - for (String str : extraLore) { original.getList().add(str); } + ArrayComponent original = hist.getOriginalData(); + for (String str : extraLore) original.asList().add(new StringComponent(str)); // Put it there hist.setOriginalData(original); diff --git a/MMOItems-Dist/src/main/java/net/Indyuce/mmoitems/listener/reforging/RFGKeepModifications.java b/MMOItems-Dist/src/main/java/net/Indyuce/mmoitems/listener/reforging/RFGKeepModifications.java index 5b583ade..12cb92e9 100644 --- a/MMOItems-Dist/src/main/java/net/Indyuce/mmoitems/listener/reforging/RFGKeepModifications.java +++ b/MMOItems-Dist/src/main/java/net/Indyuce/mmoitems/listener/reforging/RFGKeepModifications.java @@ -1,8 +1,7 @@ package net.Indyuce.mmoitems.listener.reforging; import net.Indyuce.mmoitems.api.event.MMOItemReforgeEvent; -import net.Indyuce.mmoitems.stat.data.type.Mergeable; -import net.Indyuce.mmoitems.stat.data.type.StatData; +import net.Indyuce.mmoitems.stat.component.StatComponent; import net.Indyuce.mmoitems.stat.history.StatHistory; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; @@ -29,7 +28,7 @@ public class RFGKeepModifications implements Listener { } // Through all the old histories - for (StatHistory oldHist : event.getOldMMOItem().getStatHistories()) { + for (StatHistory oldHist : event.getOldMMOItem().getStatHistories()) { // Get newer StatHistory newHist = event.getNewMMOItem().computeStatHistory(oldHist.getItemStat()); @@ -38,13 +37,13 @@ public class RFGKeepModifications implements Listener { for (UUID mod : oldHist.getAllModifiers()) { // Get that data - StatData modData = oldHist.getModifiersBonus(mod); + StatComponent modData = oldHist.getModifiersBonus(mod); // Snooze if (modData == null) { continue; } // Apply it - newHist.registerModifierBonus(mod, ((Mergeable) modData).clone()); + newHist.registerModifierBonus(mod, modData.clone()); } } } diff --git a/MMOItems-Dist/src/main/java/net/Indyuce/mmoitems/listener/reforging/RFGKeepRNG.java b/MMOItems-Dist/src/main/java/net/Indyuce/mmoitems/listener/reforging/RFGKeepRNG.java index eabf147b..c5c0aec1 100644 --- a/MMOItems-Dist/src/main/java/net/Indyuce/mmoitems/listener/reforging/RFGKeepRNG.java +++ b/MMOItems-Dist/src/main/java/net/Indyuce/mmoitems/listener/reforging/RFGKeepRNG.java @@ -40,6 +40,8 @@ public class RFGKeepRNG implements Listener { //RFG// MMOItems.log("§8Reforge §4EFG§7 Keeping old RNG Rolls"); + /* + TODO reroll event.getOldMMOItem().getStats() .forEach(stat -> { @@ -52,7 +54,7 @@ public class RFGKeepRNG implements Listener { * Decide if this data is too far from RNG to * preserve its rolls, even if it should be * preserving the rolls. - */ + * final StatHistory hist = event.getOldMMOItem().computeStatHistory( stat); final StatData keptData = ((UpdatableRandomStatData) source).reroll(stat, hist.getOriginalData(), event.getReforger().getGenerationItemLevel()); @@ -65,5 +67,6 @@ public class RFGKeepRNG implements Listener { // Replace original data of the new one with the roll from the old one clear.setOriginalData(keptData); }); + */ } }