blob: ace95e7239142aaac49cb503dcf04b4b64aa5689 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
|
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<Member> 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());
}
}
|