summaryrefslogtreecommitdiff
path: root/src/main/java/net/uomc/mineshaft/farm/CompostCommand.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/net/uomc/mineshaft/farm/CompostCommand.java')
-rw-r--r--src/main/java/net/uomc/mineshaft/farm/CompostCommand.java136
1 files changed, 136 insertions, 0 deletions
diff --git a/src/main/java/net/uomc/mineshaft/farm/CompostCommand.java b/src/main/java/net/uomc/mineshaft/farm/CompostCommand.java
new file mode 100644
index 0000000..0da607d
--- /dev/null
+++ b/src/main/java/net/uomc/mineshaft/farm/CompostCommand.java
@@ -0,0 +1,136 @@
+package net.uomc.mineshaft.farm;
+
+import java.awt.Color;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Optional;
+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 net.dv8tion.jda.api.EmbedBuilder;
+import net.dv8tion.jda.api.entities.Member;
+import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
+import net.uomc.mineshaft.Mineshaft;
+import net.uomc.mineshaft.MineshaftItem;
+
+public class CompostCommand extends CooldownCommand {
+
+ private static final Color COMMAND_COLOUR = PeelingUtils.hex2Rgb("#603a19");
+ private static final String COMMAND_IMAGE = "https://minecraft.wiki/images/Composter_JE1.png";
+ public static final int COMPOST_LEVEL = 7;
+ private static final String COMMAND_TITLE = "Composter";
+
+ Mineshaft bot;
+ List<MineshaftItem> compostable;
+
+ public CompostCommand(Mineshaft bot) {
+ super(bot);
+ setCommandDetails(CommandDetails.from("compost,compostor,composter", "access your compostor", "farm"));
+
+ setCooldown(1000l * 30l);
+
+ compostable = new ArrayList<>();
+ compostable.add(MineshaftItem.CARROT);
+ compostable.add(MineshaftItem.FISH);
+ compostable.add(MineshaftItem.POTATO);
+ compostable.add(MineshaftItem.CANE);
+
+ this.bot = bot;
+ }
+
+ @Override
+ public boolean trigger(MessageReceivedEvent e) {
+ long composters = bot.getItem(e.getMember(), MineshaftItem.COMPOSTER);
+ String[] args = e.getMessage().getContentRaw().split("\\s+");
+
+ if (composters < 1) {
+ bot.sendErrorMessage(e, ":x: You need to have at least **"
+ + bot.getItem(MineshaftItem.COMPOSTER).prettyValue(1)
+ + "** to use this!");
+ return false;
+ }
+
+ if (args.length > 1) {
+ List<String> argList = Arrays.asList(Arrays.copyOfRange(args, 1, args.length));
+
+ return compost(e, argList, composters);
+ }
+
+ StringBuilder description = new StringBuilder();
+ description.append(String.format("This is your compostor, level `%s`.\nUse `%scompost [item]` to compost your items\n\n", composters, bot.getPrefixManager().getPrefix(e.getGuild()), bot.getPrefixManager().getPrefix(e.getGuild())));
+
+ AtomicLong amount = new AtomicLong();
+ compostable.forEach(i -> {
+ long q = bot.getItem(e.getMember(), i);
+ if (q < 1) {
+ return;
+ }
+
+ long itemAmount = getMaxCompostable(e.getMember(), composters, i);
+ long bonemealAmount = (long) (itemAmount / COMPOST_LEVEL);
+
+ description.append(String.format("%s->%s\n", bot.getItem(i).prettyValue(itemAmount), bot.getItem(MineshaftItem.BONEMEAL).prettyValue(bonemealAmount)));
+ });
+
+ if (amount.get() == 0) {
+ description.append("*You have nothing that can be composted*");
+ }
+
+ EmbedBuilder em = new EmbedBuilder();
+ em.setTitle(COMMAND_TITLE);
+ em.setDescription(description);
+ em.setColor(COMMAND_COLOUR);
+ em.setThumbnail(COMMAND_IMAGE);
+
+ e.getMessage().replyEmbeds(em.build()).queue();
+ return false;
+ }
+
+ private boolean compost(MessageReceivedEvent e, List<String> argList, long composters) {
+ Optional<String> resourceName = argList.stream().findFirst();
+ if (resourceName.isEmpty())
+ return false;
+
+ MineshaftItem item = MineshaftItem.valueOf(resourceName.get().toUpperCase());
+ if (item == null) {
+ bot.sendErrorMessage(e, ":x: Please provide a valid item! `m!compost [item]`");
+ return false;
+ }
+
+ if (!compostable.contains(item)) {
+ bot.sendErrorMessage(e, ":x: This item cannot be composted");
+ return false;
+ }
+
+ long itemAmount = getMaxCompostable(e.getMember(), composters, item);
+
+ // should never happen technically
+ if (itemAmount > bot.getItem(item).get(e.getMember())) {
+ bot.sendErrorMessage(e, ":x: You dont have enough " + bot.getItem(item).getSymbol());
+ return true;
+ }
+
+ long bonemealAmount = (long) (itemAmount / COMPOST_LEVEL);
+
+ bot.removeItem(e.getMember(), item, itemAmount);
+ bot.addItem(e.getMember(), MineshaftItem.BONEMEAL, bonemealAmount);
+
+ String content = String.format(":white_check_mark: You turned %s into %s", bot.getItem(item).prettyValue(itemAmount), bot.getItem(MineshaftItem.BONEMEAL).prettyValue(bonemealAmount));
+ if (bot.getPickaxes().getFarmLevel(e.getMember()) < 1) {
+ content += "\nUse your bonemeal to expand your `m!farm`";
+ }
+ bot.sendSuccessMessage(e, content);
+
+ return true;
+
+ }
+
+ public long getMaxCompostable(Member m, long composters, MineshaftItem i) {
+ return Math.min(bot.getItem(m, i), composters*COMPOST_LEVEL);
+ }
+
+}