From 2e47a68b69fac942e4efd7b90f248e15f02f6a82 Mon Sep 17 00:00:00 2001 From: davidovski Date: Tue, 4 Nov 2025 17:35:30 +0000 Subject: update v0.6 pre --- .../net/uomc/mineshaft/blacksmith/Blacksmith.java | 72 ++++++++++---- .../mineshaft/blacksmith/BlacksmithCommand.java | 106 ++++++++++++++++++--- 2 files changed, 146 insertions(+), 32 deletions(-) (limited to 'src/main/java/net/uomc/mineshaft/blacksmith') diff --git a/src/main/java/net/uomc/mineshaft/blacksmith/Blacksmith.java b/src/main/java/net/uomc/mineshaft/blacksmith/Blacksmith.java index be3ad3c..98baf7f 100644 --- a/src/main/java/net/uomc/mineshaft/blacksmith/Blacksmith.java +++ b/src/main/java/net/uomc/mineshaft/blacksmith/Blacksmith.java @@ -16,8 +16,10 @@ import net.uomc.mineshaft.farm.Farm; class Blacksmith extends Farm { - public static long UPDATES_PER_LEVEL = 10; - public static long MS_PER_UPDATE = 1000l * 60l * 10l; + public static long UPDATES_PER_LEVEL = 240; + // TODO fix this + public static long MS_PER_UPDATE = 1000l * 60l; + //public static long MS_PER_UPDATE = 1000l * 10l; private SavedStat questionsStat; public Blacksmith(Mineshaft bot) { @@ -25,10 +27,36 @@ class Blacksmith extends Farm { questionsStat = getBot().getPlayerStats().getStat("blacksmith_questions"); } - public boolean upgradeArmour(Member member) { + public int collect(Member member) { + if (!isReady(member)) + return 0; + + if (isSword(member)) return collectSword(member); + return collectArmour(member); + } + + public int collectSword(Member member) { + int levelRaw = (int) getPlanted(member); + getBot().getSword(member).setLevel(getWorkingLevel(member)); + + setPlanted(member, 0); + setQuantity(member, 0); + return levelRaw; + } + + public int collectArmour(Member member) { + int levelRaw = (int) getPlanted(member); + getBot().getArmour(member).setLevel(getWorkingLevel(member)); + + setPlanted(member, 0); + setQuantity(member, 0); + return levelRaw; + } + + public int upgradeArmour(Member member) { int armourLevel = getBot().getArmour(member).getLevel(); if (armourLevel >= Armour.MAX_ARMOUR_LEVEL) { - return false; + return 0; } armourLevel += 1; @@ -37,22 +65,24 @@ class Blacksmith extends Farm { getBot().getArmour(member).setLevel(0); setQuantity(member, armourLevel * UPDATES_PER_LEVEL); - return true; + setNextUpdate(member, System.currentTimeMillis() + MS_PER_UPDATE); + return armourLevel; } - public boolean upgradeSword(Member member) { + public int upgradeSword(Member member) { int swordLevel = getBot().getSword(member).getLevel(); if (swordLevel >= Sword.MAX_SWORD_LEVEL) { - return false; + return 0; } swordLevel += 1; - setPlanted(member, -swordLevel); + setPlanted(member, swordLevel); getBot().getSword(member).setLevel(0); setQuantity(member, swordLevel * UPDATES_PER_LEVEL); - return true; + setNextUpdate(member, System.currentTimeMillis() + MS_PER_UPDATE); + return swordLevel; } @@ -117,7 +147,9 @@ class Blacksmith extends Farm { } BinomialDistribution bd = new BinomialDistribution((int) updates, getProgressChance(member)); - setQuantity(member, getQuantity(member) - bd.sample()); + int change = bd.sample(); + setQuantity(member, getQuantity(member) - change); + System.out.println("Doing update on " + member.getEffectiveName() + ", updates = " + updates + ", changed by -" + change); setNextUpdate(member, getNextUpdate(member) + MS_PER_UPDATE*updates); } @@ -144,11 +176,11 @@ class Blacksmith extends Farm { long max = getWorkingLevel(member) * UPDATES_PER_LEVEL; long current = getQuantity(member); - return (max - Math.min(current, 0)) / max; + return (double) (max - Math.max(current, 0)) / (double) max; } public long getTimeEstimate(Member member, long updates) { - return (long) (MS_PER_UPDATE * (1 - getProgressChance(member)) * updates); + return (long) (MS_PER_UPDATE * (1 / getProgressChance(member)) * updates); } public long getTimeEstimateRemaining(Member member) { @@ -207,7 +239,7 @@ class Blacksmith extends Farm { if (!isWorking(member)) return false; - return getQuantity(member) < 0; + return getQuantity(member) <= 0; } public void incrementQuestions(Member member) { @@ -228,12 +260,12 @@ class Blacksmith extends Farm { long forges = getValidForgeCount(member); if (forges > 1) - b.append("We are busy working on your "); + b.append("We are busy working on your **"); else - b.append("I am busy working on your "); + b.append("I am busy working on your **"); b.append(getWorkingName(member)); - b.append(".\n"); + b.append("**.\n"); if (questions < 1) return b.toString(); @@ -255,7 +287,7 @@ class Blacksmith extends Farm { if (questions >= 5) { double progress = getProgress(member); - b.append("I am about " + + Math.round(100*progress) + "** of the way to finishing.\n"); + b.append("I am about **" + + Math.round(100*progress) + "%** of the way to finishing.\n"); } if (questions == 6) @@ -309,12 +341,14 @@ class Blacksmith extends Farm { if (questions == 100) b.append("This is the 100th time you've asked... I'm sure you are proud of yourself"); - if (questions >= 500) + if (questions >= 500 && questions <= 510) return "You have asked me too many times. No more updates sorry."; + if (questions == 511) + return "Ok fine. Come back later and I will tell you"; + return b.toString(); } - } diff --git a/src/main/java/net/uomc/mineshaft/blacksmith/BlacksmithCommand.java b/src/main/java/net/uomc/mineshaft/blacksmith/BlacksmithCommand.java index db57d55..68f7497 100644 --- a/src/main/java/net/uomc/mineshaft/blacksmith/BlacksmithCommand.java +++ b/src/main/java/net/uomc/mineshaft/blacksmith/BlacksmithCommand.java @@ -3,6 +3,7 @@ package net.uomc.mineshaft.blacksmith; import java.awt.Color; import java.util.Arrays; +import java.util.Collections; import java.util.List; import java.util.Map; import java.util.stream.Stream; @@ -12,6 +13,7 @@ import com.mouldycheerio.dbot.commands.CommandDetails; import com.mouldycheerio.dbot.commands.CommandFail; import com.mouldycheerio.dbot.commands.DetailedCommand; import com.mouldycheerio.dbot.util.PeelingUtils; +import com.vdurmont.emoji.EmojiParser; import net.dv8tion.jda.api.EmbedBuilder; import net.dv8tion.jda.api.entities.Member; @@ -61,16 +63,24 @@ public class BlacksmithCommand extends DetailedCommand { long forges = bot.getItem(m, MineshaftItem.FORGE); - EmbedBuilder em = new EmbedBuilder(); - em.setTitle(COMMAND_TITLE); - em.setThumbnail(COMMAND_IMAGE); - em.setColor(COMMAND_COLOUR); + EmbedBuilder em = createEmbedTemplate(); blacksmith.update(m); if (blacksmith.isWorking(m)) { - if (blacksmith.isReady(m)) { - // do get new sword + int collect = blacksmith.collect(m); + if (collect != 0) { + String itemName = collect > 0 ? "Sword" : "Armour"; + String levelName = collect > 0 ? bot.getSword(m).getName() : bot.getArmour(m).getName(); + String fullName = levelName + " " + itemName; + em.setDescription("I have finished your **" + fullName + "**, use it well!"); + if (collect > 0 && bot.getSword(m).getLevel() == 1) { + em.setFooter("You equipped " + fullName); + } else { + em.setFooter(EmojiParser.parseToUnicode(":bulb:") + "You can now fight players with m!pvp"); + } + + e.getMessage().replyEmbeds(em.build()).queue(); return; } @@ -80,30 +90,32 @@ public class BlacksmithCommand extends DetailedCommand { return; } - if (args.length > 1 && "upgrade".equalsIgnoreCase(args[0])) { + if (args.length > 0 && "upgrade".equalsIgnoreCase(args[0])) { if (forges < 1) { em.setDescription(String.format("Sorry, I can't work without a forge %s!", bot.getItem(MineshaftItem.FORGE).getSymbol())); + e.getMessage().replyEmbeds(em.build()).queue(); return; } if (!upgrade(e, argList)) bot.sendErrorMessage(e, String.format(":x: Usage `%supgrade [sword|armour]`", bot.getPrefixManager().getPrefix(e.getGuild()))); + return; } - em.appendDescription(String.format("Hello, I am your blacksmith. I can upgrade your tools and armour for you `%supgrade [sword|armour]`\n\n", + em.appendDescription(String.format("Hello, I am your blacksmith. I can upgrade your tools and armour for you `%supgrade [sword|armour]` \n\n", bot.getPrefixManager().getPrefix(e.getGuild()) )); - String swordName = "You have a **" + bot.getSword(m).getName() + " Sword**"; + String swordName = "You have a **" + bot.getSword(m).getName() + "** Sword"; Map swordUpgradeCost = blacksmith.getSwordUpgradeCost(m); if (bot.getSword(m).getLevel() == 0) { swordName = "**You have no sword**"; } - String armourName = "You have a **" + bot.getArmour(m).getName() + " Armour**"; + String armourName = "You have **" + bot.getArmour(m).getName() + "** Armour"; Map armourUpgradeCost = blacksmith.getArmourUpgradeCost(m); if (bot.getArmour(m).getLevel() == 0) { @@ -118,7 +130,7 @@ public class BlacksmithCommand extends DetailedCommand { em.appendDescription("\n"); - em.appendDescription(String.format("**%s**\n", armourName)); + em.appendDescription(String.format("%s\n", armourName)); if (blacksmith.canUpgradeArmour(m)) em.appendDescription(String.format("Upgrade to **%s** for **%s**\n", blacksmith.getNextArmourName(m), @@ -131,7 +143,7 @@ public class BlacksmithCommand extends DetailedCommand { String total = bot.prettyValue(MineshaftItem.BLACKSMITH, blacksmiths); if (forgeCount < blacksmiths) { em.appendDescription("**" + forgeCount + "/" + total + "** are able to work.\n"); - em.appendDescription("Get more " + bot.getItem(MineshaftItem.FORGE).getSymbol() + " so they can work!"); + em.appendDescription("Get more " + bot.getItem(MineshaftItem.FORGE).getSymbol() + " so they can work faster!"); } else { em.appendDescription("Your **" + total + "** are all able to work!"); } @@ -145,7 +157,75 @@ public class BlacksmithCommand extends DetailedCommand { } + private EmbedBuilder createEmbedTemplate() { + EmbedBuilder em = new EmbedBuilder(); + em.setTitle(COMMAND_TITLE); + em.setThumbnail(COMMAND_IMAGE); + em.setColor(COMMAND_COLOUR); + return em; + } + private boolean upgrade(MessageReceivedEvent e, List argList) { - throw new UnsupportedOperationException("Unimplemented method 'upgrade'"); + if (argList.size() < 2) { + return false; + } + + if (!argList.stream().anyMatch(x -> x.equalsIgnoreCase("armor") ||x.equalsIgnoreCase("armour") || x.equalsIgnoreCase("sword"))) { + return false; + } + + EmbedBuilder em = createEmbedTemplate(); + + boolean isSword = argList.get(1).equalsIgnoreCase("sword"); + String itemName = (isSword ? "sword" : "armour"); + Map cost = isSword ? getSwordCost(e) : getArmourCost(e); + + if (cost.size() == 0) { + em.setDescription(":x: Sorry but I can't upgrade your **" + itemName + "** any more!"); + e.getMessage().replyEmbeds(em.build()).queue();; + return true; + } + + if (!bot.hasItems(e.getMember(), cost)) { + em.setDescription("I need more materials to do this! \nYou are missing: **"); + + Map missing = bot.getMissingIngredients(e.getMember(), cost); + em.appendDescription(bot.createItemList(missing, "%s", ", ")); + em.appendDescription("**"); + e.getMessage().replyEmbeds(em.build()).queue(); + return true; + } + + bot.removeItems(e.getMember(), cost); + + if (isSword) { + blacksmith.upgradeSword(e.getMember()); + } else { + blacksmith.upgradeArmour(e.getMember()); + } + + em.setDescription("I am now going to be upgrading your **" + blacksmith.getWorkingName(e.getMember()) + "**! Come back later and I will let you know if its finished"); + em.setFooter("You unequipped your " + itemName); + e.getMessage().replyEmbeds(em.build()).queue();; + + return true; } + + + private Map getArmourCost(MessageReceivedEvent e) { + + if (!blacksmith.canUpgradeArmour(e.getMember())) { + return Collections.emptyMap(); + } + + return blacksmith.getArmourUpgradeCost(e.getMember()); + } + + private Map getSwordCost(MessageReceivedEvent e) { + if (!blacksmith.canUpgradeSword(e.getMember())) { + return Collections.emptyMap(); + } + + return blacksmith.getSwordUpgradeCost(e.getMember()); + } } -- cgit v1.2.3