From 44bc86fa8adbd97cc931b0de5fc730728418387b Mon Sep 17 00:00:00 2001 From: Ethan Date: Tue, 9 Mar 2021 00:21:14 -0500 Subject: [PATCH] Elements now have placeholders. Format: %mmoitems_stat_elements_[element]_[damage/defense]% --- .../placeholders/MMOItemsPlaceholders.java | 30 +++++++++++++++++-- .../net/Indyuce/mmoitems/stat/Elements.java | 30 ++++++++----------- 2 files changed, 40 insertions(+), 20 deletions(-) diff --git a/src/main/java/net/Indyuce/mmoitems/comp/parse/placeholders/MMOItemsPlaceholders.java b/src/main/java/net/Indyuce/mmoitems/comp/parse/placeholders/MMOItemsPlaceholders.java index 93391142..e2a4e314 100644 --- a/src/main/java/net/Indyuce/mmoitems/comp/parse/placeholders/MMOItemsPlaceholders.java +++ b/src/main/java/net/Indyuce/mmoitems/comp/parse/placeholders/MMOItemsPlaceholders.java @@ -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; + } } diff --git a/src/main/java/net/Indyuce/mmoitems/stat/Elements.java b/src/main/java/net/Indyuce/mmoitems/stat/Elements.java index 45994457..1b51b72e 100644 --- a/src/main/java/net/Indyuce/mmoitems/stat/Elements.java +++ b/src/main/java/net/Indyuce/mmoitems/stat/Elements.java @@ -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