From fff63aaea786a5f1c59bbf99c999a2aa7bb810e5 Mon Sep 17 00:00:00 2001 From: davidovski Date: Sun, 19 Oct 2025 16:16:05 +0100 Subject: Add farm, sleep and trade --- .../net/uomc/mineshaft/farm/CompostCommand.java | 136 +++++++++++++++++++++ 1 file changed, 136 insertions(+) create mode 100644 src/main/java/net/uomc/mineshaft/farm/CompostCommand.java (limited to 'src/main/java/net/uomc/mineshaft/farm/CompostCommand.java') 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 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 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 argList, long composters) { + Optional 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); + } + +} -- cgit v1.2.3