package net.uomc.mineshaft; import java.io.File; import java.sql.SQLException; import java.util.Collections; import java.util.List; import java.util.stream.Collectors; import org.json.JSONObject; import com.mouldycheerio.dbot.util.DatabaseUtils; import com.mouldycheerio.dbot.util.PeelingUtils; import net.dv8tion.jda.api.entities.Guild; import net.dv8tion.jda.api.entities.Member; public class Pickaxes { public static final int MAX_PICKAXE_LEVEL = 5; private static final String LEVEL_TABLE = "levels"; private static final String FORTUNE_TABLE = "ench_fortune"; private static final String EFFICIENCY_TABLE = "ench_efficiency"; private static final String DIMENSION_TABLE = "dimension"; private static final String FARM_LEVEL_TABLE = "farms"; private String pickaxesDb; public Pickaxes(Mineshaft mineshaft) { pickaxesDb = (new File(mineshaft.getDatadir(), "pickaxes.db")).getPath(); initDB(); } private void initDB() { try { DatabaseUtils.createSimpleKVtable(pickaxesDb, FORTUNE_TABLE); } catch (SQLException e) { } try { DatabaseUtils.createSimpleKVtable(pickaxesDb, DIMENSION_TABLE); } catch (SQLException e) { } try { DatabaseUtils.createSimpleKVtable(pickaxesDb, EFFICIENCY_TABLE); } catch (SQLException e) { } try { DatabaseUtils.createSimpleKVtable(pickaxesDb, LEVEL_TABLE); } catch (SQLException e) { } try { DatabaseUtils.createSimpleKVtable(pickaxesDb, FARM_LEVEL_TABLE); } catch (SQLException e) { } } public void setFarmLevel(Member member, long value) { try { DatabaseUtils.putInKVtable(pickaxesDb, FARM_LEVEL_TABLE, member.getId() + ":" + member.getGuild().getId(), value); } catch (SQLException e) { e.printStackTrace(); } } public long getFarmLevel(String member, String guild) { try { return DatabaseUtils.getInKVtable(pickaxesDb, FARM_LEVEL_TABLE, member + ":" + guild); } catch (SQLException e) { e.printStackTrace(); } return 0l; } public long getFarmLevel(Member member) { return getFarmLevel(member.getId(), member.getGuild().getId()); } 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(String member, String guild) { try { return DatabaseUtils.getInKVtable(pickaxesDb, LEVEL_TABLE, member + ":" + guild); } catch (SQLException e) { e.printStackTrace(); } return 0l; } public long getLevel(Member member) { return getLevel(member.getId(), member.getGuild().getId()); } public List getMembersGuilds() { try { return DatabaseUtils.listKeys(pickaxesDb, LEVEL_TABLE); } catch (SQLException e) { e.printStackTrace(); } return Collections.emptyList(); } public List getMembers(Guild guild) { return getMembersGuilds().stream().filter(m -> guild.getId().equals(m.split(":")[1])).map(m -> m.split(":")[0]).collect(Collectors.toList()); } private void setEfficiency(Member member, long value) { try { DatabaseUtils.putInKVtable(pickaxesDb, EFFICIENCY_TABLE, member.getId() + ":" + member.getGuild().getId(), value); } catch (SQLException e) { e.printStackTrace(); } } public long getEfficiency(String member, String guild) { try { return DatabaseUtils.getInKVtable(pickaxesDb, EFFICIENCY_TABLE, member + ":" + guild); } catch (SQLException e) { e.printStackTrace(); } return 0l; } public long getEfficiency(Member member) { return getEfficiency(member.getId(), member.getGuild().getId()); } private void setFortune(Member member, long value) { try { DatabaseUtils.putInKVtable(pickaxesDb, FORTUNE_TABLE, member.getId() + ":" + member.getGuild().getId(), value); } catch (SQLException e) { e.printStackTrace(); } } public long getFortune(String member, String guild) { try { return DatabaseUtils.getInKVtable(pickaxesDb, FORTUNE_TABLE, member + ":" + guild); } catch (SQLException e) { e.printStackTrace(); } return 0l; } public long getFortune(Member member) { return getFortune(member.getId(), member.getGuild().getId()); } public void setNether(Member member, boolean nether) { try { DatabaseUtils.putInKVtable(pickaxesDb, DIMENSION_TABLE, member.getId() + ":" + member.getGuild().getId(), nether ? 1: 0); } catch (SQLException e) { e.printStackTrace(); } } public boolean isNether(Member member) { try { return DatabaseUtils.getInKVtable(pickaxesDb, DIMENSION_TABLE, member.getId() + ":" + member.getGuild().getId()) == 1; } catch (SQLException e) { e.printStackTrace(); } return false; } 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); } 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 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 getPickaxeEfficiency(Member member) { return (int) getEfficiency(member); } public int incrementFortune(Member member) { setFortune(member, getFortune(member) + 1); return (int) getFortune(member); } public int incrementEfficiency(Member member) { setEfficiency(member, getEfficiency(member) + 1); return (int) getEfficiency(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"); } }