Elements now have placeholders.

Format:
%mmoitems_stat_elements_[element]_[damage/defense]%
This commit is contained in:
Ethan 2021-03-09 00:21:14 -05:00
parent b3478393f9
commit 44bc86fa8a
2 changed files with 40 additions and 20 deletions

View File

@ -6,13 +6,15 @@ import io.lumine.mythic.lib.api.math.EvaluatedFormula;
import io.lumine.mythic.lib.api.player.MMOPlayerData;
import io.lumine.mythic.lib.api.util.AltChar;
import me.clip.placeholderapi.expansion.PlaceholderExpansion;
import net.Indyuce.mmoitems.ItemStats;
import net.Indyuce.mmoitems.MMOItems;
import net.Indyuce.mmoitems.api.Type;
import net.Indyuce.mmoitems.api.player.PlayerData;
import net.Indyuce.mmoitems.stat.type.ItemStat;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.OfflinePlayer;
import org.bukkit.entity.Player;
import org.bukkit.inventory.EquipmentSlot;
import org.bukkit.inventory.ItemStack;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@ -56,8 +58,26 @@ public class MMOItemsPlaceholders extends PlaceholderExpansion {
// with substring
if (identifier.equals("stat_defense_percent"))
return twoDigits.format(100 - calculateDefense(MMOPlayerData.get(player))) + "%";
if (identifier.startsWith("stat_elements")) {
PlayerData.get(player).getStats().getInstance(ItemStats.ELEMENTS);
if (identifier.startsWith("stat_elements") && player.isOnline()) {
// index 0 = element
// index 1 = defense/damage
String[] param = identifier.split("_");
if (param.length > 3) {
String tag = "MMOITEMS_" + param[2].toUpperCase() + "_" + param[3].toUpperCase();
double value = 0;
for (EquipmentSlot slot : EquipmentSlot.values())
if (hasItem((Player) player, slot)) {
NBTItem nbtItem = NBTItem.get(((Player) player).getInventory().getItem(slot));
if (nbtItem.hasTag(tag)) {
value += nbtItem.getDouble(tag);
}
}
return twoDigits.format(value);
}
}
else if (identifier.startsWith("stat_")) {
ItemStat stat = MMOItems.plugin.getStats().get(identifier.substring(5).toUpperCase());
@ -139,4 +159,8 @@ public class MMOItemsPlaceholders extends PlaceholderExpansion {
bar.append(j == r ? ChatColor.WHITE : "").append(barChar);
return bar.toString();
}
private boolean hasItem(Player player, EquipmentSlot slot) {
return player.getInventory().getItem(slot) != null && player.getInventory().getItem(slot).getType() != Material.AIR;
}
}

View File

@ -1,19 +1,8 @@
package net.Indyuce.mmoitems.stat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Optional;
import io.lumine.mythic.lib.api.item.ItemTag;
import io.lumine.mythic.lib.api.item.SupportedNBTTagValues;
import org.apache.commons.lang.Validate;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.event.inventory.InventoryAction;
import org.bukkit.event.inventory.InventoryClickEvent;
import net.Indyuce.mmoitems.ItemStats;
import io.lumine.mythic.lib.api.util.AltChar;
import net.Indyuce.mmoitems.MMOItems;
import net.Indyuce.mmoitems.MMOUtils;
import net.Indyuce.mmoitems.api.Element;
@ -28,11 +17,20 @@ import net.Indyuce.mmoitems.stat.data.random.RandomElementListData;
import net.Indyuce.mmoitems.stat.data.random.RandomStatData;
import net.Indyuce.mmoitems.stat.data.type.StatData;
import net.Indyuce.mmoitems.stat.type.ItemStat;
import io.lumine.mythic.lib.api.item.ItemTag;
import io.lumine.mythic.lib.api.util.AltChar;
import org.apache.commons.lang.Validate;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.event.inventory.InventoryAction;
import org.bukkit.event.inventory.InventoryClickEvent;
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 Elements extends ItemStat {
public Elements() {
super("ELEMENT", Material.SLIME_BALL, "Elements", new String[] { "The elements of your item." },
@ -152,7 +150,6 @@ public class Elements extends ItemStat {
for (Element element : elements.getDamageElements()) {
// Obtain damage
String path = element.name().toLowerCase() + "-damage";
double value = elements.getDamage(element);
// Create Tag
@ -163,7 +160,6 @@ public class Elements extends ItemStat {
for (Element element : elements.getDefenseElements()) {
// Obtain defense
String path = element.name().toLowerCase() + "-defense";
double value = elements.getDefense(element);
// Create Tag