package net.uomc.mineshaft; import java.util.ArrayList; import java.util.Comparator; import java.util.HashMap; import java.util.Map; import java.util.Optional; import java.util.Random; 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.util.PeelingUtils; import com.mouldycheerio.dbot.util.EventWaiter; import com.vdurmont.emoji.EmojiParser; import net.dv8tion.jda.api.EmbedBuilder; import net.dv8tion.jda.api.entities.Member; import net.dv8tion.jda.api.entities.Message; import net.dv8tion.jda.api.entities.MessageEmbed; import net.dv8tion.jda.api.entities.channel.middleman.MessageChannel; import net.dv8tion.jda.api.entities.emoji.Emoji; import net.dv8tion.jda.api.events.message.MessageReceivedEvent; public class RobCommand extends CooldownCommand { private static final long DROP_DURATION_SECONDS = 90; private static final String LOOT_STRING = "loot"; private static final long MAX_DAMAGE = 20; private Mineshaft bot; private @NotNull String embedTitle; private @NotNull String pvpEmoji; protected RobCommand(Mineshaft bot) { super(bot); setCooldown(60l * 30l * 1000l); this.bot = bot; setDetails(CommandDetails.from("kill,pvp,rob", "kill another player")); embedTitle = EmojiParser.parseToUnicode(":crossed_swords:"); pvpEmoji = EmojiParser.parseToUnicode(":crossed_swords:"); } @Override public boolean trigger(MessageReceivedEvent e) { String[] args = e.getMessage().getContentRaw().split(" "); if (args.length < 2) { e.getMessage().reply(":x: Please specify a target! `kill @user`").queue(); return false; } Optional mentionToMember = PeelingUtils.mentionToMember(args[1], e.getGuild()); if (!mentionToMember.isPresent()) { e.getMessage().reply(":x: Invalid Target! `kill @user`").queue(); return false; } Member target = mentionToMember.get(); if (bot.getPickaxes().isNether(target) != bot.getPickaxes().isNether(e.getMember())) { e.getMessage().reply(":x: You tried to kill " + target.getAsMention() + " but they were in a different dimension!").queue(); return false; } e.getMessage().addReaction(Emoji.fromUnicode(pvpEmoji)).queue(); EmbedBuilder eb = new EmbedBuilder(); eb.setTitle(pvpEmoji); eb.getDescriptionBuilder().append(e.getAuthor().getAsMention() + " is fighting " + target.getAsMention() + "..." ); eb.setColor(bot.color); long damage = getDamage(e.getMember()); String damageString = " (" + PlayerHealths.getHPString(-damage) + ")"; e.getMessage().replyEmbeds(eb.build()).delay(5, TimeUnit.SECONDS, e.getJDA().getRateLimitPool()).flatMap(m -> { String deathMessage = pvpEmoji + target.getAsMention() + " was slain by " + e.getAuthor().getAsMention() + damageString; long hp = bot.getHealths().damage(m, target, damage, deathMessage); return hp > 0; }, m -> { eb.setDescription(e.getAuthor().getAsMention() + " attacked " + target.getAsMention() + damageString + "\n\n" + "They are now on " + bot.getHealths().getHPString(target)); return m.editMessageEmbeds(eb.build()); }).queue(); return true; } private long getDamage(Member member) { return (long) Math.ceil(MAX_DAMAGE * Math.random()); } }