summaryrefslogtreecommitdiff
path: root/src/main/java/net/uomc/mineshaft/RobCommand.java
diff options
context:
space:
mode:
authordavidovski <david@davidovski.xyz>2025-10-19 16:16:05 +0100
committerdavidovski <david@davidovski.xyz>2025-10-19 16:16:05 +0100
commitfff63aaea786a5f1c59bbf99c999a2aa7bb810e5 (patch)
treeb8c55be02d1e1f8575f5434a254d1593ede63432 /src/main/java/net/uomc/mineshaft/RobCommand.java
parentda9ece80133a33aff456d30854adc095b8f303ab (diff)
Add farm, sleep and trade
Diffstat (limited to 'src/main/java/net/uomc/mineshaft/RobCommand.java')
-rw-r--r--src/main/java/net/uomc/mineshaft/RobCommand.java97
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());
}
}