diff options
| author | davidovski <david@davidovski.xyz> | 2025-10-19 16:16:05 +0100 |
|---|---|---|
| committer | davidovski <david@davidovski.xyz> | 2025-10-19 16:16:05 +0100 |
| commit | fff63aaea786a5f1c59bbf99c999a2aa7bb810e5 (patch) | |
| tree | b8c55be02d1e1f8575f5434a254d1593ede63432 /src/main/java/net/uomc/mineshaft/PlayerHealths.java | |
| parent | da9ece80133a33aff456d30854adc095b8f303ab (diff) | |
Add farm, sleep and trade
Diffstat (limited to 'src/main/java/net/uomc/mineshaft/PlayerHealths.java')
| -rw-r--r-- | src/main/java/net/uomc/mineshaft/PlayerHealths.java | 164 |
1 files changed, 164 insertions, 0 deletions
diff --git a/src/main/java/net/uomc/mineshaft/PlayerHealths.java b/src/main/java/net/uomc/mineshaft/PlayerHealths.java new file mode 100644 index 0000000..395f71a --- /dev/null +++ b/src/main/java/net/uomc/mineshaft/PlayerHealths.java @@ -0,0 +1,164 @@ +package net.uomc.mineshaft; + +import java.io.File; +import java.sql.SQLException; +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; + +import com.mouldycheerio.dbot.commands.CommandDetails; +import com.mouldycheerio.dbot.util.DatabaseUtils; +import com.mouldycheerio.dbot.util.PeelingUtils; +import com.vdurmont.emoji.EmojiManager; +import com.vdurmont.emoji.EmojiParser; + +import net.dv8tion.jda.api.EmbedBuilder; +import net.dv8tion.jda.api.entities.Member; +import net.dv8tion.jda.api.entities.Message; +import net.dv8tion.jda.api.entities.MessageEmbed; +import net.dv8tion.jda.api.events.message.MessageReceivedEvent; + +public class PlayerHealths { + + private static final String HP_TABLE = "hp"; + private static final String HP_EMOJI = "<:hp:1428837195329962115>"; + private String healthDb; + private Mineshaft bot; + + private static final long MAX_HP = 20; + + public PlayerHealths(Mineshaft bot) { + + this.bot = bot; + healthDb = (new File(bot.getDatadir(), "players.db")).getPath(); + initDB(); + + bot.getCommandController().addCommand(CommandDetails.from("hp,health"), (e, b, args) -> { + Member member = PeelingUtils.getSingleMentionFromArgs(e); + b.sendMessage(e, member.getEffectiveName() + "'s health", (member.equals(e.getMember()) ? "Your " : member.getEffectiveName() + "'s") + " health: " + getHPString(member)); + }); + } + + public void setHP(Member member, long value) { + try { + DatabaseUtils.putInKVtable(healthDb, HP_TABLE, member.getId() + ":" + member.getGuild().getId(), value); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + private long getHP(String member, String guild) { + try { + return DatabaseUtils.getInKVtable(healthDb, HP_TABLE, member + ":" + guild); + } catch (SQLException e) { + e.printStackTrace(); + } + return MAX_HP; + } + + public long getHP(Member member) { + return getHP(member.getId(), member.getGuild().getId()); + } + + public String getHPString(Member member) { + return getHPString(getHP(member)); + } + + public static String getHPString(long hp) { + return "**" + hp + HP_EMOJI + "**"; + } + + public long damage(MessageReceivedEvent event, Member member, long amount, String reason) { + long hp = getHP(member); + hp -= amount; + if (hp <= 0) { + killPlayer(event, member, reason); + setHP(member, MAX_HP); + } else { + setHP(member, hp); + } + return hp; + } + + public long damageAndDropIfKill(MessageReceivedEvent event, Member member, long amount, String reason, Map<MineshaftItem, Long> items) { + long hp = getHP(member); + hp -= amount; + if (hp <= 0) { + killPlayerAndDrop(event, member, reason, items); + setHP(member, MAX_HP); + } else { + setHP(member, hp); + } + return hp; + } + + public long damageAndDropIfKill(Message message, Member member, long amount, String reason, Map<MineshaftItem, Long> items) { + long hp = getHP(member); + hp -= amount; + if (hp <= 0) { + killPlayerAndDrop(message, member, reason, items); + setHP(member, MAX_HP); + } else { + setHP(member, hp); + } + return hp; + } + + public long damage(Message message, Member member, long amount, String reason) { + long hp = getHP(member); + hp -= amount; + if (hp <= 0) { + killPlayer(message, member, reason); + setHP(member, MAX_HP); + } else { + setHP(member, hp); + } + return hp; + } + + private void initDB() { + try { + DatabaseUtils.createSimpleKVtable(healthDb, HP_TABLE); + } catch (SQLException e) { + } + } + + public void killPlayerAndDrop(Message message, Member member, String deathMessage, Map<MineshaftItem, Long> items) { + + Map<MineshaftItem, Long> drops = DropUtil.getDeathDrops(bot, member); + drops = bot.sumItems(drops, items); + + bot.removeItems(member, drops); + + if (message != null && !message.getEmbeds().isEmpty()) { + EmbedBuilder builder = new EmbedBuilder(message.getEmbeds().getFirst()); + builder.appendDescription("\n" + deathMessage + "\n"); + MessageEmbed embed = DropUtil.getDropEmbed(bot, drops, builder.build()); + DropUtil.spawnDropEdit(bot, message, embed, drops); + return; + } + String title = getDeathTitle(member, deathMessage); + + MessageEmbed embed = DropUtil.getDropEmbed(bot, drops, deathMessage, title); + DropUtil.spawnDrop(bot, message.getChannel(), embed, drops); + } + + public void killPlayerAndDrop(MessageReceivedEvent event, Member member, String deathMessage, Map<MineshaftItem, Long> items) { + killPlayerAndDrop((Message) null, member, deathMessage, items); + } + + public void killPlayer(MessageReceivedEvent event, Member member, String deathMessage ) { + killPlayerAndDrop(event, member, deathMessage, new HashMap<>()); + } + public void killPlayer(Message message, Member member, String deathMessage ) { + killPlayerAndDrop(message, member, deathMessage, new HashMap<>()); + } + + private String getDeathTitle(Member member, String deathMessage) { + String title = member.getEffectiveName() + " has died!"; + if (EmojiManager.containsEmoji(deathMessage)) { + title = EmojiParser.extractEmojis(deathMessage).getFirst(); + } + return title; + } +} |
