Fixed elements

This commit is contained in:
Indyuce 2022-08-17 19:35:18 +02:00
parent d716fddbd4
commit 13dec22e5f
6 changed files with 108 additions and 21 deletions

View File

@ -38,7 +38,6 @@ import net.Indyuce.mmoitems.comp.rpg.McMMOHook;
import net.Indyuce.mmoitems.comp.rpg.RPGHandler; import net.Indyuce.mmoitems.comp.rpg.RPGHandler;
import net.Indyuce.mmoitems.gui.PluginInventory; import net.Indyuce.mmoitems.gui.PluginInventory;
import net.Indyuce.mmoitems.gui.edition.recipe.RecipeBrowserGUI; import net.Indyuce.mmoitems.gui.edition.recipe.RecipeBrowserGUI;
import net.Indyuce.mmoitems.gui.listener.GuiListener;
import net.Indyuce.mmoitems.listener.*; import net.Indyuce.mmoitems.listener.*;
import net.Indyuce.mmoitems.manager.*; import net.Indyuce.mmoitems.manager.*;
import org.apache.commons.lang.Validate; import org.apache.commons.lang.Validate;
@ -79,6 +78,7 @@ public class MMOItems extends JavaPlugin {
private final PlayerInventoryHandler inventory = new PlayerInventoryHandler(); private final PlayerInventoryHandler inventory = new PlayerInventoryHandler();
private final List<StringInputParser> stringInputParsers = new ArrayList<>(); private final List<StringInputParser> stringInputParsers = new ArrayList<>();
private final List<EnchantPlugin<? extends Enchantment>> enchantPlugins = new ArrayList<>(); private final List<EnchantPlugin<? extends Enchantment>> enchantPlugins = new ArrayList<>();
private final StatManager statManager = new StatManager();
private DropTableManager dropTableManager; private DropTableManager dropTableManager;
private WorldGenManager worldGenManager; private WorldGenManager worldGenManager;
@ -86,7 +86,6 @@ public class MMOItems extends JavaPlugin {
private ConfigManager configManager; private ConfigManager configManager;
private BlockManager blockManager; private BlockManager blockManager;
private TierManager tierManager; private TierManager tierManager;
private StatManager statManager;
private SetManager setManager; private SetManager setManager;
private PlaceholderParser placeholderParser = new DefaultPlaceholderParser(); private PlaceholderParser placeholderParser = new DefaultPlaceholderParser();
@ -119,11 +118,7 @@ public class MMOItems extends JavaPlugin {
saveDefaultConfig(); saveDefaultConfig();
configManager = new ConfigManager(); configManager = new ConfigManager();
/* statManager.load();
* Stat manager must be initialized before MMOCore compatibility
* initializes so that MMOCore can register its stats
*/
statManager = new StatManager();
typeManager.reload(); typeManager.reload();
templateManager.preloadTemplates(); templateManager.preloadTemplates();
@ -187,6 +182,7 @@ public class MMOItems extends JavaPlugin {
dropTableManager = new DropTableManager(); dropTableManager = new DropTableManager();
worldGenManager = new WorldGenManager(); worldGenManager = new WorldGenManager();
blockManager = new BlockManager(); blockManager = new BlockManager();
MMOItems.plugin.getStats().reload(false);
if (Bukkit.getPluginManager().getPlugin("Vault") != null) vaultSupport = new VaultSupport(); if (Bukkit.getPluginManager().getPlugin("Vault") != null) vaultSupport = new VaultSupport();

View File

@ -64,6 +64,7 @@ public class ReloadCommandTreeNode extends CommandTreeNode {
MMOItems.plugin.getLayouts().reload(); MMOItems.plugin.getLayouts().reload();
MMOItems.plugin.getFormats().reload(); MMOItems.plugin.getFormats().reload();
MMOItems.plugin.getTemplates().reload(); MMOItems.plugin.getTemplates().reload();
MMOItems.plugin.getStats().reload(true);
sender.sendMessage(MMOItems.plugin.getPrefix() + MMOItems.plugin.getName() + " " sender.sendMessage(MMOItems.plugin.getPrefix() + MMOItems.plugin.getName() + " "
+ MMOItems.plugin.getDescription().getVersion() + " reloaded."); + MMOItems.plugin.getDescription().getVersion() + " reloaded.");
sender.sendMessage(MMOItems.plugin.getPrefix() + "- " + ChatColor.RED sender.sendMessage(MMOItems.plugin.getPrefix() + "- " + ChatColor.RED

View File

@ -1,9 +1,12 @@
package net.Indyuce.mmoitems.manager; package net.Indyuce.mmoitems.manager;
import io.lumine.mythic.lib.MythicLib;
import io.lumine.mythic.lib.element.Element;
import net.Indyuce.mmoitems.ItemStats; import net.Indyuce.mmoitems.ItemStats;
import net.Indyuce.mmoitems.MMOItems; import net.Indyuce.mmoitems.MMOItems;
import net.Indyuce.mmoitems.api.Type; import net.Indyuce.mmoitems.api.Type;
import net.Indyuce.mmoitems.stat.type.*; import net.Indyuce.mmoitems.stat.type.*;
import net.Indyuce.mmoitems.util.ElementStatType;
import java.lang.reflect.Field; import java.lang.reflect.Field;
import java.lang.reflect.Modifier; import java.lang.reflect.Modifier;
@ -27,16 +30,37 @@ public class StatManager {
* Load default stats using java reflection, get all public static final * Load default stats using java reflection, get all public static final
* fields in the ItemStat and register them as stat instances * fields in the ItemStat and register them as stat instances
*/ */
public StatManager() { public void load() {
for (Field field : ItemStats.class.getFields()) for (Field field : ItemStats.class.getFields())
try { try {
if (Modifier.isStatic(field.getModifiers()) && Modifier.isFinal(field.getModifiers()) && field.get(null) instanceof ItemStat) if (Modifier.isStatic(field.getModifiers()) && Modifier.isFinal(field.getModifiers()) && field.get(null) instanceof ItemStat)
register((ItemStat) field.get(null)); register((ItemStat) field.get(null));
} catch (IllegalArgumentException | IllegalAccessException exception) { } catch (IllegalArgumentException | IllegalAccessException exception) {
MMOItems.plugin.getLogger().log(Level.WARNING, "Couldn't register stat called " + field.getName()); MMOItems.plugin.getLogger().log(Level.WARNING, "Couldn't register stat called '" + field.getName() + "': " + exception.getMessage());
} }
} }
/**
* @see FictiveNumericStat
* @deprecated
*/
@Deprecated
public void reload(boolean cleanFirst) {
// Clean fictive numeric stats before
if (cleanFirst)
for (Iterator<DoubleStat> ite = numeric.iterator(); ite.hasNext(); ) {
DoubleStat stat = ite.next();
if (stat instanceof FictiveNumericStat)
ite.remove();
}
// Register elemental stats
for (ElementStatType type : ElementStatType.values())
for (Element element : MythicLib.plugin.getElements().getAll())
numeric.add(new FictiveNumericStat(element, type));
}
public Collection<ItemStat> getAll() { public Collection<ItemStat> getAll() {
return stats.values(); return stats.values();
} }

View File

@ -132,7 +132,7 @@ public class Elements extends ItemStat<RandomElementListData, ElementListData> i
// Create Array // Create Array
ArrayList<ItemTag> ret = new ArrayList<>(); ArrayList<ItemTag> ret = new ArrayList<>();
for (Pair<Element, ElementStatType> pair : data.getKeys()) for (Pair<Element, ElementStatType> pair : data.getKeys())
ret.add(new ItemTag("MMOITEMS_" + pair, data.getStat(pair.getKey(), pair.getValue()))); ret.add(new ItemTag("MMOITEMS_" + pair.getValue().getConcatenatedTagPath(pair.getKey()), data.getStat(pair.getKey(), pair.getValue())));
// Thats it // Thats it
return ret; return ret;
@ -145,7 +145,7 @@ public class Elements extends ItemStat<RandomElementListData, ElementListData> i
ArrayList<ItemTag> relevantTags = new ArrayList<>(); ArrayList<ItemTag> relevantTags = new ArrayList<>();
for (Element element : Element.values()) for (Element element : Element.values())
for (ElementStatType statType : ElementStatType.values()) { for (ElementStatType statType : ElementStatType.values()) {
final String path = "MMOITEMS_" + element.getName() + "_" + statType.name(); final String path = "MMOITEMS_" + statType.getConcatenatedTagPath(element);
if (mmoitem.getNBT().hasTag(path)) if (mmoitem.getNBT().hasTag(path))
relevantTags.add(ItemTag.getTagAtPath(path, mmoitem.getNBT(), SupportedNBTTagValues.DOUBLE)); relevantTags.add(ItemTag.getTagAtPath(path, mmoitem.getNBT(), SupportedNBTTagValues.DOUBLE));
} }
@ -165,7 +165,6 @@ public class Elements extends ItemStat<RandomElementListData, ElementListData> i
// Create new // Create new
ElementListData elements = new ElementListData(); ElementListData elements = new ElementListData();
boolean success = false;
// Try to find every existing element // Try to find every existing element
for (Element element : Element.values()) for (Element element : Element.values())
@ -176,10 +175,7 @@ public class Elements extends ItemStat<RandomElementListData, ElementListData> i
elements.setStat(element, statType, (double) tag.getValue()); elements.setStat(element, statType, (double) tag.getValue());
} }
if (success) { return elements.isEmpty() ? null : elements;
return elements;
}
return null;
} }
@Override @Override

View File

@ -69,9 +69,8 @@ public class ShieldPatternStat extends ItemStat<ShieldPatternData, ShieldPattern
public void whenApplied(@NotNull ItemStackBuilder item, @NotNull ShieldPatternData data) { public void whenApplied(@NotNull ItemStackBuilder item, @NotNull ShieldPatternData data) {
BlockStateMeta meta = (BlockStateMeta) item.getMeta(); BlockStateMeta meta = (BlockStateMeta) item.getMeta();
Banner banner = (Banner) meta.getBlockState(); Banner banner = (Banner) meta.getBlockState();
ShieldPatternData pattern = (ShieldPatternData) data; banner.setBaseColor(data.getBaseColor());
banner.setBaseColor(pattern.getBaseColor()); banner.setPatterns(data.getPatterns());
banner.setPatterns(pattern.getPatterns());
((BlockStateMeta) item.getMeta()).setBlockState(banner); ((BlockStateMeta) item.getMeta()).setBlockState(banner);
item.getMeta().addItemFlags(ItemFlag.HIDE_POTION_EFFECTS); item.getMeta().addItemFlags(ItemFlag.HIDE_POTION_EFFECTS);
} }

View File

@ -0,0 +1,71 @@
package net.Indyuce.mmoitems.stat.type;
import io.lumine.mythic.lib.api.item.ItemTag;
import io.lumine.mythic.lib.element.Element;
import net.Indyuce.mmoitems.api.item.build.ItemStackBuilder;
import net.Indyuce.mmoitems.api.item.mmoitem.ReadMMOItem;
import net.Indyuce.mmoitems.api.util.NumericStatFormula;
import net.Indyuce.mmoitems.gui.edition.EditionInventory;
import net.Indyuce.mmoitems.stat.data.DoubleData;
import net.Indyuce.mmoitems.util.ElementStatType;
import org.bukkit.Material;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
/**
* Used for elements otherwise MMOItems doesn't
* register elemental stats inside of MythicLib
* <p>
* Workaround that will be removed when adding stat categories
* in order to give more clarity to the item editor.
*
* @deprecated Definitely not a perfect implementation
*/
@Deprecated
public class FictiveNumericStat extends DoubleStat implements InternalStat {
public FictiveNumericStat(Element el, ElementStatType type) {
super(type.getConcatenatedTagPath(el), Material.BARRIER, "Fictive Stat", new String[0]);
}
@Override
public NumericStatFormula whenInitialized(Object object) {
throw new RuntimeException("Fictive item stat");
}
@Override
public void whenApplied(@NotNull ItemStackBuilder item, @NotNull DoubleData data) {
throw new RuntimeException("Fictive item stat");
}
@NotNull
@Override
public ArrayList<ItemTag> getAppliedNBT(@NotNull DoubleData data) {
throw new RuntimeException("Fictive item stat");
}
@Override
public void whenClicked(@NotNull EditionInventory inv, @NotNull InventoryClickEvent event) {
throw new RuntimeException("Fictive item stat");
}
@Override
public void whenLoaded(@NotNull ReadMMOItem mmoitem) {
throw new RuntimeException("Fictive item stat");
}
@Nullable
@Override
public DoubleData getLoadedNBT(@NotNull ArrayList<ItemTag> storedTags) {
throw new RuntimeException("Fictive item stat");
}
@Override
public void whenDisplayed(List<String> lore, Optional<NumericStatFormula> statData) {
throw new RuntimeException("Fictive item stat");
}
}