package net.uomc.mineshaft.blacksmith; import java.sql.SQLException; import java.util.Collections; import com.mouldycheerio.dbot.util.DatabaseUtils; import net.dv8tion.jda.api.entities.Member; import net.uomc.mineshaft.Mineshaft; import net.uomc.mineshaft.SavedStat; public class Pickaxe extends Tool { public static final int MAX_PICKAXE_LEVEL = 5; public static final String LEVEL_TABLE = "pickaxe_level"; public static final String FORTUNE_TABLE = "pickaxe_ench_fortune"; public static final String EFFICIENCY_TABLE = "pickaxe_ench_efficiency"; private SavedStat levelStat; private SavedStat fortuneStat; private SavedStat efficiencyStat; public Pickaxe(Mineshaft mineshaft, Member member) { super(mineshaft, member, "pickaxe"); initStats(); } private void initStats() { System.out.println("initing stats"); try { upgradeTableVersion(); } catch (SQLException e) { e.printStackTrace(); } levelStat = bot.getPlayerStats().getStat(LEVEL_TABLE); fortuneStat = bot.getPlayerStats().getStat(FORTUNE_TABLE); efficiencyStat = bot.getPlayerStats().getStat(EFFICIENCY_TABLE); } private void upgradeTableVersion() throws SQLException { String dbPath = bot.getPlayerStats().getDbPath(); String oldLevelTable = "levels"; System.out.println("checking if table " + oldLevelTable + " exists..."); if (DatabaseUtils.tableExists(dbPath, oldLevelTable)) { System.out.println("it does!"); if (DatabaseUtils.tableExists(dbPath, LEVEL_TABLE)) { DatabaseUtils.deleteTable(dbPath, LEVEL_TABLE); } DatabaseUtils.renameTable(dbPath, oldLevelTable, LEVEL_TABLE); } String oldFortuneTable = "ench_fortune"; if (DatabaseUtils.tableExists(dbPath, oldFortuneTable)) { if (DatabaseUtils.tableExists(dbPath, FORTUNE_TABLE)) { DatabaseUtils.deleteTable(dbPath, FORTUNE_TABLE); } DatabaseUtils.renameTable(dbPath, oldFortuneTable, FORTUNE_TABLE); } String oldEfficiencyTable = "ench_efficiency"; if (DatabaseUtils.tableExists(dbPath, oldEfficiencyTable)) { if (DatabaseUtils.tableExists(dbPath, EFFICIENCY_TABLE)) { DatabaseUtils.deleteTable(dbPath, EFFICIENCY_TABLE); } DatabaseUtils.renameTable(dbPath, oldEfficiencyTable, EFFICIENCY_TABLE); } } public void setLevel(long value) { levelStat.set(member, value); } public int getLevel() { return (int) levelStat.get(member); } public void setEfficiency(int value) { efficiencyStat.set(member, value); } public int getEfficiency() { return (int) efficiencyStat.get(member); } public void setFortune(int value) { efficiencyStat.set(member, value); } public int getFortune() { return (int) fortuneStat.get(member); } public boolean isEnchanted() { long fortune = getFortune(); long eff = getEfficiency(); return fortune+eff > 0; } public String getName() { long level = getLevel(); return pickaxeLevelToName(level); } public String getNextName() { long level = getLevel() + 1; if (level == getMaxLevel()) level = getMaxLevel(); return pickaxeLevelToName(level); } public static String pickaxeLevelToName(long level) { switch ((int) level) { case 0: return "Stone"; case 1: return "Copper"; case 2: return "Iron"; case 3: return "Gold"; case 4: return "Diamond"; default: return "Netherite"; } } public String getImage() { long level = getLevel(); switch ((int) level) { case 0: return isEnchanted() ? "https://minecraft.wiki/images/Enchanted_Stone_Pickaxe.gif" : "https://minecraft.wiki/images/Stone_Pickaxe_JE2_BE2.png"; case 1: return isEnchanted() ? "https://minecraft.wiki/images/Enchanted_Copper_Pickaxe.webp" : "https://minecraft.wiki/images/Copper_Pickaxe_JE1_BE1.png"; case 2: return isEnchanted() ? "https://minecraft.wiki/images/Enchanted_Iron_Pickaxe.gif" : "https://minecraft.wiki/images/Iron_Pickaxe_JE3_BE2.png"; case 3: return isEnchanted() ? "https://minecraft.wiki/images/Enchanted_Golden_Pickaxe.gif" : "https://minecraft.wiki/images/Golden_Pickaxe_JE4_BE3.png"; case 4: return isEnchanted() ? "https://minecraft.wiki/images/Enchanted_Diamond_Pickaxe.gif" : "https://minecraft.wiki/images/Diamond_Pickaxe_JE3_BE3.png"; default: return isEnchanted() ? "https://minecraft.wiki/images/Netherite_Pickaxe_JE3.png" : "https://minecraft.wiki/images/Enchanted_Netherite_Pickaxe.gif"; } } public int getMaxLevel() { return MAX_PICKAXE_LEVEL; } public int incrementFortune() { fortuneStat.increment(member, 1); return (int) getFortune(); } public int incrementEfficiency() { efficiencyStat.increment(member, 1); return (int) getEfficiency(); } public static String getRomanNumber(int number) { return String.join("", Collections.nCopies(number, "I")) .replace("IIIII", "V") .replace("IIII", "IV") .replace("VV", "X") .replace("VIV", "IX") .replace("XXXXX", "L") .replace("XXXX", "XL") .replace("LL", "C") .replace("LXL", "XC") .replace("CCCCC", "D") .replace("CCCC", "CD") .replace("DD", "M") .replace("DCD", "CM"); } public String getEnchantmentString() { int fortune = getFortune(); int efficiency = getEfficiency(); String curr = ""; if (fortune > 0 || efficiency > 0) { curr = "is enchanted with "; if (fortune > 0) curr += "**Fortune " + Pickaxe.getRomanNumber(fortune) + "** "; if (efficiency > 0) curr += "**Efficiency " + Pickaxe.getRomanNumber(efficiency) + "** "; } else { curr = "has no enchantments"; } return curr; } }