diff options
| author | davidovski <david@davidovski.xyz> | 2025-11-04 17:35:30 +0000 |
|---|---|---|
| committer | davidovski <david@davidovski.xyz> | 2025-11-04 17:35:30 +0000 |
| commit | 2e47a68b69fac942e4efd7b90f248e15f02f6a82 (patch) | |
| tree | 1753ffc8604689a97f02409efc17f297596bbc4f | |
| parent | 5a008748459e230de0e875afff59e3b92c7aca0c (diff) | |
update v0.6 pre
| -rw-r--r-- | pom.xml | 2 | ||||
| -rw-r--r-- | src/main/java/net/uomc/mineshaft/EatCommand.java | 7 | ||||
| -rw-r--r-- | src/main/java/net/uomc/mineshaft/FurnaceCommand.java | 5 | ||||
| -rw-r--r-- | src/main/java/net/uomc/mineshaft/PlayerStats.java | 11 | ||||
| -rw-r--r-- | src/main/java/net/uomc/mineshaft/RobCommand.java | 26 | ||||
| -rw-r--r-- | src/main/java/net/uomc/mineshaft/blacksmith/Blacksmith.java | 72 | ||||
| -rw-r--r-- | src/main/java/net/uomc/mineshaft/blacksmith/BlacksmithCommand.java | 106 | ||||
| -rw-r--r-- | src/main/java/net/uomc/mineshaft/crafting/Crafting.java | 28 | ||||
| -rw-r--r-- | src/main/java/net/uomc/mineshaft/farm/CompostCommand.java | 5 |
9 files changed, 226 insertions, 36 deletions
@@ -4,7 +4,7 @@ <modelVersion>4.0.0</modelVersion> <groupId>net.uomc.mineshaft</groupId> <artifactId>Mineshaft</artifactId> - <version>0.5.2</version> + <version>0.6.0</version> <packaging>jar</packaging> <properties> <maven.compiler.source>11</maven.compiler.source> diff --git a/src/main/java/net/uomc/mineshaft/EatCommand.java b/src/main/java/net/uomc/mineshaft/EatCommand.java index 85a64e7..626207e 100644 --- a/src/main/java/net/uomc/mineshaft/EatCommand.java +++ b/src/main/java/net/uomc/mineshaft/EatCommand.java @@ -65,6 +65,7 @@ public class EatCommand extends CooldownCommand { String edible = getEdibleItems(e.getMember()); + if (edible.length() < 0) { bot.sendErrorMessage(e, ":x: You have no edible items!"); return false; @@ -92,6 +93,12 @@ public class EatCommand extends CooldownCommand { public boolean eat(MessageReceivedEvent event, MineshaftItem item) { Member member = event.getMember(); + + if (bot.getPlayerStats().isInBattle(member)) { + bot.sendErrorMessage(event, ":x: You can't eat until pvp is over!"); + return false; + } + if (!bot.hasItem(member, item)) { bot.sendErrorMessage(event, "You don't have any " + bot.getItem(item).getSymbol() + " to eat!"); return false; diff --git a/src/main/java/net/uomc/mineshaft/FurnaceCommand.java b/src/main/java/net/uomc/mineshaft/FurnaceCommand.java index 9212ac6..d3e1927 100644 --- a/src/main/java/net/uomc/mineshaft/FurnaceCommand.java +++ b/src/main/java/net/uomc/mineshaft/FurnaceCommand.java @@ -60,6 +60,7 @@ public class FurnaceCommand extends CooldownCommand { String description = "You came back to your **" + bot.getItem(MineshaftItem.FURNACE).prettyValue(furnaces) + "** and collected the ingots:\n"; + String awardsList = bot.createItemList(award, "+%s"); description += awardsList; @@ -69,6 +70,10 @@ public class FurnaceCommand extends CooldownCommand { em.setThumbnail(COMMAND_IMAGE); em.setColor(PeelingUtils.hex2Rgb("#5c5a5a")); + if (furnaces == 1) { + em.setFooter(EmojiParser.parseToUnicode(":bulb:") + "Craft more furnaces to get more rewards"); + } + e.getMessage().addReaction(Emoji.fromUnicode(EmojiParser.parseToUnicode(":fire:"))); bot.addItems(e.getMember(), award); e.getMessage().replyEmbeds(em.build()).queue(); diff --git a/src/main/java/net/uomc/mineshaft/PlayerStats.java b/src/main/java/net/uomc/mineshaft/PlayerStats.java index 40ef349..e1359e2 100644 --- a/src/main/java/net/uomc/mineshaft/PlayerStats.java +++ b/src/main/java/net/uomc/mineshaft/PlayerStats.java @@ -12,6 +12,8 @@ public class PlayerStats { public static final String DIMENSION_TABLE = "dimension"; public static final String FARM_LEVEL_TABLE = "farms"; + private static final String BATTLE_TABLE = "fighting"; + private String playersDb; private Map<String, SavedStat> stats; @@ -73,6 +75,15 @@ public class PlayerStats { public boolean isNether(Member member) { return getStat(DIMENSION_TABLE).get(member) == 1; } + + public void setInBattle(Member member, boolean battle) { + getStat(BATTLE_TABLE).set(member, battle ? 1 : 0); + } + + public boolean isInBattle(Member member) { + return getStat(BATTLE_TABLE).get(member) == 1; + } + public String getDbPath() { return playersDb; diff --git a/src/main/java/net/uomc/mineshaft/RobCommand.java b/src/main/java/net/uomc/mineshaft/RobCommand.java index bfc0c51..d87f097 100644 --- a/src/main/java/net/uomc/mineshaft/RobCommand.java +++ b/src/main/java/net/uomc/mineshaft/RobCommand.java @@ -17,6 +17,7 @@ import net.dv8tion.jda.api.entities.emoji.Emoji; import net.dv8tion.jda.api.entities.emoji.UnicodeEmoji; import net.dv8tion.jda.api.events.message.MessageReceivedEvent; import net.dv8tion.jda.api.events.message.react.MessageReactionAddEvent; +import net.uomc.mineshaft.blacksmith.Sword; public class RobCommand extends CooldownCommand { @@ -59,11 +60,21 @@ public class RobCommand extends CooldownCommand { } if (!canFight(e.getMember())) { - e.getMessage().reply(":x: You tried to kill " + target.getAsMention() - + " you don't have a sword to fight with!\nUse `m!blacksmith` to forge one").queue(); + e.getMessage().reply(":x: You need at least "+ Sword.swordToEmoji(1) + "to fight.\nš” Use `m!blacksmith` to forge one").queue(); return false; } + if (bot.getPlayerStats().isInBattle(e.getMember())) { + e.getMessage().reply(":x: You are already fighting someone else!").queue(); + return false; + } + + if (bot.getPlayerStats().isInBattle(target)) { + e.getMessage().reply(":x: " + target.getAsMention() + " is already fighting someone else!").queue(); + return false; + } + + if (bot.getPlayerStats().isNether(target) != bot.getPlayerStats().isNether(e.getMember())) { e.getMessage().reply( ":x: You tried to kill " + target.getAsMention() + " but they were in a different dimension!") @@ -73,6 +84,9 @@ public class RobCommand extends CooldownCommand { e.getMessage().addReaction(Emoji.fromUnicode(pvpEmoji)).queue(); + bot.getPlayerStats().setInBattle(target, true); + bot.getPlayerStats().setInBattle(e.getMember(), true); + EmbedBuilder eb = new EmbedBuilder(); eb.setTitle("pvp"); String startString = e.getAuthor().getAsMention() + " is fighting " + target.getAsMention() + "...\n\n"; @@ -117,6 +131,7 @@ public class RobCommand extends CooldownCommand { + " Managed to escape!\n"); message.editMessageEmbeds(eb.build()).queueAfter(1, TimeUnit.SECONDS, m -> { m.editMessageEmbeds(eb.build()).queue(); + endFight(target, e.getMember()); }); return; @@ -175,6 +190,7 @@ public class RobCommand extends CooldownCommand { long hp = bot.getHealths().damage(message, target, damage, deathMessage); if (hp <= 0) { + endFight(target, attacker); return; } @@ -186,10 +202,16 @@ public class RobCommand extends CooldownCommand { } else { eb.appendDescription("\n" + target.getAsMention() + " is now on " + bot.getHealths().getHPString(target)); message.editMessageEmbeds(eb.build()).queue(); + endFight(target, attacker); } return; } + private void endFight(Member target, Member attacker) { + bot.getPlayerStats().setInBattle(target, false); + bot.getPlayerStats().setInBattle(attacker, false); + } + public boolean canFight(Member member) { return bot.getSword(member).getLevel() != 0; } 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()); + } } diff --git a/src/main/java/net/uomc/mineshaft/crafting/Crafting.java b/src/main/java/net/uomc/mineshaft/crafting/Crafting.java index 9b257a2..67e95e2 100644 --- a/src/main/java/net/uomc/mineshaft/crafting/Crafting.java +++ b/src/main/java/net/uomc/mineshaft/crafting/Crafting.java @@ -73,6 +73,7 @@ public class Crafting extends DetailedCommand { CraftingRecipe.make(MineshaftItem.BED) .addIngredient(MineshaftItem.WOOL, 3l) .setUnlockCondition((m) -> bot.getItem(m, MineshaftItem.STRING) > 0) + .setBuyMessage("Use `" + bot.getCommandController().getPrefix() + "sleep` to reduce your cooldowns!") ); addRecipe( @@ -105,6 +106,26 @@ public class Crafting extends DetailedCommand { .addIngredient(MineshaftItem.PAPER, 27l) .setUnlockCondition((m) -> bot.getItem(m, MineshaftItem.PAPER) > 0) ); + + addRecipe( + CraftingRecipe.make(MineshaftItem.FORGE) + .addIngredient(MineshaftItem.IRON, 400l) + .setUnlockCondition((m) -> bot.getItem(m, MineshaftItem.BLACKSMITH) > 0) + ); + + addRecipe( + CraftingRecipe.make(MineshaftItem.BLACKSMITH) + .addIngredient(MineshaftItem.VILLAGER, 1l) + .addIngredient(MineshaftItem.COAL, 1600l) + .setUnlockCondition((m) -> bot.getItem(m, MineshaftItem.VILLAGER) > 0) + ); + + addRecipe( + CraftingRecipe.make(MineshaftItem.CAMPFIRE) + .addIngredient(MineshaftItem.COAL, 400l) + .setUnlockCondition((m) -> bot.getItem(m, MineshaftItem.FISH) > 0 + || bot.getItem(m, MineshaftItem.POTATO) > 0) + ); } @@ -182,11 +203,16 @@ public class Crafting extends DetailedCommand { return; } + String hintMessage = "š”" + recipe.getBuyMessage(); + if (bot.hasItem(e.getMember(), recipe.getItem())) { + hintMessage = ""; + } + bot.removeItems(e.getMember(), bot.multiply(recipe.getIngredients(), amount)); bot.addItem(e.getMember(), recipe.getItem(), recipe.getQuantity() * amount); bot.sendSuccessMessage(e, "You crafted " + bot.getItem(recipe.getItem()).prettyValue(recipe.getQuantity() * amount) - + "!\n" + recipe.getBuyMessage() + + "!\n" + hintMessage ); } diff --git a/src/main/java/net/uomc/mineshaft/farm/CompostCommand.java b/src/main/java/net/uomc/mineshaft/farm/CompostCommand.java index ce5deea..79e41ee 100644 --- a/src/main/java/net/uomc/mineshaft/farm/CompostCommand.java +++ b/src/main/java/net/uomc/mineshaft/farm/CompostCommand.java @@ -10,6 +10,7 @@ import java.util.concurrent.atomic.AtomicLong; import com.mouldycheerio.dbot.commands.CommandDetails; import com.mouldycheerio.dbot.commands.cooldowns.CooldownCommand; import com.mouldycheerio.dbot.util.PeelingUtils; +import com.vdurmont.emoji.EmojiParser; import net.dv8tion.jda.api.EmbedBuilder; import net.dv8tion.jda.api.entities.Member; @@ -86,6 +87,10 @@ public class CompostCommand extends CooldownCommand { em.setColor(COMMAND_COLOUR); em.setThumbnail(COMMAND_IMAGE); + if (composters == 0) { + em.setFooter(EmojiParser.parseToUnicode(":bulb:") + "Craft more composters to compost more at a time! "); + } + e.getMessage().replyEmbeds(em.build()).queue(); return false; } |
