summaryrefslogtreecommitdiff
path: root/src/main/java/net/uomc/mineshaft/blacksmith/Pickaxe.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/net/uomc/mineshaft/blacksmith/Pickaxe.java')
-rw-r--r--src/main/java/net/uomc/mineshaft/blacksmith/Pickaxe.java211
1 files changed, 211 insertions, 0 deletions
diff --git a/src/main/java/net/uomc/mineshaft/blacksmith/Pickaxe.java b/src/main/java/net/uomc/mineshaft/blacksmith/Pickaxe.java
new file mode 100644
index 0000000..ffe18d5
--- /dev/null
+++ b/src/main/java/net/uomc/mineshaft/blacksmith/Pickaxe.java
@@ -0,0 +1,211 @@
+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;
+ }
+
+}