diff --git a/src/main/java/lol/hyper/toolstats/ToolStats.java b/src/main/java/lol/hyper/toolstats/ToolStats.java index 782251e..a1de54d 100644 --- a/src/main/java/lol/hyper/toolstats/ToolStats.java +++ b/src/main/java/lol/hyper/toolstats/ToolStats.java @@ -23,8 +23,12 @@ import lol.hyper.toolstats.events.*; import org.bstats.bukkit.Metrics; import org.bukkit.Bukkit; import org.bukkit.NamespacedKey; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.inventory.ItemStack; import org.bukkit.plugin.java.JavaPlugin; +import java.io.File; import java.io.IOException; import java.util.HashSet; import java.util.Set; @@ -59,9 +63,17 @@ public final class ToolStats extends JavaPlugin { public SheepShear sheepShear; public final Logger logger = this.getLogger(); + public final File configFile = new File(this.getDataFolder(), "config.yml"); + public FileConfiguration config; + public final int CONFIG_VERSION = 1; @Override public void onEnable() { + if (!configFile.exists()) { + this.saveResource("config.yml", true); + logger.info("Copying default config!"); + } + loadConfig(); blocksMined = new BlocksMined(this); craftItem = new CraftItem(this); entityDeath = new EntityDeath(this); @@ -90,6 +102,13 @@ public final class ToolStats extends JavaPlugin { keys.add(armorDamage); } + public void loadConfig() { + config = YamlConfiguration.loadConfiguration(configFile); + if (config.getInt("config-version") != CONFIG_VERSION) { + logger.warning("Your config file is outdated! Please regenerate the config."); + } + } + public void checkForUpdates() { GitHubReleaseAPI api; try { @@ -112,4 +131,51 @@ public final class ToolStats extends JavaPlugin { logger.warning("A new version is available (" + latest.getTagVersion() + ")! You are running version " + current.getTagVersion() + ". You are " + buildsBehind + " version(s) behind."); } } + + public boolean checkConfig(ItemStack itemStack, String configName) { + String itemName = itemStack.getType().toString().toLowerCase(); + String itemType = null; + if (itemName.contains("bow") || itemName.contains("shears")) { + if (itemName.contains("bow")) { + itemType = "bow"; + } + if (itemName.contains("shears")) { + itemType = "shears"; + } + } else { + itemType = itemName.substring(itemName.indexOf("_") + 1); + } + + if (itemType == null) { + return false; + } + + switch (itemType) { + case "pickaxe": { + return config.getBoolean("enabled." + configName + ".pickaxe"); + } + case "sword": { + return config.getBoolean("enabled." + configName + ".sword"); + } + case "shovel": { + return config.getBoolean("enabled." + configName + ".shovel"); + } + case "axe": { + return config.getBoolean("enabled." + configName + ".axe"); + } + case "hoe": { + return config.getBoolean("enabled." + configName + ".hoe"); + } + case "shears": { + return config.getBoolean("enabled." + configName + ".shears"); + } + case "bow": { + return config.getBoolean("enabled." + configName + ".bow"); + } + case "armor": { + return config.getBoolean("enabled." + configName + ".armor"); + } + } + return false; + } } diff --git a/src/main/java/lol/hyper/toolstats/events/BlocksMined.java b/src/main/java/lol/hyper/toolstats/events/BlocksMined.java index 02eef7e..6e9872b 100644 --- a/src/main/java/lol/hyper/toolstats/events/BlocksMined.java +++ b/src/main/java/lol/hyper/toolstats/events/BlocksMined.java @@ -101,7 +101,9 @@ public class BlocksMined implements Listener { lore = new ArrayList<>(); lore.add(blocksMinedLore.replace("X", Integer.toString(blocksMined))); } - meta.setLore(lore); + if (toolStats.checkConfig(itemStack, "blocks-mined")) { + meta.setLore(lore); + } itemStack.setItemMeta(meta); } } diff --git a/src/main/java/lol/hyper/toolstats/events/CraftItem.java b/src/main/java/lol/hyper/toolstats/events/CraftItem.java index e1eb8f2..cfd79b0 100644 --- a/src/main/java/lol/hyper/toolstats/events/CraftItem.java +++ b/src/main/java/lol/hyper/toolstats/events/CraftItem.java @@ -80,8 +80,12 @@ public class CraftItem implements Listener { } else { lore = new ArrayList<>(); } - lore.add(timeCreatedLore.replace("X", format.format(finalDate))); - lore.add(ownerLore.replace("X", owner.getName())); + if (toolStats.checkConfig(itemStack, "crafted-date")) { + lore.add(timeCreatedLore.replace("X", format.format(finalDate))); + } + if (toolStats.checkConfig(itemStack, "crafted-by")) { + lore.add(ownerLore.replace("X", owner.getName())); + } meta.setLore(lore); newItem.setItemMeta(meta); return newItem; diff --git a/src/main/java/lol/hyper/toolstats/events/EntityDamage.java b/src/main/java/lol/hyper/toolstats/events/EntityDamage.java index f93734f..e9b844d 100644 --- a/src/main/java/lol/hyper/toolstats/events/EntityDamage.java +++ b/src/main/java/lol/hyper/toolstats/events/EntityDamage.java @@ -146,7 +146,9 @@ public class EntityDamage implements Listener { lore = new ArrayList<>(); lore.add(playerKillsLore.replace("X", Integer.toString(playerKills))); } - meta.setLore(lore); + if (toolStats.checkConfig(itemStack, "player-kills")) { + meta.setLore(lore); + } finalItem.setItemMeta(meta); return finalItem; } @@ -192,7 +194,9 @@ public class EntityDamage implements Listener { lore = new ArrayList<>(); lore.add(mobKillsLore.replace("X", Integer.toString(mobKills))); } - meta.setLore(lore); + if (toolStats.checkConfig(itemStack, "mob-kills")) { + meta.setLore(lore); + } finalItem.setItemMeta(meta); return finalItem; } @@ -238,7 +242,9 @@ public class EntityDamage implements Listener { lore = new ArrayList<>(); lore.add(damageTakenLore.replace("X", decimalFormat.format(damageTaken))); } - meta.setLore(lore); + if (toolStats.config.getBoolean("enabled.armor-damage")) { + meta.setLore(lore); + } itemStack.setItemMeta(meta); } } diff --git a/src/main/java/lol/hyper/toolstats/events/EntityDeath.java b/src/main/java/lol/hyper/toolstats/events/EntityDeath.java index 8fd6874..dd400f5 100644 --- a/src/main/java/lol/hyper/toolstats/events/EntityDeath.java +++ b/src/main/java/lol/hyper/toolstats/events/EntityDeath.java @@ -82,7 +82,9 @@ public class EntityDeath implements Listener { if (!hasTag) { lore.add(droppedLore.replace("X", mob)); } - meta.setLore(lore); + if (toolStats.config.getBoolean("enabled.dropped-by")) { + 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 f510f88..87b4b33 100644 --- a/src/main/java/lol/hyper/toolstats/events/PlayerFish.java +++ b/src/main/java/lol/hyper/toolstats/events/PlayerFish.java @@ -95,7 +95,9 @@ public class PlayerFish implements Listener { lore = new ArrayList<>(); lore.add(fishCaughtLore.replace("X", Integer.toString(fishCaught))); } - meta.setLore(lore); + if (toolStats.config.getBoolean("enabled.fish-caught")) { + 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 1a2afb8..02fa6b0 100644 --- a/src/main/java/lol/hyper/toolstats/events/SheepShear.java +++ b/src/main/java/lol/hyper/toolstats/events/SheepShear.java @@ -100,7 +100,9 @@ public class SheepShear implements Listener { lore = new ArrayList<>(); lore.add(sheepShearLore.replace("X", Integer.toString(sheepSheared))); } - meta.setLore(lore); + if (toolStats.config.getBoolean("enabled.sheep-sheared")) { + meta.setLore(lore); + } itemStack.setItemMeta(meta); } } diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml new file mode 100644 index 0000000..417c40f --- /dev/null +++ b/src/main/resources/config.yml @@ -0,0 +1,39 @@ +enabled: + crafted-by: + pickaxe: true + sword: true + shovel: true + axe: true + hoe: true + shears: true + bow: true + armor: true + crafted-date: + pickaxe: true + sword: true + shovel: true + axe: true + hoe: true + shears: true + bow: true + armor: true + player-kills: + sword: true + axe: true + trident: true + mob-kills: + sword: true + axe: true + trident: true + blocks-mined: + pickaxe: true + shovel: true + axe: true + hoe: true + shears: true + fish-caught: true + sheep-sheared: true + armor-damage: true + dropped-by: true + +config-version: 1 \ No newline at end of file