summaryrefslogtreecommitdiff
path: root/src/main/java/net/uomc/mineshaft/SleepCommand.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/SleepCommand.java
parentda9ece80133a33aff456d30854adc095b8f303ab (diff)
Add farm, sleep and trade
Diffstat (limited to 'src/main/java/net/uomc/mineshaft/SleepCommand.java')
-rw-r--r--src/main/java/net/uomc/mineshaft/SleepCommand.java128
1 files changed, 128 insertions, 0 deletions
diff --git a/src/main/java/net/uomc/mineshaft/SleepCommand.java b/src/main/java/net/uomc/mineshaft/SleepCommand.java
new file mode 100644
index 0000000..ef97b8b
--- /dev/null
+++ b/src/main/java/net/uomc/mineshaft/SleepCommand.java
@@ -0,0 +1,128 @@
+package net.uomc.mineshaft;
+
+import java.awt.Color;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+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.MessageEmbed;
+import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
+
+public class SleepCommand extends CooldownCommand {
+
+ private static final Color COMMAND_COLOR = PeelingUtils.hex2Rgb("#b23028");
+ private static final String COMMAND_TITLE = "Sleep";
+ private static final String COMMAND_IMAGE = "https://minecraft.wiki/images/thumb/Red_Bed_%28N%29.png/300px-Red_Bed_%28N%29.png";
+ private static final double REDUCTION = 0.25;
+ private static final int MAX_ITEMS_DROP = 10;
+ private static final int MIN_ITEMS_DROP = 3;
+ private static final long MAX_DAMAGE = 30;
+ private static final long MIN_DAMAGE = 20;
+ private Mineshaft bot;
+ private static final String damageEmoji = EmojiParser.parseToUnicode(":fire:");
+
+ private long explodeCooldown;
+
+ public SleepCommand(Mineshaft bot) {
+ super(bot);
+ setCommandDetails(CommandDetails.from("sleep", "go sleep", "sleep"));
+ this.bot = bot;
+ setCooldown(6l * 60l * 60l * 1000l);
+ setExplodeCooldown(60l * 1000l);
+ }
+
+ @Override
+ public boolean trigger(MessageReceivedEvent e) {
+
+ long beds = bot.getItem(e.getMember(), MineshaftItem.BED);
+
+ if (beds < 1) {
+ bot.sendErrorMessage(e, ":x: You need to have at least **"
+ + bot.getItem(MineshaftItem.BED).prettyValue(1)
+ + "** to use this!");
+ return false;
+ }
+
+ if (bot.getPickaxes().isNether(e.getMember())) {
+ long damage = (long) Math.ceil((MAX_DAMAGE-MIN_DAMAGE)*Math.random() + MIN_DAMAGE);
+ String actionString = "Your bed exploded! " + PlayerHealths.getHPString(-damage) + "\n";
+ EmbedBuilder em = new EmbedBuilder();
+ em.setTitle(COMMAND_TITLE);
+ em.setColor(COMMAND_COLOR);
+ em.setThumbnail(COMMAND_IMAGE);
+ em.setDescription(actionString);
+
+ bot.removeItem(e.getMember(), MineshaftItem.BED, 1);
+
+ e.getChannel().sendMessageEmbeds(em.build()).queue(m -> {
+
+ int itemsDrop = (int) (Math.random() * (MAX_ITEMS_DROP-MIN_ITEMS_DROP) + MIN_ITEMS_DROP);
+ Map<MineshaftItem, Long> award = new LinkedHashMap<>();
+ for (int i = 0; i < itemsDrop; ++i) {
+ award = bot.sumItems(award,
+ bot.getMineCommand().getAwards(null,
+ bot.getMineCommand().getOre(
+ null, true)));
+ }
+
+ long finalHP = bot.getHealths().damageAndDropIfKill(m, e.getMember(), damage, damageEmoji + " " + e.getMember().getAsMention() + " died to Intentional Game Design", award);
+
+ if (finalHP > 0) {
+ bot.addItems(e.getMember(), award);
+
+ MessageEmbed embed = DropUtil.getDropEmbed(bot, award, em.build());
+ DropUtil.spawnDropEdit(bot, m, embed, award);
+ }
+ });
+
+
+ getCooldownController().setNextTrigger(e.getMember(), this, System.currentTimeMillis() + getExplodeCooldown());
+ return false;
+ }
+
+ CooldownController cc = bot.getCommandController().getCooldownController();
+
+ cc.getTimers(e.getMember()).forEach(t -> {
+ long next = cc.getNextTime(e.getMember(), t);
+ long duration = next - System.currentTimeMillis();
+ if (duration > 0) {
+ long newTimer = System.currentTimeMillis() + (long) Math.floor(duration * (1-REDUCTION));
+ cc.setNextTrigger(e.getMember(), t, newTimer);
+ }
+ });
+
+ EmbedBuilder em = new EmbedBuilder();
+ em.setTitle(COMMAND_TITLE);
+ em.setColor(COMMAND_COLOR);
+ em.setThumbnail(COMMAND_IMAGE);
+ em.setDescription("You went to sleep\n\nCooldowns have been reduced by **" + ((int) Math.round(REDUCTION * 100)) + "%**:\n\n" + bot.getCooldownsString(e.getMember(), List.of("sleep")));
+
+ e.getMessage().replyEmbeds(em.build()).queue();
+ return true;
+ }
+
+ public Mineshaft getBot() {
+ return bot;
+ }
+
+ public static String getDamageemoji() {
+ return damageEmoji;
+ }
+
+ public long getExplodeCooldown() {
+ return explodeCooldown;
+ }
+
+ public void setExplodeCooldown(long explodeCooldown) {
+ this.explodeCooldown = explodeCooldown;
+ }
+}