summaryrefslogtreecommitdiff
path: root/src/main/java/net/uomc/mineshaft/EatCommand.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/net/uomc/mineshaft/EatCommand.java')
-rw-r--r--src/main/java/net/uomc/mineshaft/EatCommand.java134
1 files changed, 134 insertions, 0 deletions
diff --git a/src/main/java/net/uomc/mineshaft/EatCommand.java b/src/main/java/net/uomc/mineshaft/EatCommand.java
new file mode 100644
index 0000000..85a64e7
--- /dev/null
+++ b/src/main/java/net/uomc/mineshaft/EatCommand.java
@@ -0,0 +1,134 @@
+package net.uomc.mineshaft;
+
+import static java.util.Map.entry;
+import java.awt.Color;
+import java.util.Arrays;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import java.util.concurrent.TimeUnit;
+import java.util.stream.Collectors;
+
+import org.jetbrains.annotations.NotNull;
+
+import com.mouldycheerio.dbot.commands.CommandDetails;
+import com.mouldycheerio.dbot.commands.cooldowns.CooldownCommand;
+import com.mouldycheerio.dbot.commands.cooldowns.CooldownController;
+import com.mouldycheerio.dbot.util.PeelingUtils;
+import com.vdurmont.emoji.EmojiParser;
+
+import net.dv8tion.jda.api.EmbedBuilder;
+import net.dv8tion.jda.api.entities.Member;
+import net.dv8tion.jda.api.entities.MessageEmbed;
+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.uomc.mineshaft.resources.commands.LeaderBoardCommand;
+
+public class EatCommand extends CooldownCommand {
+
+ private static final UnicodeEmoji EAT_EMOJI = Emoji.fromUnicode(EmojiParser.parseToUnicode(":fork_and_knife:"));
+ private static final Color COMMAND_COLOR = PeelingUtils.hex2Rgb("#b23028");
+ private Mineshaft bot;
+ private Map<MineshaftItem, Long> edible;
+
+ public EatCommand(Mineshaft bot) {
+ super(bot);
+ setCommandDetails(CommandDetails.from("eat", "eat", "eat"));
+ this.bot = bot;
+ setCooldown(60l * 1000l);
+
+ edible = Map.ofEntries(
+ entry(MineshaftItem.POTATO, 1l),
+ entry(MineshaftItem.CARROT, 1l),
+ entry(MineshaftItem.FISH, 2l),
+ entry(MineshaftItem.COOKED_FISH, 10l),
+ entry(MineshaftItem.BAKED_POTATO, 8l)
+ );
+ }
+
+ @Override
+ public boolean trigger(MessageReceivedEvent e) {
+ String[] args = e.getMessage().getContentRaw().split("\\s+");
+ if (args.length > 1) {
+ String arg = String.join("_", Arrays.asList(Arrays.copyOfRange(args, 1, args.length)));
+
+ MineshaftItem item = MineshaftItem.valueOf(arg.toUpperCase());
+ if (item == null) {
+ bot.sendErrorMessage(e, ":x: Please provide a valid item! `m!eat [item]`");
+ return false;
+ }
+
+ return eat(e, item);
+ }
+
+ String edible = getEdibleItems(e.getMember());
+
+ if (edible.length() < 0) {
+ bot.sendErrorMessage(e, ":x: You have no edible items!");
+ return false;
+ }
+
+ EmbedBuilder em = new EmbedBuilder();
+ em.setColor(COMMAND_COLOR);
+ em.setTitle("Eat");
+ em.setDescription("Use `m!eat [item]` to eat an item! The following items can be eaten:\n\n");
+ em.appendDescription(edible);
+
+ e.getMessage().replyEmbeds(em.build()).queue();
+ return false;
+ }
+
+ public Mineshaft getBot() {
+ return bot;
+ }
+
+ public String getEdibleItems(Member m) {
+ return edible.entrySet().stream().filter(entry -> bot.hasItem(m, entry.getKey())).map(entry ->
+ bot.prettyValue(entry.getKey(), 1) + "🡒" + PlayerHealths.getHPString(entry.getValue())
+ ).collect(Collectors.joining("\n"));
+ }
+
+ public boolean eat(MessageReceivedEvent event, MineshaftItem item) {
+ Member member = event.getMember();
+ if (!bot.hasItem(member, item)) {
+ bot.sendErrorMessage(event, "You don't have any " + bot.getItem(item).getSymbol() + " to eat!");
+ return false;
+ }
+
+ if (!isEdible(item)) {
+ bot.sendErrorMessage(event, "This item not edible!");
+ return false;
+ }
+ long hp = bot.getHealths().getHP(member);
+
+ if (hp >= PlayerHealths.MAX_HP) {
+ bot.sendErrorMessage(event, "You can't eat this! You are already at " + PlayerHealths.getHPString(hp));
+ return false;
+ }
+
+ long itemHp = edible.get(item);
+ hp += itemHp;
+ if (hp > PlayerHealths.MAX_HP) {
+ hp = PlayerHealths.MAX_HP;
+ }
+
+ bot.removeItem(member, item, 1);
+ bot.getHealths().setHP(member, hp);
+
+ event.getMessage().addReaction(EAT_EMOJI).queue(r -> {
+ event.getMessage().reply(
+ EAT_EMOJI.getFormatted() + " You ate " + bot.prettyValue(item, 1) +
+ ". You are now on " + bot.getHealths().getHPString(member) + " (+" + itemHp + ")"
+ ).delay(10, TimeUnit.SECONDS)
+ .flatMap(m -> m.delete()).queue();
+ });
+
+ return true;
+ }
+
+ public boolean isEdible(MineshaftItem item) {
+ return edible.entrySet().stream().filter(entry -> entry.getKey() == item).findFirst().isPresent();
+ }
+}