From 975445b8f379f1003ada105c737396719a500c6f Mon Sep 17 00:00:00 2001 From: hyperdefined Date: Mon, 31 Jan 2022 17:40:10 -0500 Subject: [PATCH] support for custom lore messages --- .../java/lol/hyper/toolstats/ToolStats.java | 38 ++++++++++++++ .../hyper/toolstats/events/BlocksMined.java | 17 +++--- .../lol/hyper/toolstats/events/CraftItem.java | 23 ++++++-- .../hyper/toolstats/events/EntityDamage.java | 52 +++++++++++++------ .../hyper/toolstats/events/EntityDeath.java | 17 ++++-- .../hyper/toolstats/events/GenerateLoot.java | 16 ++++-- .../hyper/toolstats/events/PickupItem.java | 16 ++++-- .../hyper/toolstats/events/PlayerFish.java | 34 ++++++++---- .../hyper/toolstats/events/SheepShear.java | 19 ++++--- .../hyper/toolstats/events/VillagerTrade.java | 22 +++++--- src/main/resources/config.yml | 22 ++++++++ 11 files changed, 212 insertions(+), 64 deletions(-) diff --git a/src/main/java/lol/hyper/toolstats/ToolStats.java b/src/main/java/lol/hyper/toolstats/ToolStats.java index 63ebfc4..a898174 100644 --- a/src/main/java/lol/hyper/toolstats/ToolStats.java +++ b/src/main/java/lol/hyper/toolstats/ToolStats.java @@ -23,6 +23,7 @@ import lol.hyper.toolstats.commands.CommandToolStats; import lol.hyper.toolstats.events.*; import org.bstats.bukkit.Metrics; import org.bukkit.Bukkit; +import org.bukkit.ChatColor; import org.bukkit.NamespacedKey; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.YamlConfiguration; @@ -200,4 +201,41 @@ public final class ToolStats extends JavaPlugin { } return false; } + + public String getLoreFromConfig(String configName, boolean raw) { + String lore = config.getString("messages." + configName); + if (lore == null) { + return null; + } + if (raw) { + return ChatColor.translateAlternateColorCodes('&', lore); + } else { + // we basically add the color codes then remove them + // this is a dirty trick to remove color codes + lore = ChatColor.translateAlternateColorCodes('&', lore); + lore = ChatColor.stripColor(lore); + if (lore.contains("{player}")) { + lore = lore.replace("{player}", ""); + } + if (lore.contains("{date}")) { + lore = lore.replace("{date}", ""); + } + if (lore.contains("{name}")) { + lore = lore.replace("{name}", ""); + } + if (lore.contains("{kills}")) { + lore = lore.replace("{kills}", ""); + } + if (lore.contains("{blocks}")) { + lore = lore.replace("{blocks}", ""); + } + if (lore.contains("{sheep}")) { + lore = lore.replace("{sheep}", ""); + } + if (lore.contains("{damage}")) { + lore = lore.replace("{damage}", ""); + } + } + return lore; + } } diff --git a/src/main/java/lol/hyper/toolstats/events/BlocksMined.java b/src/main/java/lol/hyper/toolstats/events/BlocksMined.java index 6e9872b..b3f636d 100644 --- a/src/main/java/lol/hyper/toolstats/events/BlocksMined.java +++ b/src/main/java/lol/hyper/toolstats/events/BlocksMined.java @@ -18,7 +18,6 @@ package lol.hyper.toolstats.events; import lol.hyper.toolstats.ToolStats; -import org.bukkit.ChatColor; import org.bukkit.GameMode; import org.bukkit.Material; import org.bukkit.entity.Player; @@ -38,7 +37,6 @@ public class BlocksMined implements Listener { private final ToolStats toolStats; private final String[] validTools = {"pickaxe", "axe", "hoe", "shovel", "shear"}; - private final String blocksMinedLore = ChatColor.GRAY + "Blocks mined: " + ChatColor.DARK_GRAY + "X"; public BlocksMined(ToolStats toolStats) { this.toolStats = toolStats; @@ -78,6 +76,9 @@ public class BlocksMined implements Listener { } container.set(toolStats.genericMined, PersistentDataType.INTEGER, blocksMined); + String configLore = toolStats.getLoreFromConfig("blocks-mined", false); + String configLoreRaw = toolStats.getLoreFromConfig("blocks-mined", true); + List lore; if (meta.hasLore()) { lore = meta.getLore(); @@ -85,21 +86,25 @@ public class BlocksMined implements Listener { boolean hasLore = false; // we do a for loop like this, we can keep track of index // this doesn't mess the lore up of existing items + if (configLore == null || configLoreRaw == null) { + toolStats.logger.warning("There is no lore message for messages.blocks-mined!"); + return; + } for (int x = 0; x < lore.size(); x++) { - if (lore.get(x).contains("Blocks mined")) { + if (lore.get(x).contains(configLore)) { hasLore = true; - lore.set(x, blocksMinedLore.replace("X", Integer.toString(blocksMined))); + lore.set(x, configLoreRaw.replace("{blocks}", Integer.toString(blocksMined))); break; } } // if the item has lore but doesn't have the tag, add it if (!hasLore) { - lore.add(blocksMinedLore.replace("X", Integer.toString(blocksMined))); + lore.add(configLoreRaw.replace("{blocks}", Integer.toString(blocksMined))); } } else { // if the item has no lore, create a new list and add the string lore = new ArrayList<>(); - lore.add(blocksMinedLore.replace("X", Integer.toString(blocksMined))); + lore.add(configLoreRaw.replace("{blocks}", Integer.toString(blocksMined))); } if (toolStats.checkConfig(itemStack, "blocks-mined")) { meta.setLore(lore); diff --git a/src/main/java/lol/hyper/toolstats/events/CraftItem.java b/src/main/java/lol/hyper/toolstats/events/CraftItem.java index c78349e..833041b 100644 --- a/src/main/java/lol/hyper/toolstats/events/CraftItem.java +++ b/src/main/java/lol/hyper/toolstats/events/CraftItem.java @@ -19,7 +19,6 @@ package lol.hyper.toolstats.events; import lol.hyper.toolstats.ToolStats; import lol.hyper.toolstats.UUIDDataType; -import org.bukkit.ChatColor; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -39,8 +38,6 @@ public class CraftItem implements Listener { public final String[] validItems = { "pickaxe", "sword", "shovel", "axe", "hoe", "bow", "helmet", "chestplate", "leggings", "boots", "fishing" }; - private final String timeCreatedLore = ChatColor.GRAY + "Crafted on: " + ChatColor.DARK_GRAY + "X"; - private final String ownerLore = ChatColor.GRAY + "Crafted by: " + ChatColor.DARK_GRAY + "X"; private final SimpleDateFormat format = new SimpleDateFormat("M/dd/yyyy", Locale.ENGLISH); public CraftItem(ToolStats toolStats) { @@ -57,6 +54,9 @@ public class CraftItem implements Listener { String name = itemStack.getType().toString().toLowerCase(Locale.ROOT); for (String x : validItems) { if (name.contains(x)) { + if (addLore(itemStack, player) == null) { + return; + } event.setCurrentItem(addLore(itemStack, player)); } } @@ -73,6 +73,19 @@ public class CraftItem implements Listener { PersistentDataContainer container = meta.getPersistentDataContainer(); container.set(toolStats.timeCreated, PersistentDataType.LONG, timeCreated); container.set(toolStats.genericOwner, new UUIDDataType(), owner.getUniqueId()); + + String createdByRaw = toolStats.getLoreFromConfig("created.created-by", true); + String createdOnRaw = toolStats.getLoreFromConfig("created.created-on", true); + + if (createdOnRaw == null) { + toolStats.logger.warning("There is no lore message for messages.created.created-on!"); + return null; + } + if (createdByRaw == null) { + toolStats.logger.warning("There is no lore message for messages.created.created-by!"); + return null; + } + List lore; if (meta.hasLore()) { lore = meta.getLore(); @@ -81,10 +94,10 @@ public class CraftItem implements Listener { lore = new ArrayList<>(); } if (toolStats.checkConfig(itemStack, "created-date")) { - lore.add(timeCreatedLore.replace("X", format.format(finalDate))); + lore.add(createdOnRaw.replace("{date}", format.format(finalDate))); } if (toolStats.checkConfig(itemStack, "created-by")) { - lore.add(ownerLore.replace("X", owner.getName())); + lore.add(createdByRaw.replace("{player}", owner.getName())); } meta.setLore(lore); newItem.setItemMeta(meta); diff --git a/src/main/java/lol/hyper/toolstats/events/EntityDamage.java b/src/main/java/lol/hyper/toolstats/events/EntityDamage.java index 275e7b5..4c09ee7 100644 --- a/src/main/java/lol/hyper/toolstats/events/EntityDamage.java +++ b/src/main/java/lol/hyper/toolstats/events/EntityDamage.java @@ -18,7 +18,6 @@ package lol.hyper.toolstats.events; import lol.hyper.toolstats.ToolStats; -import org.bukkit.ChatColor; import org.bukkit.GameMode; import org.bukkit.Material; import org.bukkit.entity.*; @@ -41,9 +40,6 @@ public class EntityDamage implements Listener { private final ToolStats toolStats; private final String[] validTools = {"sword", "trident", "axe"}; - private final String playerKillsLore = ChatColor.GRAY + "Player kills: " + ChatColor.DARK_GRAY + "X"; - private final String mobKillsLore = ChatColor.GRAY + "Mob kills: " + ChatColor.DARK_GRAY + "X"; - private final String damageTakenLore = ChatColor.GRAY + "Damage taken: " + ChatColor.DARK_GRAY + "X"; private final DecimalFormat decimalFormat = new DecimalFormat("0.00"); public final Set trackedMobs = new HashSet<>(); @@ -174,6 +170,14 @@ public class EntityDamage implements Listener { } container.set(toolStats.swordPlayerKills, PersistentDataType.INTEGER, playerKills); + String playerKillsLore = toolStats.getLoreFromConfig("kills.player", false); + String playerKillsLoreRaw = toolStats.getLoreFromConfig("kills.player", true); + + if (playerKillsLore == null || playerKillsLoreRaw == null) { + toolStats.logger.warning("There is no lore message for messages.kills.player!"); + return null; + } + List lore; if (meta.hasLore()) { lore = meta.getLore(); @@ -182,20 +186,20 @@ public class EntityDamage implements Listener { // we do a for loop like this, we can keep track of index // this doesn't mess the lore up of existing items for (int x = 0; x < lore.size(); x++) { - if (lore.get(x).contains("Player kills")) { + if (lore.get(x).contains(playerKillsLore)) { hasLore = true; - lore.set(x, playerKillsLore.replace("X", Integer.toString(playerKills))); + lore.set(x, playerKillsLoreRaw.replace("{kills}", Integer.toString(playerKills))); break; } } // if the item has lore but doesn't have the tag, add it if (!hasLore) { - lore.add(playerKillsLore.replace("X", Integer.toString(playerKills))); + lore.add(playerKillsLoreRaw.replace("{kills}", Integer.toString(playerKills))); } } else { // if the item has no lore, create a new list and add the string lore = new ArrayList<>(); - lore.add(playerKillsLore.replace("X", Integer.toString(playerKills))); + lore.add(playerKillsLoreRaw.replace("{kills}", Integer.toString(playerKills))); } if (toolStats.checkConfig(itemStack, "player-kills")) { meta.setLore(lore); @@ -222,6 +226,14 @@ public class EntityDamage implements Listener { } container.set(toolStats.swordMobKills, PersistentDataType.INTEGER, mobKills); + String mobKillsLore = toolStats.getLoreFromConfig("kills.mob", false); + String mobKillsLoreRaw = toolStats.getLoreFromConfig("kills.mob", true); + + if (mobKillsLore == null || mobKillsLoreRaw == null) { + toolStats.logger.warning("There is no lore message for messages.kills.mob!"); + return null; + } + List lore; if (meta.hasLore()) { lore = meta.getLore(); @@ -230,20 +242,20 @@ public class EntityDamage implements Listener { // we do a for loop like this, we can keep track of index // this doesn't mess the lore up of existing items for (int x = 0; x < lore.size(); x++) { - if (lore.get(x).contains("Mob kills")) { + if (lore.get(x).contains(mobKillsLore)) { hasLore = true; - lore.set(x, mobKillsLore.replace("X", Integer.toString(mobKills))); + lore.set(x, mobKillsLoreRaw.replace("{kills}", Integer.toString(mobKills))); break; } } // if the item has lore but doesn't have the tag, add it if (!hasLore) { - lore.add(mobKillsLore.replace("X", Integer.toString(mobKills))); + lore.add(mobKillsLoreRaw.replace("{kills}", Integer.toString(mobKills))); } } else { // if the item has no lore, create a new list and add the string lore = new ArrayList<>(); - lore.add(mobKillsLore.replace("X", Integer.toString(mobKills))); + lore.add(mobKillsLoreRaw.replace("{kills}", Integer.toString(mobKills))); } if (toolStats.checkConfig(itemStack, "mob-kills")) { meta.setLore(lore); @@ -270,6 +282,14 @@ public class EntityDamage implements Listener { decimalFormat.setRoundingMode(RoundingMode.DOWN); container.set(toolStats.armorDamage, PersistentDataType.DOUBLE, damageTaken); + String damageTakenLore = toolStats.getLoreFromConfig("damage-taken", false); + String damageTakenLoreRaw = toolStats.getLoreFromConfig("damage-taken", true); + + if (damageTakenLore == null || damageTakenLoreRaw == null) { + toolStats.logger.warning("There is no lore message for messages.damage-taken!"); + return; + } + List lore; if (meta.hasLore()) { lore = meta.getLore(); @@ -278,20 +298,20 @@ public class EntityDamage implements Listener { // we do a for loop like this, we can keep track of index // this doesn't mess the lore up of existing items for (int x = 0; x < lore.size(); x++) { - if (lore.get(x).contains("Damage taken")) { + if (lore.get(x).contains(damageTakenLore)) { hasLore = true; - lore.set(x, damageTakenLore.replace("X", decimalFormat.format(damageTaken))); + lore.set(x, damageTakenLoreRaw.replace("{damage}", decimalFormat.format(damageTaken))); break; } } // if the item has lore but doesn't have the tag, add it if (!hasLore) { - lore.add(damageTakenLore.replace("X", decimalFormat.format(damageTaken))); + lore.add(damageTakenLoreRaw.replace("{damage}", decimalFormat.format(damageTaken))); } } else { // if the item has no lore, create a new list and add the string lore = new ArrayList<>(); - lore.add(damageTakenLore.replace("X", decimalFormat.format(damageTaken))); + lore.add(damageTakenLoreRaw.replace("{damage}", decimalFormat.format(damageTaken))); } if (toolStats.config.getBoolean("enabled.armor-damage")) { meta.setLore(lore); diff --git a/src/main/java/lol/hyper/toolstats/events/EntityDeath.java b/src/main/java/lol/hyper/toolstats/events/EntityDeath.java index dd400f5..c3273d7 100644 --- a/src/main/java/lol/hyper/toolstats/events/EntityDeath.java +++ b/src/main/java/lol/hyper/toolstats/events/EntityDeath.java @@ -18,7 +18,6 @@ package lol.hyper.toolstats.events; import lol.hyper.toolstats.ToolStats; -import org.bukkit.ChatColor; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -32,7 +31,6 @@ import java.util.*; public class EntityDeath implements Listener { private final ToolStats toolStats; - private final String droppedLore = ChatColor.GRAY + "Dropped by: " + ChatColor.DARK_GRAY + "X"; public EntityDeath(ToolStats toolStats) { this.toolStats = toolStats; @@ -64,14 +62,23 @@ public class EntityDeath implements Listener { return; } boolean hasTag = false; + + String droppedByLore = toolStats.getLoreFromConfig("dropped-by", false); + String droppedByLoreRaw = toolStats.getLoreFromConfig("dropped-by", true); + + if (droppedByLore == null || droppedByLoreRaw == null) { + toolStats.logger.warning("There is no lore message for messages.dropped-by!"); + return; + } + List lore; if (meta.hasLore()) { lore = meta.getLore(); assert lore != null; for (int x = 0; x < lore.size(); x++) { - if (lore.get(x).contains("Dropped by")) { + if (lore.get(x).contains(droppedByLore)) { // replace existing tag - lore.set(x, droppedLore.replace("X", mob)); + lore.set(x, droppedByLoreRaw.replace("{name}", mob)); hasTag = true; } } @@ -80,7 +87,7 @@ public class EntityDeath implements Listener { lore = new ArrayList<>(); } if (!hasTag) { - lore.add(droppedLore.replace("X", mob)); + lore.add(droppedByLoreRaw.replace("X", mob)); } if (toolStats.config.getBoolean("enabled.dropped-by")) { meta.setLore(lore); diff --git a/src/main/java/lol/hyper/toolstats/events/GenerateLoot.java b/src/main/java/lol/hyper/toolstats/events/GenerateLoot.java index 7a05fc9..43fe112 100644 --- a/src/main/java/lol/hyper/toolstats/events/GenerateLoot.java +++ b/src/main/java/lol/hyper/toolstats/events/GenerateLoot.java @@ -20,7 +20,6 @@ package lol.hyper.toolstats.events; import lol.hyper.toolstats.ToolStats; import lol.hyper.toolstats.UUIDDataType; import org.bukkit.Bukkit; -import org.bukkit.ChatColor; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -42,8 +41,6 @@ import java.util.Locale; public class GenerateLoot implements Listener { private final ToolStats toolStats; - private final String LOOT_OWNER = ChatColor.GRAY + "Looted by: " + ChatColor.DARK_GRAY + "X"; - private final String LOOT_TIME = ChatColor.GRAY + "Looted on: " + ChatColor.DARK_GRAY + "X"; public final String[] validItems = { "pickaxe", "sword", "shovel", "axe", "hoe", "bow", "helmet", "chestplate", "leggings", "boots", "fishing" }; @@ -89,6 +86,15 @@ public class GenerateLoot implements Listener { PersistentDataContainer container = meta.getPersistentDataContainer(); container.set(toolStats.timeCreated, PersistentDataType.LONG, timeCreated); container.set(toolStats.genericOwner, new UUIDDataType(), owner.getUniqueId()); + + String foundByLoreRaw = toolStats.getLoreFromConfig("looted.found-by", true); + String foundOnLoreRaw = toolStats.getLoreFromConfig("looted.found-on", true); + + if (foundByLoreRaw == null || foundOnLoreRaw == null) { + toolStats.logger.warning("There is no lore message for messages.looted!"); + return null; + } + List lore; if (meta.hasLore()) { lore = meta.getLore(); @@ -97,8 +103,8 @@ public class GenerateLoot implements Listener { lore = new ArrayList<>(); } if (toolStats.checkConfig(newItem, "looted-tag")) { - lore.add(LOOT_TIME.replace("X", format.format(finalDate))); - lore.add(LOOT_OWNER.replace("X", owner.getName())); + lore.add(foundOnLoreRaw.replace("{date}", format.format(finalDate))); + lore.add(foundByLoreRaw.replace("{player}", owner.getName())); } meta.setLore(lore); newItem.setItemMeta(meta); diff --git a/src/main/java/lol/hyper/toolstats/events/PickupItem.java b/src/main/java/lol/hyper/toolstats/events/PickupItem.java index 0b9bcb7..5ddc628 100644 --- a/src/main/java/lol/hyper/toolstats/events/PickupItem.java +++ b/src/main/java/lol/hyper/toolstats/events/PickupItem.java @@ -19,7 +19,6 @@ package lol.hyper.toolstats.events; import lol.hyper.toolstats.ToolStats; import lol.hyper.toolstats.UUIDDataType; -import org.bukkit.ChatColor; import org.bukkit.Material; import org.bukkit.entity.Entity; import org.bukkit.entity.Player; @@ -40,8 +39,6 @@ import java.util.Locale; public class PickupItem implements Listener { private final ToolStats toolStats; - private final String FOUND_BY = ChatColor.GRAY + "Found by: " + ChatColor.DARK_GRAY + "X"; - private final String FOUND_ON = ChatColor.GRAY + "Found on: " + ChatColor.DARK_GRAY + "X"; private final SimpleDateFormat format = new SimpleDateFormat("M/dd/yyyy", Locale.ENGLISH); public PickupItem(ToolStats toolStats) { @@ -78,6 +75,15 @@ public class PickupItem implements Listener { PersistentDataContainer container = meta.getPersistentDataContainer(); container.set(toolStats.timeCreated, PersistentDataType.LONG, timeCreated); container.set(toolStats.genericOwner, new UUIDDataType(), owner.getUniqueId()); + + String foundByLoreRaw = toolStats.getLoreFromConfig("looted.found-by", true); + String foundOnLoreRaw = toolStats.getLoreFromConfig("looted.found-on", true); + + if (foundByLoreRaw == null || foundOnLoreRaw == null) { + toolStats.logger.warning("There is no lore message for messages.looted!"); + return; + } + List lore; if (meta.hasLore()) { lore = meta.getLore(); @@ -86,8 +92,8 @@ public class PickupItem implements Listener { lore = new ArrayList<>(); } if (toolStats.config.getBoolean("enabled.elytra-tag")) { - lore.add(FOUND_ON.replace("X", format.format(finalDate))); - lore.add(FOUND_BY.replace("X", owner.getName())); + lore.add(foundOnLoreRaw.replace("{date}", format.format(finalDate))); + lore.add(foundByLoreRaw.replace("{player}", owner.getName())); } meta.setLore(lore); itemStack.setItemMeta(meta); diff --git a/src/main/java/lol/hyper/toolstats/events/PlayerFish.java b/src/main/java/lol/hyper/toolstats/events/PlayerFish.java index 50848e7..ef622f1 100644 --- a/src/main/java/lol/hyper/toolstats/events/PlayerFish.java +++ b/src/main/java/lol/hyper/toolstats/events/PlayerFish.java @@ -19,7 +19,6 @@ package lol.hyper.toolstats.events; import lol.hyper.toolstats.ToolStats; import lol.hyper.toolstats.UUIDDataType; -import org.bukkit.ChatColor; import org.bukkit.Material; import org.bukkit.entity.Item; import org.bukkit.entity.Player; @@ -40,9 +39,6 @@ import java.util.Locale; public class PlayerFish implements Listener { private final ToolStats toolStats; - private final String fishCaughtLore = ChatColor.GRAY + "Fish caught: " + ChatColor.DARK_GRAY + "X"; - private final String FISH_OWNER = ChatColor.GRAY + "Caught by: " + ChatColor.DARK_GRAY + "X"; - private final String FISH_TIME = ChatColor.GRAY + "Caught on: " + ChatColor.DARK_GRAY + "X"; public final String[] validItems = { "pickaxe", "sword", "shovel", "axe", "hoe", "bow", "helmet", "chestplate", "leggings", "boots", "fishing" }; @@ -92,6 +88,15 @@ public class PlayerFish implements Listener { fishCaught++; } container.set(toolStats.fishingRodCaught, PersistentDataType.INTEGER, fishCaught); + + String fishCaughtLore = toolStats.getLoreFromConfig("fished.fish-caught", false); + String fishCaughtLoreRaw = toolStats.getLoreFromConfig("fished.fish-caught", true); + + if (fishCaughtLore == null || fishCaughtLoreRaw == null) { + toolStats.logger.warning("There is no lore message for messages.fish-caught!"); + return; + } + List lore; if (meta.hasLore()) { lore = meta.getLore(); @@ -100,20 +105,20 @@ public class PlayerFish implements Listener { // we do a for loop like this, we can keep track of index // this doesn't mess the lore up of existing items for (int x = 0; x < lore.size(); x++) { - if (lore.get(x).contains("Fish caught")) { + if (lore.get(x).contains(fishCaughtLore)) { hasLore = true; - lore.set(x, fishCaughtLore.replace("X", Integer.toString(fishCaught))); + lore.set(x, fishCaughtLoreRaw.replace("{fish}", Integer.toString(fishCaught))); break; } } // if the item has lore but doesn't have the tag, add it if (!hasLore) { - lore.add(fishCaughtLore.replace("X", Integer.toString(fishCaught))); + lore.add(fishCaughtLoreRaw.replace("{fish}", Integer.toString(fishCaught))); } } else { // if the item has no lore, create a new list and add the string lore = new ArrayList<>(); - lore.add(fishCaughtLore.replace("X", Integer.toString(fishCaught))); + lore.add(fishCaughtLoreRaw.replace("{fish}", Integer.toString(fishCaught))); } if (toolStats.config.getBoolean("enabled.fish-caught")) { meta.setLore(lore); @@ -131,6 +136,15 @@ public class PlayerFish implements Listener { PersistentDataContainer container = meta.getPersistentDataContainer(); container.set(toolStats.timeCreated, PersistentDataType.LONG, timeCreated); container.set(toolStats.genericOwner, new UUIDDataType(), owner.getUniqueId()); + + String caughtByLoreRaw = toolStats.getLoreFromConfig("fished.caught-by", true); + String caughtOnLoreRaw = toolStats.getLoreFromConfig("fished.caught-on", true); + + if (caughtByLoreRaw == null || caughtOnLoreRaw == null) { + toolStats.logger.warning("There is no lore message for messages.fished!"); + return; + } + List lore; if (meta.hasLore()) { lore = meta.getLore(); @@ -139,8 +153,8 @@ public class PlayerFish implements Listener { lore = new ArrayList<>(); } if (toolStats.checkConfig(itemStack, "fished-tag")) { - lore.add(FISH_TIME.replace("X", format.format(finalDate))); - lore.add(FISH_OWNER.replace("X", owner.getName())); + lore.add(caughtOnLoreRaw.replace("{date}", format.format(finalDate))); + lore.add(caughtByLoreRaw.replace("{player}", owner.getName())); } meta.setLore(lore); itemStack.setItemMeta(meta); diff --git a/src/main/java/lol/hyper/toolstats/events/SheepShear.java b/src/main/java/lol/hyper/toolstats/events/SheepShear.java index 02fa6b0..31d956a 100644 --- a/src/main/java/lol/hyper/toolstats/events/SheepShear.java +++ b/src/main/java/lol/hyper/toolstats/events/SheepShear.java @@ -18,7 +18,6 @@ package lol.hyper.toolstats.events; import lol.hyper.toolstats.ToolStats; -import org.bukkit.ChatColor; import org.bukkit.Material; import org.bukkit.entity.Entity; import org.bukkit.entity.Player; @@ -37,7 +36,6 @@ import java.util.List; public class SheepShear implements Listener { private final ToolStats toolStats; - private final String sheepShearLore = ChatColor.GRAY + "Sheep sheared: " + ChatColor.DARK_GRAY + "X"; public SheepShear(ToolStats toolStats) { this.toolStats = toolStats; @@ -77,6 +75,15 @@ public class SheepShear implements Listener { sheepSheared++; } container.set(toolStats.shearsSheared, PersistentDataType.INTEGER, sheepSheared); + + String sheepShearedLore = toolStats.getLoreFromConfig("sheep-sheared", false); + String sheepShearedLoreRaw = toolStats.getLoreFromConfig("sheep-sheared", true); + + if (sheepShearedLore == null || sheepShearedLoreRaw == null) { + toolStats.logger.warning("There is no lore message for messages.sheep-sheared!"); + return; + } + List lore; if (meta.hasLore()) { lore = meta.getLore(); @@ -85,20 +92,20 @@ public class SheepShear implements Listener { // we do a for loop like this, we can keep track of index // this doesn't mess the lore up of existing items for (int x = 0; x < lore.size(); x++) { - if (lore.get(x).contains("Sheep sheared")) { + if (lore.get(x).contains(sheepShearedLore)) { hasLore = true; - lore.set(x, sheepShearLore.replace("X", Integer.toString(sheepSheared))); + lore.set(x, sheepShearedLoreRaw.replace("{sheep}", Integer.toString(sheepSheared))); break; } } // if the item has lore but doesn't have the tag, add it if (!hasLore) { - lore.add(sheepShearLore.replace("X", Integer.toString(sheepSheared))); + lore.add(sheepShearedLoreRaw.replace("{sheep}", Integer.toString(sheepSheared))); } } else { // if the item has no lore, create a new list and add the string lore = new ArrayList<>(); - lore.add(sheepShearLore.replace("X", Integer.toString(sheepSheared))); + lore.add(sheepShearedLoreRaw.replace("{sheep}", Integer.toString(sheepSheared))); } if (toolStats.config.getBoolean("enabled.sheep-sheared")) { meta.setLore(lore); diff --git a/src/main/java/lol/hyper/toolstats/events/VillagerTrade.java b/src/main/java/lol/hyper/toolstats/events/VillagerTrade.java index ea29a47..c43255b 100644 --- a/src/main/java/lol/hyper/toolstats/events/VillagerTrade.java +++ b/src/main/java/lol/hyper/toolstats/events/VillagerTrade.java @@ -19,7 +19,7 @@ package lol.hyper.toolstats.events; import lol.hyper.toolstats.ToolStats; import lol.hyper.toolstats.UUIDDataType; -import org.bukkit.ChatColor; +import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; @@ -41,8 +41,6 @@ import java.util.Locale; public class VillagerTrade implements Listener { private final ToolStats toolStats; - private final String TRADED_OWNER = ChatColor.GRAY + "Traded by: " + ChatColor.DARK_GRAY + "X"; - private final String TRADED_TIME = ChatColor.GRAY + "Traded on: " + ChatColor.DARK_GRAY + "X"; public final String[] validItems = { "pickaxe", "sword", "shovel", "axe", "hoe", "bow", "helmet", "chestplate", "leggings", "boots", "fishing" }; @@ -64,7 +62,10 @@ public class VillagerTrade implements Listener { for (String x : validItems) { if (item.getType().toString().toLowerCase(Locale.ROOT).contains(x)) { ItemStack newItem = addLore(item, (Player) event.getWhoClicked()); - event.getView().setCursor(newItem); + if (newItem == null) { + return; + } + Bukkit.getScheduler().runTaskLater(toolStats, ()-> event.setCurrentItem(newItem), 5); } } } @@ -81,6 +82,15 @@ public class VillagerTrade implements Listener { PersistentDataContainer container = meta.getPersistentDataContainer(); container.set(toolStats.timeCreated, PersistentDataType.LONG, timeCreated); container.set(toolStats.genericOwner, new UUIDDataType(), owner.getUniqueId()); + + String tradedByLoreRaw = toolStats.getLoreFromConfig("traded.traded-by", true); + String tradedOnLoreRaw = toolStats.getLoreFromConfig("traded.traded-on", true); + + if (tradedByLoreRaw == null || tradedOnLoreRaw == null) { + toolStats.logger.warning("There is no lore message for messages.traded!"); + return null; + } + List lore; if (meta.hasLore()) { lore = meta.getLore(); @@ -89,8 +99,8 @@ public class VillagerTrade implements Listener { lore = new ArrayList<>(); } if (toolStats.checkConfig(itemStack, "traded-tag")) { - lore.add(TRADED_TIME.replace("X", format.format(finalDate))); - lore.add(TRADED_OWNER.replace("X", owner.getName())); + lore.add(tradedOnLoreRaw.replace("{date}", format.format(finalDate))); + lore.add(tradedByLoreRaw.replace("{player}", owner.getName())); } meta.setLore(lore); itemStack.setItemMeta(meta); diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index c8f73e3..6827bf5 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -71,4 +71,26 @@ enabled: dropped-by: true elytra-tag: true +messages: + created: + created-by: "&7Crafted by: &8{player}" + created-on: "&7Crafted on: &8{date}" + fished: + caught-by: "&7Caught by: &8{player}" + caught-on: "&7Caught on: &8{date}" + fish-caught: "&7Fish caught: &8{fish}" + looted: + found-by: "&7Found by: &8{player}" + found-on: "&7Found on: &8{date}" + traded: + traded-by: "&7Traded by: &8{player}" + traded-on: "&7Traded on: &8{date}" + kills: + mob: "&7Mob kills: &8{kills}" + player: "&7Player kills: &8{kills}" + blocks-mined: "&7Blocks mined: &8{blocks}" + sheep-sheared: "&7Sheep sheared: &8{sheep}" + dropped-by: "&7Dropped by: &8{name}" # name will be player/mob name + damage-taken: "&7Damage taken: &8{damage}" + config-version: 2 \ No newline at end of file