diff options
| author | davidovski <david@davidovski.xyz> | 2025-10-31 17:49:48 +0000 |
|---|---|---|
| committer | davidovski <david@davidovski.xyz> | 2025-10-31 17:49:48 +0000 |
| commit | 5a008748459e230de0e875afff59e3b92c7aca0c (patch) | |
| tree | 0d09aebd1bb5628237959a6d1b49d1a7772d86a6 /src/main/java/net/uomc/mineshaft/PlayerHealths.java | |
| parent | fff63aaea786a5f1c59bbf99c999a2aa7bb810e5 (diff) | |
Work on v0.6
Diffstat (limited to 'src/main/java/net/uomc/mineshaft/PlayerHealths.java')
| -rw-r--r-- | src/main/java/net/uomc/mineshaft/PlayerHealths.java | 131 |
1 files changed, 73 insertions, 58 deletions
diff --git a/src/main/java/net/uomc/mineshaft/PlayerHealths.java b/src/main/java/net/uomc/mineshaft/PlayerHealths.java index 395f71a..0b3af79 100644 --- a/src/main/java/net/uomc/mineshaft/PlayerHealths.java +++ b/src/main/java/net/uomc/mineshaft/PlayerHealths.java @@ -1,13 +1,12 @@ package net.uomc.mineshaft; -import java.io.File; -import java.sql.SQLException; +import java.util.Arrays; import java.util.HashMap; import java.util.Map; import java.util.Optional; +import java.util.Collections; 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; @@ -21,43 +20,41 @@ 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; + public static final String HP_EMOJI = "<:hp:1428837195329962115>"; private Mineshaft bot; - private static final long MAX_HP = 20; + public static final long MAX_HP = 20; + + private SavedStat healthStat; public PlayerHealths(Mineshaft bot) { this.bot = bot; - healthDb = (new File(bot.getDatadir(), "players.db")).getPath(); - initDB(); + healthStat = bot.getPlayerStats().getStat(HP_TABLE); + healthStat.setDefaultValue(MAX_HP); bot.getCommandController().addCommand(CommandDetails.from("hp,health"), (e, b, args) -> { Member member = PeelingUtils.getSingleMentionFromArgs(e); + + + if (e.getMember().getId().equals(b.getOwnerID())){ + Optional<Long> amount = Arrays.asList(args).stream().filter(s -> PeelingUtils.isLong(s)).map(s -> Long.parseLong(s)) + .findFirst(); + if (!amount.isEmpty()) { + setHP(member, amount.get()); + } + } + 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; + healthStat.set(member, value); } public long getHP(Member member) { - return getHP(member.getId(), member.getGuild().getId()); + return healthStat.get(member); } public String getHPString(Member member) { @@ -68,65 +65,82 @@ public class PlayerHealths { 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); + public long calculateDamage(Member member, long damage) { + return calculateDamage(member, null, true, damage); + } + + public long calculateDamage(Member member, boolean countArmour, long damage) { + return calculateDamage(member, null, countArmour, damage); + } + + public long calculateDamage(Member target, Member attacker, boolean countArmour, long damage) { + return calculateDamage(target, attacker, countArmour, true, damage); + } + + public long calculateDamage(Member target, Member attacker, boolean countArmour, boolean randomise, long damage) { + long bonus = 0; + if (attacker != null) { + bonus = bot.getSword(attacker).getDamageBonus(); } - return hp; + double n = 1; + + if (randomise) { + n = Math.random(); + } + + return (long) (n * Math.abs(damage)) + bonus - bot.getArmour(target).getDamageReduction(); + } + + public long damage(MessageReceivedEvent event, Member member, long amount, String reason) { + return damageAndDropIfKill(event, member, amount, reason, Collections.emptyMap()); } 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 { + + long hp = getHP(member) - amount; + + if (hp > 0) { setHP(member, hp); + return hp; } + + killPlayerAndDrop(event, member, reason, items); + 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 { + + if (hp > 0) { setHP(member, hp); + return hp; } + + killPlayerAndDrop(message, member, reason, items); 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 { + long hp = getHP(member) - amount; + + if (hp > 0) { setHP(member, hp); + return hp; } - return hp; - } - private void initDB() { - try { - DatabaseUtils.createSimpleKVtable(healthDb, HP_TABLE); - } catch (SQLException e) { - } + killPlayer(message, member, reason); + return hp; } public void killPlayerAndDrop(Message message, Member member, String deathMessage, Map<MineshaftItem, Long> items) { + setHP(member, MAX_HP); Map<MineshaftItem, Long> drops = DropUtil.getDeathDrops(bot, member); - drops = bot.sumItems(drops, items); + + if (!items.isEmpty()) + drops = bot.sumItems(drops, items); bot.removeItems(member, drops); @@ -137,6 +151,7 @@ public class PlayerHealths { DropUtil.spawnDropEdit(bot, message, embed, drops); return; } + String title = getDeathTitle(member, deathMessage); MessageEmbed embed = DropUtil.getDropEmbed(bot, drops, deathMessage, title); @@ -148,10 +163,10 @@ public class PlayerHealths { } public void killPlayer(MessageReceivedEvent event, Member member, String deathMessage ) { - killPlayerAndDrop(event, member, deathMessage, new HashMap<>()); + killPlayerAndDrop(event, member, deathMessage, Collections.emptyMap()); } public void killPlayer(Message message, Member member, String deathMessage ) { - killPlayerAndDrop(message, member, deathMessage, new HashMap<>()); + killPlayerAndDrop(message, member, deathMessage, Collections.emptyMap()); } private String getDeathTitle(Member member, String deathMessage) { |
