Finally compiles again

This commit is contained in:
Jules 2025-01-18 03:01:09 +01:00
parent 905a506333
commit bcc63f42cb
7 changed files with 209 additions and 81 deletions

View File

@ -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<ItemTag> 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<ItemTag> 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<ItemTag> 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<ItemTag> 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<ItemTag> 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<ItemTag> list) {
throw new RuntimeException("not supported");
}
@Override
public NBTItem removeTag(String... strings) {
throw new RuntimeException("not supported");
}
@Override
public Set<String> 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<Material> collection) {
throw new RuntimeException("not supported");
}
}
}

View File

@ -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<ItemTag> tags;
public LegacyStatHistoryTagContainer(List<ItemTag> 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");
}
}

View File

@ -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) {
}
}

View File

@ -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);

View File

@ -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.
*
* <p>
* 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<ArrayComponent<StringComponent>> 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<StringComponent> original = hist.getOriginalData();
for (String str : extraLore) original.asList().add(new StringComponent(str));
// Put it there
hist.setOriginalData(original);

View File

@ -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());
}
}
}

View File

@ -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);
});
*/
}
}