diff options
Diffstat (limited to 'src/main/java/net/uomc/mineshaft/EatCommand.java')
| -rw-r--r-- | src/main/java/net/uomc/mineshaft/EatCommand.java | 134 |
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(); + } +} |
