diff options
Diffstat (limited to 'src/main/java/net/uomc/mineshaft/RobCommand.java')
| -rw-r--r-- | src/main/java/net/uomc/mineshaft/RobCommand.java | 97 |
1 files changed, 22 insertions, 75 deletions
diff --git a/src/main/java/net/uomc/mineshaft/RobCommand.java b/src/main/java/net/uomc/mineshaft/RobCommand.java index 9ff8a12..ace95e7 100644 --- a/src/main/java/net/uomc/mineshaft/RobCommand.java +++ b/src/main/java/net/uomc/mineshaft/RobCommand.java @@ -27,12 +27,14 @@ import net.dv8tion.jda.api.events.message.MessageReceivedEvent; public class RobCommand extends CooldownCommand { - private static final int TO_PICK = 3; - private static final double MAX_AMOUNT_PERCENT = 0.35; 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); @@ -40,6 +42,7 @@ public class RobCommand extends CooldownCommand { this.bot = bot; setDetails(CommandDetails.from("kill,pvp,rob", "kill another player")); embedTitle = EmojiParser.parseToUnicode(":crossed_swords:"); + pvpEmoji = EmojiParser.parseToUnicode(":crossed_swords:"); } @Override @@ -62,86 +65,30 @@ public class RobCommand extends CooldownCommand { return false; } - String response = target.getAsMention() + " was slain by " + e.getAuthor().getAsMention(); - - Map<MineshaftItem, Long> rob = getRob(target); + e.getMessage().addReaction(Emoji.fromUnicode(pvpEmoji)).queue(); EmbedBuilder eb = new EmbedBuilder(); - eb.setTitle(embedTitle); - eb.getDescriptionBuilder().append(response); - eb.getDescriptionBuilder().append("\nThey dropped:\n\n"); - eb.getDescriptionBuilder().append(bot.createItemList(rob)); - eb.getDescriptionBuilder().append("\n\nSay `" + LOOT_STRING + "` to loot these items.\nHurry you only have " +PeelingUtils.formatTimeRelativeFromNow(DROP_DURATION_SECONDS * 1000l) + " to collect them!"); + eb.setTitle(pvpEmoji); + eb.getDescriptionBuilder().append(e.getAuthor().getAsMention() + " is fighting " + target.getAsMention() + "..." ); eb.setColor(bot.color); - e.getMessage().addReaction(Emoji.fromUnicode(EmojiParser.parseToUnicode(":crossed_swords:"))).queue(); - spawnDrop(e, eb.build(), target, rob); + 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; } - public Map<MineshaftItem, Long> getRob(Member member) { - Map<MineshaftItem, Long> rob = new HashMap<>(); - - Map<MineshaftItem, Long> inventory = bot.getInventory(member); - - int items = TO_PICK; - if (bot.getItem(member, MineshaftItem.XP) > 0) { - rob.put(MineshaftItem.XP, - (long) Math.ceil(bot.getItem(member, MineshaftItem.XP) * (Math.random() * MAX_AMOUNT_PERCENT)) - ); - items--; - } - - int random = new Random().nextInt(); - inventory.entrySet().stream().filter(e-> e.getValue() > 0 && e.getKey() != MineshaftItem.XP) - .sorted(Comparator.comparingInt(o -> System.identityHashCode(o) ^ random)) - .limit(items).collect(Collectors.toList()).forEach(e -> { - rob.put(e.getKey(), - (long) Math.ceil(e.getValue() * (Math.random() * MAX_AMOUNT_PERCENT)) - ); - }); - - - return rob; - } - - public void spawnDrop(MessageReceivedEvent event, MessageEmbed embed, Member target, Map<MineshaftItem, Long> rob) { - bot.removeItems(target, rob); - - event.getChannel().sendMessageEmbeds(embed).queue( m -> { - - EventWaiter eventWaiter = new EventWaiter(); - event.getChannel().getJDA().addEventListener(eventWaiter); - - eventWaiter.waitForEvent(MessageReceivedEvent.class, - e -> { - if (!e.getMessage().getContentRaw().equalsIgnoreCase(LOOT_STRING)) - return false; - - return true; - }, e -> { - bot.addItems(e.getMember(), rob); - bot.editMessage(m, embedTitle, e.getMember().getAsMention() + " claimed the loot!\n**" + bot.createItemList(rob, "+%s") + "**"); - cleanup(event.getChannel(), m); - }, DROP_DURATION_SECONDS, TimeUnit.SECONDS, () -> { - m.delete().queue(); - cleanup(event.getChannel(), m); - }); - }); - } - public void cleanup(MessageChannel channel, Message message) { - message.delete().queueAfter(60, TimeUnit.SECONDS); - - channel.getHistoryAfter(message, 100).queueAfter(1, TimeUnit.SECONDS, h -> { - ArrayList<Message> msgs = new ArrayList<Message>(); - h.getRetrievedHistory().forEach(m -> { - if (m.getContentRaw().equalsIgnoreCase(LOOT_STRING)) { - msgs.add(m); - } - }); - PeelingUtils.bulkDelte(channel, msgs); - }); - ; + private long getDamage(Member member) { + return (long) Math.ceil(MAX_DAMAGE * Math.random()); } } |
