From fff63aaea786a5f1c59bbf99c999a2aa7bb810e5 Mon Sep 17 00:00:00 2001 From: davidovski Date: Sun, 19 Oct 2025 16:16:05 +0100 Subject: Add farm, sleep and trade --- src/main/java/net/uomc/mineshaft/SleepCommand.java | 128 +++++++++++++++++++++ 1 file changed, 128 insertions(+) create mode 100644 src/main/java/net/uomc/mineshaft/SleepCommand.java (limited to 'src/main/java/net/uomc/mineshaft/SleepCommand.java') 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 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; + } +} -- cgit v1.2.3