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; } }