summaryrefslogtreecommitdiff
path: root/src/main/java/net/uomc/mineshaft/blacksmith
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/net/uomc/mineshaft/blacksmith')
-rw-r--r--src/main/java/net/uomc/mineshaft/blacksmith/Blacksmith.java72
-rw-r--r--src/main/java/net/uomc/mineshaft/blacksmith/BlacksmithCommand.java106
2 files changed, 146 insertions, 32 deletions
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<MineshaftItem, Long> 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<MineshaftItem, Long> 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<String> 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<MineshaftItem, Long> 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<MineshaftItem, Long> 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<MineshaftItem, Long> getArmourCost(MessageReceivedEvent e) {
+
+ if (!blacksmith.canUpgradeArmour(e.getMember())) {
+ return Collections.emptyMap();
+ }
+
+ return blacksmith.getArmourUpgradeCost(e.getMember());
+ }
+
+ private Map<MineshaftItem, Long> getSwordCost(MessageReceivedEvent e) {
+ if (!blacksmith.canUpgradeSword(e.getMember())) {
+ return Collections.emptyMap();
+ }
+
+ return blacksmith.getSwordUpgradeCost(e.getMember());
+ }
}