mirror of
https://gitlab.com/phoenix-dvpmt/mmoitems.git
synced 2025-03-10 12:59:11 +01:00
!added unpolished dynamic lore system
it works and can be used in public builds, but I prefer looking at this as a proof of concept rather than the finished code for this feature
This commit is contained in:
parent
d5fb39f311
commit
dd4633c7d2
BIN
lib/MMOLib.jar
BIN
lib/MMOLib.jar
Binary file not shown.
@ -9,6 +9,7 @@ import org.bukkit.enchantments.Enchantment;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import net.Indyuce.mmoitems.api.item.util.DynamicLore;
|
||||
import net.Indyuce.mmoitems.api.player.PlayerData;
|
||||
import net.mmogroup.mmolib.MMOLib;
|
||||
import net.mmogroup.mmolib.api.item.ItemTag;
|
||||
@ -115,7 +116,6 @@ public class DurabilityItem {
|
||||
}
|
||||
|
||||
public ItemStack toItem() {
|
||||
|
||||
/*
|
||||
* Cross multiplication to display the current item durability on the
|
||||
* item durability bar. (1 - ratio) because minecraft works with item
|
||||
@ -130,6 +130,6 @@ public class DurabilityItem {
|
||||
: Math.max(1, (int) ((1. - ((double) durability / maxDurability)) * nbtItem.getItem().getType().getMaxDurability()));
|
||||
nbtItem.addTag(new ItemTag("MMOITEMS_DURABILITY", durability), new ItemTag("Damage", damage));
|
||||
|
||||
return nbtItem.toItem();
|
||||
return new DynamicLore(nbtItem).build();
|
||||
}
|
||||
}
|
||||
|
@ -1,16 +1,11 @@
|
||||
package net.Indyuce.mmoitems.api.item.build;
|
||||
|
||||
import net.Indyuce.mmoitems.MMOItems;
|
||||
import net.Indyuce.mmoitems.api.Type;
|
||||
import net.Indyuce.mmoitems.api.item.mmoitem.MMOItem;
|
||||
import net.Indyuce.mmoitems.api.util.StatFormat;
|
||||
import net.Indyuce.mmoitems.stat.data.*;
|
||||
import net.Indyuce.mmoitems.stat.data.type.UpgradeInfo;
|
||||
import net.Indyuce.mmoitems.stat.type.DoubleStat;
|
||||
import net.Indyuce.mmoitems.stat.type.ItemStat;
|
||||
import net.mmogroup.mmolib.MMOLib;
|
||||
import net.mmogroup.mmolib.api.item.ItemTag;
|
||||
import net.mmogroup.mmolib.api.item.NBTItem;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
import java.util.logging.Level;
|
||||
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.attribute.Attribute;
|
||||
import org.bukkit.attribute.AttributeModifier;
|
||||
@ -19,11 +14,25 @@ import org.bukkit.inventory.ItemFlag;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
import java.util.logging.Level;
|
||||
import com.google.gson.JsonArray;
|
||||
|
||||
import net.Indyuce.mmoitems.MMOItems;
|
||||
import net.Indyuce.mmoitems.api.Type;
|
||||
import net.Indyuce.mmoitems.api.item.mmoitem.MMOItem;
|
||||
import net.Indyuce.mmoitems.api.item.util.DynamicLore;
|
||||
import net.Indyuce.mmoitems.api.util.StatFormat;
|
||||
import net.Indyuce.mmoitems.stat.data.DoubleData;
|
||||
import net.Indyuce.mmoitems.stat.data.MaterialData;
|
||||
import net.Indyuce.mmoitems.stat.data.StoredTagsData;
|
||||
import net.Indyuce.mmoitems.stat.data.StringData;
|
||||
import net.Indyuce.mmoitems.stat.data.StringListData;
|
||||
import net.Indyuce.mmoitems.stat.data.UpgradeData;
|
||||
import net.Indyuce.mmoitems.stat.data.type.UpgradeInfo;
|
||||
import net.Indyuce.mmoitems.stat.type.DoubleStat;
|
||||
import net.Indyuce.mmoitems.stat.type.ItemStat;
|
||||
import net.mmogroup.mmolib.MMOLib;
|
||||
import net.mmogroup.mmolib.api.item.ItemTag;
|
||||
import net.mmogroup.mmolib.api.item.NBTItem;
|
||||
|
||||
public class ItemStackBuilder {
|
||||
private MMOItem mmoitem;
|
||||
@ -118,8 +127,13 @@ public class ItemStackBuilder {
|
||||
lore.insert("lore", parsed);
|
||||
}
|
||||
|
||||
meta.setLore(lore.build());
|
||||
|
||||
final List<String> list = lore.build();
|
||||
JsonArray array = new JsonArray();
|
||||
for (String s : list)
|
||||
array.add(s);
|
||||
tags.add(new ItemTag("MMOITEMS_DYNAMIC_LORE", array.toString()));
|
||||
meta.setLore(list);
|
||||
|
||||
/*
|
||||
* This tag is added to entirely override default vanilla item attribute
|
||||
* modifiers, this way armor gives no ARMOR or ARMOR TOUGHNESS to the
|
||||
@ -134,7 +148,7 @@ public class ItemStackBuilder {
|
||||
* @return Builds the item
|
||||
*/
|
||||
public ItemStack build() {
|
||||
return buildNBT().toItem();
|
||||
return new DynamicLore(buildNBT()).build();
|
||||
}
|
||||
|
||||
public class StatLore {
|
||||
|
@ -1,14 +1,15 @@
|
||||
package net.Indyuce.mmoitems.api.item.build;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
import net.Indyuce.mmoitems.MMOItems;
|
||||
import net.mmogroup.mmolib.MMOLib;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
|
||||
import net.Indyuce.mmoitems.MMOItems;
|
||||
import net.mmogroup.mmolib.MMOLib;
|
||||
|
||||
public class LoreBuilder {
|
||||
private final List<String> lore = MMOItems.plugin.getLanguage().getDefaultLoreFormat();
|
||||
private final Map<String, String> placeholders = new HashMap<>();
|
||||
|
@ -0,0 +1,52 @@
|
||||
package net.Indyuce.mmoitems.api.item.util;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
|
||||
import com.google.gson.JsonArray;
|
||||
import com.google.gson.JsonElement;
|
||||
|
||||
import net.Indyuce.mmoitems.MMOItems;
|
||||
import net.mmogroup.mmolib.MMOLib;
|
||||
import net.mmogroup.mmolib.api.item.NBTItem;
|
||||
|
||||
public class DynamicLore {
|
||||
private final NBTItem item;
|
||||
|
||||
public DynamicLore(NBTItem nbt) {
|
||||
item = nbt;
|
||||
}
|
||||
|
||||
public ItemStack build() {
|
||||
ItemStack stack = item.toItem();
|
||||
if (item.hasTag("MMOITEMS_DYNAMIC_LORE")) {
|
||||
JsonArray array = MMOLib.plugin.getJson().parse(item.getString("MMOITEMS_DYNAMIC_LORE"), JsonArray.class);
|
||||
List<String> lore = new ArrayList<>();
|
||||
for (JsonElement e : array) {
|
||||
String s = replace(e.getAsString());
|
||||
if(!s.equals("!INVALID!"))
|
||||
lore.add(s);
|
||||
}
|
||||
ItemMeta meta = stack.getItemMeta();
|
||||
meta.setLore(lore);
|
||||
stack.setItemMeta(meta);
|
||||
}
|
||||
return stack;
|
||||
}
|
||||
|
||||
private String replace(String input) {
|
||||
switch(input.toLowerCase()) {
|
||||
case "%durability%":
|
||||
if(item.hasTag("MMOITEMS_DURABILITY") && item.hasTag("MMOITEMS_MAX_DURABILITY"))
|
||||
return MMOLib.plugin.parseColors(MMOItems.plugin.getLanguage().getDynLoreFormat("durability")
|
||||
.replace("%durability%", "" + item.getInteger("MMOITEMS_DURABILITY"))
|
||||
.replace("%max_durability%", "" + item.getInteger("MMOITEMS_MAX_DURABILITY")));
|
||||
else return "!INVALID!";
|
||||
default:
|
||||
return input;
|
||||
}
|
||||
}
|
||||
}
|
@ -31,7 +31,7 @@ import java.util.logging.Level;
|
||||
public class ConfigManager {
|
||||
|
||||
// cached config files
|
||||
private ConfigFile abilities, items, loreFormat, messages, potionEffects, stats, attackEffects;
|
||||
private ConfigFile abilities, items, loreFormat, messages, potionEffects, stats, attackEffects, dynLore;
|
||||
|
||||
// cached config options
|
||||
public boolean abilityPlayerDamage, dodgeKnockbackEnabled, replaceMushroomDrops, worldGenEnabled, upgradeRequirementsCheck;
|
||||
@ -172,6 +172,7 @@ public class ConfigManager {
|
||||
potionEffects = new ConfigFile("/language", "potion-effects");
|
||||
stats = new ConfigFile("/language", "stats");
|
||||
attackEffects = new ConfigFile("/language", "attack-effects");
|
||||
dynLore = new ConfigFile("/language", "dynamic-lore");
|
||||
|
||||
/*
|
||||
* reload cached config options for quicker access - these options are
|
||||
@ -246,6 +247,10 @@ public class ConfigManager {
|
||||
public String getStaffSpiritName(StaffSpirit spirit) {
|
||||
return attackEffects.getConfig().getString("staff-spirit." + spirit.name().toLowerCase().replace("_", "-"));
|
||||
}
|
||||
|
||||
public String getDynLoreFormat(String input) {
|
||||
return dynLore.getConfig().getString("format." + input);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates an empty directory in the MMOItems plugin folder if it does not
|
||||
@ -259,7 +264,7 @@ public class ConfigManager {
|
||||
if (!folder.exists())
|
||||
folder.mkdir();
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* all config files that have a default configuration are stored here, they
|
||||
* get copied into the plugin folder when the plugin enables
|
||||
@ -278,6 +283,7 @@ public class ConfigManager {
|
||||
// default language files -> /MMOItems/language
|
||||
LORE_FORMAT("lore-format.yml", "language", "lore-format.yml"),
|
||||
STATS("stats.yml", "language", "stats.yml"),
|
||||
DYN_LORE("dynamic-lore.yml", "language", "dynamic-lore.yml"),
|
||||
|
||||
// station layouts
|
||||
DEFAULT_LAYOUT("layouts/default.yml", "layouts", "default.yml"),
|
||||
|
4
src/main/resources/default/dynamic-lore.yml
Normal file
4
src/main/resources/default/dynamic-lore.yml
Normal file
@ -0,0 +1,4 @@
|
||||
# This file contains all the data about dynamic lore.
|
||||
# Use this to change the formatting of different lore parts.
|
||||
format:
|
||||
durability: "&7Durability: %durability% / %max_durability%"
|
Loading…
Reference in New Issue
Block a user