summaryrefslogtreecommitdiff
path: root/src/main/java/net/uomc/mineshaft/SleepCommand.java
blob: 389e78b089e31deba076ac877fcf4b299b6631ea (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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
package net.uomc.mineshaft;

import java.awt.Color;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;

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 = 19;
	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.getPlayerStats().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.getMessage().replyEmbeds(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.putAll(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) {
                    em.appendDescription(bot.createItemList(award, "+%s"));

                    m.editMessageEmbeds(em.build()).queueAfter(2, TimeUnit.SECONDS, m2 -> {
                        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;
	}
}