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