mirror of
https://gitlab.com/phoenix-dvpmt/mmoitems.git
synced 2025-02-23 14:51:21 +01:00
!Moved enchants classes
This commit is contained in:
parent
4b0b41cc30
commit
81390e5e48
@ -17,6 +17,7 @@ import net.Indyuce.mmoitems.api.util.message.FFPMMOItems;
|
||||
import net.Indyuce.mmoitems.command.MMOItemsCommandTreeRoot;
|
||||
import net.Indyuce.mmoitems.comp.*;
|
||||
import net.Indyuce.mmoitems.comp.eco.VaultSupport;
|
||||
import net.Indyuce.mmoitems.comp.enchants.AdvancedEnchantmentsHook;
|
||||
import net.Indyuce.mmoitems.comp.enchants.CrazyEnchantsStat;
|
||||
import net.Indyuce.mmoitems.comp.enchants.EnchantPlugin;
|
||||
import net.Indyuce.mmoitems.comp.enchants.MythicEnchantsSupport;
|
||||
@ -129,13 +130,13 @@ public class MMOItems extends LuminePlugin {
|
||||
if (Bukkit.getPluginManager().getPlugin("MMOCore") != null)
|
||||
new MMOCoreMMOLoader();
|
||||
|
||||
if (Bukkit.getPluginManager().getPlugin("mcMMO") != null) {
|
||||
if (Bukkit.getPluginManager().getPlugin("mcMMO") != null)
|
||||
//statManager.register(McMMOHook.MCMMO_SUPER_TOOL);
|
||||
statManager.register(McMMOHook.disableMcMMORepair);
|
||||
}
|
||||
if (Bukkit.getPluginManager().getPlugin("AdvancedEnchantments") != null) {
|
||||
|
||||
if (Bukkit.getPluginManager().getPlugin("AdvancedEnchantments") != null)
|
||||
statManager.register(AdvancedEnchantmentsHook.ADVANCED_ENCHANTMENTS);
|
||||
}
|
||||
|
||||
if (Bukkit.getPluginManager().getPlugin("MythicEnchants") != null)
|
||||
enchantPlugins.add(new MythicEnchantsSupport());
|
||||
}
|
||||
|
@ -1,40 +0,0 @@
|
||||
package net.Indyuce.mmoitems.comp;
|
||||
|
||||
import net.Indyuce.mmoitems.MMOItems;
|
||||
import net.Indyuce.mmoitems.api.event.MMOItemReforgeEvent;
|
||||
import net.Indyuce.mmoitems.stat.data.type.StatData;
|
||||
import net.Indyuce.mmoitems.stat.type.ItemStat;
|
||||
import net.advancedplugins.ae.api.EnchantApplyEvent;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
|
||||
import io.lumine.mythic.lib.MythicLib;
|
||||
import io.lumine.mythic.lib.api.item.NBTItem;
|
||||
|
||||
public class AdvancedEnchantmentsHook implements Listener {
|
||||
|
||||
public static final ItemStat ADVANCED_ENCHANTMENTS = new AdvancedEnchantsStat();
|
||||
|
||||
@EventHandler
|
||||
public void a(EnchantApplyEvent event) {
|
||||
NBTItem item = MythicLib.plugin.getVersion().getWrapper().getNBTItem(event.getItem());
|
||||
if (item.getType() != null && item.getBoolean("MMOITEMS_DISABLE_ADVANCED_ENCHANTS"))
|
||||
event.setCancelled(true);
|
||||
}
|
||||
|
||||
|
||||
@EventHandler
|
||||
public void onReforge(MMOItemReforgeEvent event) {
|
||||
if (!event.getOptions().shouldKeepAdvancedEnchants()) { return; }
|
||||
//RFG// MMOItems.log("§8Reforge §4EFG§f Keeping Advanced Enchantments");
|
||||
|
||||
// Ez just get from old put in new
|
||||
StatData aEnchs = event.getOldMMOItem().getData(ADVANCED_ENCHANTMENTS);
|
||||
|
||||
// Bruh
|
||||
if (aEnchs == null) { return; }
|
||||
|
||||
// Well that should have worked
|
||||
event.getNewMMOItem().setData(ADVANCED_ENCHANTMENTS, aEnchs);
|
||||
}
|
||||
}
|
@ -1,260 +0,0 @@
|
||||
package net.Indyuce.mmoitems.comp;
|
||||
|
||||
import io.lumine.mythic.lib.api.item.ItemTag;
|
||||
import io.lumine.mythic.lib.api.item.SupportedNBTTagValues;
|
||||
import io.lumine.mythic.lib.api.util.ui.FriendlyFeedbackProvider;
|
||||
import io.lumine.mythic.lib.api.util.ui.SilentNumbers;
|
||||
import io.lumine.mythic.lib.version.VersionMaterial;
|
||||
import net.Indyuce.mmoitems.MMOItems;
|
||||
import net.Indyuce.mmoitems.api.item.build.ItemStackBuilder;
|
||||
import net.Indyuce.mmoitems.api.item.mmoitem.ReadMMOItem;
|
||||
import net.Indyuce.mmoitems.api.util.message.FFPMMOItems;
|
||||
import net.Indyuce.mmoitems.gui.edition.EditionInventory;
|
||||
import net.Indyuce.mmoitems.stat.data.StringListData;
|
||||
import net.Indyuce.mmoitems.stat.data.type.StatData;
|
||||
import net.Indyuce.mmoitems.stat.type.StringListStat;
|
||||
import net.advancedplugins.ae.enchanthandler.enchantments.AEnchants;
|
||||
import net.advancedplugins.ae.enchanthandler.enchantments.AdvancedEnchantment;
|
||||
import org.apache.commons.lang.Validate;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* List of enchantments in an item yes
|
||||
*/
|
||||
public class AdvancedEnchantsStat extends StringListStat {
|
||||
|
||||
public AdvancedEnchantsStat() {
|
||||
super("ADVANCED_ENCHANTS", VersionMaterial.EXPERIENCE_BOTTLE.toMaterial(), "Advanced Enchants", new String[]{"The AEnchants of this. Format:", "\u00a7e[internal_name] [level]"}, new String[]{"!miscellaneous", "!block", "all"});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void whenApplied(@NotNull ItemStackBuilder item, @NotNull StatData data) {
|
||||
|
||||
/*
|
||||
* Now just apply all of them as AEnchants
|
||||
*/
|
||||
StringListData sList = (StringListData) data;
|
||||
|
||||
// Do that
|
||||
HashMap<String, Integer> aes = readList(sList.getList());
|
||||
ArrayList<String> loreInserts = new ArrayList<>();
|
||||
|
||||
// Dont repeat
|
||||
ArrayList<String> repeats = new ArrayList<>();
|
||||
|
||||
// Enchant the item
|
||||
for (String ench : aes.keySet()) {
|
||||
|
||||
Integer lvl = aes.get(ench);
|
||||
|
||||
// Skip trash
|
||||
if (ench == null || lvl == null || ench.isEmpty()) { continue; }
|
||||
if (!AEnchants.getEnchants().contains(ench.toLowerCase())) { continue; }
|
||||
|
||||
// Find the actual enchantment and include lore
|
||||
AdvancedEnchantment instance = new AdvancedEnchantment(ench);
|
||||
|
||||
// Exceed max level? Nope
|
||||
if (!instance.getLevelList().contains(lvl)) { continue; }
|
||||
|
||||
// Skip repetitions
|
||||
if (repeats.contains(ench.toLowerCase())) { continue; }
|
||||
repeats.add(ench.toLowerCase());
|
||||
|
||||
String display = instance.getDisplay(lvl) + " " + SilentNumbers.toRomanNumerals(lvl);
|
||||
|
||||
// Add lore
|
||||
loreInserts.add(display);
|
||||
// Add the tag
|
||||
item.addItemTag(tagForAEnchantment(ench, lvl));
|
||||
}
|
||||
|
||||
item.getLore().insert(getPath(), loreInserts);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void whenInput(@NotNull EditionInventory inv, @NotNull String message, Object... info) {
|
||||
List<String> list = inv.getEditedSection().contains(getPath()) ? inv.getEditedSection().getStringList(getPath()) : new ArrayList<>();
|
||||
|
||||
// Get space
|
||||
AEListEnchantment fromMessage = readEntry(message);
|
||||
Validate.notNull(fromMessage, FriendlyFeedbackProvider.quickForPlayer(FFPMMOItems.get(),
|
||||
"Incorrect format, use $e[internal_name] [level]$b. For the list of enchantments, use $r/ae list$b. "));
|
||||
|
||||
Validate.isTrue(AEnchants.getEnchants().contains(fromMessage.getName().toLowerCase()), FriendlyFeedbackProvider.quickForPlayer(FFPMMOItems.get(),
|
||||
"Adv Enchantment '$u{0}$b' doesnt exist. For the list of enchantments, use $r/ae list$b. ", fromMessage.getName()));
|
||||
|
||||
// Find the actual enchantment to compare level
|
||||
AdvancedEnchantment instance = new AdvancedEnchantment(fromMessage.getName());
|
||||
|
||||
Validate.isTrue(instance.getLevelList().contains(fromMessage.getLevel()), FriendlyFeedbackProvider.quickForPlayer(FFPMMOItems.get(),
|
||||
"Adv Enchantment '$u{0}$b' cannot be level $u{1}$b. It only admits levels $e{2}$b. ", fromMessage.getName(), String.valueOf(fromMessage.getLevel()),
|
||||
SilentNumbers.collapseList(SilentNumbers.transcribeList(instance.getLevelList(), String::valueOf), "$b,$e ")));
|
||||
|
||||
// Level is valid, lets remove old enchantment from this list
|
||||
for (int s = 0; s < list.size(); s++) {
|
||||
|
||||
// Get that
|
||||
AEListEnchantment atList = readEntry(list.get(s));
|
||||
|
||||
// Skip
|
||||
if (atList == null) { continue; }
|
||||
|
||||
// Same? remove
|
||||
if (atList.getName().toLowerCase().equals(fromMessage.getName().toLowerCase())) {
|
||||
|
||||
// Remove and repeat index
|
||||
list.remove(s);
|
||||
s--;
|
||||
}
|
||||
}
|
||||
|
||||
// Include the message
|
||||
list.add(message);
|
||||
|
||||
inv.getEditedSection().set(getPath(), list);
|
||||
inv.registerTemplateEdition();
|
||||
inv.getPlayer().sendMessage(MMOItems.plugin.getPrefix() + getName() + " Stat successfully added.");
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param name Name of the AEnch ~ arrow_deflect
|
||||
* @param level Level of the AEnch ~ 4
|
||||
* @return The tag ~ "ae_enchantment;arrow_deflect": 4
|
||||
*/
|
||||
ItemTag tagForAEnchantment(@NotNull String name, int level) { return new ItemTag(AE_TAG + ";" + name, level); }
|
||||
|
||||
@NotNull public static final String AE_TAG = "ae_enchantment";
|
||||
|
||||
@Override
|
||||
public void whenLoaded(@NotNull ReadMMOItem mmoitem) {
|
||||
|
||||
// Look at all tags that start with ae_enchantment I guess
|
||||
ArrayList<ItemTag> relevantTags = new ArrayList<>();
|
||||
for (String tag : mmoitem.getNBT().getTags()) {
|
||||
|
||||
// Valid tag?
|
||||
if (tag == null) { continue; }
|
||||
if (tag.startsWith(AE_TAG)) {
|
||||
|
||||
ItemTag thatTag = ItemTag.getTagAtPath(tag, mmoitem.getNBT(), SupportedNBTTagValues.DOUBLE);
|
||||
|
||||
// Not null?
|
||||
if (thatTag != null) {
|
||||
|
||||
relevantTags.add(new ItemTag(tag, SilentNumbers.round((Double) thatTag.getValue())));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Generate data
|
||||
StatData data = getLoadedNBT(relevantTags);
|
||||
|
||||
// Valid?
|
||||
if (data != null) {
|
||||
|
||||
/*
|
||||
* This data has the enchantments that used to be stored in the item.
|
||||
*/
|
||||
|
||||
mmoitem.setData(this, data);
|
||||
}
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public StatData getLoadedNBT(@NotNull ArrayList<ItemTag> storedTags) {
|
||||
|
||||
ArrayList<String> aEnchs = new ArrayList<>();
|
||||
|
||||
// Yes
|
||||
for (ItemTag tag : storedTags) {
|
||||
if (tag == null) { continue; }
|
||||
if (!(tag.getValue() instanceof Integer)) { continue; }
|
||||
|
||||
// Path must be valid
|
||||
int spc = tag.getPath().indexOf(AE_TAG + ";");
|
||||
if (spc < 0) { continue; }
|
||||
|
||||
// Crop
|
||||
String enchantment = tag.getPath().substring(AE_TAG.length() + 1 + spc);
|
||||
int value = (int) tag.getValue();
|
||||
|
||||
// Make String
|
||||
String str = enchantment + " " + SilentNumbers.removeDecimalZeros(String.valueOf(value));
|
||||
aEnchs.add(str);
|
||||
}
|
||||
|
||||
if (aEnchs.size() == 0) {
|
||||
|
||||
// Compatibility with StatHistory probably
|
||||
return super.getLoadedNBT(storedTags);
|
||||
}
|
||||
|
||||
|
||||
// THats it
|
||||
return new StringListData(aEnchs);
|
||||
}
|
||||
|
||||
@NotNull HashMap<String, Integer> readList(@NotNull List<String> listed) {
|
||||
|
||||
HashMap<String, Integer> ret = new HashMap<>();
|
||||
|
||||
// Split all by like NAME
|
||||
for (String str : listed) {
|
||||
|
||||
// List
|
||||
AEListEnchantment aeLE = readEntry(str);
|
||||
|
||||
// Skip trash
|
||||
if (aeLE == null) { continue; }
|
||||
|
||||
// Put
|
||||
ret.put(aeLE.getName(), aeLE.getLevel());
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
@Nullable AEListEnchantment readEntry(@Nullable String str) {
|
||||
|
||||
// Skip trash
|
||||
if (str == null || !str.contains(" ")) { return null; }
|
||||
|
||||
// Split by integer
|
||||
int spc = str.lastIndexOf(' ');
|
||||
String level = str.substring(spc + 1);
|
||||
|
||||
// Parse that
|
||||
Integer lvl = SilentNumbers.IntegerParse(level);
|
||||
|
||||
// Not null right
|
||||
if (lvl == null) { return null; }
|
||||
|
||||
// Add that
|
||||
String name = str.substring(0, spc);
|
||||
return new AEListEnchantment(name, lvl);
|
||||
}
|
||||
|
||||
private static class AEListEnchantment {
|
||||
|
||||
@NotNull final String name;
|
||||
final int level;
|
||||
|
||||
AEListEnchantment(@NotNull String name, int level) {
|
||||
this.name = name;
|
||||
this.level = level;
|
||||
}
|
||||
|
||||
@NotNull public String getName() { return name; }
|
||||
public int getLevel() { return level; }
|
||||
|
||||
@Override public String toString() { return getName() + " " + getLevel(); }
|
||||
}
|
||||
}
|
@ -1,7 +0,0 @@
|
||||
package net.Indyuce.mmoitems.comp.enchants;
|
||||
|
||||
import net.Indyuce.mmoitems.stat.data.type.StatData;
|
||||
|
||||
public class AdvancedCrazyEnchantsData implements StatData {
|
||||
|
||||
}
|
@ -0,0 +1,39 @@
|
||||
package net.Indyuce.mmoitems.comp.enchants;
|
||||
|
||||
import io.lumine.mythic.lib.MythicLib;
|
||||
import io.lumine.mythic.lib.api.item.NBTItem;
|
||||
import net.Indyuce.mmoitems.api.event.MMOItemReforgeEvent;
|
||||
import net.Indyuce.mmoitems.stat.data.type.StatData;
|
||||
import net.Indyuce.mmoitems.stat.type.ItemStat;
|
||||
import net.advancedplugins.ae.api.EnchantApplyEvent;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
|
||||
public class AdvancedEnchantmentsHook implements Listener {
|
||||
public static final ItemStat ADVANCED_ENCHANTMENTS = new AdvancedEnchantsStat();
|
||||
|
||||
@EventHandler
|
||||
public void a(EnchantApplyEvent event) {
|
||||
NBTItem item = MythicLib.plugin.getVersion().getWrapper().getNBTItem(event.getItem());
|
||||
if (item.getBoolean("MMOITEMS_DISABLE_ADVANCED_ENCHANTS"))
|
||||
event.setCancelled(true);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onReforge(MMOItemReforgeEvent event) {
|
||||
if (!event.getOptions().shouldKeepAdvancedEnchants())
|
||||
return;
|
||||
|
||||
//RFG// MMOItems.log("§8Reforge §4EFG§f Keeping Advanced Enchantments");
|
||||
|
||||
// Ez just get from old put in new
|
||||
StatData aEnchs = event.getOldMMOItem().getData(ADVANCED_ENCHANTMENTS);
|
||||
|
||||
// Bruh
|
||||
if (aEnchs == null)
|
||||
return;
|
||||
|
||||
// Well that should have worked
|
||||
event.getNewMMOItem().setData(ADVANCED_ENCHANTMENTS, aEnchs);
|
||||
}
|
||||
}
|
@ -1,78 +1,282 @@
|
||||
package net.Indyuce.mmoitems.comp.enchants;
|
||||
|
||||
import io.lumine.mythic.lib.api.item.ItemTag;
|
||||
import io.lumine.mythic.lib.api.item.SupportedNBTTagValues;
|
||||
import io.lumine.mythic.lib.api.util.ui.FriendlyFeedbackProvider;
|
||||
import io.lumine.mythic.lib.api.util.ui.SilentNumbers;
|
||||
import io.lumine.mythic.lib.version.VersionMaterial;
|
||||
import net.Indyuce.mmoitems.MMOItems;
|
||||
import net.Indyuce.mmoitems.api.item.build.ItemStackBuilder;
|
||||
import net.Indyuce.mmoitems.api.item.mmoitem.ReadMMOItem;
|
||||
import net.Indyuce.mmoitems.api.util.message.FFPMMOItems;
|
||||
import net.Indyuce.mmoitems.gui.edition.EditionInventory;
|
||||
import net.Indyuce.mmoitems.stat.data.random.RandomStatData;
|
||||
import net.Indyuce.mmoitems.stat.data.StringListData;
|
||||
import net.Indyuce.mmoitems.stat.data.type.StatData;
|
||||
import net.Indyuce.mmoitems.stat.type.InternalStat;
|
||||
import net.Indyuce.mmoitems.stat.type.StringStat;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.event.inventory.InventoryClickEvent;
|
||||
import net.Indyuce.mmoitems.stat.type.StringListStat;
|
||||
import net.advancedplugins.ae.enchanthandler.enchantments.AEnchants;
|
||||
import net.advancedplugins.ae.enchanthandler.enchantments.AdvancedEnchantment;
|
||||
import org.apache.commons.lang.Validate;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
public class AdvancedEnchantsStat extends StringStat implements InternalStat {
|
||||
/**
|
||||
* List of enchantments in an item yes
|
||||
*/
|
||||
public class AdvancedEnchantsStat extends StringListStat {
|
||||
public AdvancedEnchantsStat() {
|
||||
super("ADVANCED_ENCHANTS", Material.BOOK, "Advanced Enchants", new String[0], new String[]{"all"});
|
||||
}
|
||||
|
||||
@Override
|
||||
public RandomStatData whenInitialized(Object object) {
|
||||
// Not supported
|
||||
return null;
|
||||
super("ADVANCED_ENCHANTS", VersionMaterial.EXPERIENCE_BOTTLE.toMaterial(), "Advanced Enchants", new String[]{"The AEnchants of this. Format:", "\u00a7e[internal_name] [level]"}, new String[]{"!miscellaneous", "!block", "all"});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void whenApplied(@NotNull ItemStackBuilder item, @NotNull StatData data) {
|
||||
|
||||
/*
|
||||
* Now just apply all of them as AEnchants
|
||||
*/
|
||||
StringListData sList = (StringListData) data;
|
||||
|
||||
// Do that
|
||||
HashMap<String, Integer> aes = readList(sList.getList());
|
||||
ArrayList<String> loreInserts = new ArrayList<>();
|
||||
|
||||
// Dont repeat
|
||||
ArrayList<String> repeats = new ArrayList<>();
|
||||
|
||||
// Enchant the item
|
||||
for (String ench : aes.keySet()) {
|
||||
|
||||
}
|
||||
Integer lvl = aes.get(ench);
|
||||
|
||||
@Override
|
||||
public void whenLoaded(@NotNull ReadMMOItem mmoitem) {
|
||||
// Skip trash
|
||||
if (ench == null || lvl == null || ench.isEmpty()) {
|
||||
continue;
|
||||
}
|
||||
if (!AEnchants.getEnchants().contains(ench.toLowerCase())) {
|
||||
continue;
|
||||
}
|
||||
|
||||
}
|
||||
// Find the actual enchantment and include lore
|
||||
AdvancedEnchantment instance = new AdvancedEnchantment(ench);
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public ArrayList<ItemTag> getAppliedNBT(@NotNull StatData data) {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
// Exceed max level? Nope
|
||||
if (!instance.getLevelList().contains(lvl)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void whenClicked(@NotNull EditionInventory inv, @NotNull InventoryClickEvent event) {
|
||||
// Not supported
|
||||
// Skip repetitions
|
||||
if (repeats.contains(ench.toLowerCase())) {
|
||||
continue;
|
||||
}
|
||||
repeats.add(ench.toLowerCase());
|
||||
|
||||
String display = instance.getDisplay(lvl) + " " + SilentNumbers.toRomanNumerals(lvl);
|
||||
|
||||
// Add lore
|
||||
loreInserts.add(display);
|
||||
// Add the tag
|
||||
item.addItemTag(getEnchantTag(ench, lvl));
|
||||
}
|
||||
|
||||
item.getLore().insert(getPath(), loreInserts);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void whenInput(@NotNull EditionInventory inv, @NotNull String message, Object... info) {
|
||||
// Not supported
|
||||
List<String> list = inv.getEditedSection().contains(getPath()) ? inv.getEditedSection().getStringList(getPath()) : new ArrayList<>();
|
||||
|
||||
// Get space
|
||||
AEListEnchantment fromMessage = readEntry(message);
|
||||
Validate.notNull(fromMessage, FriendlyFeedbackProvider.quickForPlayer(FFPMMOItems.get(),
|
||||
"Incorrect format, use $e[internal_name] [level]$b. For the list of enchantments, use $r/ae list$b. "));
|
||||
|
||||
Validate.isTrue(AEnchants.getEnchants().contains(fromMessage.getName().toLowerCase()), FriendlyFeedbackProvider.quickForPlayer(FFPMMOItems.get(),
|
||||
"Adv Enchantment '$u{0}$b' doesnt exist. For the list of enchantments, use $r/ae list$b. ", fromMessage.getName()));
|
||||
|
||||
// Find the actual enchantment to compare level
|
||||
AdvancedEnchantment instance = new AdvancedEnchantment(fromMessage.getName());
|
||||
|
||||
Validate.isTrue(instance.getLevelList().contains(fromMessage.getLevel()), FriendlyFeedbackProvider.quickForPlayer(FFPMMOItems.get(),
|
||||
"Adv Enchantment '$u{0}$b' cannot be level $u{1}$b. It only admits levels $e{2}$b. ", fromMessage.getName(), String.valueOf(fromMessage.getLevel()),
|
||||
SilentNumbers.collapseList(SilentNumbers.transcribeList(instance.getLevelList(), String::valueOf), "$b,$e ")));
|
||||
|
||||
// Level is valid, lets remove old enchantment from this list
|
||||
for (int s = 0; s < list.size(); s++) {
|
||||
|
||||
// Get that
|
||||
AEListEnchantment atList = readEntry(list.get(s));
|
||||
|
||||
// Skip
|
||||
if (atList == null) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Same? remove
|
||||
if (atList.getName().toLowerCase().equals(fromMessage.getName().toLowerCase())) {
|
||||
|
||||
// Remove and repeat index
|
||||
list.remove(s);
|
||||
s--;
|
||||
}
|
||||
}
|
||||
|
||||
// Include the message
|
||||
list.add(message);
|
||||
|
||||
inv.getEditedSection().set(getPath(), list);
|
||||
inv.registerTemplateEdition();
|
||||
inv.getPlayer().sendMessage(MMOItems.plugin.getPrefix() + getName() + " Stat successfully added.");
|
||||
}
|
||||
|
||||
/**
|
||||
* @param name Name of the AEnch ~ arrow_deflect
|
||||
* @param level Level of the AEnch ~ 4
|
||||
* @return The tag ~ "ae_enchantment;arrow_deflect": 4
|
||||
*/
|
||||
private ItemTag getEnchantTag(@NotNull String name, int level) {
|
||||
return new ItemTag(AE_TAG + ";" + name, level);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static final String AE_TAG = "ae_enchantment";
|
||||
|
||||
@Override
|
||||
public void whenLoaded(@NotNull ReadMMOItem mmoitem) {
|
||||
|
||||
// Look at all tags that start with ae_enchantment I guess
|
||||
ArrayList<ItemTag> relevantTags = new ArrayList<>();
|
||||
for (String tag : mmoitem.getNBT().getTags()) {
|
||||
|
||||
// Valid tag?
|
||||
if (tag == null) {
|
||||
continue;
|
||||
}
|
||||
if (tag.startsWith(AE_TAG)) {
|
||||
|
||||
ItemTag thatTag = ItemTag.getTagAtPath(tag, mmoitem.getNBT(), SupportedNBTTagValues.DOUBLE);
|
||||
|
||||
// Not null?
|
||||
if (thatTag != null) {
|
||||
|
||||
relevantTags.add(new ItemTag(tag, SilentNumbers.round((Double) thatTag.getValue())));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Generate data
|
||||
StatData data = getLoadedNBT(relevantTags);
|
||||
|
||||
// Valid?
|
||||
if (data != null)
|
||||
|
||||
// This data has the enchantments that used to be stored in the item.
|
||||
mmoitem.setData(this, data);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public StatData getLoadedNBT(@NotNull ArrayList<ItemTag> storedTags) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void whenDisplayed(List<String> lore, Optional<RandomStatData> statData) {
|
||||
// Not supported
|
||||
ArrayList<String> aEnchs = new ArrayList<>();
|
||||
|
||||
// Yes
|
||||
for (ItemTag tag : storedTags) {
|
||||
if (tag == null || !(tag.getValue() instanceof Integer))
|
||||
continue;
|
||||
|
||||
// Path must be valid
|
||||
int spc = tag.getPath().indexOf(AE_TAG + ";");
|
||||
if (spc < 0)
|
||||
continue;
|
||||
|
||||
// Crop
|
||||
String enchantment = tag.getPath().substring(AE_TAG.length() + 1 + spc);
|
||||
int value = (int) tag.getValue();
|
||||
|
||||
// Make String
|
||||
String str = enchantment + " " + SilentNumbers.removeDecimalZeros(String.valueOf(value));
|
||||
aEnchs.add(str);
|
||||
}
|
||||
|
||||
if (aEnchs.size() == 0)
|
||||
|
||||
// Compatibility with StatHistory probably
|
||||
return super.getLoadedNBT(storedTags);
|
||||
|
||||
// THats it
|
||||
return new StringListData(aEnchs);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public StatData getClearStatData() {
|
||||
// Not supported
|
||||
return null;
|
||||
HashMap<String, Integer> readList(@NotNull List<String> listed) {
|
||||
|
||||
HashMap<String, Integer> ret = new HashMap<>();
|
||||
|
||||
// Split all by like NAME
|
||||
for (String str : listed) {
|
||||
|
||||
// List
|
||||
AEListEnchantment aeLE = readEntry(str);
|
||||
|
||||
// Skip trash
|
||||
if (aeLE == null)
|
||||
continue;
|
||||
|
||||
// Put
|
||||
ret.put(aeLE.getName(), aeLE.getLevel());
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
AEListEnchantment readEntry(@Nullable String str) {
|
||||
|
||||
// Skip trash
|
||||
if (str == null || !str.contains(" "))
|
||||
return null;
|
||||
|
||||
// Split by integer
|
||||
int spc = str.lastIndexOf(' ');
|
||||
String level = str.substring(spc + 1);
|
||||
|
||||
// Parse that
|
||||
Integer lvl = SilentNumbers.IntegerParse(level);
|
||||
|
||||
// Not null right
|
||||
if (lvl == null)
|
||||
return null;
|
||||
|
||||
// Add that
|
||||
String name = str.substring(0, spc);
|
||||
return new AEListEnchantment(name, lvl);
|
||||
}
|
||||
|
||||
private class AEListEnchantment {
|
||||
@NotNull
|
||||
private final String name;
|
||||
private final int level;
|
||||
|
||||
public AEListEnchantment(@NotNull String name, int level) {
|
||||
this.name = name;
|
||||
this.level = level;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public int getLevel() {
|
||||
return level;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return getName() + " " + getLevel();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user