package net.uomc.mineshaft; import java.io.File; import java.sql.SQLException; import java.util.Collections; import org.json.JSONObject; import com.mouldycheerio.dbot.util.DatabaseUtils; import com.mouldycheerio.dbot.util.PeelingUtils; import net.dv8tion.jda.api.entities.Member; class Pickaxes { private static final int MAX_PICKAXE_LEVEL = 5; private static final String LEVEL_TABLE = "levels"; private static final String FORTUNE_TABLE = "ench_fortune"; private String pickaxesDb; public Pickaxes(Mineshaft mineshaft) { pickaxesDb = (new File(mineshaft.getDatadir(), "pickaxes.db")).getPath(); initDB(); } private void initDB() { try { DatabaseUtils.createSimpleKVtable(pickaxesDb, LEVEL_TABLE); DatabaseUtils.createSimpleKVtable(pickaxesDb, FORTUNE_TABLE); } catch (SQLException e) { // e.printStackTrace(); } } public void setLevel(Member member, long value) { try { DatabaseUtils.putInKVtable(pickaxesDb, LEVEL_TABLE, member.getId() + ":" + member.getGuild().getId(), value); } catch (SQLException e) { e.printStackTrace(); } } public long getLevel(Member member) { try { return DatabaseUtils.getInKVtable(pickaxesDb, LEVEL_TABLE, member.getId() + ":" + member.getGuild().getId()); } catch (SQLException e) { e.printStackTrace(); } return 0l; } private void setFortune(Member member, long value) { try { DatabaseUtils.putInKVtable(pickaxesDb, FORTUNE_TABLE, member.getId() + ":" + member.getGuild().getId(), value); } catch (SQLException e) { e.printStackTrace(); } } private long getFortune(Member member) { try { return DatabaseUtils.getInKVtable(pickaxesDb, FORTUNE_TABLE, member.getId() + ":" + member.getGuild().getId()); } catch (SQLException e) { e.printStackTrace(); } return 0l; } public boolean isEnchanted(Member member) { long fortune = getFortune(member); return fortune > 0; } public String getPickaxeName(Member member) { long level = getLevel(member); return pickaxeLevelToName(level); } public String getNextPickaxeName(Member member) { long level = getLevel(member) + 1; if (level == getMaPickaxeLevel()) level = getMaPickaxeLevel(); return pickaxeLevelToName(level); } private 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 getPickaxeImage(Member member) { long level = getLevel(member); switch ((int) level) { case 0: return isEnchanted(member) ? "https://minecraft.wiki/images/Enchanted_Stone_Pickaxe.gif" : "https://minecraft.wiki/images/Stone_Pickaxe_JE2_BE2.png"; case 1: return isEnchanted(member) ? "https://minecraft.wiki/images/Enchanted_Copper_Pickaxe.webp" : "https://minecraft.wiki/images/Copper_Pickaxe_JE1_BE1.png"; case 2: return isEnchanted(member) ? "https://minecraft.wiki/images/Enchanted_Iron_Pickaxe.gif" : "https://minecraft.wiki/images/Iron_Pickaxe_JE3_BE2.png"; case 3: return isEnchanted(member) ? "https://minecraft.wiki/images/Enchanted_Golden_Pickaxe.gif" : "https://minecraft.wiki/images/Golden_Pickaxe_JE4_BE3.png"; case 4: return isEnchanted(member) ? "https://minecraft.wiki/images/Enchanted_Diamond_Pickaxe.gif" : "https://minecraft.wiki/images/Diamond_Pickaxe_JE3_BE3.png"; default: return isEnchanted(member) ? "https://minecraft.wiki/images/Netherite_Pickaxe_JE3.png" : "https://minecraft.wiki/images/Enchanted_Netherite_Pickaxe.gif"; } } public int getMaPickaxeLevel() { return MAX_PICKAXE_LEVEL; } public int getPickaxeLevel(Member member) { return (int) getLevel(member); } public int getPickaxeFortune(Member member) { return (int) getFortune(member); } public int incrementFortune(Member member) { setFortune(member, getFortune(member) + 1); return (int) getFortune(member); } 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"); } }