From dfb388f63f6bba205272da31d6df7ce20a89ddcf Mon Sep 17 00:00:00 2001
From: Nergly <84546680+Nergly@users.noreply.github.com>
Date: Fri, 18 Oct 2024 10:37:27 -0500
Subject: [PATCH 01/43] Updated for 1.21+
---
.idea/compiler.xml | 3 ---
.idea/jarRepositories.xml | 15 ++++++++-----
.idea/misc.xml | 3 ++-
.idea/modules.xml | 8 -------
pom.xml | 22 +++++++++++--------
.../dependencies/ListenerCombatLogX.java | 8 +++----
.../utilities/InventoryUtils.java | 20 ++++++++---------
7 files changed, 38 insertions(+), 41 deletions(-)
delete mode 100644 .idea/modules.xml
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
index 44fbaea..946ac0d 100644
--- a/.idea/compiler.xml
+++ b/.idea/compiler.xml
@@ -9,8 +9,5 @@
-
-
-
\ No newline at end of file
diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml
index 062f6b7..2d43911 100644
--- a/.idea/jarRepositories.xml
+++ b/.idea/jarRepositories.xml
@@ -11,21 +11,26 @@
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
diff --git a/.idea/misc.xml b/.idea/misc.xml
index eecc2ad..9f23a86 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -5,6 +5,7 @@
+
-
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
deleted file mode 100644
index a90fd61..0000000
--- a/.idea/modules.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 1c2c4bc..363362a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
4.0.0
com.backtobedrock
AugmentedHardcore
- 3.4.0
+ 3.4.1
jar
8
@@ -25,7 +25,11 @@
sirblobman-public
- https://nexus.sirblobman.xyz/repository/public/
+ https://nexus.sirblobman.xyz/public/
+
+
+ maven-central
+ https://oss.sonatype.org/content/groups/public
@@ -75,24 +79,24 @@
org.spigotmc
spigot-api
- 1.20.1-R0.1-SNAPSHOT
+ 1.21.1-R0.1-SNAPSHOT
provided
me.clip
placeholderapi
- 2.11.1
+ 2.11.6
provided
net.wesjd
anvilgui
- 1.9.0-SNAPSHOT
+ 1.10.2-SNAPSHOT
com.zaxxer
HikariCP
- 5.0.1
+ 5.1.0
provided
@@ -102,9 +106,9 @@
provided
- com.SirBlobman.combatlogx
- CombatLogX-API
- 10.0.0.0-SNAPSHOT
+ com.github.sirblobman.combatlogx
+ api
+ 11.4-SNAPSHOT
provided
diff --git a/src/com/backtobedrock/augmentedhardcore/eventListeners/dependencies/ListenerCombatLogX.java b/src/com/backtobedrock/augmentedhardcore/eventListeners/dependencies/ListenerCombatLogX.java
index aba446f..e2d430d 100644
--- a/src/com/backtobedrock/augmentedhardcore/eventListeners/dependencies/ListenerCombatLogX.java
+++ b/src/com/backtobedrock/augmentedhardcore/eventListeners/dependencies/ListenerCombatLogX.java
@@ -1,9 +1,9 @@
package com.backtobedrock.augmentedhardcore.eventListeners.dependencies;
-import com.SirBlobman.combatlogx.api.event.PlayerPunishEvent;
-import com.SirBlobman.combatlogx.api.event.PlayerReTagEvent;
-import com.SirBlobman.combatlogx.api.event.PlayerTagEvent;
-import com.SirBlobman.combatlogx.api.event.PlayerUntagEvent;
+import com.github.sirblobman.combatlogx.api.event.PlayerPunishEvent;
+import com.github.sirblobman.combatlogx.api.event.PlayerReTagEvent;
+import com.github.sirblobman.combatlogx.api.event.PlayerTagEvent;
+import com.github.sirblobman.combatlogx.api.event.PlayerUntagEvent;
import com.backtobedrock.augmentedhardcore.domain.Killer;
import com.backtobedrock.augmentedhardcore.eventListeners.AbstractEventListener;
import org.bukkit.Bukkit;
diff --git a/src/com/backtobedrock/augmentedhardcore/utilities/InventoryUtils.java b/src/com/backtobedrock/augmentedhardcore/utilities/InventoryUtils.java
index 2813297..0cb5fb4 100644
--- a/src/com/backtobedrock/augmentedhardcore/utilities/InventoryUtils.java
+++ b/src/com/backtobedrock/augmentedhardcore/utilities/InventoryUtils.java
@@ -8,8 +8,8 @@
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.inventory.meta.PotionMeta;
import org.bukkit.inventory.meta.SkullMeta;
-import org.bukkit.potion.PotionData;
-import org.bukkit.potion.PotionType;
+import org.bukkit.potion.PotionEffect;
+import org.bukkit.potion.PotionEffectType;
import java.util.List;
@@ -19,11 +19,10 @@ public static ItemStack createItem(Material material, String displayName, List lore,
public static ItemStack createPotion(String displayName, List lore) {
ItemStack item = new ItemStack(Material.POTION);
- PotionMeta sm = (PotionMeta) item.getItemMeta();
- if (sm != null) {
- sm.setBasePotionData(new PotionData(PotionType.SPEED));
- sm.addItemFlags(ItemFlag.HIDE_POTION_EFFECTS);
- sm.setDisplayName(displayName);
- sm.setLore(lore);
- item.setItemMeta(sm);
+ PotionMeta pm = (PotionMeta) item.getItemMeta();
+ if (pm != null) {
+ pm.addCustomEffect(new PotionEffect(PotionEffectType.SPEED, 3600, 1), true);
+ pm.setDisplayName(displayName);
+ pm.setLore(lore);
+ item.setItemMeta(pm);
}
return item;
}
From 142ee8738f85bdc21e8053b2563726e807d43c90 Mon Sep 17 00:00:00 2001
From: Jake Hoolz
Date: Sat, 30 Aug 2025 13:56:50 -0500
Subject: [PATCH 02/43] minor
---
pom.xml | 4 +-
.../augmentedhardcore/AugmentedHardcore.java | 4 +-
.../domain/data/PlayerData.java | 78 ++++++++++++-------
.../augmentedhardcore/guis/GuiMyStats.java | 2 +-
.../utilities/PlayerUtils.java | 4 +-
5 files changed, 59 insertions(+), 33 deletions(-)
diff --git a/pom.xml b/pom.xml
index 363362a..26875a0 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
4.0.0
com.backtobedrock
AugmentedHardcore
- 3.4.1
+ 3.4.2
jar
8
@@ -79,7 +79,7 @@
org.spigotmc
spigot-api
- 1.21.1-R0.1-SNAPSHOT
+ 1.21.8-R0.1-SNAPSHOT
provided
diff --git a/src/com/backtobedrock/augmentedhardcore/AugmentedHardcore.java b/src/com/backtobedrock/augmentedhardcore/AugmentedHardcore.java
index c91270f..a469dec 100644
--- a/src/com/backtobedrock/augmentedhardcore/AugmentedHardcore.java
+++ b/src/com/backtobedrock/augmentedhardcore/AugmentedHardcore.java
@@ -64,8 +64,8 @@ public void onEnable() {
//bstats metrics
Metrics metrics = new Metrics(this, 10843);
- metrics.addCustomChart(new Metrics.SingleLineChart("currently_ongoing_death_bans", () -> this.serverRepository.getServerDataSync().getTotalOngoingBans()));
- metrics.addCustomChart(new Metrics.SingleLineChart("total_death_bans", () -> this.serverRepository.getServerDataSync().getTotalDeathBans()));
+ metrics.addCustomChart(new Metrics.SingleLineChart("currently_ongoing_death_bans", () -> (Integer) this.serverRepository.getServerDataSync().getTotalOngoingBans()));
+ metrics.addCustomChart(new Metrics.SingleLineChart("total_death_bans", () -> (Integer) this.serverRepository.getServerDataSync().getTotalDeathBans()));
//PAPI
if (Bukkit.getPluginManager().getPlugin("PlaceholderAPI") != null) {
diff --git a/src/com/backtobedrock/augmentedhardcore/domain/data/PlayerData.java b/src/com/backtobedrock/augmentedhardcore/domain/data/PlayerData.java
index 07d68dd..ba435ff 100644
--- a/src/com/backtobedrock/augmentedhardcore/domain/data/PlayerData.java
+++ b/src/com/backtobedrock/augmentedhardcore/domain/data/PlayerData.java
@@ -438,33 +438,59 @@ private void gainMaxHealth(double amount, Player player) {
}
public void onCombatTag(Killer tagger, Player player) {
- if (this.isSpectatorBanned()) {
- return;
- }
-
- if (!this.plugin.getConfigurations().getCombatTagConfiguration().isUseCombatTag()) {
- return;
- }
-
- if (tagger == null) {
- return;
- }
-
- //check if combat tag self enabled and if self harming
- if (!this.plugin.getConfigurations().getCombatTagConfiguration().isCombatTagSelf() && tagger.getName().equals(this.player.getName())) {
- return;
- }
-
- //check if in disabled worlds
- if (this.plugin.getConfigurations().getCombatTagConfiguration().getDisableCombatTagInWorlds().contains(player.getWorld().getName().toLowerCase())) {
- return;
+ // 1) Spectator or disabled → do nothing
+ if (isSpectatorBanned()) return;
+ if (!plugin.getConfigurations().getCombatTagConfiguration().isUseCombatTag()) return;
+
+ // 2) Null or self-tagging disabled → do nothing
+ if (tagger == null) return;
+ if (!plugin.getConfigurations().getCombatTagConfiguration().isCombatTagSelf()
+ && tagger.getName().equals(player.getName())) return;
+
+ // 3) Disabled world → do nothing
+ String worldName = player.getWorld().getName().toLowerCase();
+ if (plugin.getConfigurations().getCombatTagConfiguration()
+ .getDisableCombatTagInWorlds()
+ .contains(worldName)) {
+ return;
+ }
+
+ // 4) Make sure our list exists
+ if (combatTag == null) {
+ combatTag = new ArrayList<>();
+ }
+
+ // 5) If we already have tags, restart them—filtering out and logging any nulls
+ if (!combatTag.isEmpty()) {
+ Iterator it = combatTag.iterator();
+ while (it.hasNext()) {
+ AbstractCombatTag tag = it.next();
+ if (tag != null) {
+ tag.restart(tagger);
+ } else {
+ plugin.getLogger().warning(
+ "[CombatTag] Found and removed null entry for player " + player.getName()
+ );
+ it.remove();
+ }
+ }
}
-
- if (!this.combatTag.isEmpty()) {
- this.combatTag.forEach(e -> e.restart(tagger));
- } else {
- this.combatTag = this.plugin.getMessages().getCombatTagNotificationsConfiguration(player, this, tagger);
- this.combatTag.forEach(AbstractCombatTag::start);
+ // 6) Otherwise, create and start new tags
+ else {
+ combatTag = plugin.getMessages()
+ .getCombatTagNotificationsConfiguration(player, this, tagger);
+ Iterator it = combatTag.iterator();
+ while (it.hasNext()) {
+ AbstractCombatTag tag = it.next();
+ if (tag != null) {
+ tag.start();
+ } else {
+ plugin.getLogger().warning(
+ "[CombatTag] Dropped null new‐tag for player " + player.getName()
+ );
+ it.remove();
+ }
+ }
}
}
diff --git a/src/com/backtobedrock/augmentedhardcore/guis/GuiMyStats.java b/src/com/backtobedrock/augmentedhardcore/guis/GuiMyStats.java
index 7ce7d42..119b52c 100644
--- a/src/com/backtobedrock/augmentedhardcore/guis/GuiMyStats.java
+++ b/src/com/backtobedrock/augmentedhardcore/guis/GuiMyStats.java
@@ -73,7 +73,7 @@ public void updateTimeTillNextMaxHealth(boolean update) {
Map placeholders = new HashMap() {{
put("max_health", Double.toString(plugin.getConfigurations().getMaxHealthConfiguration().getMaxHealth()));
put("min_health", Double.toString(plugin.getConfigurations().getMaxHealthConfiguration().getMinHealth()));
- put("current_max_health", playerData.getPlayer().getPlayer() == null ? "-" : Double.toString(playerData.getPlayer().getPlayer().getAttribute(Attribute.GENERIC_MAX_HEALTH).getBaseValue()));
+ put("current_max_health", playerData.getPlayer().getPlayer() == null ? "-" : Double.toString(playerData.getPlayer().getPlayer().getAttribute(Attribute.MAX_HEALTH).getBaseValue()));
put("time_till_next_max_health_long", MessageUtils.getTimeFromTicks(playerData.getTimeTillNextMaxHealth(), TimePattern.LONG));
put("time_till_next_max_health_short", MessageUtils.getTimeFromTicks(playerData.getTimeTillNextMaxHealth(), TimePattern.SHORT));
put("time_till_next_max_health_digital", MessageUtils.getTimeFromTicks(playerData.getTimeTillNextMaxHealth(), TimePattern.DIGITAL));
diff --git a/src/com/backtobedrock/augmentedhardcore/utilities/PlayerUtils.java b/src/com/backtobedrock/augmentedhardcore/utilities/PlayerUtils.java
index d2fbce1..9477efe 100644
--- a/src/com/backtobedrock/augmentedhardcore/utilities/PlayerUtils.java
+++ b/src/com/backtobedrock/augmentedhardcore/utilities/PlayerUtils.java
@@ -18,7 +18,7 @@ public static void openInventory(Player player, AbstractGui gui) {
public static void setMaxHealth(Player player, double rawAmount) {
AugmentedHardcore plugin = JavaPlugin.getPlugin(AugmentedHardcore.class);
- AttributeInstance attribute = player.getAttribute(Attribute.GENERIC_MAX_HEALTH);
+ AttributeInstance attribute = player.getAttribute(Attribute.MAX_HEALTH);
if (attribute != null) {
if (plugin.getConfigurations().getMaxHealthConfiguration().isUseMaxHealth()) {
rawAmount = Math.max(Math.min(rawAmount, plugin.getConfigurations().getMaxHealthConfiguration().getMaxHealth()), plugin.getConfigurations().getMaxHealthConfiguration().getMinHealth());
@@ -37,7 +37,7 @@ public static void setMaxHealth(Player player, double rawAmount) {
}
public static double getMaxHealth(Player player) {
- AttributeInstance attribute = player.getAttribute(Attribute.GENERIC_MAX_HEALTH);
+ AttributeInstance attribute = player.getAttribute(Attribute.MAX_HEALTH);
if (attribute != null) {
return attribute.getBaseValue();
}
From 070b20a914748c186cb869f594f2e773a4d663f9 Mon Sep 17 00:00:00 2001
From: Jake Hoolz <84546680+JakeHoolz@users.noreply.github.com>
Date: Sat, 30 Aug 2025 14:30:32 -0500
Subject: [PATCH 03/43] docs: add project description and guidelines
---
README.md | 36 ++++++++++++++++++++++++++++++++++++
1 file changed, 36 insertions(+)
diff --git a/README.md b/README.md
index 8b13789..2376372 100644
--- a/README.md
+++ b/README.md
@@ -1 +1,37 @@
+# AugmentedHardcore
+
+AugmentedHardcore is a [Spigot](https://www.spigotmc.org/) plugin that enhances Minecraft's hardcore mode with lives, death bans, revives, and progression mechanics.
+
+## Build
+
+This project uses Maven and requires Java 8 or newer. To build the plugin run:
+
+```bash
+mvn package
+```
+
+The shaded jar will be created in `target/`. Copy the jar to your server's `plugins` directory and restart the server.
+
+## Usage
+
+On first run the plugin will generate its configuration files. Adjust `config.yml` and `messages.yml` to customize behaviour.
+
+Handy commands include:
+
+- `/augmentedhardcore` – show help and plugin information
+- `/lives` – view your remaining lives
+- `/revive ` – revive a death‑banned player
+
+See the in‑game help for the complete command list and permissions.
+
+## Contributing
+
+Contributions are welcome! If you would like to help:
+
+1. Fork the repository and create a feature branch.
+2. Make your changes following the existing style.
+3. Run `mvn test` to make sure the project builds.
+4. Open a pull request with a clear description of your work.
+
+Please open an issue to discuss major changes before starting.
From b8de736d0a2544e55befd7c467f93cca72c4f16d Mon Sep 17 00:00:00 2001
From: Jake Hoolz <84546680+JakeHoolz@users.noreply.github.com>
Date: Sat, 30 Aug 2025 14:31:19 -0500
Subject: [PATCH 04/43] Log configuration update failures
---
.../augmentedhardcore/AugmentedHardcore.java | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/src/com/backtobedrock/augmentedhardcore/AugmentedHardcore.java b/src/com/backtobedrock/augmentedhardcore/AugmentedHardcore.java
index a469dec..baf6811 100644
--- a/src/com/backtobedrock/augmentedhardcore/AugmentedHardcore.java
+++ b/src/com/backtobedrock/augmentedhardcore/AugmentedHardcore.java
@@ -131,9 +131,13 @@ public void initialize() {
Files.copy(configFile.toPath(), copy.toPath());
ConfigUpdater.update(this, "config.yml", configFile, Arrays.asList("LifePartsPerKill", "MaxHealthIncreasePerKill"));
configFile = new File(this.getDataFolder(), "config.yml");
+ } catch (IOException e) {
+ getLogger().log(Level.SEVERE, "Failed to update config.yml", e);
+ }
+ try {
//messages.yml
- copy = new File(this.getDataFolder() + "/old/", "messages.old.yml");
+ File copy = new File(this.getDataFolder() + "/old/", "messages.old.yml");
if (copy.exists()) {
//noinspection ResultOfMethodCallIgnored
copy.delete();
@@ -142,7 +146,7 @@ public void initialize() {
ConfigUpdater.update(this, "messages.yml", messagesFile, Collections.emptyList());
messagesFile = new File(this.getDataFolder(), "messages.yml");
} catch (IOException e) {
- //ignore
+ getLogger().log(Level.SEVERE, "Failed to update messages.yml", e);
}
//initialize config and messages
From b79c5f6cc39bbda3fca67995b9578d0a46626c04 Mon Sep 17 00:00:00 2001
From: Jake Hoolz <84546680+JakeHoolz@users.noreply.github.com>
Date: Sat, 30 Aug 2025 14:33:03 -0500
Subject: [PATCH 05/43] Fix database initialization query iteration
---
src/com/backtobedrock/augmentedhardcore/AugmentedHardcore.java | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/com/backtobedrock/augmentedhardcore/AugmentedHardcore.java b/src/com/backtobedrock/augmentedhardcore/AugmentedHardcore.java
index a469dec..7422849 100644
--- a/src/com/backtobedrock/augmentedhardcore/AugmentedHardcore.java
+++ b/src/com/backtobedrock/augmentedhardcore/AugmentedHardcore.java
@@ -183,8 +183,9 @@ private void initDB() {
}
String[] queries = setup.split(";");
for (String query : queries) {
+ query = query.trim();
if (query.isEmpty()) {
- return;
+ continue;
}
try (Connection conn = this.getConfigurations().getDataConfiguration().getDatabase().getDataSource().getConnection();
PreparedStatement stmt = conn.prepareStatement(query)) {
From 4b60f5c21480c2649cfc9506c143ffedc23e35c0 Mon Sep 17 00:00:00 2001
From: Jake Hoolz <84546680+JakeHoolz@users.noreply.github.com>
Date: Sat, 30 Aug 2025 14:33:37 -0500
Subject: [PATCH 06/43] Close database on plugin shutdown
---
.../backtobedrock/augmentedhardcore/AugmentedHardcore.java | 4 ++++
.../backtobedrock/augmentedhardcore/domain/Database.java | 6 ++++++
2 files changed, 10 insertions(+)
diff --git a/src/com/backtobedrock/augmentedhardcore/AugmentedHardcore.java b/src/com/backtobedrock/augmentedhardcore/AugmentedHardcore.java
index a469dec..8b35249 100644
--- a/src/com/backtobedrock/augmentedhardcore/AugmentedHardcore.java
+++ b/src/com/backtobedrock/augmentedhardcore/AugmentedHardcore.java
@@ -86,6 +86,10 @@ public void onDisable() {
}
}
+ if (this.getConfigurations() != null && this.getConfigurations().getDataConfiguration().getDatabase() != null) {
+ this.getConfigurations().getDataConfiguration().getDatabase().close();
+ }
+
super.onDisable();
}
diff --git a/src/com/backtobedrock/augmentedhardcore/domain/Database.java b/src/com/backtobedrock/augmentedhardcore/domain/Database.java
index e67f066..f7a58c4 100644
--- a/src/com/backtobedrock/augmentedhardcore/domain/Database.java
+++ b/src/com/backtobedrock/augmentedhardcore/domain/Database.java
@@ -90,4 +90,10 @@ public HikariDataSource getDataSource() {
}
return this.dataSource;
}
+
+ public void close() {
+ if (this.dataSource != null) {
+ this.dataSource.close();
+ }
+ }
}
From e5d9b02382bb73b8b0503517b41e4a9ff0f0bc76 Mon Sep 17 00:00:00 2001
From: Jake Hoolz <84546680+JakeHoolz@users.noreply.github.com>
Date: Sat, 30 Aug 2025 14:34:26 -0500
Subject: [PATCH 07/43] refactor: inject plugin into PlayerData
---
.../domain/data/PlayerData.java | 35 +++++++++----------
.../mappers/player/MySQLPlayerMapper.java | 1 +
.../mappers/player/YAMLPlayerMapper.java | 4 +--
.../repositories/PlayerRepository.java | 2 +-
4 files changed, 21 insertions(+), 21 deletions(-)
diff --git a/src/com/backtobedrock/augmentedhardcore/domain/data/PlayerData.java b/src/com/backtobedrock/augmentedhardcore/domain/data/PlayerData.java
index ba435ff..7bf28e8 100644
--- a/src/com/backtobedrock/augmentedhardcore/domain/data/PlayerData.java
+++ b/src/com/backtobedrock/augmentedhardcore/domain/data/PlayerData.java
@@ -23,14 +23,13 @@
import org.bukkit.entity.Player;
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.entity.PlayerDeathEvent;
-import org.bukkit.plugin.java.JavaPlugin;
import org.javatuples.Pair;
import java.time.LocalDateTime;
import java.util.*;
public class PlayerData {
- private final AugmentedHardcore plugin = JavaPlugin.getPlugin(AugmentedHardcore.class);
+ private final AugmentedHardcore plugin;
private final OfflinePlayer player;
private final List playtime = new ArrayList<>();
private final Map, IObserver>> observers;
@@ -49,22 +48,24 @@ public class PlayerData {
private boolean spectatorBanned;
private LocalDateTime lastDeath;
- public PlayerData(OfflinePlayer player) {
+ public PlayerData(AugmentedHardcore plugin, OfflinePlayer player) {
this(
+ plugin,
player,
null,
LocalDateTime.now(),
- JavaPlugin.getPlugin(AugmentedHardcore.class).getConfigurations().getLivesAndLifePartsConfiguration().getLivesAtStart(),
- JavaPlugin.getPlugin(AugmentedHardcore.class).getConfigurations().getLivesAndLifePartsConfiguration().getLifePartsAtStart(),
+ plugin.getConfigurations().getLivesAndLifePartsConfiguration().getLivesAtStart(),
+ plugin.getConfigurations().getLivesAndLifePartsConfiguration().getLifePartsAtStart(),
false,
- JavaPlugin.getPlugin(AugmentedHardcore.class).getConfigurations().getReviveConfiguration().isReviveOnFirstJoin() ? 0L : JavaPlugin.getPlugin(AugmentedHardcore.class).getConfigurations().getReviveConfiguration().getTimeBetweenRevives(),
- JavaPlugin.getPlugin(AugmentedHardcore.class).getConfigurations().getLivesAndLifePartsConfiguration().getPlaytimePerLifePart(),
- JavaPlugin.getPlugin(AugmentedHardcore.class).getConfigurations().getMaxHealthConfiguration().getPlaytimePerHalfHeart(),
+ plugin.getConfigurations().getReviveConfiguration().isReviveOnFirstJoin() ? 0L : plugin.getConfigurations().getReviveConfiguration().getTimeBetweenRevives(),
+ plugin.getConfigurations().getLivesAndLifePartsConfiguration().getPlaytimePerLifePart(),
+ plugin.getConfigurations().getMaxHealthConfiguration().getPlaytimePerHalfHeart(),
new TreeMap<>()
);
}
- public PlayerData(OfflinePlayer player, String lastKnownIp, LocalDateTime lastDeath, int lives, int lifeParts, boolean spectatorBanned, long timeTillNextRevive, long timeTillNextLifePart, long timeTillNextMaxHealth, NavigableMap bans) {
+ public PlayerData(AugmentedHardcore plugin, OfflinePlayer player, String lastKnownIp, LocalDateTime lastDeath, int lives, int lifeParts, boolean spectatorBanned, long timeTillNextRevive, long timeTillNextLifePart, long timeTillNextMaxHealth, NavigableMap bans) {
+ this.plugin = plugin;
this.player = player;
this.lastDeath = lastDeath;
this.bans = bans;
@@ -81,9 +82,7 @@ public PlayerData(OfflinePlayer player, String lastKnownIp, LocalDateTime lastDe
this.lastKnownIp = lastKnownIp;
}
- public static PlayerData deserialize(ConfigurationSection section, OfflinePlayer player) {
- AugmentedHardcore plugin = JavaPlugin.getPlugin(AugmentedHardcore.class);
-
+ public static PlayerData deserialize(AugmentedHardcore plugin, ConfigurationSection section, OfflinePlayer player) {
NavigableMap cBans = new TreeMap<>();
String cLastKnownIp = section.getString("LastKnownIp", null);
LocalDateTime cLastDeath = LocalDateTime.parse(section.getString("LastDeath", LocalDateTime.now().toString()));
@@ -105,7 +104,7 @@ public static PlayerData deserialize(ConfigurationSection section, OfflinePlayer
}
}
- return new PlayerData(player, cLastKnownIp, cLastDeath, cLives, cLifeParts, cSpectatorBanned, cTimeTillNextRevive, cTimeTillNextLifePart, cTimeTillNextMaxHealth, cBans);
+ return new PlayerData(plugin, player, cLastKnownIp, cLastDeath, cLives, cLifeParts, cSpectatorBanned, cTimeTillNextRevive, cTimeTillNextLifePart, cTimeTillNextMaxHealth, cBans);
}
public long getTimeTillNextRevive() {
@@ -882,11 +881,11 @@ public void setSpectatorBanned(boolean spectatorBanned) {
}
public void reset() {
- this.setLives(JavaPlugin.getPlugin(AugmentedHardcore.class).getConfigurations().getLivesAndLifePartsConfiguration().getLivesAtStart());
- this.setLifeParts(JavaPlugin.getPlugin(AugmentedHardcore.class).getConfigurations().getLivesAndLifePartsConfiguration().getLifePartsAtStart());
- this.setTimeTillNextRevive(JavaPlugin.getPlugin(AugmentedHardcore.class).getConfigurations().getReviveConfiguration().isReviveOnFirstJoin() ? 0L : JavaPlugin.getPlugin(AugmentedHardcore.class).getConfigurations().getReviveConfiguration().getTimeBetweenRevives());
- this.setTimeTillNextLifePart(JavaPlugin.getPlugin(AugmentedHardcore.class).getConfigurations().getLivesAndLifePartsConfiguration().getPlaytimePerLifePart());
- this.setTimeTillNextMaxHealth(JavaPlugin.getPlugin(AugmentedHardcore.class).getConfigurations().getMaxHealthConfiguration().getPlaytimePerHalfHeart());
+ this.setLives(this.plugin.getConfigurations().getLivesAndLifePartsConfiguration().getLivesAtStart());
+ this.setLifeParts(this.plugin.getConfigurations().getLivesAndLifePartsConfiguration().getLifePartsAtStart());
+ this.setTimeTillNextRevive(this.plugin.getConfigurations().getReviveConfiguration().isReviveOnFirstJoin() ? 0L : this.plugin.getConfigurations().getReviveConfiguration().getTimeBetweenRevives());
+ this.setTimeTillNextLifePart(this.plugin.getConfigurations().getLivesAndLifePartsConfiguration().getPlaytimePerLifePart());
+ this.setTimeTillNextMaxHealth(this.plugin.getConfigurations().getMaxHealthConfiguration().getPlaytimePerHalfHeart());
this.bans.clear();
this.plugin.getServerRepository().getServerData(this.plugin.getServer()).thenAcceptAsync(serverData -> serverData.getBan(this.player.getUniqueId()).finish());
this.plugin.getPlayerRepository().deletePlayerData(this.player);
diff --git a/src/com/backtobedrock/augmentedhardcore/mappers/player/MySQLPlayerMapper.java b/src/com/backtobedrock/augmentedhardcore/mappers/player/MySQLPlayerMapper.java
index 1c4ad85..6320d20 100644
--- a/src/com/backtobedrock/augmentedhardcore/mappers/player/MySQLPlayerMapper.java
+++ b/src/com/backtobedrock/augmentedhardcore/mappers/player/MySQLPlayerMapper.java
@@ -56,6 +56,7 @@ private PlayerData getPlayerData(OfflinePlayer player) {
while (resultSet.next()) {
if (playerData == null) {
playerData = new PlayerData(
+ this.plugin,
player,
resultSet.getString("last_known_ip"),
resultSet.getTimestamp("last_death") == null ? LocalDateTime.now() : resultSet.getTimestamp("last_death").toLocalDateTime(),
diff --git a/src/com/backtobedrock/augmentedhardcore/mappers/player/YAMLPlayerMapper.java b/src/com/backtobedrock/augmentedhardcore/mappers/player/YAMLPlayerMapper.java
index 7782855..1ba4e8a 100644
--- a/src/com/backtobedrock/augmentedhardcore/mappers/player/YAMLPlayerMapper.java
+++ b/src/com/backtobedrock/augmentedhardcore/mappers/player/YAMLPlayerMapper.java
@@ -47,12 +47,12 @@ public void insertPlayerDataSync(PlayerData data) {
@Override
public CompletableFuture getByPlayer(OfflinePlayer player) {
- return CompletableFuture.supplyAsync(() -> PlayerData.deserialize(this.getConfig(player), player));
+ return CompletableFuture.supplyAsync(() -> PlayerData.deserialize(this.plugin, this.getConfig(player), player));
}
@Override
public PlayerData getByPlayerSync(OfflinePlayer player) {
- return PlayerData.deserialize(this.getConfig(player), player);
+ return PlayerData.deserialize(this.plugin, this.getConfig(player), player);
}
@Override
diff --git a/src/com/backtobedrock/augmentedhardcore/repositories/PlayerRepository.java b/src/com/backtobedrock/augmentedhardcore/repositories/PlayerRepository.java
index 0fc971f..6bc2e64 100644
--- a/src/com/backtobedrock/augmentedhardcore/repositories/PlayerRepository.java
+++ b/src/com/backtobedrock/augmentedhardcore/repositories/PlayerRepository.java
@@ -68,7 +68,7 @@ public PlayerData getByPlayerSync(OfflinePlayer player) {
private PlayerData getFromDataAndCache(OfflinePlayer player, PlayerData playerData) {
if (playerData == null) {
- playerData = new PlayerData(player);
+ playerData = new PlayerData(this.plugin, player);
if (player.hasPlayedBefore())
this.mapper.insertPlayerDataAsync(playerData);
}
From 22f42c8c861081d0076e14174a5ec522aef67ef5 Mon Sep 17 00:00:00 2001
From: Jake Hoolz <84546680+JakeHoolz@users.noreply.github.com>
Date: Sat, 30 Aug 2025 14:35:27 -0500
Subject: [PATCH 08/43] Add unit tests for Database and PlayerData
---
README.md | 10 +++
pom.xml | 33 +++++++++
.../domain/DatabaseTest.java | 47 +++++++++++++
.../domain/data/PlayerDataTest.java | 67 +++++++++++++++++++
4 files changed, 157 insertions(+)
create mode 100644 src/test/java/com/backtobedrock/augmentedhardcore/domain/DatabaseTest.java
create mode 100644 src/test/java/com/backtobedrock/augmentedhardcore/domain/data/PlayerDataTest.java
diff --git a/README.md b/README.md
index 8b13789..9d375ae 100644
--- a/README.md
+++ b/README.md
@@ -1 +1,11 @@
+# AugmentedHardcore
+This repository contains the AugmentedHardcore plugin. Unit tests are located in `src/test/java` and can be executed with Maven.
+
+## Running Tests
+
+```bash
+mvn test
+```
+
+The tests cover core components such as the `Database` and `PlayerData` classes. They rely on Mockito to mock Bukkit APIs where necessary.
diff --git a/pom.xml b/pom.xml
index 26875a0..63787cc 100644
--- a/pom.xml
+++ b/pom.xml
@@ -34,6 +34,7 @@
src
+ src/test/java
clean package
@@ -55,8 +56,16 @@
${java.version}
${java.version}
+
+ test/**
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+ 3.1.2
+
org.apache.maven.plugins
maven-shade-plugin
@@ -116,5 +125,29 @@
ConfigUpdater
2.1-SNAPSHOT
+
+ com.zaxxer
+ HikariCP
+ 5.1.0
+ test
+
+
+ org.junit.jupiter
+ junit-jupiter
+ 5.10.0
+ test
+
+
+ org.mockito
+ mockito-junit-jupiter
+ 5.5.0
+ test
+
+
+ org.mockito
+ mockito-inline
+ 5.2.0
+ test
+
\ No newline at end of file
diff --git a/src/test/java/com/backtobedrock/augmentedhardcore/domain/DatabaseTest.java b/src/test/java/com/backtobedrock/augmentedhardcore/domain/DatabaseTest.java
new file mode 100644
index 0000000..4755cc0
--- /dev/null
+++ b/src/test/java/com/backtobedrock/augmentedhardcore/domain/DatabaseTest.java
@@ -0,0 +1,47 @@
+package com.backtobedrock.augmentedhardcore.domain;
+
+import com.backtobedrock.augmentedhardcore.AugmentedHardcore;
+import com.zaxxer.hikari.HikariDataSource;
+import org.bukkit.configuration.ConfigurationSection;
+import org.bukkit.plugin.java.JavaPlugin;
+import org.junit.jupiter.api.Test;
+import org.mockito.MockedStatic;
+import org.mockito.Mockito;
+
+import java.util.logging.Logger;
+
+import static org.junit.jupiter.api.Assertions.*;
+import static org.mockito.Mockito.*;
+
+class DatabaseTest {
+
+ @Test
+ void testGetDataSourceConfiguration() {
+ Database db = new Database("localhost", "3306", "testdb", "user", "pass");
+ HikariDataSource ds = db.getDataSource();
+ assertEquals("jdbc:mysql://localhost:3306/testdb", ds.getJdbcUrl());
+ assertEquals("user", ds.getUsername());
+ assertEquals("pass", ds.getPassword());
+ assertEquals("true", ds.getDataSourceProperties().getProperty("autoReconnect"));
+ }
+
+ @Test
+ void testDeserialize() {
+ ConfigurationSection section = mock(ConfigurationSection.class);
+ when(section.getString("Hostname")).thenReturn("localhost");
+ when(section.getString("Port", "3306")).thenReturn("3306");
+ when(section.getString("Database")).thenReturn("db");
+ when(section.getString("Username")).thenReturn("user");
+ when(section.getString("Password")).thenReturn("pwd");
+
+ AugmentedHardcore plugin = mock(AugmentedHardcore.class);
+ when(plugin.getLogger()).thenReturn(Logger.getLogger("test"));
+ try (MockedStatic mocked = Mockito.mockStatic(JavaPlugin.class)) {
+ mocked.when(() -> JavaPlugin.getPlugin(AugmentedHardcore.class)).thenReturn(plugin);
+ Database db = Database.deserialize(section);
+ assertNotNull(db);
+ assertEquals("localhost", db.getHostname());
+ assertEquals("db", db.getDatabaseName());
+ }
+ }
+}
diff --git a/src/test/java/com/backtobedrock/augmentedhardcore/domain/data/PlayerDataTest.java b/src/test/java/com/backtobedrock/augmentedhardcore/domain/data/PlayerDataTest.java
new file mode 100644
index 0000000..fa01a7d
--- /dev/null
+++ b/src/test/java/com/backtobedrock/augmentedhardcore/domain/data/PlayerDataTest.java
@@ -0,0 +1,67 @@
+package com.backtobedrock.augmentedhardcore.domain.data;
+
+import com.backtobedrock.augmentedhardcore.AugmentedHardcore;
+import com.backtobedrock.augmentedhardcore.configs.Configurations;
+import com.backtobedrock.augmentedhardcore.domain.configurationDomain.ConfigurationLivesAndLifeParts;
+import com.backtobedrock.augmentedhardcore.domain.configurationDomain.ConfigurationMaxHealth;
+import com.backtobedrock.augmentedhardcore.domain.configurationDomain.ConfigurationRevive;
+import org.bukkit.OfflinePlayer;
+import org.bukkit.plugin.java.JavaPlugin;
+import org.junit.jupiter.api.Test;
+import org.mockito.MockedStatic;
+import org.mockito.Mockito;
+
+import java.time.LocalDateTime;
+import java.util.Map;
+import java.util.TreeMap;
+import java.util.UUID;
+
+import static org.junit.jupiter.api.Assertions.*;
+import static org.mockito.Mockito.*;
+
+class PlayerDataTest {
+
+ @Test
+ void testSerializeIncludesCoreFields() {
+ AugmentedHardcore plugin = mock(AugmentedHardcore.class);
+ Configurations configs = mock(Configurations.class);
+ ConfigurationLivesAndLifeParts livesConfig = mock(ConfigurationLivesAndLifeParts.class);
+ ConfigurationMaxHealth maxHealthConfig = mock(ConfigurationMaxHealth.class);
+ ConfigurationRevive reviveConfig = mock(ConfigurationRevive.class);
+
+ when(plugin.getConfigurations()).thenReturn(configs);
+ when(configs.getLivesAndLifePartsConfiguration()).thenReturn(livesConfig);
+ when(livesConfig.getPlaytimePerLifePart()).thenReturn(1000);
+ when(configs.getMaxHealthConfiguration()).thenReturn(maxHealthConfig);
+ when(maxHealthConfig.getPlaytimePerHalfHeart()).thenReturn(2000);
+ when(configs.getReviveConfiguration()).thenReturn(reviveConfig);
+ when(reviveConfig.getTimeBetweenRevives()).thenReturn(5000);
+
+ OfflinePlayer offline = mock(OfflinePlayer.class);
+ when(offline.getPlayer()).thenReturn(null);
+ when(offline.getUniqueId()).thenReturn(UUID.randomUUID());
+ when(offline.getName()).thenReturn("Steve");
+
+ try (MockedStatic mocked = Mockito.mockStatic(JavaPlugin.class)) {
+ mocked.when(() -> JavaPlugin.getPlugin(AugmentedHardcore.class)).thenReturn(plugin);
+
+ PlayerData data = new PlayerData(
+ offline,
+ "127.0.0.1",
+ LocalDateTime.of(2023,1,1,0,0),
+ 3,
+ 5,
+ true,
+ 1200,
+ 400,
+ 800,
+ new TreeMap<>());
+
+ Map serialized = data.serialize();
+ assertEquals(3, serialized.get("Lives"));
+ assertEquals(5, serialized.get("LifeParts"));
+ assertEquals("127.0.0.1", serialized.get("LastKnownIp"));
+ assertEquals(true, serialized.get("SpectatorBanned"));
+ }
+ }
+}
From b98c57fd10510ee14eb053f2b33ee36d0df72d72 Mon Sep 17 00:00:00 2001
From: Jake Hoolz
Date: Sat, 30 Aug 2025 14:43:35 -0500
Subject: [PATCH 09/43] Update MySQLPlayerMapper.java
---
.../augmentedhardcore/mappers/player/MySQLPlayerMapper.java | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/src/com/backtobedrock/augmentedhardcore/mappers/player/MySQLPlayerMapper.java b/src/com/backtobedrock/augmentedhardcore/mappers/player/MySQLPlayerMapper.java
index 1c4ad85..3a38d73 100644
--- a/src/com/backtobedrock/augmentedhardcore/mappers/player/MySQLPlayerMapper.java
+++ b/src/com/backtobedrock/augmentedhardcore/mappers/player/MySQLPlayerMapper.java
@@ -88,16 +88,16 @@ public PlayerData getByPlayerSync(OfflinePlayer player) {
@Override
public void updatePlayerData(PlayerData playerData) {
if (this.plugin.isStopping()) {
- this.updatePlayerDateSync(playerData);
+ this.updatePlayerDataSync(playerData);
} else {
- CompletableFuture.runAsync(() -> this.updatePlayerDateSync(playerData)).exceptionally(ex -> {
+ CompletableFuture.runAsync(() -> this.updatePlayerDataSync(playerData)).exceptionally(ex -> {
ex.printStackTrace();
return null;
});
}
}
- private void updatePlayerDateSync(PlayerData playerData) {
+ private void updatePlayerDataSync(PlayerData playerData) {
String sql = "INSERT INTO ah_player (`player_uuid`, `last_known_name`, `last_known_ip`, `last_death`, `lives`, `life_parts`, `spectator_banned`, `time_till_next_revive`, `time_till_next_life_part`, `time_till_next_max_health`)"
+ "VALUES(?,?,?,?,?,?,?,?,?,?)"
+ "ON DUPLICATE KEY UPDATE "
From ab42e6e569f0e36382c8a997f9db1b8b8bc0f386 Mon Sep 17 00:00:00 2001
From: Jake Hoolz <84546680+JakeHoolz@users.noreply.github.com>
Date: Sat, 30 Aug 2025 15:02:51 -0500
Subject: [PATCH 10/43] Use ConcurrentHashMap for player cache
---
.../augmentedhardcore/repositories/PlayerRepository.java | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/com/backtobedrock/augmentedhardcore/repositories/PlayerRepository.java b/src/com/backtobedrock/augmentedhardcore/repositories/PlayerRepository.java
index 6bc2e64..11ba51c 100644
--- a/src/com/backtobedrock/augmentedhardcore/repositories/PlayerRepository.java
+++ b/src/com/backtobedrock/augmentedhardcore/repositories/PlayerRepository.java
@@ -11,10 +11,10 @@
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;
-import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.ConcurrentHashMap;
public class PlayerRepository {
private final AugmentedHardcore plugin;
@@ -25,7 +25,7 @@ public class PlayerRepository {
public PlayerRepository() {
this.plugin = JavaPlugin.getPlugin(AugmentedHardcore.class);
- this.playerCache = new HashMap<>();
+ this.playerCache = new ConcurrentHashMap<>();
this.initializeMapper();
}
From 53a30c443c071677ac6b63bd11b400c7d14bdf9d Mon Sep 17 00:00:00 2001
From: Jake Hoolz <84546680+JakeHoolz@users.noreply.github.com>
Date: Sat, 30 Aug 2025 15:03:45 -0500
Subject: [PATCH 11/43] Replace printStackTrace with structured logging
---
.../mappers/player/MySQLPlayerMapper.java | 11 ++++++-----
.../mappers/player/YAMLPlayerMapper.java | 4 ++--
.../repositories/PlayerRepository.java | 3 ++-
.../repositories/ServerRepository.java | 2 +-
4 files changed, 11 insertions(+), 9 deletions(-)
diff --git a/src/com/backtobedrock/augmentedhardcore/mappers/player/MySQLPlayerMapper.java b/src/com/backtobedrock/augmentedhardcore/mappers/player/MySQLPlayerMapper.java
index 855105a..efd9893 100644
--- a/src/com/backtobedrock/augmentedhardcore/mappers/player/MySQLPlayerMapper.java
+++ b/src/com/backtobedrock/augmentedhardcore/mappers/player/MySQLPlayerMapper.java
@@ -13,6 +13,7 @@
import java.util.NavigableMap;
import java.util.TreeMap;
import java.util.concurrent.CompletableFuture;
+import java.util.logging.Level;
public class MySQLPlayerMapper extends AbstractMapper implements IPlayerMapper {
private static MySQLPlayerMapper instance;
@@ -27,7 +28,7 @@ public static MySQLPlayerMapper getInstance() {
@Override
public void insertPlayerDataAsync(PlayerData playerData) {
CompletableFuture.runAsync(() -> this.updatePlayerData(playerData)).exceptionally(ex -> {
- ex.printStackTrace();
+ this.plugin.getLogger().log(Level.SEVERE, String.format("Could not insert PlayerData for %s.", playerData.getPlayer().getName()), ex);
return null;
});
}
@@ -92,7 +93,7 @@ public void updatePlayerData(PlayerData playerData) {
this.updatePlayerDataSync(playerData);
} else {
CompletableFuture.runAsync(() -> this.updatePlayerDataSync(playerData)).exceptionally(ex -> {
- ex.printStackTrace();
+ this.plugin.getLogger().log(Level.SEVERE, String.format("Could not update PlayerData for %s asynchronously.", playerData.getPlayer().getName()), ex);
return null;
});
}
@@ -134,7 +135,7 @@ private void updatePlayerDataSync(PlayerData playerData) {
preparedStatement.setLong(19, playerData.getTimeTillNextMaxHealth());
preparedStatement.execute();
} catch (SQLException e) {
- e.printStackTrace();
+ this.plugin.getLogger().log(Level.SEVERE, String.format("Could not update PlayerData for %s.", playerData.getPlayer().getName()), e);
}
}
@@ -148,10 +149,10 @@ public void deletePlayerData(OfflinePlayer player) {
preparedStatement.setString(1, player.getUniqueId().toString());
preparedStatement.execute();
} catch (SQLException e) {
- e.printStackTrace();
+ this.plugin.getLogger().log(Level.SEVERE, String.format("Could not delete PlayerData for %s.", player.getName()), e);
}
}).exceptionally(ex -> {
- ex.printStackTrace();
+ this.plugin.getLogger().log(Level.SEVERE, String.format("Could not delete PlayerData for %s asynchronously.", player.getName()), ex);
return null;
});
}
diff --git a/src/com/backtobedrock/augmentedhardcore/mappers/player/YAMLPlayerMapper.java b/src/com/backtobedrock/augmentedhardcore/mappers/player/YAMLPlayerMapper.java
index 1ba4e8a..0c68db2 100644
--- a/src/com/backtobedrock/augmentedhardcore/mappers/player/YAMLPlayerMapper.java
+++ b/src/com/backtobedrock/augmentedhardcore/mappers/player/YAMLPlayerMapper.java
@@ -35,7 +35,7 @@ private void insertPlayerData(PlayerData data) {
@Override
public void insertPlayerDataAsync(PlayerData data) {
CompletableFuture.runAsync(() -> this.insertPlayerData(data)).exceptionally(ex -> {
- ex.printStackTrace();
+ this.plugin.getLogger().log(Level.SEVERE, String.format("Could not insert PlayerData for %s.", data.getPlayer().getName()), ex);
return null;
});
}
@@ -73,7 +73,7 @@ public void deletePlayerData(OfflinePlayer player) {
file.delete();
}
}).exceptionally(ex -> {
- ex.printStackTrace();
+ this.plugin.getLogger().log(Level.SEVERE, String.format("Could not delete PlayerData for %s.", player.getName()), ex);
return null;
});
}
diff --git a/src/com/backtobedrock/augmentedhardcore/repositories/PlayerRepository.java b/src/com/backtobedrock/augmentedhardcore/repositories/PlayerRepository.java
index 6bc2e64..fa5adea 100644
--- a/src/com/backtobedrock/augmentedhardcore/repositories/PlayerRepository.java
+++ b/src/com/backtobedrock/augmentedhardcore/repositories/PlayerRepository.java
@@ -15,6 +15,7 @@
import java.util.Map;
import java.util.UUID;
import java.util.concurrent.CompletableFuture;
+import java.util.logging.Level;
public class PlayerRepository {
private final AugmentedHardcore plugin;
@@ -52,7 +53,7 @@ public CompletableFuture getByPlayer(OfflinePlayer player) {
return this.mapper.getByPlayer(player).thenApplyAsync(playerData -> this.getFromDataAndCache(player, playerData));
} else {
return CompletableFuture.supplyAsync(() -> player).thenApplyAsync(this::getFromCache).exceptionally(ex -> {
- ex.printStackTrace();
+ this.plugin.getLogger().log(Level.SEVERE, String.format("Failed to retrieve PlayerData for %s from cache.", player.getName()), ex);
return null;
});
}
diff --git a/src/com/backtobedrock/augmentedhardcore/repositories/ServerRepository.java b/src/com/backtobedrock/augmentedhardcore/repositories/ServerRepository.java
index 5c4cc6f..0ab0a3f 100644
--- a/src/com/backtobedrock/augmentedhardcore/repositories/ServerRepository.java
+++ b/src/com/backtobedrock/augmentedhardcore/repositories/ServerRepository.java
@@ -27,7 +27,7 @@ public ServerRepository() {
this.plugin = JavaPlugin.getPlugin(AugmentedHardcore.class);
this.initializeMapper();
this.getServerData(this.plugin.getServer()).thenAcceptAsync(serverData -> this.plugin.getLogger().log(Level.INFO, String.format("Loaded %d ongoing death %s.", serverData.getTotalOngoingBans(), serverData.getTotalOngoingBans() != 1 ? "bans" : "ban"))).exceptionally(e -> {
- e.printStackTrace();
+ this.plugin.getLogger().log(Level.SEVERE, "Could not load server data asynchronously.", e);
return null;
});
}
From 025cf0379825e090c2978a1cb875f23e74a5f482 Mon Sep 17 00:00:00 2001
From: Jake Hoolz <84546680+JakeHoolz@users.noreply.github.com>
Date: Sat, 30 Aug 2025 15:06:38 -0500
Subject: [PATCH 12/43] refactor: rename updatePlayerDateSync to
updatePlayerDataSync
---
.../augmentedhardcore/mappers/player/MySQLPlayerMapper.java | 1 +
1 file changed, 1 insertion(+)
diff --git a/src/com/backtobedrock/augmentedhardcore/mappers/player/MySQLPlayerMapper.java b/src/com/backtobedrock/augmentedhardcore/mappers/player/MySQLPlayerMapper.java
index 855105a..6ef8283 100644
--- a/src/com/backtobedrock/augmentedhardcore/mappers/player/MySQLPlayerMapper.java
+++ b/src/com/backtobedrock/augmentedhardcore/mappers/player/MySQLPlayerMapper.java
@@ -98,6 +98,7 @@ public void updatePlayerData(PlayerData playerData) {
}
}
+ // Previously named updatePlayerDateSync; renamed for accuracy.
private void updatePlayerDataSync(PlayerData playerData) {
String sql = "INSERT INTO ah_player (`player_uuid`, `last_known_name`, `last_known_ip`, `last_death`, `lives`, `life_parts`, `spectator_banned`, `time_till_next_revive`, `time_till_next_life_part`, `time_till_next_max_health`)"
+ "VALUES(?,?,?,?,?,?,?,?,?,?)"
From a240f1bed39f700ac8e670ab434d9d1a2491769b Mon Sep 17 00:00:00 2001
From: Jake Hoolz <84546680+JakeHoolz@users.noreply.github.com>
Date: Sat, 30 Aug 2025 15:23:35 -0500
Subject: [PATCH 13/43] Inject plugin and centralize async execution
---
.../augmentedhardcore/AugmentedHardcore.java | 21 +++++++++-
.../mappers/AbstractMapper.java | 5 +--
.../mappers/ban/MySQLBanMapper.java | 24 +++++++----
.../mappers/player/MySQLPlayerMapper.java | 21 ++++++----
.../mappers/player/YAMLPlayerMapper.java | 11 +++--
.../mappers/server/MySQLServerMapper.java | 36 +++++++++-------
.../mappers/server/YAMLServerMapper.java | 19 ++++-----
.../repositories/PlayerRepository.java | 24 ++++++-----
.../repositories/ServerRepository.java | 20 +++++----
.../domain/data/PlayerDataTest.java | 42 ++++++++-----------
10 files changed, 126 insertions(+), 97 deletions(-)
diff --git a/src/com/backtobedrock/augmentedhardcore/AugmentedHardcore.java b/src/com/backtobedrock/augmentedhardcore/AugmentedHardcore.java
index 509d3ec..ba4eadb 100644
--- a/src/com/backtobedrock/augmentedhardcore/AugmentedHardcore.java
+++ b/src/com/backtobedrock/augmentedhardcore/AugmentedHardcore.java
@@ -32,6 +32,8 @@
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.*;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
import java.util.logging.Level;
import java.util.stream.Collectors;
@@ -54,6 +56,9 @@ public class AugmentedHardcore extends JavaPlugin implements Listener {
//runnables
private UpdateChecker updateChecker;
+ //async executor
+ private ExecutorService executor;
+
@Override
public void onEnable() {
this.initialize();
@@ -86,6 +91,10 @@ public void onDisable() {
}
}
+ if (this.executor != null) {
+ this.executor.shutdown();
+ }
+
if (this.getConfigurations() != null && this.getConfigurations().getDataConfiguration().getDatabase() != null) {
this.getConfigurations().getDataConfiguration().getDatabase().close();
}
@@ -99,6 +108,10 @@ public boolean onCommand(@NotNull CommandSender cs, @NotNull Command cmnd, @NotN
}
public void initialize() {
+ if (this.executor == null || this.executor.isShutdown()) {
+ this.executor = Executors.newFixedThreadPool(Math.max(2, Runtime.getRuntime().availableProcessors()));
+ }
+
//initialize old config directory
File dir = new File(this.getDataFolder() + "/old");
List configs = new ArrayList() {{
@@ -165,12 +178,12 @@ public void initialize() {
//initialize repositories
if (this.playerRepository == null) {
- this.playerRepository = new PlayerRepository();
+ this.playerRepository = new PlayerRepository(this);
} else {
this.playerRepository.onReload();
}
if (this.serverRepository == null) {
- this.serverRepository = new ServerRepository();
+ this.serverRepository = new ServerRepository(this);
}
//register event listeners
@@ -282,4 +295,8 @@ public void removeFromGuis(Player player) {
public UpdateChecker getUpdateChecker() {
return updateChecker;
}
+
+ public ExecutorService getExecutor() {
+ return executor;
+ }
}
diff --git a/src/com/backtobedrock/augmentedhardcore/mappers/AbstractMapper.java b/src/com/backtobedrock/augmentedhardcore/mappers/AbstractMapper.java
index e718587..69c7415 100644
--- a/src/com/backtobedrock/augmentedhardcore/mappers/AbstractMapper.java
+++ b/src/com/backtobedrock/augmentedhardcore/mappers/AbstractMapper.java
@@ -2,14 +2,13 @@
import com.backtobedrock.augmentedhardcore.AugmentedHardcore;
import com.backtobedrock.augmentedhardcore.domain.Database;
-import org.bukkit.plugin.java.JavaPlugin;
public abstract class AbstractMapper {
protected final AugmentedHardcore plugin;
protected final Database database;
- public AbstractMapper() {
- this.plugin = JavaPlugin.getPlugin(AugmentedHardcore.class);
+ public AbstractMapper(AugmentedHardcore plugin) {
+ this.plugin = plugin;
this.database = this.plugin.getConfigurations().getDataConfiguration().getDatabase();
}
}
diff --git a/src/com/backtobedrock/augmentedhardcore/mappers/ban/MySQLBanMapper.java b/src/com/backtobedrock/augmentedhardcore/mappers/ban/MySQLBanMapper.java
index b0a79e4..ab6472a 100644
--- a/src/com/backtobedrock/augmentedhardcore/mappers/ban/MySQLBanMapper.java
+++ b/src/com/backtobedrock/augmentedhardcore/mappers/ban/MySQLBanMapper.java
@@ -1,5 +1,6 @@
package com.backtobedrock.augmentedhardcore.mappers.ban;
+import com.backtobedrock.augmentedhardcore.AugmentedHardcore;
import com.backtobedrock.augmentedhardcore.domain.Ban;
import com.backtobedrock.augmentedhardcore.domain.Killer;
import com.backtobedrock.augmentedhardcore.domain.Location;
@@ -13,17 +14,22 @@
import java.sql.*;
import java.util.UUID;
import java.util.concurrent.CompletableFuture;
+import java.util.logging.Level;
public class MySQLBanMapper extends AbstractMapper implements IBanMapper {
private static MySQLBanMapper instance;
- public static MySQLBanMapper getInstance() {
+ public static synchronized MySQLBanMapper getInstance(AugmentedHardcore plugin) {
if (instance == null) {
- instance = new MySQLBanMapper();
+ instance = new MySQLBanMapper(plugin);
}
return instance;
}
+ private MySQLBanMapper(AugmentedHardcore plugin) {
+ super(plugin);
+ }
+
public Pair getBanFromResultSetSync(ResultSet resultSet) {
try {
if (resultSet.getObject("ban_id") != null) {
@@ -44,7 +50,7 @@ public Pair getBanFromResultSetSync(ResultSet resultSet) {
);
}
} catch (SQLException e) {
- e.printStackTrace();
+ this.plugin.getLogger().log(Level.SEVERE, "Could not parse ban from result set.", e);
}
return null;
}
@@ -132,10 +138,10 @@ public void updateBan(Server server, UUID uuid, Pair ban) {
preparedStatement.setLong(46, ban.getValue1().getTimeSincePreviousDeath());
preparedStatement.execute();
} catch (SQLException | UnknownHostException e) {
- e.printStackTrace();
+ this.plugin.getLogger().log(Level.SEVERE, "Could not update ban.", e);
}
- }).exceptionally(ex -> {
- ex.printStackTrace();
+ }, this.plugin.getExecutor()).exceptionally(ex -> {
+ this.plugin.getLogger().log(Level.SEVERE, "Could not update ban asynchronously.", ex);
return null;
});
}
@@ -151,10 +157,10 @@ public void deleteBan(UUID uuid, Integer id) {
preparedStatement.setString(2, uuid.toString());
preparedStatement.execute();
} catch (SQLException e) {
- e.printStackTrace();
+ this.plugin.getLogger().log(Level.SEVERE, "Could not delete ban.", e);
}
- }).exceptionally(ex -> {
- ex.printStackTrace();
+ }, this.plugin.getExecutor()).exceptionally(ex -> {
+ this.plugin.getLogger().log(Level.SEVERE, "Could not delete ban asynchronously.", ex);
return null;
});
}
diff --git a/src/com/backtobedrock/augmentedhardcore/mappers/player/MySQLPlayerMapper.java b/src/com/backtobedrock/augmentedhardcore/mappers/player/MySQLPlayerMapper.java
index 6d3689e..eca99c4 100644
--- a/src/com/backtobedrock/augmentedhardcore/mappers/player/MySQLPlayerMapper.java
+++ b/src/com/backtobedrock/augmentedhardcore/mappers/player/MySQLPlayerMapper.java
@@ -1,5 +1,6 @@
package com.backtobedrock.augmentedhardcore.mappers.player;
+import com.backtobedrock.augmentedhardcore.AugmentedHardcore;
import com.backtobedrock.augmentedhardcore.domain.Ban;
import com.backtobedrock.augmentedhardcore.domain.data.PlayerData;
import com.backtobedrock.augmentedhardcore.mappers.AbstractMapper;
@@ -18,16 +19,20 @@
public class MySQLPlayerMapper extends AbstractMapper implements IPlayerMapper {
private static MySQLPlayerMapper instance;
- public static MySQLPlayerMapper getInstance() {
+ public static synchronized MySQLPlayerMapper getInstance(AugmentedHardcore plugin) {
if (instance == null) {
- instance = new MySQLPlayerMapper();
+ instance = new MySQLPlayerMapper(plugin);
}
return instance;
}
+ private MySQLPlayerMapper(AugmentedHardcore plugin) {
+ super(plugin);
+ }
+
@Override
public void insertPlayerDataAsync(PlayerData playerData) {
- CompletableFuture.runAsync(() -> this.updatePlayerData(playerData)).exceptionally(ex -> {
+ CompletableFuture.runAsync(() -> this.updatePlayerData(playerData), this.plugin.getExecutor()).exceptionally(ex -> {
this.plugin.getLogger().log(Level.SEVERE, String.format("Could not insert PlayerData for %s.", playerData.getPlayer().getName()), ex);
return null;
});
@@ -40,7 +45,7 @@ public void insertPlayerDataSync(PlayerData playerData) {
@Override
public CompletableFuture getByPlayer(OfflinePlayer player) {
- return CompletableFuture.supplyAsync(() -> this.getPlayerData(player));
+ return CompletableFuture.supplyAsync(() -> this.getPlayerData(player), this.plugin.getExecutor());
}
private PlayerData getPlayerData(OfflinePlayer player) {
@@ -70,14 +75,14 @@ private PlayerData getPlayerData(OfflinePlayer player) {
deathBans
);
}
- Pair banPair = MySQLBanMapper.getInstance().getBanFromResultSetSync(resultSet);
+ Pair banPair = MySQLBanMapper.getInstance(this.plugin).getBanFromResultSetSync(resultSet);
if (banPair != null) {
deathBans.put(banPair.getValue0(), banPair.getValue1());
}
}
return playerData;
} catch (SQLException e) {
- e.printStackTrace();
+ this.plugin.getLogger().log(Level.SEVERE, String.format("Could not get PlayerData for %s.", player.getName()), e);
}
return null;
}
@@ -92,7 +97,7 @@ public void updatePlayerData(PlayerData playerData) {
if (this.plugin.isStopping()) {
this.updatePlayerDataSync(playerData);
} else {
- CompletableFuture.runAsync(() -> this.updatePlayerDataSync(playerData)).exceptionally(ex -> {
+ CompletableFuture.runAsync(() -> this.updatePlayerDataSync(playerData), this.plugin.getExecutor()).exceptionally(ex -> {
this.plugin.getLogger().log(Level.SEVERE, String.format("Could not update PlayerData for %s asynchronously.", playerData.getPlayer().getName()), ex);
return null;
});
@@ -152,7 +157,7 @@ public void deletePlayerData(OfflinePlayer player) {
} catch (SQLException e) {
this.plugin.getLogger().log(Level.SEVERE, String.format("Could not delete PlayerData for %s.", player.getName()), e);
}
- }).exceptionally(ex -> {
+ }, this.plugin.getExecutor()).exceptionally(ex -> {
this.plugin.getLogger().log(Level.SEVERE, String.format("Could not delete PlayerData for %s asynchronously.", player.getName()), ex);
return null;
});
diff --git a/src/com/backtobedrock/augmentedhardcore/mappers/player/YAMLPlayerMapper.java b/src/com/backtobedrock/augmentedhardcore/mappers/player/YAMLPlayerMapper.java
index 0c68db2..d1aac2d 100644
--- a/src/com/backtobedrock/augmentedhardcore/mappers/player/YAMLPlayerMapper.java
+++ b/src/com/backtobedrock/augmentedhardcore/mappers/player/YAMLPlayerMapper.java
@@ -6,7 +6,6 @@
import org.bukkit.OfflinePlayer;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
-import org.bukkit.plugin.java.JavaPlugin;
import java.io.File;
import java.io.IOException;
@@ -16,8 +15,8 @@
public class YAMLPlayerMapper implements IPlayerMapper {
private final AugmentedHardcore plugin;
- public YAMLPlayerMapper() {
- this.plugin = JavaPlugin.getPlugin(AugmentedHardcore.class);
+ public YAMLPlayerMapper(AugmentedHardcore plugin) {
+ this.plugin = plugin;
//create userdata folder if none existent
File udFile = new File(this.plugin.getDataFolder() + "/userdata");
@@ -34,7 +33,7 @@ private void insertPlayerData(PlayerData data) {
@Override
public void insertPlayerDataAsync(PlayerData data) {
- CompletableFuture.runAsync(() -> this.insertPlayerData(data)).exceptionally(ex -> {
+ CompletableFuture.runAsync(() -> this.insertPlayerData(data), this.plugin.getExecutor()).exceptionally(ex -> {
this.plugin.getLogger().log(Level.SEVERE, String.format("Could not insert PlayerData for %s.", data.getPlayer().getName()), ex);
return null;
});
@@ -47,7 +46,7 @@ public void insertPlayerDataSync(PlayerData data) {
@Override
public CompletableFuture getByPlayer(OfflinePlayer player) {
- return CompletableFuture.supplyAsync(() -> PlayerData.deserialize(this.plugin, this.getConfig(player), player));
+ return CompletableFuture.supplyAsync(() -> PlayerData.deserialize(this.plugin, this.getConfig(player), player), this.plugin.getExecutor());
}
@Override
@@ -72,7 +71,7 @@ public void deletePlayerData(OfflinePlayer player) {
//noinspection ResultOfMethodCallIgnored
file.delete();
}
- }).exceptionally(ex -> {
+ }, this.plugin.getExecutor()).exceptionally(ex -> {
this.plugin.getLogger().log(Level.SEVERE, String.format("Could not delete PlayerData for %s.", player.getName()), ex);
return null;
});
diff --git a/src/com/backtobedrock/augmentedhardcore/mappers/server/MySQLServerMapper.java b/src/com/backtobedrock/augmentedhardcore/mappers/server/MySQLServerMapper.java
index b12fa23..def93e8 100644
--- a/src/com/backtobedrock/augmentedhardcore/mappers/server/MySQLServerMapper.java
+++ b/src/com/backtobedrock/augmentedhardcore/mappers/server/MySQLServerMapper.java
@@ -1,5 +1,6 @@
package com.backtobedrock.augmentedhardcore.mappers.server;
+import com.backtobedrock.augmentedhardcore.AugmentedHardcore;
import com.backtobedrock.augmentedhardcore.domain.Ban;
import com.backtobedrock.augmentedhardcore.domain.data.ServerData;
import com.backtobedrock.augmentedhardcore.mappers.AbstractMapper;
@@ -18,22 +19,27 @@
import java.util.Map;
import java.util.UUID;
import java.util.concurrent.CompletableFuture;
+import java.util.logging.Level;
public class MySQLServerMapper extends AbstractMapper implements IServerMapper {
private static MySQLServerMapper instance;
- public static MySQLServerMapper getInstance() {
+ public static synchronized MySQLServerMapper getInstance(AugmentedHardcore plugin) {
if (instance == null) {
- instance = new MySQLServerMapper();
+ instance = new MySQLServerMapper(plugin);
}
return instance;
}
+ private MySQLServerMapper(AugmentedHardcore plugin) {
+ super(plugin);
+ }
+
@Override
public void insertServerDataAsync(ServerData serverData) {
- CompletableFuture.runAsync(() -> this.updateServerData(serverData)).exceptionally(ex -> {
- ex.printStackTrace();
+ CompletableFuture.runAsync(() -> this.updateServerData(serverData), this.plugin.getExecutor()).exceptionally(ex -> {
+ this.plugin.getLogger().log(Level.SEVERE, "Could not insert server data asynchronously.", ex);
return null;
});
}
@@ -61,7 +67,7 @@ public CompletableFuture getServerData(Server server) {
totalDeathBans = resultSet.getInt("total_death_bans");
String uuidString = resultSet.getString("player_uuid");
if (uuidString != null && !uuidString.isEmpty()) {
- Pair banPair = MySQLBanMapper.getInstance().getBanFromResultSetSync(resultSet);
+ Pair banPair = MySQLBanMapper.getInstance(this.plugin).getBanFromResultSetSync(resultSet);
if (banPair != null) {
deathBans.put(UUID.fromString(uuidString), banPair);
}
@@ -69,10 +75,10 @@ public CompletableFuture getServerData(Server server) {
}
return new ServerData(totalDeathBans, deathBans);
} catch (SQLException | UnknownHostException e) {
- e.printStackTrace();
+ this.plugin.getLogger().log(Level.SEVERE, "Could not load server data.", e);
}
return null;
- });
+ }, this.plugin.getExecutor());
}
@Override
@@ -89,12 +95,12 @@ public void updateServerData(ServerData data) {
preparedStatement.setInt(4, data.getTotalDeathBans());
preparedStatement.execute();
} catch (SQLException | UnknownHostException e) {
- e.printStackTrace();
+ this.plugin.getLogger().log(Level.SEVERE, "Could not update server data.", e);
return;
}
- data.getOngoingBans().forEach((key, value) -> MySQLBanMapper.getInstance().updateBan(this.plugin.getServer(), key, value.getBan()));
- }).exceptionally(ex -> {
- ex.printStackTrace();
+ data.getOngoingBans().forEach((key, value) -> MySQLBanMapper.getInstance(this.plugin).updateBan(this.plugin.getServer(), key, value.getBan()));
+ }, this.plugin.getExecutor()).exceptionally(ex -> {
+ this.plugin.getLogger().log(Level.SEVERE, "Could not update server data asynchronously.", ex);
return null;
});
}
@@ -110,16 +116,16 @@ public void deleteServerData() {
preparedStatement.setInt(2, this.plugin.getServer().getPort());
preparedStatement.execute();
} catch (SQLException | UnknownHostException e) {
- e.printStackTrace();
+ this.plugin.getLogger().log(Level.SEVERE, "Could not delete server data.", e);
}
- }).exceptionally(ex -> {
- ex.printStackTrace();
+ }, this.plugin.getExecutor()).exceptionally(ex -> {
+ this.plugin.getLogger().log(Level.SEVERE, "Could not delete server data asynchronously.", ex);
return null;
});
}
@Override
public void deleteBanFromServerData(UUID uuid, Pair ban) {
- MySQLBanMapper.getInstance().updateBan(null, uuid, ban);
+ MySQLBanMapper.getInstance(this.plugin).updateBan(null, uuid, ban);
}
}
diff --git a/src/com/backtobedrock/augmentedhardcore/mappers/server/YAMLServerMapper.java b/src/com/backtobedrock/augmentedhardcore/mappers/server/YAMLServerMapper.java
index 6a3fa04..866e011 100644
--- a/src/com/backtobedrock/augmentedhardcore/mappers/server/YAMLServerMapper.java
+++ b/src/com/backtobedrock/augmentedhardcore/mappers/server/YAMLServerMapper.java
@@ -7,7 +7,6 @@
import org.bukkit.Server;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
-import org.bukkit.plugin.java.JavaPlugin;
import org.javatuples.Pair;
import java.io.File;
@@ -19,8 +18,8 @@
public class YAMLServerMapper implements IServerMapper {
private final AugmentedHardcore plugin;
- public YAMLServerMapper() {
- this.plugin = JavaPlugin.getPlugin(AugmentedHardcore.class);
+ public YAMLServerMapper(AugmentedHardcore plugin) {
+ this.plugin = plugin;
}
private void insertServerData(ServerData data) {
@@ -31,8 +30,8 @@ private void insertServerData(ServerData data) {
@Override
public void insertServerDataAsync(ServerData data) {
- CompletableFuture.runAsync(() -> this.insertServerData(data)).exceptionally(ex -> {
- ex.printStackTrace();
+ CompletableFuture.runAsync(() -> this.insertServerData(data), this.plugin.getExecutor()).exceptionally(ex -> {
+ this.plugin.getLogger().log(Level.SEVERE, "Could not insert server data.", ex);
return null;
});
}
@@ -44,7 +43,7 @@ public void insertServerDataSync(ServerData data) {
@Override
public CompletableFuture getServerData(Server server) {
- return CompletableFuture.supplyAsync(() -> ServerData.deserialize(getConfig()));
+ return CompletableFuture.supplyAsync(() -> ServerData.deserialize(getConfig()), this.plugin.getExecutor());
}
@Override
@@ -64,8 +63,8 @@ public void deleteServerData() {
//noinspection ResultOfMethodCallIgnored
file.delete();
}
- }).exceptionally(ex -> {
- ex.printStackTrace();
+ }, this.plugin.getExecutor()).exceptionally(ex -> {
+ this.plugin.getLogger().log(Level.SEVERE, "Could not delete server data file.", ex);
return null;
});
}
@@ -76,8 +75,8 @@ public void deleteBanFromServerData(UUID uuid, Pair ban) {
FileConfiguration config = this.getConfig();
config.set("OngoingBans." + uuid, null);
this.saveConfig(config);
- }).exceptionally(ex -> {
- ex.printStackTrace();
+ }, this.plugin.getExecutor()).exceptionally(ex -> {
+ this.plugin.getLogger().log(Level.SEVERE, "Could not delete ban from server data.", ex);
return null;
});
}
diff --git a/src/com/backtobedrock/augmentedhardcore/repositories/PlayerRepository.java b/src/com/backtobedrock/augmentedhardcore/repositories/PlayerRepository.java
index 381728b..9bea73f 100644
--- a/src/com/backtobedrock/augmentedhardcore/repositories/PlayerRepository.java
+++ b/src/com/backtobedrock/augmentedhardcore/repositories/PlayerRepository.java
@@ -9,13 +9,12 @@
import com.backtobedrock.augmentedhardcore.runnables.ClearCache;
import org.bukkit.OfflinePlayer;
import org.bukkit.entity.Player;
-import org.bukkit.plugin.java.JavaPlugin;
import java.util.Map;
import java.util.UUID;
import java.util.concurrent.CompletableFuture;
-import java.util.logging.Level;
import java.util.concurrent.ConcurrentHashMap;
+import java.util.logging.Level;
public class PlayerRepository {
private final AugmentedHardcore plugin;
@@ -24,8 +23,8 @@ public class PlayerRepository {
private final Map playerCache;
private IPlayerMapper mapper;
- public PlayerRepository() {
- this.plugin = JavaPlugin.getPlugin(AugmentedHardcore.class);
+ public PlayerRepository(AugmentedHardcore plugin) {
+ this.plugin = plugin;
this.playerCache = new ConcurrentHashMap<>();
this.initializeMapper();
}
@@ -42,20 +41,23 @@ public void onReload() {
private void initializeMapper() {
if (this.plugin.getConfigurations().getDataConfiguration().getStorageType() == StorageType.MYSQL) {
- this.mapper = MySQLPlayerMapper.getInstance();
+ this.mapper = MySQLPlayerMapper.getInstance(this.plugin);
} else {
- this.mapper = new YAMLPlayerMapper();
+ this.mapper = new YAMLPlayerMapper(this.plugin);
}
}
public CompletableFuture getByPlayer(OfflinePlayer player) {
if (!this.playerCache.containsKey(player.getUniqueId())) {
- return this.mapper.getByPlayer(player).thenApplyAsync(playerData -> this.getFromDataAndCache(player, playerData));
+ return this.mapper.getByPlayer(player)
+ .thenApplyAsync(playerData -> this.getFromDataAndCache(player, playerData), this.plugin.getExecutor());
} else {
- return CompletableFuture.supplyAsync(() -> player).thenApplyAsync(this::getFromCache).exceptionally(ex -> {
- this.plugin.getLogger().log(Level.SEVERE, String.format("Failed to retrieve PlayerData for %s from cache.", player.getName()), ex);
- return null;
- });
+ return CompletableFuture.supplyAsync(() -> player, this.plugin.getExecutor())
+ .thenApplyAsync(this::getFromCache, this.plugin.getExecutor())
+ .exceptionally(ex -> {
+ this.plugin.getLogger().log(Level.SEVERE, String.format("Failed to retrieve PlayerData for %s from cache.", player.getName()), ex);
+ return null;
+ });
}
}
diff --git a/src/com/backtobedrock/augmentedhardcore/repositories/ServerRepository.java b/src/com/backtobedrock/augmentedhardcore/repositories/ServerRepository.java
index 0ab0a3f..0ba024e 100644
--- a/src/com/backtobedrock/augmentedhardcore/repositories/ServerRepository.java
+++ b/src/com/backtobedrock/augmentedhardcore/repositories/ServerRepository.java
@@ -8,7 +8,6 @@
import com.backtobedrock.augmentedhardcore.mappers.server.MySQLServerMapper;
import com.backtobedrock.augmentedhardcore.mappers.server.YAMLServerMapper;
import org.bukkit.Server;
-import org.bukkit.plugin.java.JavaPlugin;
import org.javatuples.Pair;
import java.util.UUID;
@@ -23,29 +22,32 @@ public class ServerRepository {
//server cache
private ServerData serverData = null;
- public ServerRepository() {
- this.plugin = JavaPlugin.getPlugin(AugmentedHardcore.class);
+ public ServerRepository(AugmentedHardcore plugin) {
+ this.plugin = plugin;
this.initializeMapper();
- this.getServerData(this.plugin.getServer()).thenAcceptAsync(serverData -> this.plugin.getLogger().log(Level.INFO, String.format("Loaded %d ongoing death %s.", serverData.getTotalOngoingBans(), serverData.getTotalOngoingBans() != 1 ? "bans" : "ban"))).exceptionally(e -> {
+ this.getServerData(this.plugin.getServer())
+ .thenAcceptAsync(serverData -> this.plugin.getLogger().log(Level.INFO, String.format("Loaded %d ongoing death %s.", serverData.getTotalOngoingBans(), serverData.getTotalOngoingBans() != 1 ? "bans" : "ban")), this.plugin.getExecutor())
+ .exceptionally(e -> {
this.plugin.getLogger().log(Level.SEVERE, "Could not load server data asynchronously.", e);
return null;
});
}
private void initializeMapper() {
- this.mapper = new YAMLServerMapper();
+ this.mapper = new YAMLServerMapper(this.plugin);
if (this.plugin.getConfigurations().getDataConfiguration().getStorageType() == StorageType.MYSQL) {
- this.mapper = MySQLServerMapper.getInstance();
+ this.mapper = MySQLServerMapper.getInstance(this.plugin);
} else {
- this.mapper = new YAMLServerMapper();
+ this.mapper = new YAMLServerMapper(this.plugin);
}
}
public CompletableFuture getServerData(Server server) {
if (this.serverData == null) {
- return this.mapper.getServerData(server).thenApplyAsync(this::getFromDataAndCache);
+ return this.mapper.getServerData(server)
+ .thenApplyAsync(this::getFromDataAndCache, this.plugin.getExecutor());
} else {
- return CompletableFuture.supplyAsync(this::getFromCache);
+ return CompletableFuture.supplyAsync(this::getFromCache, this.plugin.getExecutor());
}
}
diff --git a/src/test/java/com/backtobedrock/augmentedhardcore/domain/data/PlayerDataTest.java b/src/test/java/com/backtobedrock/augmentedhardcore/domain/data/PlayerDataTest.java
index fa01a7d..7b849c1 100644
--- a/src/test/java/com/backtobedrock/augmentedhardcore/domain/data/PlayerDataTest.java
+++ b/src/test/java/com/backtobedrock/augmentedhardcore/domain/data/PlayerDataTest.java
@@ -6,10 +6,7 @@
import com.backtobedrock.augmentedhardcore.domain.configurationDomain.ConfigurationMaxHealth;
import com.backtobedrock.augmentedhardcore.domain.configurationDomain.ConfigurationRevive;
import org.bukkit.OfflinePlayer;
-import org.bukkit.plugin.java.JavaPlugin;
import org.junit.jupiter.api.Test;
-import org.mockito.MockedStatic;
-import org.mockito.Mockito;
import java.time.LocalDateTime;
import java.util.Map;
@@ -42,26 +39,23 @@ void testSerializeIncludesCoreFields() {
when(offline.getUniqueId()).thenReturn(UUID.randomUUID());
when(offline.getName()).thenReturn("Steve");
- try (MockedStatic mocked = Mockito.mockStatic(JavaPlugin.class)) {
- mocked.when(() -> JavaPlugin.getPlugin(AugmentedHardcore.class)).thenReturn(plugin);
-
- PlayerData data = new PlayerData(
- offline,
- "127.0.0.1",
- LocalDateTime.of(2023,1,1,0,0),
- 3,
- 5,
- true,
- 1200,
- 400,
- 800,
- new TreeMap<>());
-
- Map serialized = data.serialize();
- assertEquals(3, serialized.get("Lives"));
- assertEquals(5, serialized.get("LifeParts"));
- assertEquals("127.0.0.1", serialized.get("LastKnownIp"));
- assertEquals(true, serialized.get("SpectatorBanned"));
- }
+ PlayerData data = new PlayerData(
+ plugin,
+ offline,
+ "127.0.0.1",
+ LocalDateTime.of(2023,1,1,0,0),
+ 3,
+ 5,
+ true,
+ 1200,
+ 400,
+ 800,
+ new TreeMap<>());
+
+ Map serialized = data.serialize();
+ assertEquals(3, serialized.get("Lives"));
+ assertEquals(5, serialized.get("LifeParts"));
+ assertEquals("127.0.0.1", serialized.get("LastKnownIp"));
+ assertEquals(true, serialized.get("SpectatorBanned"));
}
}
From 227c32140960de53e0c225ff0036b18c20c8a42d Mon Sep 17 00:00:00 2001
From: Jake Hoolz <84546680+JakeHoolz@users.noreply.github.com>
Date: Sat, 30 Aug 2025 15:53:39 -0500
Subject: [PATCH 14/43] Replace printStackTrace with plugin logger
---
.../augmentedhardcore/AugmentedHardcore.java | 3 +--
.../commands/CommandAugmentedHardcore.java | 21 ++++++++++---------
.../commands/CommandDeathBans.java | 5 +++--
.../commands/CommandLifeParts.java | 5 +++--
.../commands/CommandLives.java | 5 +++--
.../commands/CommandMyStats.java | 5 +++--
.../commands/CommandNextLifePart.java | 5 +++--
.../commands/CommandNextMaxHealth.java | 5 +++--
.../commands/CommandNextRevive.java | 5 +++--
.../commands/CommandRevive.java | 5 +++--
.../commands/CommandServerDeathBans.java | 3 ++-
.../commands/CommandUnDeathBan.java | 5 +++--
.../domain/data/PlayerData.java | 3 ++-
.../domain/data/ServerData.java | 3 ++-
.../eventListeners/ListenerEntityDeath.java | 4 +++-
.../ListenerPlayerDamageByEntity.java | 4 +++-
.../eventListeners/ListenerPlayerDeath.java | 4 +++-
.../eventListeners/ListenerPlayerJoin.java | 4 +++-
.../eventListeners/ListenerPlayerKick.java | 4 +++-
.../eventListeners/ListenerPlayerRespawn.java | 4 +++-
.../guis/AbstractDeathBansGui.java | 3 ++-
.../augmentedhardcore/guis/GuiRevive.java | 3 ++-
.../augmentedhardcore/mappers/Patch.java | 4 ++--
23 files changed, 69 insertions(+), 43 deletions(-)
diff --git a/src/com/backtobedrock/augmentedhardcore/AugmentedHardcore.java b/src/com/backtobedrock/augmentedhardcore/AugmentedHardcore.java
index ba4eadb..fcb33a5 100644
--- a/src/com/backtobedrock/augmentedhardcore/AugmentedHardcore.java
+++ b/src/com/backtobedrock/augmentedhardcore/AugmentedHardcore.java
@@ -200,7 +200,6 @@ private void initDB() {
setup = new BufferedReader(new InputStreamReader(in)).lines().collect(Collectors.joining());
} catch (IOException | NullPointerException e) {
getLogger().log(Level.SEVERE, "Could not read db setup file.", e);
- e.printStackTrace();
}
String[] queries = setup.split(";");
for (String query : queries) {
@@ -213,7 +212,7 @@ private void initDB() {
stmt.execute();
} catch (SQLException e) {
- e.printStackTrace();
+ getLogger().log(Level.SEVERE, "Error executing db setup query.", e);
}
}
diff --git a/src/com/backtobedrock/augmentedhardcore/commands/CommandAugmentedHardcore.java b/src/com/backtobedrock/augmentedhardcore/commands/CommandAugmentedHardcore.java
index e8cd71e..ea8fd97 100644
--- a/src/com/backtobedrock/augmentedhardcore/commands/CommandAugmentedHardcore.java
+++ b/src/com/backtobedrock/augmentedhardcore/commands/CommandAugmentedHardcore.java
@@ -6,6 +6,7 @@
import com.backtobedrock.augmentedhardcore.utilities.PlayerUtils;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
+import java.util.logging.Level;
import java.util.ArrayList;
import java.util.Arrays;
@@ -64,11 +65,11 @@ public void run() {
this.plugin.getPlayerRepository().updatePlayerData(playerData);
}).exceptionally(ex -> {
- ex.printStackTrace();
+ this.plugin.getLogger().log(Level.SEVERE, "Error executing AugmentedHardcore command.", ex);
return null;
});
}).exceptionally(ex -> {
- ex.printStackTrace();
+ this.plugin.getLogger().log(Level.SEVERE, "Error executing AugmentedHardcore command.", ex);
return null;
});
break;
@@ -98,11 +99,11 @@ public void run() {
this.plugin.getPlayerRepository().updatePlayerData(playerData);
}).exceptionally(ex -> {
- ex.printStackTrace();
+ this.plugin.getLogger().log(Level.SEVERE, "Error executing AugmentedHardcore command.", ex);
return null;
});
}).exceptionally(ex -> {
- ex.printStackTrace();
+ this.plugin.getLogger().log(Level.SEVERE, "Error executing AugmentedHardcore command.", ex);
return null;
});
break;
@@ -132,11 +133,11 @@ public void run() {
this.plugin.getPlayerRepository().updatePlayerData(playerData);
}).exceptionally(ex -> {
- ex.printStackTrace();
+ this.plugin.getLogger().log(Level.SEVERE, "Error executing AugmentedHardcore command.", ex);
return null;
});
}).exceptionally(ex -> {
- ex.printStackTrace();
+ this.plugin.getLogger().log(Level.SEVERE, "Error executing AugmentedHardcore command.", ex);
return null;
});
break;
@@ -166,11 +167,11 @@ public void run() {
this.plugin.getPlayerRepository().updatePlayerData(playerData);
}).exceptionally(ex -> {
- ex.printStackTrace();
+ this.plugin.getLogger().log(Level.SEVERE, "Error executing AugmentedHardcore command.", ex);
return null;
});
}).exceptionally(ex -> {
- ex.printStackTrace();
+ this.plugin.getLogger().log(Level.SEVERE, "Error executing AugmentedHardcore command.", ex);
return null;
});
break;
@@ -202,7 +203,7 @@ public void run() {
this.plugin.getMessages().getCommandAddMaxHealthSuccess(this.target.getName(), maxHealth, maxHealthRaw, maxHealthTotal, maxHealthTotalRaw)
);
}).exceptionally(ex -> {
- ex.printStackTrace();
+ this.plugin.getLogger().log(Level.SEVERE, "Error executing AugmentedHardcore command.", ex);
return null;
});
break;
@@ -232,7 +233,7 @@ public void run() {
this.plugin.getMessages().getCommandSetMaxHealthSuccess(this.target.getName(), maxHealth, maxHealthRaw)
);
}).exceptionally(ex -> {
- ex.printStackTrace();
+ this.plugin.getLogger().log(Level.SEVERE, "Error executing AugmentedHardcore command.", ex);
return null;
});
break;
diff --git a/src/com/backtobedrock/augmentedhardcore/commands/CommandDeathBans.java b/src/com/backtobedrock/augmentedhardcore/commands/CommandDeathBans.java
index 08f560e..1ecdff7 100644
--- a/src/com/backtobedrock/augmentedhardcore/commands/CommandDeathBans.java
+++ b/src/com/backtobedrock/augmentedhardcore/commands/CommandDeathBans.java
@@ -6,6 +6,7 @@
import com.backtobedrock.augmentedhardcore.utilities.PlayerUtils;
import org.bukkit.OfflinePlayer;
import org.bukkit.command.CommandSender;
+import java.util.logging.Level;
public class CommandDeathBans extends AbstractCommand {
public CommandDeathBans(CommandSender cs, String[] args) {
@@ -40,7 +41,7 @@ public void run() {
this.runCommand(this.target);
}).exceptionally(ex -> {
- ex.printStackTrace();
+ this.plugin.getLogger().log(Level.SEVERE, "Error executing death bans command.", ex);
return null;
});
}
@@ -48,7 +49,7 @@ public void run() {
private void runCommand(OfflinePlayer player) {
this.plugin.getPlayerRepository().getByPlayer(player).thenAcceptAsync(playerData -> PlayerUtils.openInventory(this.sender, new GuiPlayerDeathBans(playerData))).exceptionally(ex -> {
- ex.printStackTrace();
+ this.plugin.getLogger().log(Level.SEVERE, "Error executing death bans command.", ex);
return null;
});
}
diff --git a/src/com/backtobedrock/augmentedhardcore/commands/CommandLifeParts.java b/src/com/backtobedrock/augmentedhardcore/commands/CommandLifeParts.java
index 75af65a..c88a419 100644
--- a/src/com/backtobedrock/augmentedhardcore/commands/CommandLifeParts.java
+++ b/src/com/backtobedrock/augmentedhardcore/commands/CommandLifeParts.java
@@ -5,6 +5,7 @@
import com.backtobedrock.augmentedhardcore.domain.enums.Permission;
import org.bukkit.OfflinePlayer;
import org.bukkit.command.CommandSender;
+import java.util.logging.Level;
public class CommandLifeParts extends AbstractCommand {
public CommandLifeParts(CommandSender cs, String[] args) {
@@ -39,7 +40,7 @@ public void run() {
this.runCommand(this.target);
}).exceptionally(ex -> {
- ex.printStackTrace();
+ this.plugin.getLogger().log(Level.SEVERE, "Error executing life parts command.", ex);
return null;
});
}
@@ -47,7 +48,7 @@ public void run() {
private void runCommand(OfflinePlayer player) {
this.plugin.getPlayerRepository().getByPlayer(player).thenAcceptAsync(this::sendSuccessMessage).exceptionally(ex -> {
- ex.printStackTrace();
+ this.plugin.getLogger().log(Level.SEVERE, "Error executing life parts command.", ex);
return null;
});
}
diff --git a/src/com/backtobedrock/augmentedhardcore/commands/CommandLives.java b/src/com/backtobedrock/augmentedhardcore/commands/CommandLives.java
index 17b773d..ace75a9 100644
--- a/src/com/backtobedrock/augmentedhardcore/commands/CommandLives.java
+++ b/src/com/backtobedrock/augmentedhardcore/commands/CommandLives.java
@@ -5,6 +5,7 @@
import com.backtobedrock.augmentedhardcore.domain.enums.Permission;
import org.bukkit.OfflinePlayer;
import org.bukkit.command.CommandSender;
+import java.util.logging.Level;
public class CommandLives extends AbstractCommand {
public CommandLives(CommandSender cs, String[] args) {
@@ -39,7 +40,7 @@ public void run() {
this.runCommand(this.target);
}).exceptionally(ex -> {
- ex.printStackTrace();
+ this.plugin.getLogger().log(Level.SEVERE, "Error executing lives command.", ex);
return null;
});
}
@@ -47,7 +48,7 @@ public void run() {
private void runCommand(OfflinePlayer player) {
this.plugin.getPlayerRepository().getByPlayer(player).thenAcceptAsync(this::sendSuccessMessage).exceptionally(ex -> {
- ex.printStackTrace();
+ this.plugin.getLogger().log(Level.SEVERE, "Error executing lives command.", ex);
return null;
});
}
diff --git a/src/com/backtobedrock/augmentedhardcore/commands/CommandMyStats.java b/src/com/backtobedrock/augmentedhardcore/commands/CommandMyStats.java
index 23c25be..259c67a 100644
--- a/src/com/backtobedrock/augmentedhardcore/commands/CommandMyStats.java
+++ b/src/com/backtobedrock/augmentedhardcore/commands/CommandMyStats.java
@@ -6,6 +6,7 @@
import com.backtobedrock.augmentedhardcore.utilities.PlayerUtils;
import org.bukkit.OfflinePlayer;
import org.bukkit.command.CommandSender;
+import java.util.logging.Level;
public class CommandMyStats extends AbstractCommand {
public CommandMyStats(CommandSender cs, String[] args) {
@@ -40,7 +41,7 @@ public void run() {
this.runCommand(this.target);
}).exceptionally(ex -> {
- ex.printStackTrace();
+ this.plugin.getLogger().log(Level.SEVERE, "Error executing my stats command.", ex);
return null;
});
}
@@ -48,7 +49,7 @@ public void run() {
private void runCommand(OfflinePlayer player) {
this.plugin.getPlayerRepository().getByPlayer(player).thenAcceptAsync(playerData -> PlayerUtils.openInventory(this.sender, new GuiMyStats(this.sender, playerData))).exceptionally(ex -> {
- ex.printStackTrace();
+ this.plugin.getLogger().log(Level.SEVERE, "Error executing my stats command.", ex);
return null;
});
}
diff --git a/src/com/backtobedrock/augmentedhardcore/commands/CommandNextLifePart.java b/src/com/backtobedrock/augmentedhardcore/commands/CommandNextLifePart.java
index 248e87e..531a58f 100644
--- a/src/com/backtobedrock/augmentedhardcore/commands/CommandNextLifePart.java
+++ b/src/com/backtobedrock/augmentedhardcore/commands/CommandNextLifePart.java
@@ -8,6 +8,7 @@
import org.bukkit.OfflinePlayer;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
+import java.util.logging.Level;
public class CommandNextLifePart extends AbstractCommand {
public CommandNextLifePart(CommandSender cs, String[] args) {
@@ -42,7 +43,7 @@ public void run() {
this.runCommand(this.target);
}).exceptionally(ex -> {
- ex.printStackTrace();
+ this.plugin.getLogger().log(Level.SEVERE, "Error executing next life part command.", ex);
return null;
});
}
@@ -50,7 +51,7 @@ public void run() {
private void runCommand(OfflinePlayer player) {
this.plugin.getPlayerRepository().getByPlayer(player).thenAcceptAsync(this::sendSuccessMessage).exceptionally(ex -> {
- ex.printStackTrace();
+ this.plugin.getLogger().log(Level.SEVERE, "Error executing next life part command.", ex);
return null;
});
}
diff --git a/src/com/backtobedrock/augmentedhardcore/commands/CommandNextMaxHealth.java b/src/com/backtobedrock/augmentedhardcore/commands/CommandNextMaxHealth.java
index bfe0177..751c0a7 100644
--- a/src/com/backtobedrock/augmentedhardcore/commands/CommandNextMaxHealth.java
+++ b/src/com/backtobedrock/augmentedhardcore/commands/CommandNextMaxHealth.java
@@ -8,6 +8,7 @@
import org.bukkit.OfflinePlayer;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
+import java.util.logging.Level;
public class CommandNextMaxHealth extends AbstractCommand {
public CommandNextMaxHealth(CommandSender cs, String[] args) {
@@ -42,7 +43,7 @@ public void run() {
this.runCommand(this.target);
}).exceptionally(ex -> {
- ex.printStackTrace();
+ this.plugin.getLogger().log(Level.SEVERE, "Error executing next max health command.", ex);
return null;
});
}
@@ -50,7 +51,7 @@ public void run() {
private void runCommand(OfflinePlayer player) {
this.plugin.getPlayerRepository().getByPlayer(player).thenAcceptAsync(this::sendSuccessMessage).exceptionally(ex -> {
- ex.printStackTrace();
+ this.plugin.getLogger().log(Level.SEVERE, "Error executing next max health command.", ex);
return null;
});
}
diff --git a/src/com/backtobedrock/augmentedhardcore/commands/CommandNextRevive.java b/src/com/backtobedrock/augmentedhardcore/commands/CommandNextRevive.java
index 2214387..07533b5 100644
--- a/src/com/backtobedrock/augmentedhardcore/commands/CommandNextRevive.java
+++ b/src/com/backtobedrock/augmentedhardcore/commands/CommandNextRevive.java
@@ -8,6 +8,7 @@
import org.bukkit.OfflinePlayer;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
+import java.util.logging.Level;
public class CommandNextRevive extends AbstractCommand {
public CommandNextRevive(CommandSender cs, String[] args) {
@@ -42,7 +43,7 @@ public void run() {
this.runCommand(this.target);
}).exceptionally(ex -> {
- ex.printStackTrace();
+ this.plugin.getLogger().log(Level.SEVERE, "Error executing next revive command.", ex);
return null;
});
}
@@ -50,7 +51,7 @@ public void run() {
private void runCommand(OfflinePlayer player) {
this.plugin.getPlayerRepository().getByPlayer(player).thenAcceptAsync(this::sendSuccessMessage).exceptionally(ex -> {
- ex.printStackTrace();
+ this.plugin.getLogger().log(Level.SEVERE, "Error executing next revive command.", ex);
return null;
});
}
diff --git a/src/com/backtobedrock/augmentedhardcore/commands/CommandRevive.java b/src/com/backtobedrock/augmentedhardcore/commands/CommandRevive.java
index 79fbb76..ac6d1fb 100644
--- a/src/com/backtobedrock/augmentedhardcore/commands/CommandRevive.java
+++ b/src/com/backtobedrock/augmentedhardcore/commands/CommandRevive.java
@@ -5,6 +5,7 @@
import com.backtobedrock.augmentedhardcore.guis.GuiRevive;
import com.backtobedrock.augmentedhardcore.utilities.PlayerUtils;
import org.bukkit.command.CommandSender;
+import java.util.logging.Level;
public class CommandRevive extends AbstractCommand {
public CommandRevive(CommandSender cs, String[] args) {
@@ -40,11 +41,11 @@ public void run() {
AbstractGui gui = new GuiRevive(playerData, this.target);
PlayerUtils.openInventory(this.sender, gui);
}).exceptionally(ex -> {
- ex.printStackTrace();
+ this.plugin.getLogger().log(Level.SEVERE, "Error executing revive command.", ex);
return null;
});
}).exceptionally(ex -> {
- ex.printStackTrace();
+ this.plugin.getLogger().log(Level.SEVERE, "Error executing revive command.", ex);
return null;
});
}
diff --git a/src/com/backtobedrock/augmentedhardcore/commands/CommandServerDeathBans.java b/src/com/backtobedrock/augmentedhardcore/commands/CommandServerDeathBans.java
index 569208a..c790930 100644
--- a/src/com/backtobedrock/augmentedhardcore/commands/CommandServerDeathBans.java
+++ b/src/com/backtobedrock/augmentedhardcore/commands/CommandServerDeathBans.java
@@ -4,6 +4,7 @@
import com.backtobedrock.augmentedhardcore.guis.GuiServerDeathBans;
import com.backtobedrock.augmentedhardcore.utilities.PlayerUtils;
import org.bukkit.command.CommandSender;
+import java.util.logging.Level;
public class CommandServerDeathBans extends AbstractCommand {
public CommandServerDeathBans(CommandSender cs, String[] args) {
@@ -28,7 +29,7 @@ public void run() {
this.plugin.getServerRepository().getServerData(this.plugin.getServer()).thenAcceptAsync(serverData -> PlayerUtils.openInventory(this.sender, new GuiServerDeathBans(this.sender, serverData))).exceptionally(ex -> {
- ex.printStackTrace();
+ this.plugin.getLogger().log(Level.SEVERE, "Error executing server death bans command.", ex);
return null;
});
}
diff --git a/src/com/backtobedrock/augmentedhardcore/commands/CommandUnDeathBan.java b/src/com/backtobedrock/augmentedhardcore/commands/CommandUnDeathBan.java
index 265311c..ce613c1 100644
--- a/src/com/backtobedrock/augmentedhardcore/commands/CommandUnDeathBan.java
+++ b/src/com/backtobedrock/augmentedhardcore/commands/CommandUnDeathBan.java
@@ -4,6 +4,7 @@
import org.bukkit.OfflinePlayer;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
+import java.util.logging.Level;
public class CommandUnDeathBan extends AbstractCommand {
public CommandUnDeathBan(CommandSender cs, String[] args) {
@@ -40,7 +41,7 @@ public void run() {
this.unDeathBan();
}).exceptionally(ex -> {
- ex.printStackTrace();
+ this.plugin.getLogger().log(Level.SEVERE, "Error executing un-death-ban command.", ex);
return null;
});
}
@@ -53,7 +54,7 @@ private void unDeathBan() {
this.cs.sendMessage(this.plugin.getMessages().getTargetNotBannedByPluginError(this.target.getName(), this.plugin.getDescription().getName()));
}
}).exceptionally(e -> {
- e.printStackTrace();
+ this.plugin.getLogger().log(Level.SEVERE, "Error executing un-death-ban command.", e);
return null;
});
}
diff --git a/src/com/backtobedrock/augmentedhardcore/domain/data/PlayerData.java b/src/com/backtobedrock/augmentedhardcore/domain/data/PlayerData.java
index 7bf28e8..a45dea9 100644
--- a/src/com/backtobedrock/augmentedhardcore/domain/data/PlayerData.java
+++ b/src/com/backtobedrock/augmentedhardcore/domain/data/PlayerData.java
@@ -27,6 +27,7 @@
import java.time.LocalDateTime;
import java.util.*;
+import java.util.logging.Level;
public class PlayerData {
private final AugmentedHardcore plugin;
@@ -331,7 +332,7 @@ private void ban(PlayerDeathEvent event, Player player) {
}
this.plugin.getServerRepository().getServerData(this.plugin.getServer()).thenAcceptAsync(serverData -> serverData.addBan(this, player, this.addBan(ban))).exceptionally(e -> {
- e.printStackTrace();
+ this.plugin.getLogger().log(Level.SEVERE, "Error processing death ban.", e);
return null;
});
}
diff --git a/src/com/backtobedrock/augmentedhardcore/domain/data/ServerData.java b/src/com/backtobedrock/augmentedhardcore/domain/data/ServerData.java
index 5a57afc..06cbaf1 100644
--- a/src/com/backtobedrock/augmentedhardcore/domain/data/ServerData.java
+++ b/src/com/backtobedrock/augmentedhardcore/domain/data/ServerData.java
@@ -14,6 +14,7 @@
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
+import java.util.logging.Level;
public class ServerData {
private final AugmentedHardcore plugin;
@@ -131,7 +132,7 @@ public void removeBan(OfflinePlayer player) {
playerData.resetSpectatorDeathBan(player.getPlayer());
}
}).exceptionally(e -> {
- e.printStackTrace();
+ this.plugin.getLogger().log(Level.SEVERE, "Error removing ban.", e);
return null;
});
this.plugin.getServerRepository().removeBanFromServerData(player.getUniqueId(), unban.getBan());
diff --git a/src/com/backtobedrock/augmentedhardcore/eventListeners/ListenerEntityDeath.java b/src/com/backtobedrock/augmentedhardcore/eventListeners/ListenerEntityDeath.java
index 3b72718..1da461a 100644
--- a/src/com/backtobedrock/augmentedhardcore/eventListeners/ListenerEntityDeath.java
+++ b/src/com/backtobedrock/augmentedhardcore/eventListeners/ListenerEntityDeath.java
@@ -5,6 +5,8 @@
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.entity.EntityDeathEvent;
+import java.util.logging.Level;
+
public class ListenerEntityDeath extends AbstractEventListener {
@EventHandler
@@ -21,7 +23,7 @@ public void onEntityKill(EntityDeathEvent event) {
Player player = (Player) entityDamageByEntityEvent.getDamager();
this.plugin.getPlayerRepository().getByPlayer(player).thenAcceptAsync(playerData -> playerData.onEntityKill(event.getEntity().getType(), player)).exceptionally(ex -> {
- ex.printStackTrace();
+ this.plugin.getLogger().log(Level.SEVERE, "Error handling entity death.", ex);
return null;
});
}
diff --git a/src/com/backtobedrock/augmentedhardcore/eventListeners/ListenerPlayerDamageByEntity.java b/src/com/backtobedrock/augmentedhardcore/eventListeners/ListenerPlayerDamageByEntity.java
index a63230b..5b9e101 100644
--- a/src/com/backtobedrock/augmentedhardcore/eventListeners/ListenerPlayerDamageByEntity.java
+++ b/src/com/backtobedrock/augmentedhardcore/eventListeners/ListenerPlayerDamageByEntity.java
@@ -7,6 +7,8 @@
import org.bukkit.event.EventHandler;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
+import java.util.logging.Level;
+
public class ListenerPlayerDamageByEntity extends AbstractEventListener {
@EventHandler
public void onPlayerDamage(EntityDamageByEntityEvent event) {
@@ -33,7 +35,7 @@ public void onPlayerDamage(EntityDamageByEntityEvent event) {
Killer tagger = EventUtils.getDamageEventKiller(event);
this.plugin.getPlayerRepository().getByPlayer(player).thenAcceptAsync(playerData -> playerData.onCombatTag(tagger, player)).exceptionally(ex -> {
- ex.printStackTrace();
+ this.plugin.getLogger().log(Level.SEVERE, "Error handling player damage.", ex);
return null;
});
}
diff --git a/src/com/backtobedrock/augmentedhardcore/eventListeners/ListenerPlayerDeath.java b/src/com/backtobedrock/augmentedhardcore/eventListeners/ListenerPlayerDeath.java
index c550407..5ca68a9 100644
--- a/src/com/backtobedrock/augmentedhardcore/eventListeners/ListenerPlayerDeath.java
+++ b/src/com/backtobedrock/augmentedhardcore/eventListeners/ListenerPlayerDeath.java
@@ -5,6 +5,8 @@
import org.bukkit.event.EventPriority;
import org.bukkit.event.entity.PlayerDeathEvent;
+import java.util.logging.Level;
+
public class ListenerPlayerDeath extends AbstractEventListener {
@EventHandler(priority = EventPriority.HIGHEST)
@@ -12,7 +14,7 @@ public void PlayerDeathListener(PlayerDeathEvent event) {
Player player = event.getEntity();
this.plugin.getPlayerRepository().getByPlayer(player).thenAcceptAsync(playerData -> playerData.onDeath(event, player)).exceptionally(ex -> {
- ex.printStackTrace();
+ this.plugin.getLogger().log(Level.SEVERE, "Error handling player death.", ex);
return null;
});
}
diff --git a/src/com/backtobedrock/augmentedhardcore/eventListeners/ListenerPlayerJoin.java b/src/com/backtobedrock/augmentedhardcore/eventListeners/ListenerPlayerJoin.java
index 5d83b8d..b05ab2c 100644
--- a/src/com/backtobedrock/augmentedhardcore/eventListeners/ListenerPlayerJoin.java
+++ b/src/com/backtobedrock/augmentedhardcore/eventListeners/ListenerPlayerJoin.java
@@ -6,6 +6,8 @@
import org.bukkit.event.EventPriority;
import org.bukkit.event.player.PlayerJoinEvent;
+import java.util.logging.Level;
+
public class ListenerPlayerJoin extends AbstractEventListener {
@EventHandler(priority = EventPriority.LOWEST)
@@ -13,7 +15,7 @@ public void onPlayerJoin(PlayerJoinEvent event) {
Player player = event.getPlayer();
this.plugin.getPlayerRepository().getByPlayer(player).thenAcceptAsync(e -> e.onJoin(player)).exceptionally(ex -> {
- ex.printStackTrace();
+ this.plugin.getLogger().log(Level.SEVERE, "Error handling player join.", ex);
return null;
});
diff --git a/src/com/backtobedrock/augmentedhardcore/eventListeners/ListenerPlayerKick.java b/src/com/backtobedrock/augmentedhardcore/eventListeners/ListenerPlayerKick.java
index 3c3ef6b..7d30b83 100644
--- a/src/com/backtobedrock/augmentedhardcore/eventListeners/ListenerPlayerKick.java
+++ b/src/com/backtobedrock/augmentedhardcore/eventListeners/ListenerPlayerKick.java
@@ -4,6 +4,8 @@
import org.bukkit.event.EventHandler;
import org.bukkit.event.player.PlayerKickEvent;
+import java.util.logging.Level;
+
public class ListenerPlayerKick extends AbstractEventListener {
@EventHandler
@@ -13,7 +15,7 @@ public void onPlayerKick(PlayerKickEvent event) {
}
this.plugin.getPlayerRepository().getByPlayer(event.getPlayer()).thenAcceptAsync(PlayerData::onKick).exceptionally(ex -> {
- ex.printStackTrace();
+ this.plugin.getLogger().log(Level.SEVERE, "Error handling player kick.", ex);
return null;
});
}
diff --git a/src/com/backtobedrock/augmentedhardcore/eventListeners/ListenerPlayerRespawn.java b/src/com/backtobedrock/augmentedhardcore/eventListeners/ListenerPlayerRespawn.java
index cfae745..973878b 100644
--- a/src/com/backtobedrock/augmentedhardcore/eventListeners/ListenerPlayerRespawn.java
+++ b/src/com/backtobedrock/augmentedhardcore/eventListeners/ListenerPlayerRespawn.java
@@ -5,13 +5,15 @@
import org.bukkit.event.EventPriority;
import org.bukkit.event.player.PlayerRespawnEvent;
+import java.util.logging.Level;
+
public class ListenerPlayerRespawn extends AbstractEventListener {
@EventHandler(priority = EventPriority.HIGHEST)
public void OnPlayerRespawn(PlayerRespawnEvent event) {
Player player = event.getPlayer();
this.plugin.getPlayerRepository().getByPlayer(player).thenAcceptAsync(e -> e.onRespawn(player)).exceptionally(ex -> {
- ex.printStackTrace();
+ this.plugin.getLogger().log(Level.SEVERE, "Error handling player respawn.", ex);
return null;
});
}
diff --git a/src/com/backtobedrock/augmentedhardcore/guis/AbstractDeathBansGui.java b/src/com/backtobedrock/augmentedhardcore/guis/AbstractDeathBansGui.java
index 6228c01..a7035a1 100644
--- a/src/com/backtobedrock/augmentedhardcore/guis/AbstractDeathBansGui.java
+++ b/src/com/backtobedrock/augmentedhardcore/guis/AbstractDeathBansGui.java
@@ -6,6 +6,7 @@
import java.util.*;
import java.util.concurrent.CompletableFuture;
+import java.util.logging.Level;
public abstract class AbstractDeathBansGui extends AbstractPaginatedGui {
protected final Map, Ban> bans = new LinkedHashMap<>();
@@ -62,7 +63,7 @@ public void setData() {
this.customHolder.updateInvent();
}).exceptionally(ex -> {
- ex.printStackTrace();
+ this.plugin.getLogger().log(Level.SEVERE, "Error loading death bans GUI.", ex);
return null;
});
}
diff --git a/src/com/backtobedrock/augmentedhardcore/guis/GuiRevive.java b/src/com/backtobedrock/augmentedhardcore/guis/GuiRevive.java
index d586b31..d55f071 100644
--- a/src/com/backtobedrock/augmentedhardcore/guis/GuiRevive.java
+++ b/src/com/backtobedrock/augmentedhardcore/guis/GuiRevive.java
@@ -9,6 +9,7 @@
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
+import java.util.logging.Level;
public class GuiRevive extends AbstractConfirmationGui {
private final PlayerData reviverData;
@@ -24,7 +25,7 @@ public GuiRevive(PlayerData reviverData, OfflinePlayer reviving) {
this.updateInfo(true);
this.updateConfirmation(true);
}).exceptionally(ex -> {
- ex.printStackTrace();
+ this.plugin.getLogger().log(Level.SEVERE, "Error loading revive GUI.", ex);
return null;
});
this.initialize();
diff --git a/src/com/backtobedrock/augmentedhardcore/mappers/Patch.java b/src/com/backtobedrock/augmentedhardcore/mappers/Patch.java
index 8cf846a..29fb3df 100644
--- a/src/com/backtobedrock/augmentedhardcore/mappers/Patch.java
+++ b/src/com/backtobedrock/augmentedhardcore/mappers/Patch.java
@@ -27,7 +27,7 @@ protected void execute(String sql) {
this.success = true;
} catch (SQLException e) {
this.success = false;
- e.printStackTrace();
+ this.plugin.getLogger().log(Level.SEVERE, "Failed to execute patch SQL.", e);
}
}
@@ -50,7 +50,7 @@ protected Boolean doesColumnExist(String tableName, String columnName) {
ResultSet resultSet = preparedStatement.executeQuery();
return resultSet.next() && resultSet.getInt("c") > 0;
} catch (SQLException e) {
- e.printStackTrace();
+ this.plugin.getLogger().log(Level.SEVERE, "Failed to check column existence.", e);
}
return false;
}
From 4b93d4fed4348a90a2b70e64900f49794c2fefde Mon Sep 17 00:00:00 2001
From: Jake Hoolz <84546680+JakeHoolz@users.noreply.github.com>
Date: Sat, 30 Aug 2025 16:04:16 -0500
Subject: [PATCH 15/43] feat: introduce life and ban managers
---
.../commands/CommandLives.java | 4 +-
.../commands/CommandNextLifePart.java | 2 +-
.../commands/CommandNextMaxHealth.java | 2 +-
.../commands/CommandNextRevive.java | 2 +-
.../domain/data/BanManager.java | 43 ++++
.../domain/data/LifeManager.java | 58 ++++++
.../domain/data/PlayerData.java | 184 ++++++------------
.../domain/data/PlaytimeTracker.java | 101 ++++++++++
.../guis/GuiPlayerDeathBans.java | 14 +-
.../mappers/player/MySQLPlayerMapper.java | 20 +-
.../PlaceholdersAugmentedHardcore.java | 24 +--
11 files changed, 293 insertions(+), 161 deletions(-)
create mode 100644 src/com/backtobedrock/augmentedhardcore/domain/data/BanManager.java
create mode 100644 src/com/backtobedrock/augmentedhardcore/domain/data/LifeManager.java
create mode 100644 src/com/backtobedrock/augmentedhardcore/domain/data/PlaytimeTracker.java
diff --git a/src/com/backtobedrock/augmentedhardcore/commands/CommandLives.java b/src/com/backtobedrock/augmentedhardcore/commands/CommandLives.java
index ace75a9..f75e37a 100644
--- a/src/com/backtobedrock/augmentedhardcore/commands/CommandLives.java
+++ b/src/com/backtobedrock/augmentedhardcore/commands/CommandLives.java
@@ -57,8 +57,8 @@ private void sendSuccessMessage(PlayerData playerData) {
this.cs.sendMessage(
this.plugin.getMessages().getCommandLivesLeft(
playerData.getPlayer().getName(),
- playerData.getLives() + (playerData.getLives() == 1 ? " life" : " lives"),
- Integer.toString(playerData.getLives())
+ playerData.getLifeManager().getLives() + (playerData.getLifeManager().getLives() == 1 ? " life" : " lives"),
+ Integer.toString(playerData.getLifeManager().getLives())
));
}
}
diff --git a/src/com/backtobedrock/augmentedhardcore/commands/CommandNextLifePart.java b/src/com/backtobedrock/augmentedhardcore/commands/CommandNextLifePart.java
index 531a58f..5d3bc07 100644
--- a/src/com/backtobedrock/augmentedhardcore/commands/CommandNextLifePart.java
+++ b/src/com/backtobedrock/augmentedhardcore/commands/CommandNextLifePart.java
@@ -57,7 +57,7 @@ private void runCommand(OfflinePlayer player) {
}
private void sendSuccessMessage(PlayerData playerData) {
- long nextLifePart = playerData.getTimeTillNextLifePart();
+ long nextLifePart = playerData.getPlaytimeTracker().getTimeTillNextLifePart();
this.cs.sendMessage(this.plugin.getMessages().getCommandNextLifePart(this.cs instanceof Player && ((Player) this.cs).getUniqueId().toString().equals(playerData.getPlayer().getUniqueId().toString())
? "You"
: playerData.getPlayer().getName(), MessageUtils.getTimeFromTicks(nextLifePart, TimePattern.LONG)));
diff --git a/src/com/backtobedrock/augmentedhardcore/commands/CommandNextMaxHealth.java b/src/com/backtobedrock/augmentedhardcore/commands/CommandNextMaxHealth.java
index 751c0a7..0ce15e0 100644
--- a/src/com/backtobedrock/augmentedhardcore/commands/CommandNextMaxHealth.java
+++ b/src/com/backtobedrock/augmentedhardcore/commands/CommandNextMaxHealth.java
@@ -57,7 +57,7 @@ private void runCommand(OfflinePlayer player) {
}
private void sendSuccessMessage(PlayerData playerData) {
- long nextMaxHealth = playerData.getTimeTillNextMaxHealth();
+ long nextMaxHealth = playerData.getPlaytimeTracker().getTimeTillNextMaxHealth();
this.cs.sendMessage(this.plugin.getMessages().getCommandNextMaxHealth(this.cs instanceof Player && ((Player) this.cs).getUniqueId().toString().equals(playerData.getPlayer().getUniqueId().toString())
? "You"
: playerData.getPlayer().getName(), MessageUtils.getTimeFromTicks(nextMaxHealth, TimePattern.LONG)));
diff --git a/src/com/backtobedrock/augmentedhardcore/commands/CommandNextRevive.java b/src/com/backtobedrock/augmentedhardcore/commands/CommandNextRevive.java
index 07533b5..19e10d2 100644
--- a/src/com/backtobedrock/augmentedhardcore/commands/CommandNextRevive.java
+++ b/src/com/backtobedrock/augmentedhardcore/commands/CommandNextRevive.java
@@ -57,7 +57,7 @@ private void runCommand(OfflinePlayer player) {
}
private void sendSuccessMessage(PlayerData playerData) {
- long reviveCooldown = playerData.getTimeTillNextRevive();
+ long reviveCooldown = playerData.getPlaytimeTracker().getTimeTillNextRevive();
this.cs.sendMessage(this.plugin.getMessages().getCommandNextRevive(this.cs instanceof Player && ((Player) this.cs).getUniqueId().toString().equals(playerData.getPlayer().getUniqueId().toString())
? "You"
: playerData.getPlayer().getName(), MessageUtils.getTimeFromTicks(reviveCooldown, TimePattern.LONG)));
diff --git a/src/com/backtobedrock/augmentedhardcore/domain/data/BanManager.java b/src/com/backtobedrock/augmentedhardcore/domain/data/BanManager.java
new file mode 100644
index 0000000..0e7268c
--- /dev/null
+++ b/src/com/backtobedrock/augmentedhardcore/domain/data/BanManager.java
@@ -0,0 +1,43 @@
+package com.backtobedrock.augmentedhardcore.domain.data;
+
+import com.backtobedrock.augmentedhardcore.domain.Ban;
+import org.javatuples.Pair;
+
+import java.util.Map;
+import java.util.NavigableMap;
+import java.util.TreeMap;
+
+/**
+ * Simple container around the player's death bans.
+ */
+public class BanManager {
+ private final NavigableMap bans = new TreeMap<>();
+
+ public BanManager() {
+ }
+
+ public BanManager(NavigableMap existing) {
+ if (existing != null) {
+ this.bans.putAll(existing);
+ }
+ }
+
+ public NavigableMap getBans() {
+ return bans;
+ }
+
+ public int getBanCount() {
+ return bans.size();
+ }
+
+ public Pair addBan(Ban ban) {
+ int key = (bans.isEmpty() ? 0 : bans.lastKey()) + 1;
+ bans.put(key, ban);
+ return new Pair<>(key, ban);
+ }
+
+ public Ban getLastDeathBan() {
+ Map.Entry entry = bans.lastEntry();
+ return entry == null ? null : entry.getValue();
+ }
+}
diff --git a/src/com/backtobedrock/augmentedhardcore/domain/data/LifeManager.java b/src/com/backtobedrock/augmentedhardcore/domain/data/LifeManager.java
new file mode 100644
index 0000000..89c545d
--- /dev/null
+++ b/src/com/backtobedrock/augmentedhardcore/domain/data/LifeManager.java
@@ -0,0 +1,58 @@
+package com.backtobedrock.augmentedhardcore.domain.data;
+
+import com.backtobedrock.augmentedhardcore.AugmentedHardcore;
+
+/**
+ * Handles life and life-part bookkeeping for a player.
+ */
+public class LifeManager {
+ private final AugmentedHardcore plugin;
+ private int lives;
+ private int lifeParts;
+
+ public LifeManager(AugmentedHardcore plugin, int lives, int lifeParts) {
+ this.plugin = plugin;
+ this.setLives(lives);
+ this.setLifeParts(lifeParts);
+ }
+
+ public int getLives() {
+ return lives;
+ }
+
+ public void setLives(int lives) {
+ int maxLives = plugin.getConfigurations().getLivesAndLifePartsConfiguration().getMaxLives();
+ this.lives = Math.max(0, Math.min(lives, maxLives));
+ }
+
+ public void increaseLives(int amount) {
+ setLives(this.lives + amount);
+ }
+
+ public void decreaseLives(int amount) {
+ setLives(this.lives - amount);
+ }
+
+ public int getLifeParts() {
+ return lifeParts;
+ }
+
+ public void setLifeParts(int lifeParts) {
+ int lifePartsPerLife = plugin.getConfigurations().getLivesAndLifePartsConfiguration().getLifePartsPerLife();
+ int livesToAdd = Math.min(lifeParts / lifePartsPerLife,
+ plugin.getConfigurations().getLivesAndLifePartsConfiguration().getMaxLives() - this.getLives());
+ if (livesToAdd > 0) {
+ increaseLives(livesToAdd);
+ }
+ int maxLifeParts = plugin.getConfigurations().getLivesAndLifePartsConfiguration().getMaxLifeParts();
+ this.lifeParts = Math.min(maxLifeParts, Math.max(0, lifeParts - livesToAdd * lifePartsPerLife));
+ }
+
+ public void increaseLifeParts(int amount) {
+ setLifeParts(this.lifeParts + amount);
+ }
+
+ public void decreaseLifeParts(int amount) {
+ setLifeParts(this.lifeParts - amount);
+ }
+}
diff --git a/src/com/backtobedrock/augmentedhardcore/domain/data/PlayerData.java b/src/com/backtobedrock/augmentedhardcore/domain/data/PlayerData.java
index a45dea9..ca092df 100644
--- a/src/com/backtobedrock/augmentedhardcore/domain/data/PlayerData.java
+++ b/src/com/backtobedrock/augmentedhardcore/domain/data/PlayerData.java
@@ -35,17 +35,14 @@ public class PlayerData {
private final List playtime = new ArrayList<>();
private final Map, IObserver>> observers;
private final String lastKnownIp;
- private final NavigableMap bans;
+ private final BanManager banManager;
+ private final LifeManager lifeManager;
+ private final PlaytimeTracker playtimeTracker;
private List combatTag = new ArrayList<>();
private boolean kicked = false;
private boolean combatLogged = false;
private Killer combatTagger;
private Killer reviving;
- private int lives;
- private int lifeParts;
- private long timeTillNextRevive;
- private long timeTillNextLifePart;
- private long timeTillNextMaxHealth;
private boolean spectatorBanned;
private LocalDateTime lastDeath;
@@ -69,14 +66,11 @@ public PlayerData(AugmentedHardcore plugin, OfflinePlayer player, String lastKno
this.plugin = plugin;
this.player = player;
this.lastDeath = lastDeath;
- this.bans = bans;
this.observers = new HashMap<>();
this.spectatorBanned = spectatorBanned;
- this.setTimeTillNextLifePart(timeTillNextLifePart);
- this.setTimeTillNextMaxHealth(timeTillNextMaxHealth);
- this.setTimeTillNextRevive(timeTillNextRevive);
- this.setLives(lives);
- this.setLifeParts(lifeParts);
+ this.lifeManager = new LifeManager(plugin, lives, lifeParts);
+ this.playtimeTracker = new PlaytimeTracker(plugin, this, timeTillNextRevive, timeTillNextLifePart, timeTillNextMaxHealth);
+ this.banManager = new BanManager(bans);
if (player.getPlayer() != null) {
lastKnownIp = PlayerUtils.getPlayerIP(player.getPlayer());
}
@@ -108,12 +102,16 @@ public static PlayerData deserialize(AugmentedHardcore plugin, ConfigurationSect
return new PlayerData(plugin, player, cLastKnownIp, cLastDeath, cLives, cLifeParts, cSpectatorBanned, cTimeTillNextRevive, cTimeTillNextLifePart, cTimeTillNextMaxHealth, cBans);
}
+ public PlaytimeTracker getPlaytimeTracker() {
+ return this.playtimeTracker;
+ }
+
public long getTimeTillNextRevive() {
- return timeTillNextRevive;
+ return this.playtimeTracker.getTimeTillNextRevive();
}
private void setTimeTillNextRevive(long timeTillNextRevive) {
- this.timeTillNextRevive = Math.max(0, Math.min(timeTillNextRevive, this.plugin.getConfigurations().getReviveConfiguration().getTimeBetweenRevives()));
+ this.playtimeTracker.setTimeTillNextRevive(timeTillNextRevive);
this.observers.forEach((key, value) -> value.get(MyStatsTimeTillNextReviveObserver.class).update());
}
@@ -121,12 +119,20 @@ public String getLastKnownIp() {
return this.lastKnownIp;
}
+ public LifeManager getLifeManager() {
+ return this.lifeManager;
+ }
+
+ public BanManager getBanManager() {
+ return this.banManager;
+ }
+
public int getLives() {
- return lives;
+ return this.lifeManager.getLives();
}
public void setLives(int lives) {
- this.lives = Math.max(0, Math.min(lives, this.plugin.getConfigurations().getLivesAndLifePartsConfiguration().getMaxLives()));
+ this.lifeManager.setLives(lives);
this.observers.forEach((key, value) -> value.get(MyStatsLivesObserver.class).update());
}
@@ -135,41 +141,40 @@ public OfflinePlayer getPlayer() {
}
public int getLifeParts() {
- return lifeParts;
+ return this.lifeManager.getLifeParts();
}
public void setLifeParts(int lifeParts) {
- int lifePartsPerLife = this.plugin.getConfigurations().getLivesAndLifePartsConfiguration().getLifePartsPerLife();
- int lives = Math.min(lifeParts / lifePartsPerLife, this.plugin.getConfigurations().getLivesAndLifePartsConfiguration().getMaxLives() - this.getLives());
- if (lives > 0) {
- this.increaseLives(lives);
- }
- this.lifeParts = Math.min(this.plugin.getConfigurations().getLivesAndLifePartsConfiguration().getMaxLifeParts(), Math.max(0, lifeParts - (lives * lifePartsPerLife)));
+ this.lifeManager.setLifeParts(lifeParts);
this.observers.forEach((key, value) -> value.get(MyStatsLifePartsObserver.class).update());
}
public NavigableMap getBans() {
- return bans;
+ return this.banManager.getBans();
}
public int getBanCount() {
- return this.bans.size();
+ return this.banManager.getBanCount();
}
private void decreaseLives(int amount) {
- this.setLives(this.getLives() - amount);
+ this.lifeManager.decreaseLives(amount);
+ this.observers.forEach((key, value) -> value.get(MyStatsLivesObserver.class).update());
}
public void increaseLives(int amount) {
- this.setLives(this.getLives() + amount);
+ this.lifeManager.increaseLives(amount);
+ this.observers.forEach((key, value) -> value.get(MyStatsLivesObserver.class).update());
}
private void decreaseLifeParts(int amount) {
- this.setLifeParts(this.getLifeParts() - amount);
+ this.lifeManager.decreaseLifeParts(amount);
+ this.observers.forEach((key, value) -> value.get(MyStatsLifePartsObserver.class).update());
}
public void increaseLifeParts(int amount) {
- this.setLifeParts(this.getLifeParts() + amount);
+ this.lifeManager.increaseLifeParts(amount);
+ this.observers.forEach((key, value) -> value.get(MyStatsLifePartsObserver.class).update());
}
public void onDeath(PlayerDeathEvent event, Player player) {
@@ -190,7 +195,7 @@ public void onDeath(PlayerDeathEvent event, Player player) {
this.loseMaxHealth(this.plugin.getConfigurations().getMaxHealthConfiguration().getMaxHealthDecreasePerDeath(), player);
if (this.plugin.getConfigurations().getLivesAndLifePartsConfiguration().isUseLives()) {
- if (this.lives == 0) {
+ if (this.getLives() == 0) {
this.loseLifeParts(this.plugin.getConfigurations().getLivesAndLifePartsConfiguration().getLifePartsLostPerDeathBan(), player);
this.ban(event, player);
} else {
@@ -338,10 +343,9 @@ private void ban(PlayerDeathEvent event, Player player) {
}
private Pair addBan(Ban ban) {
- int key = (this.bans.isEmpty() ? 0 : this.bans.lastKey()) + 1;
- this.bans.put(key, ban);
+ Pair pair = this.banManager.addBan(ban);
this.observers.forEach((k, value) -> value.get(MyStatsDeathBansObserver.class).update());
- return new Pair<>(key, ban);
+ return pair;
}
public void onRespawn(Player player) {
@@ -350,7 +354,7 @@ public void onRespawn(Player player) {
}
if (this.plugin.getConfigurations().getLivesAndLifePartsConfiguration().isUseLives()) {
- if (this.lives != 0) {
+ if (this.getLives() != 0) {
return;
}
@@ -565,96 +569,26 @@ public void resetSpectatorDeathBan(Player player) {
}
public void decreaseTimeTillNextLifePart(int amount, Player player) {
- if (this.isSpectatorBanned()) {
- return;
- }
-
- if (!this.plugin.getConfigurations().getLivesAndLifePartsConfiguration().isUseLifeParts()) {
- return;
- }
-
- if (!this.plugin.getConfigurations().getLivesAndLifePartsConfiguration().isGetLifePartsByPlaytime()) {
- return;
- }
-
- if (player.hasPermission(Permission.BYPASS_GAINLIFEPARTS_PLAYTIME.getPermissionString())) {
- return;
- }
-
- if (this.plugin.getConfigurations().getLivesAndLifePartsConfiguration().getDisableGainingLifePartsInWorlds().contains(player.getWorld().getName().toLowerCase())) {
- return;
- }
-
- if (this.lifeParts >= this.plugin.getConfigurations().getLivesAndLifePartsConfiguration().getMaxLifeParts()) {
- return;
- }
-
- long decreased = this.getTimeTillNextLifePart() - amount;
- if (decreased <= 0) {
- this.gainLifeParts(1, player);
- this.setTimeTillNextLifePart(this.plugin.getConfigurations().getLivesAndLifePartsConfiguration().getPlaytimePerLifePart() - Math.abs(decreased));
- } else {
- this.setTimeTillNextLifePart(decreased);
- }
+ this.playtimeTracker.decreaseTimeTillNextLifePart(amount, player);
+ this.observers.forEach((key, value) -> value.get(MyStatsTimeTillNextLifePartObserver.class).update());
}
public void decreaseTimeTillNextMaxHealth(int amount, Player player) {
- if (this.isSpectatorBanned()) {
- return;
- }
-
- if (!this.plugin.getConfigurations().getMaxHealthConfiguration().isUseMaxHealth()) {
- return;
- }
-
- if (!this.plugin.getConfigurations().getMaxHealthConfiguration().isGetMaxHealthByPlaytime()) {
- return;
- }
-
- if (player.hasPermission(Permission.BYPASS_GAINMAXHEALTH_PLAYTIME.getPermissionString())) {
- return;
- }
-
- if (this.plugin.getConfigurations().getMaxHealthConfiguration().getDisableGainingMaxHealthInWorlds().contains(player.getWorld().getName().toLowerCase())) {
- return;
- }
-
- double value = PlayerUtils.getMaxHealth(player);
- if (value >= this.plugin.getConfigurations().getMaxHealthConfiguration().getMaxHealth()) {
- return;
- }
-
- long decreased = this.getTimeTillNextMaxHealth() - amount;
- if (decreased <= 0) {
- this.gainMaxHealth(1D, player);
- this.setTimeTillNextMaxHealth(this.plugin.getConfigurations().getMaxHealthConfiguration().getPlaytimePerHalfHeart() - Math.abs(decreased));
- } else {
- this.setTimeTillNextMaxHealth(decreased);
- }
+ this.playtimeTracker.decreaseTimeTillNextMaxHealth(amount, player);
+ this.observers.forEach((key, value) -> value.get(MyStatsTimeTillNextMaxHealthObserver.class).update());
}
public void decreaseTimeTillNextRevive(int amount) {
- if (this.isSpectatorBanned()) {
- return;
- }
-
- if (!this.plugin.getConfigurations().getReviveConfiguration().isUseRevive()) {
- return;
- }
-
- if (this.timeTillNextRevive == 0) {
- return;
- }
-
- this.setTimeTillNextRevive(this.getTimeTillNextRevive() - amount);
+ this.playtimeTracker.decreaseTimeTillNextRevive(amount);
+ this.observers.forEach((key, value) -> value.get(MyStatsTimeTillNextReviveObserver.class).update());
}
public long getTimeTillNextMaxHealth() {
- return this.timeTillNextMaxHealth;
+ return this.playtimeTracker.getTimeTillNextMaxHealth();
}
private void setTimeTillNextMaxHealth(long timeTillNextMaxHealth) {
- this.timeTillNextMaxHealth = Math.max(0, Math.min(timeTillNextMaxHealth, this.plugin.getConfigurations().getMaxHealthConfiguration().getPlaytimePerHalfHeart()));
+ this.playtimeTracker.setTimeTillNextMaxHealth(timeTillNextMaxHealth);
this.observers.forEach((key, value) -> value.get(MyStatsTimeTillNextMaxHealthObserver.class).update());
}
@@ -771,7 +705,7 @@ public boolean checkRevivePermissionsReviver(OfflinePlayer reviving, Player play
}
//check if revive on cooldown
- if (this.timeTillNextRevive > 0 && !player.hasPermission(Permission.BYPASS_REVIVECOOLDOWN.getPermissionString())) {
+ if (this.getTimeTillNextRevive() > 0 && !player.hasPermission(Permission.BYPASS_REVIVECOOLDOWN.getPermissionString())) {
player.sendMessage(String.format("§cYou cannot revive %s for another %s.", reviving.getName(), MessageUtils.getTimeFromTicks(this.getTimeTillNextRevive(), TimePattern.LONG)));
return false;
}
@@ -794,11 +728,11 @@ public void onRevive(Player reviver) {
}
public long getTimeTillNextLifePart() {
- return timeTillNextLifePart;
+ return this.playtimeTracker.getTimeTillNextLifePart();
}
private void setTimeTillNextLifePart(long timeTillNextLifePart) {
- this.timeTillNextLifePart = Math.max(0, Math.min(timeTillNextLifePart, this.plugin.getConfigurations().getLivesAndLifePartsConfiguration().getPlaytimePerLifePart()));
+ this.playtimeTracker.setTimeTillNextLifePart(timeTillNextLifePart);
this.observers.forEach((key, value) -> value.get(MyStatsTimeTillNextLifePartObserver.class).update());
}
@@ -810,15 +744,15 @@ public Map serialize() {
Map map = new HashMap<>();
Map
-
- com.zaxxer
- HikariCP
- 5.1.0
- provided
-
org.javatuples
javatuples
@@ -128,7 +128,13 @@
com.zaxxer
HikariCP
- 5.1.0
+ 4.0.3
+ provided
+
+
+ com.zaxxer
+ HikariCP
+ 4.0.3
test
diff --git a/src/com/backtobedrock/augmentedhardcore/AugmentedHardcore.java b/src/com/backtobedrock/augmentedhardcore/AugmentedHardcore.java
index fcb33a5..ea74969 100644
--- a/src/com/backtobedrock/augmentedhardcore/AugmentedHardcore.java
+++ b/src/com/backtobedrock/augmentedhardcore/AugmentedHardcore.java
@@ -207,7 +207,7 @@ private void initDB() {
if (query.isEmpty()) {
continue;
}
- try (Connection conn = this.getConfigurations().getDataConfiguration().getDatabase().getDataSource().getConnection();
+ try (Connection conn = this.getConfigurations().getDataConfiguration().getDatabase().getConnection();
PreparedStatement stmt = conn.prepareStatement(query)) {
stmt.execute();
diff --git a/src/com/backtobedrock/augmentedhardcore/domain/Database.java b/src/com/backtobedrock/augmentedhardcore/domain/Database.java
index f7a58c4..6b60ff8 100644
--- a/src/com/backtobedrock/augmentedhardcore/domain/Database.java
+++ b/src/com/backtobedrock/augmentedhardcore/domain/Database.java
@@ -1,10 +1,13 @@
package com.backtobedrock.augmentedhardcore.domain;
import com.backtobedrock.augmentedhardcore.AugmentedHardcore;
-import com.zaxxer.hikari.HikariDataSource;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.plugin.java.JavaPlugin;
+import com.zaxxer.hikari.HikariDataSource;
+
+import java.sql.Connection;
+import java.sql.SQLException;
import java.util.logging.Level;
public class Database {
@@ -75,7 +78,7 @@ public String getPassword() {
return password;
}
- public HikariDataSource getDataSource() {
+ private HikariDataSource getDataSource() {
if (this.dataSource == null) {
this.dataSource = new HikariDataSource();
this.dataSource.setJdbcUrl(String.format("jdbc:mysql://%s:%s/%s", this.getHostname(), this.getPort(), this.getDatabaseName()));
@@ -91,6 +94,10 @@ public HikariDataSource getDataSource() {
return this.dataSource;
}
+ public Connection getConnection() throws SQLException {
+ return this.getDataSource().getConnection();
+ }
+
public void close() {
if (this.dataSource != null) {
this.dataSource.close();
diff --git a/src/com/backtobedrock/augmentedhardcore/mappers/Patch.java b/src/com/backtobedrock/augmentedhardcore/mappers/Patch.java
index 29fb3df..706460e 100644
--- a/src/com/backtobedrock/augmentedhardcore/mappers/Patch.java
+++ b/src/com/backtobedrock/augmentedhardcore/mappers/Patch.java
@@ -22,7 +22,7 @@ public Patch() {
protected abstract void applyPatch();
protected void execute(String sql) {
- try (Connection connection = this.database.getDataSource().getConnection(); PreparedStatement preparedStatement = connection.prepareStatement(sql)) {
+ try (Connection connection = this.database.getConnection(); PreparedStatement preparedStatement = connection.prepareStatement(sql)) {
preparedStatement.execute();
this.success = true;
} catch (SQLException e) {
@@ -44,7 +44,7 @@ public void executePatch() {
protected Boolean doesColumnExist(String tableName, String columnName) {
String sql = "SELECT COUNT(1) as c FROM INFORMATION_SCHEMA.COLUMNS " +
"WHERE TABLE_NAME=? AND COLUMN_NAME=?;";
- try (Connection connection = this.database.getDataSource().getConnection(); PreparedStatement preparedStatement = connection.prepareStatement(sql)) {
+ try (Connection connection = this.database.getConnection(); PreparedStatement preparedStatement = connection.prepareStatement(sql)) {
preparedStatement.setString(1, tableName);
preparedStatement.setString(2, columnName);
ResultSet resultSet = preparedStatement.executeQuery();
diff --git a/src/com/backtobedrock/augmentedhardcore/mappers/ban/MySQLBanMapper.java b/src/com/backtobedrock/augmentedhardcore/mappers/ban/MySQLBanMapper.java
index ab6472a..fe097f6 100644
--- a/src/com/backtobedrock/augmentedhardcore/mappers/ban/MySQLBanMapper.java
+++ b/src/com/backtobedrock/augmentedhardcore/mappers/ban/MySQLBanMapper.java
@@ -89,7 +89,7 @@ public void updateBan(Server server, UUID uuid, Pair ban) {
+ "`time_since_previous_death_ban` = ?,"
+ "`time_since_previous_death` = ?;";
- try (Connection connection = this.database.getDataSource().getConnection(); PreparedStatement preparedStatement = connection.prepareStatement(sql)) {
+ try (Connection connection = this.database.getConnection(); PreparedStatement preparedStatement = connection.prepareStatement(sql)) {
preparedStatement.setInt(1, ban.getValue0());
preparedStatement.setString(2, uuid.toString());
preparedStatement.setString(3, server != null ? InetAddress.getLocalHost().getHostAddress() : null);
@@ -152,7 +152,7 @@ public void deleteBan(UUID uuid, Integer id) {
String sql = "DELETE FROM ah_ban " +
"WHERE ban_id = ? AND player_uuid = ?;";
- try (Connection connection = this.database.getDataSource().getConnection(); PreparedStatement preparedStatement = connection.prepareStatement(sql)) {
+ try (Connection connection = this.database.getConnection(); PreparedStatement preparedStatement = connection.prepareStatement(sql)) {
preparedStatement.setString(1, id.toString());
preparedStatement.setString(2, uuid.toString());
preparedStatement.execute();
diff --git a/src/com/backtobedrock/augmentedhardcore/mappers/player/MySQLPlayerMapper.java b/src/com/backtobedrock/augmentedhardcore/mappers/player/MySQLPlayerMapper.java
index 57ec630..b2835e5 100644
--- a/src/com/backtobedrock/augmentedhardcore/mappers/player/MySQLPlayerMapper.java
+++ b/src/com/backtobedrock/augmentedhardcore/mappers/player/MySQLPlayerMapper.java
@@ -54,7 +54,7 @@ private PlayerData getPlayerData(OfflinePlayer player) {
+ "RIGHT OUTER JOIN ah_player as p ON p.player_uuid = b.player_uuid "
+ "WHERE p.player_uuid = ?;";
- try (Connection connection = this.database.getDataSource().getConnection(); PreparedStatement preparedStatement = connection.prepareStatement(sql)) {
+ try (Connection connection = this.database.getConnection(); PreparedStatement preparedStatement = connection.prepareStatement(sql)) {
preparedStatement.setString(1, player.getUniqueId().toString());
ResultSet resultSet = preparedStatement.executeQuery();
NavigableMap deathBans = new TreeMap<>();
@@ -119,7 +119,7 @@ private void updatePlayerDataSync(PlayerData playerData) {
+ "`time_till_next_life_part` = ?,"
+ "`time_till_next_max_health` = ?;";
- try (Connection connection = this.database.getDataSource().getConnection(); PreparedStatement preparedStatement = connection.prepareStatement(sql)) {
+ try (Connection connection = this.database.getConnection(); PreparedStatement preparedStatement = connection.prepareStatement(sql)) {
preparedStatement.setString(1, playerData.getPlayer().getUniqueId().toString());
preparedStatement.setString(2, playerData.getPlayer().getName());
preparedStatement.setString(3, playerData.getLastKnownIp());
@@ -151,7 +151,7 @@ public void deletePlayerData(OfflinePlayer player) {
String sql = "DELETE FROM ah_player " +
"WHERE `player_uuid` = ?;";
- try (Connection connection = this.database.getDataSource().getConnection(); PreparedStatement preparedStatement = connection.prepareStatement(sql)) {
+ try (Connection connection = this.database.getConnection(); PreparedStatement preparedStatement = connection.prepareStatement(sql)) {
preparedStatement.setString(1, player.getUniqueId().toString());
preparedStatement.execute();
} catch (SQLException e) {
diff --git a/src/com/backtobedrock/augmentedhardcore/mappers/server/MySQLServerMapper.java b/src/com/backtobedrock/augmentedhardcore/mappers/server/MySQLServerMapper.java
index def93e8..8888549 100644
--- a/src/com/backtobedrock/augmentedhardcore/mappers/server/MySQLServerMapper.java
+++ b/src/com/backtobedrock/augmentedhardcore/mappers/server/MySQLServerMapper.java
@@ -57,7 +57,7 @@ public CompletableFuture getServerData(Server server) {
+ "RIGHT OUTER JOIN ah_server as s ON b.server_ip = s.server_ip AND b.server_port = s.server_port "
+ "WHERE s.server_ip = ? AND s.server_port = ?;";
- try (Connection connection = this.database.getDataSource().getConnection(); PreparedStatement preparedStatement = connection.prepareStatement(sql)) {
+ try (Connection connection = this.database.getConnection(); PreparedStatement preparedStatement = connection.prepareStatement(sql)) {
preparedStatement.setString(1, InetAddress.getLocalHost().getHostAddress());
preparedStatement.setInt(2, server.getPort());
ResultSet resultSet = preparedStatement.executeQuery();
@@ -88,7 +88,7 @@ public void updateServerData(ServerData data) {
+ "VALUES(?, ?, ?)"
+ "ON DUPLICATE KEY UPDATE `total_death_bans` = ?;";
- try (Connection connection = this.database.getDataSource().getConnection(); PreparedStatement preparedStatement = connection.prepareStatement(sql)) {
+ try (Connection connection = this.database.getConnection(); PreparedStatement preparedStatement = connection.prepareStatement(sql)) {
preparedStatement.setString(1, InetAddress.getLocalHost().getHostAddress());
preparedStatement.setInt(2, this.plugin.getServer().getPort());
preparedStatement.setInt(3, data.getTotalDeathBans());
@@ -111,7 +111,7 @@ public void deleteServerData() {
String sql = "DELETE FROM ah_server " +
"WHERE server_ip = ? AND server_port = ?;";
- try (Connection connection = this.database.getDataSource().getConnection(); PreparedStatement preparedStatement = connection.prepareStatement(sql)) {
+ try (Connection connection = this.database.getConnection(); PreparedStatement preparedStatement = connection.prepareStatement(sql)) {
preparedStatement.setString(1, InetAddress.getLocalHost().getHostAddress());
preparedStatement.setInt(2, this.plugin.getServer().getPort());
preparedStatement.execute();
diff --git a/src/resources/plugin.yml b/src/resources/plugin.yml
index a5a6d65..d796763 100644
--- a/src/resources/plugin.yml
+++ b/src/resources/plugin.yml
@@ -8,8 +8,8 @@ description: A very customizable and lightweight plugin that enhances the hardco
api-version: 1.13
softdepend: [ PlaceholderAPI, CombatLogX ]
libraries:
- - com.zaxxer:HikariCP:5.0.1
- org.javatuples:javatuples:1.2
+ - com.zaxxer:HikariCP:4.0.3
commands:
augmentedhardcore:
aliases:
diff --git a/src/test/java/com/backtobedrock/augmentedhardcore/domain/DatabaseTest.java b/src/test/java/com/backtobedrock/augmentedhardcore/domain/DatabaseTest.java
index 4755cc0..2dd404f 100644
--- a/src/test/java/com/backtobedrock/augmentedhardcore/domain/DatabaseTest.java
+++ b/src/test/java/com/backtobedrock/augmentedhardcore/domain/DatabaseTest.java
@@ -1,13 +1,15 @@
package com.backtobedrock.augmentedhardcore.domain;
import com.backtobedrock.augmentedhardcore.AugmentedHardcore;
-import com.zaxxer.hikari.HikariDataSource;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.plugin.java.JavaPlugin;
import org.junit.jupiter.api.Test;
+import com.zaxxer.hikari.HikariDataSource;
+import org.mockito.MockedConstruction;
import org.mockito.MockedStatic;
import org.mockito.Mockito;
+import java.sql.Connection;
import java.util.logging.Logger;
import static org.junit.jupiter.api.Assertions.*;
@@ -16,13 +18,14 @@
class DatabaseTest {
@Test
- void testGetDataSourceConfiguration() {
- Database db = new Database("localhost", "3306", "testdb", "user", "pass");
- HikariDataSource ds = db.getDataSource();
- assertEquals("jdbc:mysql://localhost:3306/testdb", ds.getJdbcUrl());
- assertEquals("user", ds.getUsername());
- assertEquals("pass", ds.getPassword());
- assertEquals("true", ds.getDataSourceProperties().getProperty("autoReconnect"));
+ void testGetConnection() throws Exception {
+ Connection mockConn = mock(Connection.class);
+ try (MockedConstruction mocked = Mockito.mockConstruction(HikariDataSource.class,
+ (mock, context) -> when(mock.getConnection()).thenReturn(mockConn))) {
+ Database db = new Database("localhost", "3306", "testdb", "user", "pass");
+ Connection conn = db.getConnection();
+ assertSame(mockConn, conn);
+ }
}
@Test
From 826b1adf98b63dc4834b5bb9b9e3725806d0ef71 Mon Sep 17 00:00:00 2001
From: Jake Hoolz
Date: Sat, 30 Aug 2025 16:37:15 -0500
Subject: [PATCH 17/43] Update pom.xml
---
pom.xml | 8 +-------
1 file changed, 1 insertion(+), 7 deletions(-)
diff --git a/pom.xml b/pom.xml
index 9fa87d0..4d327cd 100644
--- a/pom.xml
+++ b/pom.xml
@@ -128,15 +128,9 @@
com.zaxxer
HikariCP
- 4.0.3
+ 7.0.2
provided
-
- com.zaxxer
- HikariCP
- 4.0.3
- test
-
org.junit.jupiter
junit-jupiter
From fd9f25cde73985c3b8c0e4aa6233edfc32fefd52 Mon Sep 17 00:00:00 2001
From: Jake Hoolz
Date: Sat, 30 Aug 2025 16:54:26 -0500
Subject: [PATCH 18/43] minor
---
pom.xml | 19 ------
.../domain/data/PlayerData.java | 4 +-
.../augmentedhardcore/mappers/Patch.java | 3 +-
.../domain/DatabaseTest.java | 50 ---------------
.../domain/data/PlayerDataTest.java | 61 -------------------
5 files changed, 3 insertions(+), 134 deletions(-)
delete mode 100644 src/test/java/com/backtobedrock/augmentedhardcore/domain/DatabaseTest.java
delete mode 100644 src/test/java/com/backtobedrock/augmentedhardcore/domain/data/PlayerDataTest.java
diff --git a/pom.xml b/pom.xml
index 4d327cd..118d3ae 100644
--- a/pom.xml
+++ b/pom.xml
@@ -40,7 +40,6 @@
src
- src/test/java
clean package
@@ -131,23 +130,5 @@
7.0.2
provided
-
- org.junit.jupiter
- junit-jupiter
- 5.10.0
- test
-
-
- org.mockito
- mockito-junit-jupiter
- 5.5.0
- test
-
-
- org.mockito
- mockito-inline
- 5.2.0
- test
-
\ No newline at end of file
diff --git a/src/com/backtobedrock/augmentedhardcore/domain/data/PlayerData.java b/src/com/backtobedrock/augmentedhardcore/domain/data/PlayerData.java
index ca092df..9ba507a 100644
--- a/src/com/backtobedrock/augmentedhardcore/domain/data/PlayerData.java
+++ b/src/com/backtobedrock/augmentedhardcore/domain/data/PlayerData.java
@@ -423,7 +423,7 @@ private void onMaxHealthEntityKill(EntityType type, Player player) {
this.gainMaxHealth(this.plugin.getConfigurations().getMaxHealthConfiguration().getMaxHealthIncreasePerKill().getOrDefault(type, 0D), player);
}
- private void gainLifeParts(int amount, Player player) {
+ void gainLifeParts(int amount, Player player) {
//check if in disabled world
if (this.plugin.getConfigurations().getLivesAndLifePartsConfiguration().getDisableGainingLifePartsInWorlds().contains(player.getWorld().getName().toLowerCase())) {
return;
@@ -432,7 +432,7 @@ private void gainLifeParts(int amount, Player player) {
this.increaseLifeParts(amount);
}
- private void gainMaxHealth(double amount, Player player) {
+ void gainMaxHealth(double amount, Player player) {
//check if in disabled world
if (this.plugin.getConfigurations().getMaxHealthConfiguration().getDisableGainingMaxHealthInWorlds().contains(player.getWorld().getName().toLowerCase())) {
return;
diff --git a/src/com/backtobedrock/augmentedhardcore/mappers/Patch.java b/src/com/backtobedrock/augmentedhardcore/mappers/Patch.java
index 706460e..5030dd5 100644
--- a/src/com/backtobedrock/augmentedhardcore/mappers/Patch.java
+++ b/src/com/backtobedrock/augmentedhardcore/mappers/Patch.java
@@ -10,11 +10,10 @@
import java.util.logging.Level;
public abstract class Patch extends AbstractMapper {
- private final AugmentedHardcore plugin;
protected boolean success = false;
public Patch() {
- this.plugin = JavaPlugin.getPlugin(AugmentedHardcore.class);
+ super(JavaPlugin.getPlugin(AugmentedHardcore.class));
}
protected abstract boolean hasBeenApplied();
diff --git a/src/test/java/com/backtobedrock/augmentedhardcore/domain/DatabaseTest.java b/src/test/java/com/backtobedrock/augmentedhardcore/domain/DatabaseTest.java
deleted file mode 100644
index 2dd404f..0000000
--- a/src/test/java/com/backtobedrock/augmentedhardcore/domain/DatabaseTest.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package com.backtobedrock.augmentedhardcore.domain;
-
-import com.backtobedrock.augmentedhardcore.AugmentedHardcore;
-import org.bukkit.configuration.ConfigurationSection;
-import org.bukkit.plugin.java.JavaPlugin;
-import org.junit.jupiter.api.Test;
-import com.zaxxer.hikari.HikariDataSource;
-import org.mockito.MockedConstruction;
-import org.mockito.MockedStatic;
-import org.mockito.Mockito;
-
-import java.sql.Connection;
-import java.util.logging.Logger;
-
-import static org.junit.jupiter.api.Assertions.*;
-import static org.mockito.Mockito.*;
-
-class DatabaseTest {
-
- @Test
- void testGetConnection() throws Exception {
- Connection mockConn = mock(Connection.class);
- try (MockedConstruction mocked = Mockito.mockConstruction(HikariDataSource.class,
- (mock, context) -> when(mock.getConnection()).thenReturn(mockConn))) {
- Database db = new Database("localhost", "3306", "testdb", "user", "pass");
- Connection conn = db.getConnection();
- assertSame(mockConn, conn);
- }
- }
-
- @Test
- void testDeserialize() {
- ConfigurationSection section = mock(ConfigurationSection.class);
- when(section.getString("Hostname")).thenReturn("localhost");
- when(section.getString("Port", "3306")).thenReturn("3306");
- when(section.getString("Database")).thenReturn("db");
- when(section.getString("Username")).thenReturn("user");
- when(section.getString("Password")).thenReturn("pwd");
-
- AugmentedHardcore plugin = mock(AugmentedHardcore.class);
- when(plugin.getLogger()).thenReturn(Logger.getLogger("test"));
- try (MockedStatic mocked = Mockito.mockStatic(JavaPlugin.class)) {
- mocked.when(() -> JavaPlugin.getPlugin(AugmentedHardcore.class)).thenReturn(plugin);
- Database db = Database.deserialize(section);
- assertNotNull(db);
- assertEquals("localhost", db.getHostname());
- assertEquals("db", db.getDatabaseName());
- }
- }
-}
diff --git a/src/test/java/com/backtobedrock/augmentedhardcore/domain/data/PlayerDataTest.java b/src/test/java/com/backtobedrock/augmentedhardcore/domain/data/PlayerDataTest.java
deleted file mode 100644
index 7b849c1..0000000
--- a/src/test/java/com/backtobedrock/augmentedhardcore/domain/data/PlayerDataTest.java
+++ /dev/null
@@ -1,61 +0,0 @@
-package com.backtobedrock.augmentedhardcore.domain.data;
-
-import com.backtobedrock.augmentedhardcore.AugmentedHardcore;
-import com.backtobedrock.augmentedhardcore.configs.Configurations;
-import com.backtobedrock.augmentedhardcore.domain.configurationDomain.ConfigurationLivesAndLifeParts;
-import com.backtobedrock.augmentedhardcore.domain.configurationDomain.ConfigurationMaxHealth;
-import com.backtobedrock.augmentedhardcore.domain.configurationDomain.ConfigurationRevive;
-import org.bukkit.OfflinePlayer;
-import org.junit.jupiter.api.Test;
-
-import java.time.LocalDateTime;
-import java.util.Map;
-import java.util.TreeMap;
-import java.util.UUID;
-
-import static org.junit.jupiter.api.Assertions.*;
-import static org.mockito.Mockito.*;
-
-class PlayerDataTest {
-
- @Test
- void testSerializeIncludesCoreFields() {
- AugmentedHardcore plugin = mock(AugmentedHardcore.class);
- Configurations configs = mock(Configurations.class);
- ConfigurationLivesAndLifeParts livesConfig = mock(ConfigurationLivesAndLifeParts.class);
- ConfigurationMaxHealth maxHealthConfig = mock(ConfigurationMaxHealth.class);
- ConfigurationRevive reviveConfig = mock(ConfigurationRevive.class);
-
- when(plugin.getConfigurations()).thenReturn(configs);
- when(configs.getLivesAndLifePartsConfiguration()).thenReturn(livesConfig);
- when(livesConfig.getPlaytimePerLifePart()).thenReturn(1000);
- when(configs.getMaxHealthConfiguration()).thenReturn(maxHealthConfig);
- when(maxHealthConfig.getPlaytimePerHalfHeart()).thenReturn(2000);
- when(configs.getReviveConfiguration()).thenReturn(reviveConfig);
- when(reviveConfig.getTimeBetweenRevives()).thenReturn(5000);
-
- OfflinePlayer offline = mock(OfflinePlayer.class);
- when(offline.getPlayer()).thenReturn(null);
- when(offline.getUniqueId()).thenReturn(UUID.randomUUID());
- when(offline.getName()).thenReturn("Steve");
-
- PlayerData data = new PlayerData(
- plugin,
- offline,
- "127.0.0.1",
- LocalDateTime.of(2023,1,1,0,0),
- 3,
- 5,
- true,
- 1200,
- 400,
- 800,
- new TreeMap<>());
-
- Map serialized = data.serialize();
- assertEquals(3, serialized.get("Lives"));
- assertEquals(5, serialized.get("LifeParts"));
- assertEquals("127.0.0.1", serialized.get("LastKnownIp"));
- assertEquals(true, serialized.get("SpectatorBanned"));
- }
-}
From 602b14a2d1928ff9fc0ad60389d07fd2ebb25427 Mon Sep 17 00:00:00 2001
From: Jake Hoolz <84546680+JakeHoolz@users.noreply.github.com>
Date: Sat, 30 Aug 2025 17:16:11 -0500
Subject: [PATCH 19/43] refactor: replace double brace maps
---
pom.xml | 2 +-
.../augmentedhardcore/configs/Messages.java | 220 +++++++++---------
.../guis/AbstractPaginatedGui.java | 29 ++-
.../augmentedhardcore/guis/GuiMyStats.java | 48 ++--
.../augmentedhardcore/guis/GuiRevive.java | 9 +-
5 files changed, 148 insertions(+), 160 deletions(-)
diff --git a/pom.xml b/pom.xml
index 118d3ae..6cb4b76 100644
--- a/pom.xml
+++ b/pom.xml
@@ -7,7 +7,7 @@
3.4.2
jar
- 8
+ 17
UTF-8
diff --git a/src/com/backtobedrock/augmentedhardcore/configs/Messages.java b/src/com/backtobedrock/augmentedhardcore/configs/Messages.java
index 4effe16..847928d 100644
--- a/src/com/backtobedrock/augmentedhardcore/configs/Messages.java
+++ b/src/com/backtobedrock/augmentedhardcore/configs/Messages.java
@@ -103,24 +103,20 @@ public String getRequireOnlinePlayerError() {
}
public String getTargetNotOnlineError(String player) {
- Map placeholders = new HashMap() {{
- put("player", player);
- }};
+ Map placeholders = Map.of("player", player);
return MessageUtils.replacePlaceholders(this.messages.getString("TargetNotOnlineError", "&c%player% is currently not online."), placeholders);
}
public String getTargetNotPlayedBeforeError(String player) {
- Map placeholders = new HashMap() {{
- put("player", player);
- }};
+ Map placeholders = Map.of("player", player);
return MessageUtils.replacePlaceholders(this.messages.getString("TargetNotPlayedBeforeError", "&c%player% has not played on the server before."), placeholders);
}
public String getTargetNotBannedByPluginError(String player, String plugin) {
- Map placeholders = new HashMap() {{
- put("player", player);
- put("plugin", plugin);
- }};
+ Map placeholders = Map.of(
+ "player", player,
+ "plugin", plugin
+ );
return MessageUtils.replacePlaceholders(this.messages.getString("TargetNotBannedByPluginError", "&c%player% is not death banned by %plugin%."), placeholders);
}
@@ -141,187 +137,181 @@ public String getCommandHelpFooter() {
}
public String getCommandAddLives(String lives, String livesRaw, String livesTotal, String livesTotalRaw) {
- Map placeholders = new HashMap() {{
- put("lives", lives);
- put("livesraw", livesRaw);
- put("livestotal", livesTotal);
- put("livestotalraw", livesTotalRaw);
- }};
+ Map placeholders = Map.of(
+ "lives", lives,
+ "livesraw", livesRaw,
+ "livestotal", livesTotal,
+ "livestotalraw", livesTotalRaw
+ );
return MessageUtils.replacePlaceholders(this.messages.getString("CommandAddLives", "&aYou've been given &e%lives%&a, you now have &e%livestotal%&a."), placeholders);
}
public String getCommandAddLivesSuccess(String player, String lives, String livesRaw, String livesTotal, String livesTotalRaw) {
- Map placeholders = new HashMap() {{
- put("player", player);
- put("lives", lives);
- put("livesraw", livesRaw);
- put("livestotal", livesTotal);
- put("livestotalraw", livesTotalRaw);
- }};
+ Map placeholders = Map.of(
+ "player", player,
+ "lives", lives,
+ "livesraw", livesRaw,
+ "livestotal", livesTotal,
+ "livestotalraw", livesTotalRaw
+ );
return MessageUtils.replacePlaceholders(this.messages.getString("CommandAddLivesSuccess", "&aYou successfully gave &e%lives%&a, &e%player% &anow has §e%livestotal%§a."), placeholders);
}
public String getCommandAddLifeParts(String lifeparts, String lifepartsRaw, String lifepartsTotal, String lifepartsTotalRaw) {
- Map placeholders = new HashMap() {{
- put("lifeparts", lifeparts);
- put("lifepartsraw", lifepartsRaw);
- put("lifepartstotal", lifepartsTotal);
- put("lifepartstotalraw", lifepartsTotalRaw);
- }};
+ Map placeholders = Map.of(
+ "lifeparts", lifeparts,
+ "lifepartsraw", lifepartsRaw,
+ "lifepartstotal", lifepartsTotal,
+ "lifepartstotalraw", lifepartsTotalRaw
+ );
return MessageUtils.replacePlaceholders(this.messages.getString("CommandAddLifeParts", "&aYou've been given &e%lifeparts%&a, you now have &e%lifepartstotal%&a."), placeholders);
}
public String getCommandAddLifePartsSuccess(String player, String lifeparts, String lifepartsRaw, String lifepartsTotal, String lifepartsTotalRaw) {
- Map placeholders = new HashMap() {{
- put("player", player);
- put("lifeparts", lifeparts);
- put("lifepartsraw", lifepartsRaw);
- put("lifepartstotal", lifepartsTotal);
- put("lifepartstotalraw", lifepartsTotalRaw);
- }};
+ Map placeholders = Map.of(
+ "player", player,
+ "lifeparts", lifeparts,
+ "lifepartsraw", lifepartsRaw,
+ "lifepartstotal", lifepartsTotal,
+ "lifepartstotalraw", lifepartsTotalRaw
+ );
return MessageUtils.replacePlaceholders(this.messages.getString("CommandAddLifePartsSuccess", "&aYou successfully gave &e%lives%&a, &e%player% &anow has §e%livesTotal%§a."), placeholders);
}
public String getCommandSetLives(String lives, String livesRaw, String livesTotal, String livesTotalRaw) {
- Map placeholders = new HashMap() {{
- put("lives", lives);
- put("livesraw", livesRaw);
- put("livestotal", livesTotal);
- put("livestotalraw", livesTotalRaw);
- }};
+ Map placeholders = Map.of(
+ "lives", lives,
+ "livesraw", livesRaw,
+ "livestotal", livesTotal,
+ "livestotalraw", livesTotalRaw
+ );
return MessageUtils.replacePlaceholders(this.messages.getString("CommandSetLives", "&aYour &elives &ahave been set to &e%livestotal%&a."), placeholders);
}
public String getCommandSetLivesSuccess(String player, String lives, String livesRaw, String livesTotal, String livesTotalRaw) {
- Map placeholders = new HashMap() {{
- put("player", player);
- put("lives", lives);
- put("livesraw", livesRaw);
- put("livestotal", livesTotal);
- put("livestotalraw", livesTotalRaw);
- }};
+ Map placeholders = Map.of(
+ "player", player,
+ "lives", lives,
+ "livesraw", livesRaw,
+ "livestotal", livesTotal,
+ "livestotalraw", livesTotalRaw
+ );
return MessageUtils.replacePlaceholders(this.messages.getString("CommandSetLivesSuccess", "&aYou successfully set the &elives &aof &e%player% &ato &e%livestotal%&a."), placeholders);
}
public String getCommandSetLifeParts(String lifeparts, String lifepartsRaw, String lifepartsTotal, String lifepartsTotalRaw) {
- Map placeholders = new HashMap() {{
- put("lifeparts", lifeparts);
- put("lifepartsraw", lifepartsRaw);
- put("lifepartstotal", lifepartsTotal);
- put("lifepartstotalraw", lifepartsTotalRaw);
- }};
+ Map placeholders = Map.of(
+ "lifeparts", lifeparts,
+ "lifepartsraw", lifepartsRaw,
+ "lifepartstotal", lifepartsTotal,
+ "lifepartstotalraw", lifepartsTotalRaw
+ );
return MessageUtils.replacePlaceholders(this.messages.getString("CommandSetLifeParts", "&aYour &elife parts &ahave been set to &e%lifeparts%&a, giving you &e%livestotal% &aand &e%lifepartstotal%&a."), placeholders);
}
public String getCommandSetLifePartsSuccess(String player, String lifeParts, String lifePartsRaw, String lifePartsTotal, String lifePartsTotalRaw) {
- Map placeholders = new HashMap() {{
- put("player", player);
- put("lifeparts", lifeParts);
- put("lifepartsraw", lifePartsRaw);
- put("lifepartstotal", lifePartsTotal);
- put("lifepartstotalraw", lifePartsTotalRaw);
- }};
+ Map placeholders = Map.of(
+ "player", player,
+ "lifeparts", lifeParts,
+ "lifepartsraw", lifePartsRaw,
+ "lifepartstotal", lifePartsTotal,
+ "lifepartstotalraw", lifePartsTotalRaw
+ );
return MessageUtils.replacePlaceholders(this.messages.getString("CommandSetLifePartsSuccess", "&aYou successfully set the &elife parts &aof &e%player% &ato &e%lifeparts%&a, &e%player% &anow has &e%livestotal% &aand &e%lifepartstotal%&a."), placeholders);
}
public String getCommandAddMaxHealth(String maxHealth, String maxHealthRaw, String maxHealthTotal, String maxHealthTotalRaw) {
- Map placeholders = new HashMap() {{
- put("maxhealth", maxHealth);
- put("maxhealthraw", maxHealthRaw);
- put("maxhealthtotal", maxHealthTotal);
- put("maxhealthtotalraw", maxHealthTotalRaw);
- }};
+ Map placeholders = Map.of(
+ "maxhealth", maxHealth,
+ "maxhealthraw", maxHealthRaw,
+ "maxhealthtotal", maxHealthTotal,
+ "maxhealthtotalraw", maxHealthTotalRaw
+ );
return MessageUtils.replacePlaceholders(this.messages.getString("CommandAddMaxHealth", "&aYou've been given &e%maxhealth%&a, you now have &e%maxhealthtotal%&a."), placeholders);
}
public String getCommandAddMaxHealthSuccess(String player, String maxHealth, String maxHealthRaw, String maxHealthTotal, String maxHealthTotalRaw) {
- Map placeholders = new HashMap() {{
- put("player", player);
- put("maxhealth", maxHealth);
- put("maxhealthraw", maxHealthRaw);
- put("maxhealthtotal", maxHealthTotal);
- put("maxhealthtotalraw", maxHealthTotalRaw);
- }};
+ Map placeholders = Map.of(
+ "player", player,
+ "maxhealth", maxHealth,
+ "maxhealthraw", maxHealthRaw,
+ "maxhealthtotal", maxHealthTotal,
+ "maxhealthtotalraw", maxHealthTotalRaw
+ );
return MessageUtils.replacePlaceholders(this.messages.getString("CommandAddMaxHealthSuccess", "&aYou successfully gave &e%maxhealth%&a, &e%player% &anow has &e%maxhealthtotal%&a."), placeholders);
}
public String getCommandSetMaxHealth(String maxHealth, String maxHealthRaw) {
- Map placeholders = new HashMap() {{
- put("maxhealth", maxHealth);
- put("maxhealthraw", maxHealthRaw);
- }};
+ Map placeholders = Map.of(
+ "maxhealth", maxHealth,
+ "maxhealthraw", maxHealthRaw
+ );
return MessageUtils.replacePlaceholders(this.messages.getString("CommandSetMaxHealth", "&aYour &emax health &ahas been set to &e%maxhealthraw%&a."), placeholders);
}
public String getCommandSetMaxHealthSuccess(String player, String maxHealth, String maxHealthRaw) {
- Map placeholders = new HashMap() {{
- put("player", player);
- put("maxhealth", maxHealth);
- put("maxhealthraw", maxHealthRaw);
- }};
+ Map placeholders = Map.of(
+ "player", player,
+ "maxhealth", maxHealth,
+ "maxhealthraw", maxHealthRaw
+ );
return MessageUtils.replacePlaceholders(this.messages.getString("CommandSetMaxHealthSuccess", "&aYou successfully set the &emax health &aof &e%player%&a to &e%maxhealthraw%&a."), placeholders);
}
public String getCommandResetSuccess(String player) {
- Map placeholders = new HashMap() {{
- put("player", player);
- }};
+ Map placeholders = Map.of("player", player);
return MessageUtils.replacePlaceholders(this.messages.getString("CommandResetSuccess", "&aYou have successfully reset &e%player%&a."), placeholders);
}
public String getCommandReloadSuccess(String plugin) {
- Map placeholders = new HashMap() {{
- put("plugin", plugin);
- }};
+ Map placeholders = Map.of("plugin", plugin);
return MessageUtils.replacePlaceholders(this.messages.getString("CommandReloadSuccess", "&a%plugin% has successfully been reloaded."), placeholders);
}
public String getCommandLifePartsLeft(String player, String lifeParts, String lifePartsRaw) {
- Map placeholders = new HashMap() {{
- put("player", player);
- put("lifeparts", lifeParts);
- put("lifepartsraw", lifePartsRaw);
- }};
+ Map placeholders = Map.of(
+ "player", player,
+ "lifeparts", lifeParts,
+ "lifepartsraw", lifePartsRaw
+ );
return MessageUtils.replacePlaceholders(this.messages.getString("CommandLifePartsLeft", "&a%player% currently has &6%lifeparts%&a."), placeholders);
}
public String getCommandLivesLeft(String player, String lives, String livesRaw) {
- Map placeholders = new HashMap() {{
- put("player", player);
- put("lives", lives);
- put("livesraw", livesRaw);
- }};
+ Map placeholders = Map.of(
+ "player", player,
+ "lives", lives,
+ "livesraw", livesRaw
+ );
return MessageUtils.replacePlaceholders(this.messages.getString("CommandLivesLeft", "&a%player% currently has &6%lives%&a."), placeholders);
}
public String getCommandNextLifePart(String player, String timeLeft) {
- Map placeholders = new HashMap() {{
- put("player", player);
- put("timeleft", timeLeft);
- }};
+ Map placeholders = Map.of(
+ "player", player,
+ "timeleft", timeLeft
+ );
return MessageUtils.replacePlaceholders(this.messages.getString("CommandNextLifePart", "&a%player% will receive a new &elife part in %timeleft%&a."), placeholders);
}
public String getCommandNextMaxHealth(String player, String timeLeft) {
- Map placeholders = new HashMap() {{
- put("player", player);
- put("timeleft", timeLeft);
- }};
+ Map placeholders = Map.of(
+ "player", player,
+ "timeleft", timeLeft
+ );
return MessageUtils.replacePlaceholders(this.messages.getString("CommandNextMaxHealth", "&a%player% will receive extra &emax health in %timeleft%&a."), placeholders);
}
public String getCommandNextRevive(String player, String timeLeft) {
- Map placeholders = new HashMap() {{
- put("player", player);
- put("timeleft", timeLeft);
- }};
+ Map placeholders = Map.of(
+ "player", player,
+ "timeleft", timeLeft
+ );
return MessageUtils.replacePlaceholders(this.messages.getString("CommandNextRevive", "&a%player% will be able to &erevive in %timeleft%&a."), placeholders);
}
public String getCommandUndeathBan(String player) {
- Map placeholders = new HashMap() {{
- put("player", player);
- }};
+ Map placeholders = Map.of("player", player);
return MessageUtils.replacePlaceholders(this.messages.getString("CommandUndeathBan", "&a%player% has successfully been unbanned from a death ban."), placeholders);
}
//
diff --git a/src/com/backtobedrock/augmentedhardcore/guis/AbstractPaginatedGui.java b/src/com/backtobedrock/augmentedhardcore/guis/AbstractPaginatedGui.java
index 05a82c3..a6babef 100644
--- a/src/com/backtobedrock/augmentedhardcore/guis/AbstractPaginatedGui.java
+++ b/src/com/backtobedrock/augmentedhardcore/guis/AbstractPaginatedGui.java
@@ -6,7 +6,6 @@
import org.bukkit.inventory.ItemStack;
import java.util.Collections;
-import java.util.HashMap;
import java.util.Map;
public abstract class AbstractPaginatedGui extends AbstractGui {
@@ -58,28 +57,28 @@ public void previousPage() {
}
private ItemStack nextPageDisplayItem() {
- Map placeholders = new HashMap() {{
- put("current_page", Integer.toString(currentPage));
- put("total_pages", Integer.toString(totalPages));
- put("next_page", Integer.toString(currentPage + 1));
- }};
+ Map placeholders = Map.of(
+ "current_page", Integer.toString(currentPage),
+ "total_pages", Integer.toString(totalPages),
+ "next_page", Integer.toString(currentPage + 1)
+ );
return MessageUtils.replaceItemNameAndLorePlaceholders(this.plugin.getConfigurations().getGuisConfiguration().getNextPageDisplay().getItem(), placeholders);
}
private ItemStack previousPageDisplayItem() {
- Map placeholders = new HashMap() {{
- put("current_page", Integer.toString(currentPage));
- put("total_pages", Integer.toString(totalPages));
- put("previous_page", Integer.toString(currentPage - 1));
- }};
+ Map placeholders = Map.of(
+ "current_page", Integer.toString(currentPage),
+ "total_pages", Integer.toString(totalPages),
+ "previous_page", Integer.toString(currentPage - 1)
+ );
return MessageUtils.replaceItemLorePlacholders(this.plugin.getConfigurations().getGuisConfiguration().getPreviousPageDisplay().getItem(), placeholders);
}
private ItemStack pageInformationDisplayItem() {
- Map placeholders = new HashMap() {{
- put("current_page", Integer.toString(currentPage));
- put("total_pages", Integer.toString(totalPages));
- }};
+ Map placeholders = Map.of(
+ "current_page", Integer.toString(currentPage),
+ "total_pages", Integer.toString(totalPages)
+ );
return MessageUtils.replaceItemNameAndLorePlaceholders(this.plugin.getConfigurations().getGuisConfiguration().getPageInformationDisplay().getItem(), placeholders);
}
}
diff --git a/src/com/backtobedrock/augmentedhardcore/guis/GuiMyStats.java b/src/com/backtobedrock/augmentedhardcore/guis/GuiMyStats.java
index 119b52c..b03ae78 100644
--- a/src/com/backtobedrock/augmentedhardcore/guis/GuiMyStats.java
+++ b/src/com/backtobedrock/augmentedhardcore/guis/GuiMyStats.java
@@ -70,14 +70,14 @@ public void updateTimeTillNextMaxHealth(boolean update) {
if (!this.plugin.getConfigurations().getMaxHealthConfiguration().isUseMaxHealth()) {
icon = new Icon(this.plugin.getConfigurations().getGuisConfiguration().getNotAvailableDisplay().getItem(), Collections.emptyList());
} else {
- Map placeholders = new HashMap() {{
- put("max_health", Double.toString(plugin.getConfigurations().getMaxHealthConfiguration().getMaxHealth()));
- put("min_health", Double.toString(plugin.getConfigurations().getMaxHealthConfiguration().getMinHealth()));
- put("current_max_health", playerData.getPlayer().getPlayer() == null ? "-" : Double.toString(playerData.getPlayer().getPlayer().getAttribute(Attribute.MAX_HEALTH).getBaseValue()));
- put("time_till_next_max_health_long", MessageUtils.getTimeFromTicks(playerData.getTimeTillNextMaxHealth(), TimePattern.LONG));
- put("time_till_next_max_health_short", MessageUtils.getTimeFromTicks(playerData.getTimeTillNextMaxHealth(), TimePattern.SHORT));
- put("time_till_next_max_health_digital", MessageUtils.getTimeFromTicks(playerData.getTimeTillNextMaxHealth(), TimePattern.DIGITAL));
- }};
+ Map placeholders = Map.of(
+ "max_health", Double.toString(plugin.getConfigurations().getMaxHealthConfiguration().getMaxHealth()),
+ "min_health", Double.toString(plugin.getConfigurations().getMaxHealthConfiguration().getMinHealth()),
+ "current_max_health", playerData.getPlayer().getPlayer() == null ? "-" : Double.toString(playerData.getPlayer().getPlayer().getAttribute(Attribute.MAX_HEALTH).getBaseValue()),
+ "time_till_next_max_health_long", MessageUtils.getTimeFromTicks(playerData.getTimeTillNextMaxHealth(), TimePattern.LONG),
+ "time_till_next_max_health_short", MessageUtils.getTimeFromTicks(playerData.getTimeTillNextMaxHealth(), TimePattern.SHORT),
+ "time_till_next_max_health_digital", MessageUtils.getTimeFromTicks(playerData.getTimeTillNextMaxHealth(), TimePattern.DIGITAL)
+ );
icon = new Icon(MessageUtils.replaceItemNameAndLorePlaceholders(this.plugin.getConfigurations().getGuisConfiguration().getMaxHealthDisplay().getItem(), placeholders), Collections.emptyList());
}
@@ -90,11 +90,11 @@ public void updateRevive(boolean update) {
if (!this.plugin.getConfigurations().getReviveConfiguration().isUseRevive() || this.isOther) {
icon = new Icon(this.plugin.getConfigurations().getGuisConfiguration().getNotAvailableDisplay().getItem(), Collections.emptyList());
} else if (this.playerData.getTimeTillNextRevive() > 0 && !this.sender.hasPermission(Permission.BYPASS_REVIVECOOLDOWN.getPermissionString())) {
- Map placeholders = new HashMap() {{
- put("time_till_next_revive_long", MessageUtils.getTimeFromTicks(playerData.getTimeTillNextRevive(), TimePattern.LONG));
- put("time_till_next_revive_short", MessageUtils.getTimeFromTicks(playerData.getTimeTillNextRevive(), TimePattern.SHORT));
- put("time_till_next_revive_digital", MessageUtils.getTimeFromTicks(playerData.getTimeTillNextRevive(), TimePattern.DIGITAL));
- }};
+ Map placeholders = Map.of(
+ "time_till_next_revive_long", MessageUtils.getTimeFromTicks(playerData.getTimeTillNextRevive(), TimePattern.LONG),
+ "time_till_next_revive_short", MessageUtils.getTimeFromTicks(playerData.getTimeTillNextRevive(), TimePattern.SHORT),
+ "time_till_next_revive_digital", MessageUtils.getTimeFromTicks(playerData.getTimeTillNextRevive(), TimePattern.DIGITAL)
+ );
icon = new Icon(MessageUtils.replaceItemNameAndLorePlaceholders(this.plugin.getConfigurations().getGuisConfiguration().getReviveOnCooldownDisplay().getItem(), placeholders), Collections.emptyList());
} else {
icon = new Icon(this.plugin.getConfigurations().getGuisConfiguration().getReviveDisplay().getItem(), Collections.singletonList(new ClickActionOpenPlayerSelectionAnvilGui()));
@@ -109,14 +109,14 @@ public void updateTimeTillNextLifePart(boolean update) {
if (!this.plugin.getConfigurations().getLivesAndLifePartsConfiguration().isUseLifeParts()) {
icon = new Icon(this.plugin.getConfigurations().getGuisConfiguration().getNotAvailableDisplay().getItem(), Collections.emptyList());
} else {
- Map placeholders = new HashMap() {{
- put("max_life_parts", Integer.toString(plugin.getConfigurations().getLivesAndLifePartsConfiguration().getMaxLifeParts()));
- put("life_parts_number", Integer.toString(playerData.getLifeParts()));
- put("life_parts", String.format("%d %s", playerData.getLifeParts(), playerData.getLifeParts() == 1 ? "life part" : "life parts"));
- put("time_till_next_life_part_long", MessageUtils.getTimeFromTicks(playerData.getTimeTillNextLifePart(), TimePattern.LONG));
- put("time_till_next_life_part_short", MessageUtils.getTimeFromTicks(playerData.getTimeTillNextLifePart(), TimePattern.SHORT));
- put("time_till_next_life_part_digital", MessageUtils.getTimeFromTicks(playerData.getTimeTillNextLifePart(), TimePattern.DIGITAL));
- }};
+ Map placeholders = Map.of(
+ "max_life_parts", Integer.toString(plugin.getConfigurations().getLivesAndLifePartsConfiguration().getMaxLifeParts()),
+ "life_parts_number", Integer.toString(playerData.getLifeParts()),
+ "life_parts", String.format("%d %s", playerData.getLifeParts(), playerData.getLifeParts() == 1 ? "life part" : "life parts"),
+ "time_till_next_life_part_long", MessageUtils.getTimeFromTicks(playerData.getTimeTillNextLifePart(), TimePattern.LONG),
+ "time_till_next_life_part_short", MessageUtils.getTimeFromTicks(playerData.getTimeTillNextLifePart(), TimePattern.SHORT),
+ "time_till_next_life_part_digital", MessageUtils.getTimeFromTicks(playerData.getTimeTillNextLifePart(), TimePattern.DIGITAL)
+ );
icon = new Icon(MessageUtils.replaceItemNameAndLorePlaceholders(this.plugin.getConfigurations().getGuisConfiguration().getLifePartDisplay().getItem(), placeholders), Collections.emptyList());
}
@@ -129,9 +129,9 @@ public void updateBansInformation(boolean update) {
if (!this.plugin.getConfigurations().getDeathBanConfiguration().isUseDeathBan()) {
icon = new Icon(this.plugin.getConfigurations().getGuisConfiguration().getNotAvailableDisplay().getItem(), Collections.emptyList());
} else {
- Map placeholders = new HashMap() {{
- put("total_death_bans", Integer.toString(playerData.getBanCount()));
- }};
+ Map placeholders = Map.of(
+ "total_death_bans", Integer.toString(playerData.getBanCount())
+ );
icon = new Icon(MessageUtils.replaceItemNameAndLorePlaceholders(this.plugin.getConfigurations().getGuisConfiguration().getPreviousBansDisplay().getItem(), placeholders), Collections.singletonList(new ClickActionOpenBansGui(this.playerData)));
}
diff --git a/src/com/backtobedrock/augmentedhardcore/guis/GuiRevive.java b/src/com/backtobedrock/augmentedhardcore/guis/GuiRevive.java
index d55f071..b4c8f1b 100644
--- a/src/com/backtobedrock/augmentedhardcore/guis/GuiRevive.java
+++ b/src/com/backtobedrock/augmentedhardcore/guis/GuiRevive.java
@@ -7,7 +7,6 @@
import org.bukkit.OfflinePlayer;
import java.util.Collections;
-import java.util.HashMap;
import java.util.Map;
import java.util.logging.Level;
@@ -41,10 +40,10 @@ protected void initialize() {
public void updateInfo(boolean update) {
Icon icon;
if (this.revivingData != null) {
- Map placeholders = new HashMap() {{
- put("player", revivingData.getPlayer().getName());
- put("lives_number", Integer.toString(revivingData.getLives()));
- }};
+ Map placeholders = Map.of(
+ "player", revivingData.getPlayer().getName(),
+ "lives_number", Integer.toString(revivingData.getLives())
+ );
icon = new Icon(MessageUtils.replaceItemNameAndLorePlaceholders(InventoryUtils.createPlayerSkull(this.plugin.getConfigurations().getGuisConfiguration().getRevivingDisplay().getName(), this.plugin.getConfigurations().getGuisConfiguration().getRevivingDisplay().getLore(), this.reviving), placeholders), Collections.emptyList());
} else {
icon = new Icon(this.plugin.getConfigurations().getGuisConfiguration().getLoadingDisplay().getItem(), Collections.emptyList());
From aba84358c244e4e54b18f97133598e00b8f9b785 Mon Sep 17 00:00:00 2001
From: Jake Hoolz <84546680+JakeHoolz@users.noreply.github.com>
Date: Sat, 30 Aug 2025 17:48:11 -0500
Subject: [PATCH 20/43] Use plugin executor for command async tasks
---
.../commands/AbstractCommand.java | 2 +-
.../commands/CommandAugmentedHardcore.java | 24 +++++++++----------
.../commands/CommandDeathBans.java | 4 ++--
.../commands/CommandLifeParts.java | 4 ++--
.../commands/CommandLives.java | 4 ++--
.../commands/CommandMyStats.java | 4 ++--
.../commands/CommandNextLifePart.java | 4 ++--
.../commands/CommandNextMaxHealth.java | 4 ++--
.../commands/CommandNextRevive.java | 4 ++--
.../commands/CommandRevive.java | 4 ++--
.../commands/CommandServerDeathBans.java | 2 +-
.../commands/CommandUnDeathBan.java | 4 ++--
12 files changed, 32 insertions(+), 32 deletions(-)
diff --git a/src/com/backtobedrock/augmentedhardcore/commands/AbstractCommand.java b/src/com/backtobedrock/augmentedhardcore/commands/AbstractCommand.java
index 1499e15..9b50b86 100644
--- a/src/com/backtobedrock/augmentedhardcore/commands/AbstractCommand.java
+++ b/src/com/backtobedrock/augmentedhardcore/commands/AbstractCommand.java
@@ -76,7 +76,7 @@ protected CompletableFuture hasPlayedBefore(String playerName) {
}
this.target = player;
return true;
- });
+ }, this.plugin.getExecutor());
}
public void sendUsageMessage(Command command) {
diff --git a/src/com/backtobedrock/augmentedhardcore/commands/CommandAugmentedHardcore.java b/src/com/backtobedrock/augmentedhardcore/commands/CommandAugmentedHardcore.java
index ea8fd97..7e09a71 100644
--- a/src/com/backtobedrock/augmentedhardcore/commands/CommandAugmentedHardcore.java
+++ b/src/com/backtobedrock/augmentedhardcore/commands/CommandAugmentedHardcore.java
@@ -64,11 +64,11 @@ public void run() {
);
this.plugin.getPlayerRepository().updatePlayerData(playerData);
- }).exceptionally(ex -> {
+ }, this.plugin.getExecutor()).exceptionally(ex -> {
this.plugin.getLogger().log(Level.SEVERE, "Error executing AugmentedHardcore command.", ex);
return null;
});
- }).exceptionally(ex -> {
+ }, this.plugin.getExecutor()).exceptionally(ex -> {
this.plugin.getLogger().log(Level.SEVERE, "Error executing AugmentedHardcore command.", ex);
return null;
});
@@ -98,11 +98,11 @@ public void run() {
);
this.plugin.getPlayerRepository().updatePlayerData(playerData);
- }).exceptionally(ex -> {
+ }, this.plugin.getExecutor()).exceptionally(ex -> {
this.plugin.getLogger().log(Level.SEVERE, "Error executing AugmentedHardcore command.", ex);
return null;
});
- }).exceptionally(ex -> {
+ }, this.plugin.getExecutor()).exceptionally(ex -> {
this.plugin.getLogger().log(Level.SEVERE, "Error executing AugmentedHardcore command.", ex);
return null;
});
@@ -132,11 +132,11 @@ public void run() {
);
this.plugin.getPlayerRepository().updatePlayerData(playerData);
- }).exceptionally(ex -> {
+ }, this.plugin.getExecutor()).exceptionally(ex -> {
this.plugin.getLogger().log(Level.SEVERE, "Error executing AugmentedHardcore command.", ex);
return null;
});
- }).exceptionally(ex -> {
+ }, this.plugin.getExecutor()).exceptionally(ex -> {
this.plugin.getLogger().log(Level.SEVERE, "Error executing AugmentedHardcore command.", ex);
return null;
});
@@ -166,11 +166,11 @@ public void run() {
);
this.plugin.getPlayerRepository().updatePlayerData(playerData);
- }).exceptionally(ex -> {
+ }, this.plugin.getExecutor()).exceptionally(ex -> {
this.plugin.getLogger().log(Level.SEVERE, "Error executing AugmentedHardcore command.", ex);
return null;
});
- }).exceptionally(ex -> {
+ }, this.plugin.getExecutor()).exceptionally(ex -> {
this.plugin.getLogger().log(Level.SEVERE, "Error executing AugmentedHardcore command.", ex);
return null;
});
@@ -202,7 +202,7 @@ public void run() {
this.plugin.getMessages().getCommandAddMaxHealth(maxHealth, maxHealthRaw, maxHealthTotal, maxHealthTotalRaw),
this.plugin.getMessages().getCommandAddMaxHealthSuccess(this.target.getName(), maxHealth, maxHealthRaw, maxHealthTotal, maxHealthTotalRaw)
);
- }).exceptionally(ex -> {
+ }, this.plugin.getExecutor()).exceptionally(ex -> {
this.plugin.getLogger().log(Level.SEVERE, "Error executing AugmentedHardcore command.", ex);
return null;
});
@@ -232,7 +232,7 @@ public void run() {
this.plugin.getMessages().getCommandSetMaxHealth(maxHealth, maxHealthRaw),
this.plugin.getMessages().getCommandSetMaxHealthSuccess(this.target.getName(), maxHealth, maxHealthRaw)
);
- }).exceptionally(ex -> {
+ }, this.plugin.getExecutor()).exceptionally(ex -> {
this.plugin.getLogger().log(Level.SEVERE, "Error executing AugmentedHardcore command.", ex);
return null;
});
@@ -247,8 +247,8 @@ public void run() {
playerData.reset();
this.cs.sendMessage(this.plugin.getMessages().getCommandResetSuccess(this.target.getName()));
- });
- });
+ }, this.plugin.getExecutor());
+ }, this.plugin.getExecutor());
break;
case RELOAD:
this.plugin.initialize();
diff --git a/src/com/backtobedrock/augmentedhardcore/commands/CommandDeathBans.java b/src/com/backtobedrock/augmentedhardcore/commands/CommandDeathBans.java
index 1ecdff7..5497eae 100644
--- a/src/com/backtobedrock/augmentedhardcore/commands/CommandDeathBans.java
+++ b/src/com/backtobedrock/augmentedhardcore/commands/CommandDeathBans.java
@@ -40,7 +40,7 @@ public void run() {
}
this.runCommand(this.target);
- }).exceptionally(ex -> {
+ }, this.plugin.getExecutor()).exceptionally(ex -> {
this.plugin.getLogger().log(Level.SEVERE, "Error executing death bans command.", ex);
return null;
});
@@ -48,7 +48,7 @@ public void run() {
}
private void runCommand(OfflinePlayer player) {
- this.plugin.getPlayerRepository().getByPlayer(player).thenAcceptAsync(playerData -> PlayerUtils.openInventory(this.sender, new GuiPlayerDeathBans(playerData))).exceptionally(ex -> {
+ this.plugin.getPlayerRepository().getByPlayer(player).thenAcceptAsync(playerData -> PlayerUtils.openInventory(this.sender, new GuiPlayerDeathBans(playerData)), this.plugin.getExecutor()).exceptionally(ex -> {
this.plugin.getLogger().log(Level.SEVERE, "Error executing death bans command.", ex);
return null;
});
diff --git a/src/com/backtobedrock/augmentedhardcore/commands/CommandLifeParts.java b/src/com/backtobedrock/augmentedhardcore/commands/CommandLifeParts.java
index c88a419..cfe0500 100644
--- a/src/com/backtobedrock/augmentedhardcore/commands/CommandLifeParts.java
+++ b/src/com/backtobedrock/augmentedhardcore/commands/CommandLifeParts.java
@@ -39,7 +39,7 @@ public void run() {
}
this.runCommand(this.target);
- }).exceptionally(ex -> {
+ }, this.plugin.getExecutor()).exceptionally(ex -> {
this.plugin.getLogger().log(Level.SEVERE, "Error executing life parts command.", ex);
return null;
});
@@ -47,7 +47,7 @@ public void run() {
}
private void runCommand(OfflinePlayer player) {
- this.plugin.getPlayerRepository().getByPlayer(player).thenAcceptAsync(this::sendSuccessMessage).exceptionally(ex -> {
+ this.plugin.getPlayerRepository().getByPlayer(player).thenAcceptAsync(this::sendSuccessMessage, this.plugin.getExecutor()).exceptionally(ex -> {
this.plugin.getLogger().log(Level.SEVERE, "Error executing life parts command.", ex);
return null;
});
diff --git a/src/com/backtobedrock/augmentedhardcore/commands/CommandLives.java b/src/com/backtobedrock/augmentedhardcore/commands/CommandLives.java
index f75e37a..4d29b97 100644
--- a/src/com/backtobedrock/augmentedhardcore/commands/CommandLives.java
+++ b/src/com/backtobedrock/augmentedhardcore/commands/CommandLives.java
@@ -39,7 +39,7 @@ public void run() {
}
this.runCommand(this.target);
- }).exceptionally(ex -> {
+ }, this.plugin.getExecutor()).exceptionally(ex -> {
this.plugin.getLogger().log(Level.SEVERE, "Error executing lives command.", ex);
return null;
});
@@ -47,7 +47,7 @@ public void run() {
}
private void runCommand(OfflinePlayer player) {
- this.plugin.getPlayerRepository().getByPlayer(player).thenAcceptAsync(this::sendSuccessMessage).exceptionally(ex -> {
+ this.plugin.getPlayerRepository().getByPlayer(player).thenAcceptAsync(this::sendSuccessMessage, this.plugin.getExecutor()).exceptionally(ex -> {
this.plugin.getLogger().log(Level.SEVERE, "Error executing lives command.", ex);
return null;
});
diff --git a/src/com/backtobedrock/augmentedhardcore/commands/CommandMyStats.java b/src/com/backtobedrock/augmentedhardcore/commands/CommandMyStats.java
index 259c67a..c477625 100644
--- a/src/com/backtobedrock/augmentedhardcore/commands/CommandMyStats.java
+++ b/src/com/backtobedrock/augmentedhardcore/commands/CommandMyStats.java
@@ -40,7 +40,7 @@ public void run() {
}
this.runCommand(this.target);
- }).exceptionally(ex -> {
+ }, this.plugin.getExecutor()).exceptionally(ex -> {
this.plugin.getLogger().log(Level.SEVERE, "Error executing my stats command.", ex);
return null;
});
@@ -48,7 +48,7 @@ public void run() {
}
private void runCommand(OfflinePlayer player) {
- this.plugin.getPlayerRepository().getByPlayer(player).thenAcceptAsync(playerData -> PlayerUtils.openInventory(this.sender, new GuiMyStats(this.sender, playerData))).exceptionally(ex -> {
+ this.plugin.getPlayerRepository().getByPlayer(player).thenAcceptAsync(playerData -> PlayerUtils.openInventory(this.sender, new GuiMyStats(this.sender, playerData)), this.plugin.getExecutor()).exceptionally(ex -> {
this.plugin.getLogger().log(Level.SEVERE, "Error executing my stats command.", ex);
return null;
});
diff --git a/src/com/backtobedrock/augmentedhardcore/commands/CommandNextLifePart.java b/src/com/backtobedrock/augmentedhardcore/commands/CommandNextLifePart.java
index 5d3bc07..bbf424f 100644
--- a/src/com/backtobedrock/augmentedhardcore/commands/CommandNextLifePart.java
+++ b/src/com/backtobedrock/augmentedhardcore/commands/CommandNextLifePart.java
@@ -42,7 +42,7 @@ public void run() {
}
this.runCommand(this.target);
- }).exceptionally(ex -> {
+ }, this.plugin.getExecutor()).exceptionally(ex -> {
this.plugin.getLogger().log(Level.SEVERE, "Error executing next life part command.", ex);
return null;
});
@@ -50,7 +50,7 @@ public void run() {
}
private void runCommand(OfflinePlayer player) {
- this.plugin.getPlayerRepository().getByPlayer(player).thenAcceptAsync(this::sendSuccessMessage).exceptionally(ex -> {
+ this.plugin.getPlayerRepository().getByPlayer(player).thenAcceptAsync(this::sendSuccessMessage, this.plugin.getExecutor()).exceptionally(ex -> {
this.plugin.getLogger().log(Level.SEVERE, "Error executing next life part command.", ex);
return null;
});
diff --git a/src/com/backtobedrock/augmentedhardcore/commands/CommandNextMaxHealth.java b/src/com/backtobedrock/augmentedhardcore/commands/CommandNextMaxHealth.java
index 0ce15e0..048141e 100644
--- a/src/com/backtobedrock/augmentedhardcore/commands/CommandNextMaxHealth.java
+++ b/src/com/backtobedrock/augmentedhardcore/commands/CommandNextMaxHealth.java
@@ -42,7 +42,7 @@ public void run() {
}
this.runCommand(this.target);
- }).exceptionally(ex -> {
+ }, this.plugin.getExecutor()).exceptionally(ex -> {
this.plugin.getLogger().log(Level.SEVERE, "Error executing next max health command.", ex);
return null;
});
@@ -50,7 +50,7 @@ public void run() {
}
private void runCommand(OfflinePlayer player) {
- this.plugin.getPlayerRepository().getByPlayer(player).thenAcceptAsync(this::sendSuccessMessage).exceptionally(ex -> {
+ this.plugin.getPlayerRepository().getByPlayer(player).thenAcceptAsync(this::sendSuccessMessage, this.plugin.getExecutor()).exceptionally(ex -> {
this.plugin.getLogger().log(Level.SEVERE, "Error executing next max health command.", ex);
return null;
});
diff --git a/src/com/backtobedrock/augmentedhardcore/commands/CommandNextRevive.java b/src/com/backtobedrock/augmentedhardcore/commands/CommandNextRevive.java
index 19e10d2..983a363 100644
--- a/src/com/backtobedrock/augmentedhardcore/commands/CommandNextRevive.java
+++ b/src/com/backtobedrock/augmentedhardcore/commands/CommandNextRevive.java
@@ -42,7 +42,7 @@ public void run() {
}
this.runCommand(this.target);
- }).exceptionally(ex -> {
+ }, this.plugin.getExecutor()).exceptionally(ex -> {
this.plugin.getLogger().log(Level.SEVERE, "Error executing next revive command.", ex);
return null;
});
@@ -50,7 +50,7 @@ public void run() {
}
private void runCommand(OfflinePlayer player) {
- this.plugin.getPlayerRepository().getByPlayer(player).thenAcceptAsync(this::sendSuccessMessage).exceptionally(ex -> {
+ this.plugin.getPlayerRepository().getByPlayer(player).thenAcceptAsync(this::sendSuccessMessage, this.plugin.getExecutor()).exceptionally(ex -> {
this.plugin.getLogger().log(Level.SEVERE, "Error executing next revive command.", ex);
return null;
});
diff --git a/src/com/backtobedrock/augmentedhardcore/commands/CommandRevive.java b/src/com/backtobedrock/augmentedhardcore/commands/CommandRevive.java
index ac6d1fb..813804f 100644
--- a/src/com/backtobedrock/augmentedhardcore/commands/CommandRevive.java
+++ b/src/com/backtobedrock/augmentedhardcore/commands/CommandRevive.java
@@ -40,11 +40,11 @@ public void run() {
AbstractGui gui = new GuiRevive(playerData, this.target);
PlayerUtils.openInventory(this.sender, gui);
- }).exceptionally(ex -> {
+ }, this.plugin.getExecutor()).exceptionally(ex -> {
this.plugin.getLogger().log(Level.SEVERE, "Error executing revive command.", ex);
return null;
});
- }).exceptionally(ex -> {
+ }, this.plugin.getExecutor()).exceptionally(ex -> {
this.plugin.getLogger().log(Level.SEVERE, "Error executing revive command.", ex);
return null;
});
diff --git a/src/com/backtobedrock/augmentedhardcore/commands/CommandServerDeathBans.java b/src/com/backtobedrock/augmentedhardcore/commands/CommandServerDeathBans.java
index c790930..e6d05ce 100644
--- a/src/com/backtobedrock/augmentedhardcore/commands/CommandServerDeathBans.java
+++ b/src/com/backtobedrock/augmentedhardcore/commands/CommandServerDeathBans.java
@@ -28,7 +28,7 @@ public void run() {
}
- this.plugin.getServerRepository().getServerData(this.plugin.getServer()).thenAcceptAsync(serverData -> PlayerUtils.openInventory(this.sender, new GuiServerDeathBans(this.sender, serverData))).exceptionally(ex -> {
+ this.plugin.getServerRepository().getServerData(this.plugin.getServer()).thenAcceptAsync(serverData -> PlayerUtils.openInventory(this.sender, new GuiServerDeathBans(this.sender, serverData)), this.plugin.getExecutor()).exceptionally(ex -> {
this.plugin.getLogger().log(Level.SEVERE, "Error executing server death bans command.", ex);
return null;
});
diff --git a/src/com/backtobedrock/augmentedhardcore/commands/CommandUnDeathBan.java b/src/com/backtobedrock/augmentedhardcore/commands/CommandUnDeathBan.java
index ce613c1..4344ce8 100644
--- a/src/com/backtobedrock/augmentedhardcore/commands/CommandUnDeathBan.java
+++ b/src/com/backtobedrock/augmentedhardcore/commands/CommandUnDeathBan.java
@@ -40,7 +40,7 @@ public void run() {
}
this.unDeathBan();
- }).exceptionally(ex -> {
+ }, this.plugin.getExecutor()).exceptionally(ex -> {
this.plugin.getLogger().log(Level.SEVERE, "Error executing un-death-ban command.", ex);
return null;
});
@@ -53,7 +53,7 @@ private void unDeathBan() {
} else {
this.cs.sendMessage(this.plugin.getMessages().getTargetNotBannedByPluginError(this.target.getName(), this.plugin.getDescription().getName()));
}
- }).exceptionally(e -> {
+ }, this.plugin.getExecutor()).exceptionally(e -> {
this.plugin.getLogger().log(Level.SEVERE, "Error executing un-death-ban command.", e);
return null;
});
From ad229cdc43caeabd540df0be7d33dec188185f70 Mon Sep 17 00:00:00 2001
From: Jake Hoolz <84546680+JakeHoolz@users.noreply.github.com>
Date: Sat, 30 Aug 2025 18:09:44 -0500
Subject: [PATCH 21/43] Replace sentinel values with Optional
---
.../ConfigurationCombatTag.java | 7 +-
.../ConfigurationLivesAndLifeParts.java | 76 +++++++++++--------
.../ConfigurationMaxHealth.java | 35 +++++----
.../ConfigurationRevive.java | 15 ++--
.../BanConfiguration.java | 9 ++-
.../configurationHelperClasses/Display.java | 7 +-
.../utilities/ConfigUtils.java | 32 ++++----
7 files changed, 103 insertions(+), 78 deletions(-)
diff --git a/src/com/backtobedrock/augmentedhardcore/domain/configurationDomain/ConfigurationCombatTag.java b/src/com/backtobedrock/augmentedhardcore/domain/configurationDomain/ConfigurationCombatTag.java
index 8a544bb..39edc73 100644
--- a/src/com/backtobedrock/augmentedhardcore/domain/configurationDomain/ConfigurationCombatTag.java
+++ b/src/com/backtobedrock/augmentedhardcore/domain/configurationDomain/ConfigurationCombatTag.java
@@ -4,6 +4,7 @@
import org.bukkit.configuration.ConfigurationSection;
import java.util.List;
+import java.util.OptionalInt;
public class ConfigurationCombatTag {
private final boolean combatTagSelf;
@@ -33,11 +34,11 @@ public static ConfigurationCombatTag deserialize(ConfigurationSection section) {
boolean cPlayerCombatTag = section.getBoolean("PlayerCombatTag", true);
boolean cMonsterCombatTag = section.getBoolean("MonsterCombatTag", true);
boolean cCombatTagSelf = section.getBoolean("CombatTagSelf", true);
- int cCombatTagTime = ConfigUtils.checkMinMax("CombatTagTime", section.getInt("CombatTagTime", 15), 1, Integer.MAX_VALUE);
+ OptionalInt cCombatTagTime = ConfigUtils.checkMinMax("CombatTagTime", section.getInt("CombatTagTime", 15), 1, Integer.MAX_VALUE);
boolean cCombatTagPlayerKickDeath = section.getBoolean("CombatTagPlayerKickDeath", true);
List cDisableCombatTagInWorlds = section.getStringList("DisableCombatTagInWorlds");
- if (cCombatTagTime == -10) {
+ if (cCombatTagTime.isEmpty()) {
return null;
}
@@ -45,7 +46,7 @@ public static ConfigurationCombatTag deserialize(ConfigurationSection section) {
cPlayerCombatTag,
cMonsterCombatTag,
cCombatTagSelf,
- cCombatTagTime,
+ cCombatTagTime.getAsInt(),
cCombatTagPlayerKickDeath,
cDisableCombatTagInWorlds
);
diff --git a/src/com/backtobedrock/augmentedhardcore/domain/configurationDomain/ConfigurationLivesAndLifeParts.java b/src/com/backtobedrock/augmentedhardcore/domain/configurationDomain/ConfigurationLivesAndLifeParts.java
index 36ad407..a2999e0 100644
--- a/src/com/backtobedrock/augmentedhardcore/domain/configurationDomain/ConfigurationLivesAndLifeParts.java
+++ b/src/com/backtobedrock/augmentedhardcore/domain/configurationDomain/ConfigurationLivesAndLifeParts.java
@@ -8,6 +8,7 @@
import java.util.EnumMap;
import java.util.List;
+import java.util.OptionalInt;
import java.util.logging.Level;
public class ConfigurationLivesAndLifeParts {
@@ -83,24 +84,24 @@ public ConfigurationLivesAndLifeParts(
public static ConfigurationLivesAndLifeParts deserialize(ConfigurationSection section) {
//lives
boolean cUseLives = section.getBoolean("UseLives", true);
- int cMaxLives = ConfigUtils.checkMinMax("MaxLives", section.getInt("MaxLives", 5), 1, Integer.MAX_VALUE);
- int cLivesAtStart = ConfigUtils.checkMinMax("LivesAtStart", section.getInt("LivesAtStart", 1), 1, Integer.MAX_VALUE);
- int cLivesAfterBan = ConfigUtils.checkMinMax("LivesAfterBan", section.getInt("LivesAfterBan", 1), 1, Integer.MAX_VALUE);
- int cLivesLostPerDeath = ConfigUtils.checkMinMax("LivesLostPerDeath", section.getInt("LivesLostPerDeath", 1), 1, Integer.MAX_VALUE);
+ OptionalInt cMaxLives = ConfigUtils.checkMinMax("MaxLives", section.getInt("MaxLives", 5), 1, Integer.MAX_VALUE);
+ OptionalInt cLivesAtStart = ConfigUtils.checkMinMax("LivesAtStart", section.getInt("LivesAtStart", 1), 1, Integer.MAX_VALUE);
+ OptionalInt cLivesAfterBan = ConfigUtils.checkMinMax("LivesAfterBan", section.getInt("LivesAfterBan", 1), 1, Integer.MAX_VALUE);
+ OptionalInt cLivesLostPerDeath = ConfigUtils.checkMinMax("LivesLostPerDeath", section.getInt("LivesLostPerDeath", 1), 1, Integer.MAX_VALUE);
List cDisableLosingLivesInWorlds = section.getStringList("DisableLosingLivesInWorlds").stream().map(String::toLowerCase).toList();
//life parts
boolean cUseLifeParts = section.getBoolean("UseLifeParts", true);
- int cMaxLifeParts = ConfigUtils.checkMinMax("MaxLifeParts", section.getInt("MaxLifeParts", 6), -1, Integer.MAX_VALUE);
- int cLifePartsPerLife = ConfigUtils.checkMinMax("LifePartsPerLife", section.getInt("LifePartsPerLife"), 1, Integer.MAX_VALUE);
- int cLifePartsAtStart = ConfigUtils.checkMinMax("LifePartsAtStart", section.getInt("LifePartsAtStart"), 0, Integer.MAX_VALUE);
- int cLifePartsAfterBan = ConfigUtils.checkMinMax("LifePartsAfterBan", section.getInt("LifePartsAfterBan"), -1, Integer.MAX_VALUE);
- int cLifePartsLostPerDeath = ConfigUtils.checkMinMax("LifePartsLostPerDeath", section.getInt("LifePartsLostPerDeath", 1), -1, Integer.MAX_VALUE);
- int cLifePartsLostPerDeathBan = ConfigUtils.checkMinMax("LifePartsLostPerDeathBan", section.getInt("LifePartsLostPerDeathBan", -1), -1, Integer.MAX_VALUE);
+ OptionalInt cMaxLifeParts = ConfigUtils.checkMinMax("MaxLifeParts", section.getInt("MaxLifeParts", 6), -1, Integer.MAX_VALUE);
+ OptionalInt cLifePartsPerLife = ConfigUtils.checkMinMax("LifePartsPerLife", section.getInt("LifePartsPerLife"), 1, Integer.MAX_VALUE);
+ OptionalInt cLifePartsAtStart = ConfigUtils.checkMinMax("LifePartsAtStart", section.getInt("LifePartsAtStart"), 0, Integer.MAX_VALUE);
+ OptionalInt cLifePartsAfterBan = ConfigUtils.checkMinMax("LifePartsAfterBan", section.getInt("LifePartsAfterBan"), -1, Integer.MAX_VALUE);
+ OptionalInt cLifePartsLostPerDeath = ConfigUtils.checkMinMax("LifePartsLostPerDeath", section.getInt("LifePartsLostPerDeath", 1), -1, Integer.MAX_VALUE);
+ OptionalInt cLifePartsLostPerDeathBan = ConfigUtils.checkMinMax("LifePartsLostPerDeathBan", section.getInt("LifePartsLostPerDeathBan", -1), -1, Integer.MAX_VALUE);
boolean cLifePartsOnKill = section.getBoolean("LifePartsOnKill");
EnumMap cLifePartsPerKill = new EnumMap<>(EntityType.class);
boolean cGetLifePartsByPlaytime = section.getBoolean("GetLifePartByPlaytime", false);
- int cPlaytimePerLifePart = ConfigUtils.checkMinMax("PlaytimePerLifePart", section.getInt("PlaytimePerLifePart", 30), 1, Integer.MAX_VALUE);
+ OptionalInt cPlaytimePerLifePart = ConfigUtils.checkMinMax("PlaytimePerLifePart", section.getInt("PlaytimePerLifePart", 30), 1, Integer.MAX_VALUE);
List cDisableGainingLifePartsInWorlds = section.getStringList("DisableGainingLifePartsInWorlds").stream().map(String::toLowerCase).toList();
List cDisableLosingLifePartsInWorlds = section.getStringList("DisableLosingLifePartsInWorlds").stream().map(String::toLowerCase).toList();
@@ -109,14 +110,14 @@ public static ConfigurationLivesAndLifeParts deserialize(ConfigurationSection se
}
//if cLifePartsLostPerDeath or cLifePartsLostPerDeathBan == -1 then set to max Integer.
- if (cLifePartsLostPerDeath == -1) {
- cLifePartsLostPerDeath = Integer.MAX_VALUE;
+ if (cLifePartsLostPerDeath.isPresent() && cLifePartsLostPerDeath.getAsInt() == -1) {
+ cLifePartsLostPerDeath = OptionalInt.of(Integer.MAX_VALUE);
}
- if (cLifePartsLostPerDeathBan == -1) {
- cLifePartsLostPerDeathBan = Integer.MAX_VALUE;
+ if (cLifePartsLostPerDeathBan.isPresent() && cLifePartsLostPerDeathBan.getAsInt() == -1) {
+ cLifePartsLostPerDeathBan = OptionalInt.of(Integer.MAX_VALUE);
}
- if (cMaxLifeParts == -1) {
- cMaxLifeParts = Integer.MAX_VALUE;
+ if (cMaxLifeParts.isPresent() && cMaxLifeParts.getAsInt() == -1) {
+ cMaxLifeParts = OptionalInt.of(Integer.MAX_VALUE);
}
ConfigurationSection lifePartsPerKillSection = section.getConfigurationSection("LifePartsPerKill");
@@ -124,37 +125,48 @@ public static ConfigurationLivesAndLifeParts deserialize(ConfigurationSection se
lifePartsPerKillSection.getKeys(false).forEach(e -> {
EntityType type = ConfigUtils.getLivingEntityType("LifePartsPerKill", e);
if (type != null) {
- int amount = ConfigUtils.checkMin("LifePartsPerKill." + e, lifePartsPerKillSection.getInt(e, 0), 0);
- if (amount != -10)
- cLifePartsPerKill.put(type, amount);
+ OptionalInt amount = ConfigUtils.checkMin("LifePartsPerKill." + e, lifePartsPerKillSection.getInt(e, 0), 0);
+ amount.ifPresent(a -> cLifePartsPerKill.put(type, a));
}
});
}
- if (cMaxLives == -10 || cLivesAtStart == -10 || cLivesAfterBan == -10 || cLivesLostPerDeath == -10 || cMaxLifeParts == -10 || cLifePartsPerLife == -10 || cLifePartsAtStart == -10 || cLifePartsAfterBan == -10 || cLifePartsLostPerDeath == -10 || cLifePartsLostPerDeathBan == -10 || cPlaytimePerLifePart == -10) {
+ if (cMaxLives.isEmpty() || cLivesAtStart.isEmpty() || cLivesAfterBan.isEmpty() || cLivesLostPerDeath.isEmpty() || cMaxLifeParts.isEmpty() || cLifePartsPerLife.isEmpty() || cLifePartsAtStart.isEmpty() || cLifePartsAfterBan.isEmpty() || cLifePartsLostPerDeath.isEmpty() || cLifePartsLostPerDeathBan.isEmpty() || cPlaytimePerLifePart.isEmpty()) {
return null;
}
+ int vMaxLives = cMaxLives.getAsInt();
+ int vLivesAtStart = cLivesAtStart.getAsInt();
+ int vLivesAfterBan = cLivesAfterBan.getAsInt();
+ int vLivesLostPerDeath = cLivesLostPerDeath.getAsInt();
+ int vMaxLifeParts = cMaxLifeParts.getAsInt();
+ int vLifePartsPerLife = cLifePartsPerLife.getAsInt();
+ int vLifePartsAtStart = cLifePartsAtStart.getAsInt();
+ int vLifePartsAfterBan = cLifePartsAfterBan.getAsInt();
+ int vLifePartsLostPerDeath = cLifePartsLostPerDeath.getAsInt();
+ int vLifePartsLostPerDeathBan = cLifePartsLostPerDeathBan.getAsInt();
+ int vPlaytimePerLifePart = cPlaytimePerLifePart.getAsInt();
+
return new ConfigurationLivesAndLifeParts(
//lives
cUseLives,
- cMaxLives,
- cLivesAtStart,
- cLivesAfterBan,
- cLivesLostPerDeath,
+ vMaxLives,
+ vLivesAtStart,
+ vLivesAfterBan,
+ vLivesLostPerDeath,
cDisableLosingLivesInWorlds,
//life parts
cUseLifeParts,
- cMaxLifeParts,
- cLifePartsPerLife,
- cLifePartsAtStart,
- cLifePartsAfterBan,
- cLifePartsLostPerDeath,
- cLifePartsLostPerDeathBan,
+ vMaxLifeParts,
+ vLifePartsPerLife,
+ vLifePartsAtStart,
+ vLifePartsAfterBan,
+ vLifePartsLostPerDeath,
+ vLifePartsLostPerDeathBan,
cLifePartsOnKill,
cLifePartsPerKill,
cGetLifePartsByPlaytime,
- cPlaytimePerLifePart * 1200,
+ vPlaytimePerLifePart * 1200,
cDisableGainingLifePartsInWorlds,
cDisableLosingLifePartsInWorlds
);
diff --git a/src/com/backtobedrock/augmentedhardcore/domain/configurationDomain/ConfigurationMaxHealth.java b/src/com/backtobedrock/augmentedhardcore/domain/configurationDomain/ConfigurationMaxHealth.java
index 6b3a6d3..8ae1e85 100644
--- a/src/com/backtobedrock/augmentedhardcore/domain/configurationDomain/ConfigurationMaxHealth.java
+++ b/src/com/backtobedrock/augmentedhardcore/domain/configurationDomain/ConfigurationMaxHealth.java
@@ -6,6 +6,8 @@
import java.util.EnumMap;
import java.util.List;
+import java.util.OptionalDouble;
+import java.util.OptionalInt;
public class ConfigurationMaxHealth {
private final boolean useMaxHealth;
@@ -36,14 +38,14 @@ public ConfigurationMaxHealth(boolean useMaxHealth, double maxHealth, double min
public static ConfigurationMaxHealth deserialize(ConfigurationSection section) {
boolean cUseMaxHealth = section.getBoolean("UseMaxHealth", true);
- double cMaxHealth = ConfigUtils.checkMinMax("MaxHealth", section.getDouble("MaxHealth", 20), 1, Double.MAX_VALUE);
- double cMinHealth = ConfigUtils.checkMinMax("MinHealth", section.getDouble("MinHealth", 6), 1, Double.MAX_VALUE);
- double cMaxHealthAfterBan = section.getDouble("MaxHealthAfterBan", 20) == -1 ? -1 : ConfigUtils.checkMinMax("MaxHealthAfterBan", section.getDouble("MaxHealthAfterBan", 20), -1, Double.MAX_VALUE);
- double cMaxHealthDecreasePerDeath = ConfigUtils.checkMinMax("MaxHealthDecreasePerDeath", section.getDouble("MaxHealthDecreasePerDeath", 2), 1, Double.MAX_VALUE);
+ OptionalDouble cMaxHealth = ConfigUtils.checkMinMax("MaxHealth", section.getDouble("MaxHealth", 20), 1, Double.MAX_VALUE);
+ OptionalDouble cMinHealth = ConfigUtils.checkMinMax("MinHealth", section.getDouble("MinHealth", 6), 1, Double.MAX_VALUE);
+ OptionalDouble cMaxHealthAfterBan = section.getDouble("MaxHealthAfterBan", 20) == -1 ? OptionalDouble.of(-1) : ConfigUtils.checkMinMax("MaxHealthAfterBan", section.getDouble("MaxHealthAfterBan", 20), -1, Double.MAX_VALUE);
+ OptionalDouble cMaxHealthDecreasePerDeath = ConfigUtils.checkMinMax("MaxHealthDecreasePerDeath", section.getDouble("MaxHealthDecreasePerDeath", 2), 1, Double.MAX_VALUE);
boolean cMaxHealthIncreaseOnKill = section.getBoolean("MaxHealthIncreaseOnKill", true);
EnumMap cMaxHealthIncreasePerKill = new EnumMap<>(EntityType.class);
boolean cGetMaxHealthByPlaytime = section.getBoolean("GetMaxHealthByPlaytime", false);
- int cPlaytimePerHalfHeart = ConfigUtils.checkMinMax("PlaytimePerHalfHeart", section.getInt("PlaytimePerHalfHeart", 30), 1, Integer.MAX_VALUE);
+ OptionalInt cPlaytimePerHalfHeart = ConfigUtils.checkMinMax("PlaytimePerHalfHeart", section.getInt("PlaytimePerHalfHeart", 30), 1, Integer.MAX_VALUE);
List cDisableLosingMaxHealthInWorlds = section.getStringList("DisableLosingMaxHealthInWorlds").stream().map(String::toLowerCase).toList();
List cDisableGainingMaxHealthInWorlds = section.getStringList("DisableGainingMaxHealthInWorlds").stream().map(String::toLowerCase).toList();
@@ -53,27 +55,32 @@ public static ConfigurationMaxHealth deserialize(ConfigurationSection section) {
maxHealthIncreasePerKillSection.getKeys(false).forEach(e -> {
EntityType type = ConfigUtils.getLivingEntityType("MaxHealthIncreasePerKill", e);
if (type != null) {
- double amount = ConfigUtils.checkMinMax("MaxHealthIncreasePerKill." + e, maxHealthIncreasePerKillSection.getDouble(e, 0), 0, Integer.MAX_VALUE);
- if (amount != -10)
- cMaxHealthIncreasePerKill.put(type, amount);
+ OptionalDouble amount = ConfigUtils.checkMinMax("MaxHealthIncreasePerKill." + e, maxHealthIncreasePerKillSection.getDouble(e, 0), 0, Integer.MAX_VALUE);
+ amount.ifPresent(a -> cMaxHealthIncreasePerKill.put(type, a));
}
});
}
- if (cMaxHealth == -10 || cMinHealth == -10 || cMaxHealthAfterBan == -10 || cMaxHealthDecreasePerDeath == -10 || cPlaytimePerHalfHeart == -10) {
+ if (cMaxHealth.isEmpty() || cMinHealth.isEmpty() || cMaxHealthAfterBan.isEmpty() || cMaxHealthDecreasePerDeath.isEmpty() || cPlaytimePerHalfHeart.isEmpty()) {
return null;
}
+ double vMaxHealth = cMaxHealth.getAsDouble();
+ double vMinHealth = cMinHealth.getAsDouble();
+ double vMaxHealthAfterBan = cMaxHealthAfterBan.getAsDouble();
+ double vMaxHealthDecreasePerDeath = cMaxHealthDecreasePerDeath.getAsDouble();
+ int vPlaytimePerHalfHeart = cPlaytimePerHalfHeart.getAsInt();
+
return new ConfigurationMaxHealth(
cUseMaxHealth,
- cMaxHealth,
- cMinHealth,
- cMaxHealthAfterBan,
- cMaxHealthDecreasePerDeath,
+ vMaxHealth,
+ vMinHealth,
+ vMaxHealthAfterBan,
+ vMaxHealthDecreasePerDeath,
cMaxHealthIncreaseOnKill,
cMaxHealthIncreasePerKill,
cGetMaxHealthByPlaytime,
- cPlaytimePerHalfHeart * 1200,
+ vPlaytimePerHalfHeart * 1200,
cDisableLosingMaxHealthInWorlds,
cDisableGainingMaxHealthInWorlds
);
diff --git a/src/com/backtobedrock/augmentedhardcore/domain/configurationDomain/ConfigurationRevive.java b/src/com/backtobedrock/augmentedhardcore/domain/configurationDomain/ConfigurationRevive.java
index f1bfd33..7fd104c 100644
--- a/src/com/backtobedrock/augmentedhardcore/domain/configurationDomain/ConfigurationRevive.java
+++ b/src/com/backtobedrock/augmentedhardcore/domain/configurationDomain/ConfigurationRevive.java
@@ -4,6 +4,7 @@
import org.bukkit.configuration.ConfigurationSection;
import java.util.List;
+import java.util.OptionalInt;
public class ConfigurationRevive {
private final boolean useRevive;
@@ -24,21 +25,21 @@ public ConfigurationRevive(boolean useRevive, int livesLostOnReviving, int lives
public static ConfigurationRevive deserialize(ConfigurationSection section) {
boolean cUseRevive = section.getBoolean("UseRevive", true);
- int cLivesLostOnReviving = ConfigUtils.checkMinMax("LivesLostOnReviving", section.getInt("LivesLostOnReviving", 1), 1, Integer.MAX_VALUE);
- int cLivesGainedOnRevive = ConfigUtils.checkMinMax("LivesGainedOnRevive", section.getInt("LivesGainedOnRevive", 1), 1, Integer.MAX_VALUE);
- int cTimeBetweenRevives = ConfigUtils.checkMinMax("TimeBetweenRevives", section.getInt("TimeBetweenRevives", 1440), 0, Integer.MAX_VALUE);
+ OptionalInt cLivesLostOnReviving = ConfigUtils.checkMinMax("LivesLostOnReviving", section.getInt("LivesLostOnReviving", 1), 1, Integer.MAX_VALUE);
+ OptionalInt cLivesGainedOnRevive = ConfigUtils.checkMinMax("LivesGainedOnRevive", section.getInt("LivesGainedOnRevive", 1), 1, Integer.MAX_VALUE);
+ OptionalInt cTimeBetweenRevives = ConfigUtils.checkMinMax("TimeBetweenRevives", section.getInt("TimeBetweenRevives", 1440), 0, Integer.MAX_VALUE);
boolean cReviveOnFirstJoin = section.getBoolean("ReviveOnFirstJoin", false);
List cDisableReviveInWorlds = section.getStringList("DisableReviveInWorlds").stream().map(String::toLowerCase).toList();
- if (cTimeBetweenRevives == -10 || cLivesLostOnReviving == -10 || cLivesGainedOnRevive == -10) {
+ if (cTimeBetweenRevives.isEmpty() || cLivesLostOnReviving.isEmpty() || cLivesGainedOnRevive.isEmpty()) {
return null;
}
return new ConfigurationRevive(
cUseRevive,
- cLivesLostOnReviving,
- cLivesGainedOnRevive,
- cTimeBetweenRevives * 1200,
+ cLivesLostOnReviving.getAsInt(),
+ cLivesGainedOnRevive.getAsInt(),
+ cTimeBetweenRevives.getAsInt() * 1200,
cReviveOnFirstJoin,
cDisableReviveInWorlds
);
diff --git a/src/com/backtobedrock/augmentedhardcore/domain/configurationDomain/configurationHelperClasses/BanConfiguration.java b/src/com/backtobedrock/augmentedhardcore/domain/configurationDomain/configurationHelperClasses/BanConfiguration.java
index e77b076..f684885 100644
--- a/src/com/backtobedrock/augmentedhardcore/domain/configurationDomain/configurationHelperClasses/BanConfiguration.java
+++ b/src/com/backtobedrock/augmentedhardcore/domain/configurationDomain/configurationHelperClasses/BanConfiguration.java
@@ -7,6 +7,7 @@
import org.bukkit.plugin.java.JavaPlugin;
import java.util.List;
+import java.util.OptionalInt;
import java.util.logging.Level;
public class BanConfiguration {
@@ -21,7 +22,7 @@ public BanConfiguration(int banTime, List displayMessages) {
public static BanConfiguration deserialize(DamageCause cause, ConfigurationSection section) {
AugmentedHardcore plugin = JavaPlugin.getPlugin(AugmentedHardcore.class);
- int cBanTime = ConfigUtils.checkMinMaxNoNotification(section.getInt("BanTime", cause.getDefaultBantime()), -1, Integer.MAX_VALUE);
+ OptionalInt cBanTime = ConfigUtils.checkMinMaxNoNotification(section.getInt("BanTime", cause.getDefaultBantime()), -1, Integer.MAX_VALUE);
List cDisplayMessages = section.contains("DisplayMessages") ? section.getStringList("DisplayMessages") : null;
if (cDisplayMessages == null) {
@@ -29,12 +30,12 @@ public static BanConfiguration deserialize(DamageCause cause, ConfigurationSecti
plugin.getLogger().log(Level.SEVERE, String.format("DeathCauseConfigurations: %s didn't have correct DisplayMessages configured and default value will be used: %s.", cause.name(), cause.getDefaultDisplayMessages().toString()));
}
- if (cBanTime == -10) {
- cBanTime = cause.getDefaultBantime();
+ int banTime = cBanTime.orElse(cause.getDefaultBantime());
+ if (cBanTime.isEmpty()) {
plugin.getLogger().log(Level.SEVERE, String.format("DeathCauseConfigurations: %s didn't have a correct BanTime configured and default value will be used: %d.", cause.name(), cause.getDefaultBantime()));
}
- return new BanConfiguration(cBanTime, cDisplayMessages);
+ return new BanConfiguration(banTime, cDisplayMessages);
}
public int getBanTime() {
diff --git a/src/com/backtobedrock/augmentedhardcore/domain/configurationDomain/configurationHelperClasses/Display.java b/src/com/backtobedrock/augmentedhardcore/domain/configurationDomain/configurationHelperClasses/Display.java
index 5f0df21..0209e31 100644
--- a/src/com/backtobedrock/augmentedhardcore/domain/configurationDomain/configurationHelperClasses/Display.java
+++ b/src/com/backtobedrock/augmentedhardcore/domain/configurationDomain/configurationHelperClasses/Display.java
@@ -11,6 +11,7 @@
import java.util.HashMap;
import java.util.List;
+import java.util.OptionalInt;
import java.util.logging.Level;
public class Display {
@@ -32,18 +33,18 @@ public static Display deserialize(String id, ConfigurationSection section) {
Material cMaterial = ConfigUtils.getMaterial(id + ".Material", section.getString("Material"));
String cName = section.getString("Name");
List cLore = section.getStringList("Lore");
- int cAmount = ConfigUtils.checkMinMax(id + ".Amount", section.getInt("Amount", 1), 1, Integer.MAX_VALUE);
+ OptionalInt cAmount = ConfigUtils.checkMinMax(id + ".Amount", section.getInt("Amount", 1), 1, Integer.MAX_VALUE);
if (cName == null) {
plugin.getLogger().log(Level.SEVERE, id + ".Name: %s is not a valid name.");
return null;
}
- if (cAmount == -10 || cMaterial == null) {
+ if (cAmount.isEmpty() || cMaterial == null) {
return null;
}
- return new Display(cMaterial, cName, cLore, cAmount);
+ return new Display(cMaterial, cName, cLore, cAmount.getAsInt());
}
public ItemStack getItem() {
diff --git a/src/com/backtobedrock/augmentedhardcore/utilities/ConfigUtils.java b/src/com/backtobedrock/augmentedhardcore/utilities/ConfigUtils.java
index 77268ad..7f998e7 100644
--- a/src/com/backtobedrock/augmentedhardcore/utilities/ConfigUtils.java
+++ b/src/com/backtobedrock/augmentedhardcore/utilities/ConfigUtils.java
@@ -9,50 +9,52 @@
import org.bukkit.entity.EntityType;
import org.bukkit.plugin.java.JavaPlugin;
+import java.util.OptionalDouble;
+import java.util.OptionalInt;
import java.util.logging.Level;
public class ConfigUtils {
- public static int checkMin(String id, int value, int min) {
+ public static OptionalInt checkMin(String id, int value, int min) {
if (value >= min) {
- return value;
+ return OptionalInt.of(value);
} else {
sendErrorMessage(String.format("%s: value cannot be lower than %d, your value is: %d", id, min, value));
- return -10;
+ return OptionalInt.empty();
}
}
- public static int checkMinMaxNoNotification(int value, int min, int max) {
+ public static OptionalInt checkMinMaxNoNotification(int value, int min, int max) {
if (value >= min && value <= max) {
- return value;
+ return OptionalInt.of(value);
} else {
- return -10;
+ return OptionalInt.empty();
}
}
- public static double checkMin(String id, double value, double min) {
+ public static OptionalDouble checkMin(String id, double value, double min) {
if (value >= min) {
- return value;
+ return OptionalDouble.of(value);
} else {
sendErrorMessage(String.format("%s: value cannot be lower than %f, your value is: %f", id, min, value));
- return -10;
+ return OptionalDouble.empty();
}
}
- public static double checkMinMax(String id, double value, double min, double max) {
+ public static OptionalDouble checkMinMax(String id, double value, double min, double max) {
if (value >= min && value <= max) {
- return value;
+ return OptionalDouble.of(value);
} else {
sendErrorMessage(String.format("%s: value cannot be lower than %f and higher than %f, your value is: %f", id, min, max, value));
- return -10;
+ return OptionalDouble.empty();
}
}
- public static int checkMinMax(String id, int value, int min, int max) {
+ public static OptionalInt checkMinMax(String id, int value, int min, int max) {
if (value >= min && value <= max) {
- return value;
+ return OptionalInt.of(value);
} else {
sendErrorMessage(String.format("%s: value cannot be lower than %d and higher than %d, your value is: %d", id, min, max, value));
- return -10;
+ return OptionalInt.empty();
}
}
From 5453e65ad9b56484c6b25339f11dbe32c6c0ee2d Mon Sep 17 00:00:00 2001
From: Jake Hoolz <84546680+JakeHoolz@users.noreply.github.com>
Date: Sat, 30 Aug 2025 18:58:46 -0500
Subject: [PATCH 22/43] Use computeIfAbsent for player cache
---
.../repositories/PlayerRepository.java | 34 ++++++-------------
1 file changed, 11 insertions(+), 23 deletions(-)
diff --git a/src/com/backtobedrock/augmentedhardcore/repositories/PlayerRepository.java b/src/com/backtobedrock/augmentedhardcore/repositories/PlayerRepository.java
index 9bea73f..13d99e8 100644
--- a/src/com/backtobedrock/augmentedhardcore/repositories/PlayerRepository.java
+++ b/src/com/backtobedrock/augmentedhardcore/repositories/PlayerRepository.java
@@ -48,44 +48,32 @@ private void initializeMapper() {
}
public CompletableFuture getByPlayer(OfflinePlayer player) {
- if (!this.playerCache.containsKey(player.getUniqueId())) {
- return this.mapper.getByPlayer(player)
- .thenApplyAsync(playerData -> this.getFromDataAndCache(player, playerData), this.plugin.getExecutor());
- } else {
- return CompletableFuture.supplyAsync(() -> player, this.plugin.getExecutor())
- .thenApplyAsync(this::getFromCache, this.plugin.getExecutor())
- .exceptionally(ex -> {
- this.plugin.getLogger().log(Level.SEVERE, String.format("Failed to retrieve PlayerData for %s from cache.", player.getName()), ex);
- return null;
- });
- }
+ return CompletableFuture.supplyAsync(() ->
+ this.playerCache.computeIfAbsent(player.getUniqueId(), uuid -> this.loadPlayerData(player)),
+ this.plugin.getExecutor())
+ .exceptionally(ex -> {
+ this.plugin.getLogger().log(Level.SEVERE, String.format("Failed to retrieve PlayerData for %s from cache.", player.getName()), ex);
+ return null;
+ });
}
public PlayerData getByPlayerSync(OfflinePlayer player) {
- if (!this.playerCache.containsKey(player.getUniqueId())) {
- return this.getFromDataAndCache(player, this.mapper.getByPlayerSync(player));
- } else {
- return this.getFromCache(player);
- }
+ return this.playerCache.computeIfAbsent(player.getUniqueId(), uuid -> this.loadPlayerData(player));
}
- private PlayerData getFromDataAndCache(OfflinePlayer player, PlayerData playerData) {
+ private PlayerData loadPlayerData(OfflinePlayer player) {
+ PlayerData playerData = this.mapper.getByPlayerSync(player);
if (playerData == null) {
playerData = new PlayerData(this.plugin, player);
if (player.hasPlayedBefore())
this.mapper.insertPlayerDataAsync(playerData);
}
- this.playerCache.put(player.getUniqueId(), playerData);
if (!player.isOnline()) {
new ClearCache(player).runTaskLater(this.plugin, 6000);
}
- return this.getFromCache(player);
- }
-
- private PlayerData getFromCache(OfflinePlayer player) {
- return this.playerCache.get(player.getUniqueId());
+ return playerData;
}
public void updatePlayerData(PlayerData data) {
From 382a23dfa6ac79aac9bafc76bdbc8f80b7566626 Mon Sep 17 00:00:00 2001
From: Jake Hoolz <84546680+JakeHoolz@users.noreply.github.com>
Date: Sat, 30 Aug 2025 19:05:23 -0500
Subject: [PATCH 23/43] Use URLConnection with timeouts and UTF-8 scanner
---
.../runnables/UpdateChecker.java | 19 +++++++++++++------
1 file changed, 13 insertions(+), 6 deletions(-)
diff --git a/src/com/backtobedrock/augmentedhardcore/runnables/UpdateChecker.java b/src/com/backtobedrock/augmentedhardcore/runnables/UpdateChecker.java
index fd79018..1c5dfc0 100644
--- a/src/com/backtobedrock/augmentedhardcore/runnables/UpdateChecker.java
+++ b/src/com/backtobedrock/augmentedhardcore/runnables/UpdateChecker.java
@@ -1,13 +1,14 @@
package com.backtobedrock.augmentedhardcore.runnables;
import com.backtobedrock.augmentedhardcore.AugmentedHardcore;
-import org.bukkit.Bukkit;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.scheduler.BukkitRunnable;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
+import java.net.URLConnection;
+import java.nio.charset.StandardCharsets;
import java.util.Scanner;
import java.util.logging.Level;
@@ -34,13 +35,19 @@ public String getNewestVersion() {
}
public void check() {
- try (InputStream inputStream = new URL("https://api.spigotmc.org/legacy/update.php?resource=" + 71483).openStream(); Scanner scanner = new Scanner(inputStream)) {
- if (scanner.hasNext()) {
- this.newestVersion = scanner.next();
- this.outdated = !this.plugin.getDescription().getVersion().equalsIgnoreCase(this.newestVersion);
+ try {
+ URLConnection connection = new URL("https://api.spigotmc.org/legacy/update.php?resource=" + 71483).openConnection();
+ connection.setConnectTimeout(5000);
+ connection.setReadTimeout(5000);
+ try (InputStream inputStream = connection.getInputStream();
+ Scanner scanner = new Scanner(inputStream, StandardCharsets.UTF_8)) {
+ if (scanner.hasNext()) {
+ this.newestVersion = scanner.next();
+ this.outdated = !this.plugin.getDescription().getVersion().equalsIgnoreCase(this.newestVersion);
+ }
}
} catch (IOException exception) {
- Bukkit.getLogger().log(Level.INFO, "Cannot look for updates: {0}", exception.getMessage());
+ this.plugin.getLogger().log(Level.WARNING, "Cannot look for updates: {0}", exception.getMessage());
}
}
From 1ac8349b7d8ac632d863709b693425b973b4e31a Mon Sep 17 00:00:00 2001
From: Jake Hoolz <84546680+JakeHoolz@users.noreply.github.com>
Date: Sat, 30 Aug 2025 19:09:44 -0500
Subject: [PATCH 24/43] Stop update checker on plugin disable
---
pom.xml | 12 ++++++
.../augmentedhardcore/AugmentedHardcore.java | 4 ++
.../runnables/UpdateCheckerTest.java | 43 +++++++++++++++++++
3 files changed, 59 insertions(+)
create mode 100644 src/test/java/com/backtobedrock/augmentedhardcore/runnables/UpdateCheckerTest.java
diff --git a/pom.xml b/pom.xml
index 6cb4b76..c7a1024 100644
--- a/pom.xml
+++ b/pom.xml
@@ -130,5 +130,17 @@
7.0.2
provided
+
+ org.junit.jupiter
+ junit-jupiter
+ 5.10.2
+ test
+
+
+ com.github.seeseemelk
+ MockBukkit-v1.21
+ 1.21-SNAPSHOT
+ test
+
\ No newline at end of file
diff --git a/src/com/backtobedrock/augmentedhardcore/AugmentedHardcore.java b/src/com/backtobedrock/augmentedhardcore/AugmentedHardcore.java
index ea74969..690387f 100644
--- a/src/com/backtobedrock/augmentedhardcore/AugmentedHardcore.java
+++ b/src/com/backtobedrock/augmentedhardcore/AugmentedHardcore.java
@@ -91,6 +91,10 @@ public void onDisable() {
}
}
+ if (this.updateChecker != null) {
+ this.updateChecker.stop();
+ }
+
if (this.executor != null) {
this.executor.shutdown();
}
diff --git a/src/test/java/com/backtobedrock/augmentedhardcore/runnables/UpdateCheckerTest.java b/src/test/java/com/backtobedrock/augmentedhardcore/runnables/UpdateCheckerTest.java
new file mode 100644
index 0000000..7e55416
--- /dev/null
+++ b/src/test/java/com/backtobedrock/augmentedhardcore/runnables/UpdateCheckerTest.java
@@ -0,0 +1,43 @@
+package com.backtobedrock.augmentedhardcore.runnables;
+
+import be.seeseemelk.mockbukkit.MockBukkit;
+import be.seeseemelk.mockbukkit.ServerMock;
+import com.backtobedrock.augmentedhardcore.AugmentedHardcore;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import java.lang.reflect.Field;
+
+public class UpdateCheckerTest {
+
+ private ServerMock server;
+ private AugmentedHardcore plugin;
+
+ @BeforeEach
+ void setUp() {
+ this.server = MockBukkit.mock();
+ this.plugin = MockBukkit.load(AugmentedHardcore.class);
+ }
+
+ @AfterEach
+ void tearDown() {
+ MockBukkit.unmock();
+ }
+
+ @Test
+ void testUpdateCheckerCancelledOnDisable() throws Exception {
+ Field field = AugmentedHardcore.class.getDeclaredField("updateChecker");
+ field.setAccessible(true);
+ UpdateChecker checker = (UpdateChecker) field.get(this.plugin);
+ int taskId = checker.getTaskId();
+
+ Assertions.assertTrue(this.server.getScheduler().isQueued(taskId));
+
+ this.plugin.onDisable();
+
+ Assertions.assertTrue(checker.isCancelled());
+ Assertions.assertFalse(this.server.getScheduler().isQueued(taskId));
+ }
+}
From 28d9f3b6459ecfa52d577f43fcaf1accdf464355 Mon Sep 17 00:00:00 2001
From: Jake Hoolz
Date: Sat, 30 Aug 2025 19:51:04 -0500
Subject: [PATCH 25/43] minor
---
pom.xml | 12 ------
.../runnables/UpdateCheckerTest.java | 43 -------------------
2 files changed, 55 deletions(-)
delete mode 100644 src/test/java/com/backtobedrock/augmentedhardcore/runnables/UpdateCheckerTest.java
diff --git a/pom.xml b/pom.xml
index c7a1024..6cb4b76 100644
--- a/pom.xml
+++ b/pom.xml
@@ -130,17 +130,5 @@
7.0.2
provided
-
- org.junit.jupiter
- junit-jupiter
- 5.10.2
- test
-
-
- com.github.seeseemelk
- MockBukkit-v1.21
- 1.21-SNAPSHOT
- test
-
\ No newline at end of file
diff --git a/src/test/java/com/backtobedrock/augmentedhardcore/runnables/UpdateCheckerTest.java b/src/test/java/com/backtobedrock/augmentedhardcore/runnables/UpdateCheckerTest.java
deleted file mode 100644
index 7e55416..0000000
--- a/src/test/java/com/backtobedrock/augmentedhardcore/runnables/UpdateCheckerTest.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package com.backtobedrock.augmentedhardcore.runnables;
-
-import be.seeseemelk.mockbukkit.MockBukkit;
-import be.seeseemelk.mockbukkit.ServerMock;
-import com.backtobedrock.augmentedhardcore.AugmentedHardcore;
-import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-
-import java.lang.reflect.Field;
-
-public class UpdateCheckerTest {
-
- private ServerMock server;
- private AugmentedHardcore plugin;
-
- @BeforeEach
- void setUp() {
- this.server = MockBukkit.mock();
- this.plugin = MockBukkit.load(AugmentedHardcore.class);
- }
-
- @AfterEach
- void tearDown() {
- MockBukkit.unmock();
- }
-
- @Test
- void testUpdateCheckerCancelledOnDisable() throws Exception {
- Field field = AugmentedHardcore.class.getDeclaredField("updateChecker");
- field.setAccessible(true);
- UpdateChecker checker = (UpdateChecker) field.get(this.plugin);
- int taskId = checker.getTaskId();
-
- Assertions.assertTrue(this.server.getScheduler().isQueued(taskId));
-
- this.plugin.onDisable();
-
- Assertions.assertTrue(checker.isCancelled());
- Assertions.assertFalse(this.server.getScheduler().isQueued(taskId));
- }
-}
From 823daf076156f198f87e5bd40ed02ff2c9be81b5 Mon Sep 17 00:00:00 2001
From: Jake Hoolz <84546680+JakeHoolz@users.noreply.github.com>
Date: Sat, 30 Aug 2025 20:46:07 -0500
Subject: [PATCH 26/43] Log warnings at WARNING level
---
.../backtobedrock/augmentedhardcore/utilities/ConfigUtils.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/com/backtobedrock/augmentedhardcore/utilities/ConfigUtils.java b/src/com/backtobedrock/augmentedhardcore/utilities/ConfigUtils.java
index 7f998e7..48f4212 100644
--- a/src/com/backtobedrock/augmentedhardcore/utilities/ConfigUtils.java
+++ b/src/com/backtobedrock/augmentedhardcore/utilities/ConfigUtils.java
@@ -205,6 +205,6 @@ private static void sendErrorMessage(String message) {
private static void sendWarningMessage(String message) {
AugmentedHardcore plugin = JavaPlugin.getPlugin(AugmentedHardcore.class);
- plugin.getLogger().log(Level.INFO, message);
+ plugin.getLogger().log(Level.WARNING, message);
}
}
From a2905bfad2559995254ed6c00bef16f9aa9fd887 Mon Sep 17 00:00:00 2001
From: Jake Hoolz <84546680+JakeHoolz@users.noreply.github.com>
Date: Sat, 30 Aug 2025 20:46:52 -0500
Subject: [PATCH 27/43] refactor: remove singleton mappers
---
.../augmentedhardcore/AugmentedHardcore.java | 2 ++
.../mappers/ban/MySQLBanMapper.java | 11 +----------
.../mappers/player/MySQLPlayerMapper.java | 14 ++++----------
.../mappers/server/MySQLServerMapper.java | 8 +++++---
.../repositories/PlayerRepository.java | 2 +-
.../repositories/ServerRepository.java | 4 ++++
6 files changed, 17 insertions(+), 24 deletions(-)
diff --git a/src/com/backtobedrock/augmentedhardcore/AugmentedHardcore.java b/src/com/backtobedrock/augmentedhardcore/AugmentedHardcore.java
index 690387f..3a2df19 100644
--- a/src/com/backtobedrock/augmentedhardcore/AugmentedHardcore.java
+++ b/src/com/backtobedrock/augmentedhardcore/AugmentedHardcore.java
@@ -188,6 +188,8 @@ public void initialize() {
}
if (this.serverRepository == null) {
this.serverRepository = new ServerRepository(this);
+ } else {
+ this.serverRepository.onReload();
}
//register event listeners
diff --git a/src/com/backtobedrock/augmentedhardcore/mappers/ban/MySQLBanMapper.java b/src/com/backtobedrock/augmentedhardcore/mappers/ban/MySQLBanMapper.java
index fe097f6..ab19489 100644
--- a/src/com/backtobedrock/augmentedhardcore/mappers/ban/MySQLBanMapper.java
+++ b/src/com/backtobedrock/augmentedhardcore/mappers/ban/MySQLBanMapper.java
@@ -17,16 +17,7 @@
import java.util.logging.Level;
public class MySQLBanMapper extends AbstractMapper implements IBanMapper {
- private static MySQLBanMapper instance;
-
- public static synchronized MySQLBanMapper getInstance(AugmentedHardcore plugin) {
- if (instance == null) {
- instance = new MySQLBanMapper(plugin);
- }
- return instance;
- }
-
- private MySQLBanMapper(AugmentedHardcore plugin) {
+ public MySQLBanMapper(AugmentedHardcore plugin) {
super(plugin);
}
diff --git a/src/com/backtobedrock/augmentedhardcore/mappers/player/MySQLPlayerMapper.java b/src/com/backtobedrock/augmentedhardcore/mappers/player/MySQLPlayerMapper.java
index b2835e5..8df860b 100644
--- a/src/com/backtobedrock/augmentedhardcore/mappers/player/MySQLPlayerMapper.java
+++ b/src/com/backtobedrock/augmentedhardcore/mappers/player/MySQLPlayerMapper.java
@@ -17,17 +17,11 @@
import java.util.logging.Level;
public class MySQLPlayerMapper extends AbstractMapper implements IPlayerMapper {
- private static MySQLPlayerMapper instance;
+ private final MySQLBanMapper banMapper;
- public static synchronized MySQLPlayerMapper getInstance(AugmentedHardcore plugin) {
- if (instance == null) {
- instance = new MySQLPlayerMapper(plugin);
- }
- return instance;
- }
-
- private MySQLPlayerMapper(AugmentedHardcore plugin) {
+ public MySQLPlayerMapper(AugmentedHardcore plugin) {
super(plugin);
+ this.banMapper = new MySQLBanMapper(plugin);
}
@Override
@@ -75,7 +69,7 @@ private PlayerData getPlayerData(OfflinePlayer player) {
deathBans
);
}
- Pair banPair = MySQLBanMapper.getInstance(this.plugin).getBanFromResultSetSync(resultSet);
+ Pair banPair = this.banMapper.getBanFromResultSetSync(resultSet);
if (banPair != null) {
deathBans.put(banPair.getValue0(), banPair.getValue1());
}
diff --git a/src/com/backtobedrock/augmentedhardcore/mappers/server/MySQLServerMapper.java b/src/com/backtobedrock/augmentedhardcore/mappers/server/MySQLServerMapper.java
index 8888549..091e1f9 100644
--- a/src/com/backtobedrock/augmentedhardcore/mappers/server/MySQLServerMapper.java
+++ b/src/com/backtobedrock/augmentedhardcore/mappers/server/MySQLServerMapper.java
@@ -24,6 +24,7 @@
public class MySQLServerMapper extends AbstractMapper implements IServerMapper {
private static MySQLServerMapper instance;
+ private final MySQLBanMapper banMapper;
public static synchronized MySQLServerMapper getInstance(AugmentedHardcore plugin) {
if (instance == null) {
@@ -34,6 +35,7 @@ public static synchronized MySQLServerMapper getInstance(AugmentedHardcore plugi
private MySQLServerMapper(AugmentedHardcore plugin) {
super(plugin);
+ this.banMapper = new MySQLBanMapper(plugin);
}
@Override
@@ -67,7 +69,7 @@ public CompletableFuture getServerData(Server server) {
totalDeathBans = resultSet.getInt("total_death_bans");
String uuidString = resultSet.getString("player_uuid");
if (uuidString != null && !uuidString.isEmpty()) {
- Pair banPair = MySQLBanMapper.getInstance(this.plugin).getBanFromResultSetSync(resultSet);
+ Pair banPair = this.banMapper.getBanFromResultSetSync(resultSet);
if (banPair != null) {
deathBans.put(UUID.fromString(uuidString), banPair);
}
@@ -98,7 +100,7 @@ public void updateServerData(ServerData data) {
this.plugin.getLogger().log(Level.SEVERE, "Could not update server data.", e);
return;
}
- data.getOngoingBans().forEach((key, value) -> MySQLBanMapper.getInstance(this.plugin).updateBan(this.plugin.getServer(), key, value.getBan()));
+ data.getOngoingBans().forEach((key, value) -> this.banMapper.updateBan(this.plugin.getServer(), key, value.getBan()));
}, this.plugin.getExecutor()).exceptionally(ex -> {
this.plugin.getLogger().log(Level.SEVERE, "Could not update server data asynchronously.", ex);
return null;
@@ -126,6 +128,6 @@ public void deleteServerData() {
@Override
public void deleteBanFromServerData(UUID uuid, Pair ban) {
- MySQLBanMapper.getInstance(this.plugin).updateBan(null, uuid, ban);
+ this.banMapper.updateBan(null, uuid, ban);
}
}
diff --git a/src/com/backtobedrock/augmentedhardcore/repositories/PlayerRepository.java b/src/com/backtobedrock/augmentedhardcore/repositories/PlayerRepository.java
index 13d99e8..489e703 100644
--- a/src/com/backtobedrock/augmentedhardcore/repositories/PlayerRepository.java
+++ b/src/com/backtobedrock/augmentedhardcore/repositories/PlayerRepository.java
@@ -41,7 +41,7 @@ public void onReload() {
private void initializeMapper() {
if (this.plugin.getConfigurations().getDataConfiguration().getStorageType() == StorageType.MYSQL) {
- this.mapper = MySQLPlayerMapper.getInstance(this.plugin);
+ this.mapper = new MySQLPlayerMapper(this.plugin);
} else {
this.mapper = new YAMLPlayerMapper(this.plugin);
}
diff --git a/src/com/backtobedrock/augmentedhardcore/repositories/ServerRepository.java b/src/com/backtobedrock/augmentedhardcore/repositories/ServerRepository.java
index 0ba024e..3966b53 100644
--- a/src/com/backtobedrock/augmentedhardcore/repositories/ServerRepository.java
+++ b/src/com/backtobedrock/augmentedhardcore/repositories/ServerRepository.java
@@ -33,6 +33,10 @@ public ServerRepository(AugmentedHardcore plugin) {
});
}
+ public void onReload() {
+ this.initializeMapper();
+ }
+
private void initializeMapper() {
this.mapper = new YAMLServerMapper(this.plugin);
if (this.plugin.getConfigurations().getDataConfiguration().getStorageType() == StorageType.MYSQL) {
From a212783580d53955417163ed8d060a4fe7afd9a5 Mon Sep 17 00:00:00 2001
From: Jake Hoolz <84546680+JakeHoolz@users.noreply.github.com>
Date: Sat, 30 Aug 2025 20:47:35 -0500
Subject: [PATCH 28/43] refactor: extract ban parameter binding
---
.../mappers/ban/MySQLBanMapper.java | 78 ++++++++-----------
1 file changed, 32 insertions(+), 46 deletions(-)
diff --git a/src/com/backtobedrock/augmentedhardcore/mappers/ban/MySQLBanMapper.java b/src/com/backtobedrock/augmentedhardcore/mappers/ban/MySQLBanMapper.java
index fe097f6..909cd80 100644
--- a/src/com/backtobedrock/augmentedhardcore/mappers/ban/MySQLBanMapper.java
+++ b/src/com/backtobedrock/augmentedhardcore/mappers/ban/MySQLBanMapper.java
@@ -90,52 +90,8 @@ public void updateBan(Server server, UUID uuid, Pair ban) {
+ "`time_since_previous_death` = ?;";
try (Connection connection = this.database.getConnection(); PreparedStatement preparedStatement = connection.prepareStatement(sql)) {
- preparedStatement.setInt(1, ban.getValue0());
- preparedStatement.setString(2, uuid.toString());
- preparedStatement.setString(3, server != null ? InetAddress.getLocalHost().getHostAddress() : null);
- preparedStatement.setObject(4, server != null ? this.plugin.getServer().getPort() : null);
- preparedStatement.setTimestamp(5, Timestamp.valueOf(ban.getValue1().getStartDate()));
- preparedStatement.setTimestamp(6, Timestamp.valueOf(ban.getValue1().getExpirationDate()));
- preparedStatement.setInt(7, ban.getValue1().getBanTime());
- preparedStatement.setString(8, ban.getValue1().getDamageCause().name());
- preparedStatement.setString(9, ban.getValue1().getDamageCauseType().name());
- preparedStatement.setString(10, ban.getValue1().getLocation().getWorld());
- preparedStatement.setDouble(11, ban.getValue1().getLocation().getX());
- preparedStatement.setDouble(12, ban.getValue1().getLocation().getY());
- preparedStatement.setDouble(13, ban.getValue1().getLocation().getZ());
- preparedStatement.setBoolean(14, ban.getValue1().getKiller() != null);
- preparedStatement.setString(15, ban.getValue1().getKiller() == null ? null : ban.getValue1().getKiller().getName());
- preparedStatement.setString(16, ban.getValue1().getKiller() == null ? null : ban.getValue1().getKiller().getDisplayName());
- preparedStatement.setString(17, ban.getValue1().getKiller() == null ? null : ban.getValue1().getKiller().getType().name());
- preparedStatement.setBoolean(18, ban.getValue1().getInCombatWith() != null);
- preparedStatement.setString(19, ban.getValue1().getInCombatWith() == null ? null : ban.getValue1().getInCombatWith().getName());
- preparedStatement.setString(20, ban.getValue1().getInCombatWith() == null ? null : ban.getValue1().getInCombatWith().getDisplayName());
- preparedStatement.setString(21, ban.getValue1().getInCombatWith() == null ? null : ban.getValue1().getInCombatWith().getType().name());
- preparedStatement.setString(22, ban.getValue1().getDeathMessage());
- preparedStatement.setLong(23, ban.getValue1().getTimeSincePreviousDeathBan());
- preparedStatement.setLong(24, ban.getValue1().getTimeSincePreviousDeath());
- preparedStatement.setString(25, server != null ? InetAddress.getLocalHost().getHostAddress() : null);
- preparedStatement.setObject(26, server != null ? this.plugin.getServer().getPort() : null);
- preparedStatement.setTimestamp(27, Timestamp.valueOf(ban.getValue1().getStartDate()));
- preparedStatement.setTimestamp(28, Timestamp.valueOf(ban.getValue1().getExpirationDate()));
- preparedStatement.setInt(29, ban.getValue1().getBanTime());
- preparedStatement.setString(30, ban.getValue1().getDamageCause().name());
- preparedStatement.setString(31, ban.getValue1().getDamageCauseType().name());
- preparedStatement.setString(32, ban.getValue1().getLocation().getWorld());
- preparedStatement.setDouble(33, ban.getValue1().getLocation().getX());
- preparedStatement.setDouble(34, ban.getValue1().getLocation().getY());
- preparedStatement.setDouble(35, ban.getValue1().getLocation().getZ());
- preparedStatement.setBoolean(36, ban.getValue1().getKiller() != null);
- preparedStatement.setString(37, ban.getValue1().getKiller() == null ? null : ban.getValue1().getKiller().getName());
- preparedStatement.setString(38, ban.getValue1().getKiller() == null ? null : ban.getValue1().getKiller().getDisplayName());
- preparedStatement.setString(39, ban.getValue1().getKiller() == null ? null : ban.getValue1().getKiller().getType().name());
- preparedStatement.setBoolean(40, ban.getValue1().getInCombatWith() != null);
- preparedStatement.setString(41, ban.getValue1().getInCombatWith() == null ? null : ban.getValue1().getInCombatWith().getName());
- preparedStatement.setString(42, ban.getValue1().getInCombatWith() == null ? null : ban.getValue1().getInCombatWith().getDisplayName());
- preparedStatement.setString(43, ban.getValue1().getInCombatWith() == null ? null : ban.getValue1().getInCombatWith().getType().name());
- preparedStatement.setString(44, ban.getValue1().getDeathMessage());
- preparedStatement.setLong(45, ban.getValue1().getTimeSincePreviousDeathBan());
- preparedStatement.setLong(46, ban.getValue1().getTimeSincePreviousDeath());
+ bindBanParameters(preparedStatement, 1, server, uuid, ban);
+ bindBanParameters(preparedStatement, 25, server, uuid, ban);
preparedStatement.execute();
} catch (SQLException | UnknownHostException e) {
this.plugin.getLogger().log(Level.SEVERE, "Could not update ban.", e);
@@ -146,6 +102,36 @@ public void updateBan(Server server, UUID uuid, Pair ban) {
});
}
+ private void bindBanParameters(PreparedStatement preparedStatement, int startIndex, Server server, UUID uuid, Pair ban) throws SQLException, UnknownHostException {
+ int index = startIndex;
+ if (startIndex == 1) {
+ preparedStatement.setInt(index++, ban.getValue0());
+ preparedStatement.setString(index++, uuid.toString());
+ }
+ preparedStatement.setString(index++, server != null ? InetAddress.getLocalHost().getHostAddress() : null);
+ preparedStatement.setObject(index++, server != null ? this.plugin.getServer().getPort() : null);
+ preparedStatement.setTimestamp(index++, Timestamp.valueOf(ban.getValue1().getStartDate()));
+ preparedStatement.setTimestamp(index++, Timestamp.valueOf(ban.getValue1().getExpirationDate()));
+ preparedStatement.setInt(index++, ban.getValue1().getBanTime());
+ preparedStatement.setString(index++, ban.getValue1().getDamageCause().name());
+ preparedStatement.setString(index++, ban.getValue1().getDamageCauseType().name());
+ preparedStatement.setString(index++, ban.getValue1().getLocation().getWorld());
+ preparedStatement.setDouble(index++, ban.getValue1().getLocation().getX());
+ preparedStatement.setDouble(index++, ban.getValue1().getLocation().getY());
+ preparedStatement.setDouble(index++, ban.getValue1().getLocation().getZ());
+ preparedStatement.setBoolean(index++, ban.getValue1().getKiller() != null);
+ preparedStatement.setString(index++, ban.getValue1().getKiller() == null ? null : ban.getValue1().getKiller().getName());
+ preparedStatement.setString(index++, ban.getValue1().getKiller() == null ? null : ban.getValue1().getKiller().getDisplayName());
+ preparedStatement.setString(index++, ban.getValue1().getKiller() == null ? null : ban.getValue1().getKiller().getType().name());
+ preparedStatement.setBoolean(index++, ban.getValue1().getInCombatWith() != null);
+ preparedStatement.setString(index++, ban.getValue1().getInCombatWith() == null ? null : ban.getValue1().getInCombatWith().getName());
+ preparedStatement.setString(index++, ban.getValue1().getInCombatWith() == null ? null : ban.getValue1().getInCombatWith().getDisplayName());
+ preparedStatement.setString(index++, ban.getValue1().getInCombatWith() == null ? null : ban.getValue1().getInCombatWith().getType().name());
+ preparedStatement.setString(index++, ban.getValue1().getDeathMessage());
+ preparedStatement.setLong(index++, ban.getValue1().getTimeSincePreviousDeathBan());
+ preparedStatement.setLong(index, ban.getValue1().getTimeSincePreviousDeath());
+ }
+
@Override
public void deleteBan(UUID uuid, Integer id) {
CompletableFuture.runAsync(() -> {
From 3de0abcc635f6a2beee803de73e5b411499dd394 Mon Sep 17 00:00:00 2001
From: Jake Hoolz <84546680+JakeHoolz@users.noreply.github.com>
Date: Sat, 30 Aug 2025 20:48:00 -0500
Subject: [PATCH 29/43] Add default case to command switch for usage
---
src/com/backtobedrock/augmentedhardcore/commands/Commands.java | 2 ++
1 file changed, 2 insertions(+)
diff --git a/src/com/backtobedrock/augmentedhardcore/commands/Commands.java b/src/com/backtobedrock/augmentedhardcore/commands/Commands.java
index abacbcc..5107733 100644
--- a/src/com/backtobedrock/augmentedhardcore/commands/Commands.java
+++ b/src/com/backtobedrock/augmentedhardcore/commands/Commands.java
@@ -67,6 +67,8 @@ public boolean onCommand(CommandSender cs, Command cmnd, String alias, String[]
case "serverdeathbans":
new CommandServerDeathBans(cs, args).run();
break;
+ default:
+ return false;
}
return true;
}
From 5d772e89fcd2b8be89f698fe21b2f87b8e8f1be4 Mon Sep 17 00:00:00 2001
From: Jake Hoolz <84546680+JakeHoolz@users.noreply.github.com>
Date: Sat, 30 Aug 2025 20:48:32 -0500
Subject: [PATCH 30/43] Provide custom ThreadFactory for async executor
---
.../augmentedhardcore/AugmentedHardcore.java | 16 +++++++++++++++-
1 file changed, 15 insertions(+), 1 deletion(-)
diff --git a/src/com/backtobedrock/augmentedhardcore/AugmentedHardcore.java b/src/com/backtobedrock/augmentedhardcore/AugmentedHardcore.java
index 690387f..8d425e4 100644
--- a/src/com/backtobedrock/augmentedhardcore/AugmentedHardcore.java
+++ b/src/com/backtobedrock/augmentedhardcore/AugmentedHardcore.java
@@ -34,6 +34,8 @@
import java.util.*;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
+import java.util.concurrent.ThreadFactory;
+import java.util.concurrent.atomic.AtomicInteger;
import java.util.logging.Level;
import java.util.stream.Collectors;
@@ -58,6 +60,18 @@ public class AugmentedHardcore extends JavaPlugin implements Listener {
//async executor
private ExecutorService executor;
+ private final ThreadFactory asyncThreadFactory = new ThreadFactory() {
+ private final AtomicInteger count = new AtomicInteger(1);
+ private final ThreadFactory backingFactory = Executors.defaultThreadFactory();
+
+ @Override
+ public Thread newThread(@NotNull Runnable r) {
+ Thread thread = backingFactory.newThread(r);
+ thread.setName(String.format("AugHC-Async-%d", count.getAndIncrement()));
+ thread.setDaemon(true);
+ return thread;
+ }
+ };
@Override
public void onEnable() {
@@ -113,7 +127,7 @@ public boolean onCommand(@NotNull CommandSender cs, @NotNull Command cmnd, @NotN
public void initialize() {
if (this.executor == null || this.executor.isShutdown()) {
- this.executor = Executors.newFixedThreadPool(Math.max(2, Runtime.getRuntime().availableProcessors()));
+ this.executor = Executors.newFixedThreadPool(Math.max(2, Runtime.getRuntime().availableProcessors()), this.asyncThreadFactory);
}
//initialize old config directory
From cdcbda856bed8b4648f5e1b4d42f01bf501ec02c Mon Sep 17 00:00:00 2001
From: Jake Hoolz <84546680+JakeHoolz@users.noreply.github.com>
Date: Sat, 30 Aug 2025 21:23:59 -0500
Subject: [PATCH 31/43] Check null values for item metadata
---
.../utilities/InventoryUtils.java | 31 +++++++++++++++----
1 file changed, 25 insertions(+), 6 deletions(-)
diff --git a/src/com/backtobedrock/augmentedhardcore/utilities/InventoryUtils.java b/src/com/backtobedrock/augmentedhardcore/utilities/InventoryUtils.java
index 0cb5fb4..a7b7405 100644
--- a/src/com/backtobedrock/augmentedhardcore/utilities/InventoryUtils.java
+++ b/src/com/backtobedrock/augmentedhardcore/utilities/InventoryUtils.java
@@ -11,6 +11,7 @@
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;
+import java.util.Collections;
import java.util.List;
public class InventoryUtils {
@@ -19,8 +20,14 @@ public static ItemStack createItem(Material material, String displayName, List lore,
SkullMeta sm = (SkullMeta) item.getItemMeta();
if (sm != null) {
sm.setOwningPlayer(player);
- sm.setDisplayName(displayName);
- sm.setLore(lore);
+ if (displayName != null) {
+ sm.setDisplayName(displayName);
+ }
+ if (lore != null) {
+ sm.setLore(lore);
+ } else {
+ sm.setLore(Collections.emptyList());
+ }
item.setItemMeta(sm);
}
return item;
@@ -47,8 +60,14 @@ public static ItemStack createPotion(String displayName, List lore) {
PotionMeta pm = (PotionMeta) item.getItemMeta();
if (pm != null) {
pm.addCustomEffect(new PotionEffect(PotionEffectType.SPEED, 3600, 1), true);
- pm.setDisplayName(displayName);
- pm.setLore(lore);
+ if (displayName != null) {
+ pm.setDisplayName(displayName);
+ }
+ if (lore != null) {
+ pm.setLore(lore);
+ } else {
+ pm.setLore(Collections.emptyList());
+ }
item.setItemMeta(pm);
}
return item;
From accf9532b165ce7cf0d79d03ca1e09eb1f5c276b Mon Sep 17 00:00:00 2001
From: Jake Hoolz <84546680+JakeHoolz@users.noreply.github.com>
Date: Sat, 30 Aug 2025 21:24:36 -0500
Subject: [PATCH 32/43] Implement hashCode in Killer
---
src/com/backtobedrock/augmentedhardcore/domain/Killer.java | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/src/com/backtobedrock/augmentedhardcore/domain/Killer.java b/src/com/backtobedrock/augmentedhardcore/domain/Killer.java
index 57986c5..d188d38 100644
--- a/src/com/backtobedrock/augmentedhardcore/domain/Killer.java
+++ b/src/com/backtobedrock/augmentedhardcore/domain/Killer.java
@@ -6,6 +6,7 @@
import java.util.HashMap;
import java.util.Map;
+import java.util.Objects;
public class Killer {
private final String name;
@@ -72,4 +73,9 @@ public boolean equals(Object o) {
Killer killer = (Killer) o;
return getName().equals(killer.getName()) && getType().equals(killer.getType());
}
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(this.name, this.type);
+ }
}
From 6bb5903aa128617b132d0fdb6e9c5e1cf903c2b6 Mon Sep 17 00:00:00 2001
From: Jake Hoolz <84546680+JakeHoolz@users.noreply.github.com>
Date: Sat, 30 Aug 2025 21:25:14 -0500
Subject: [PATCH 33/43] feat: protect ban map from external modification
---
.../augmentedhardcore/domain/data/BanManager.java | 7 ++++++-
.../augmentedhardcore/domain/data/PlayerData.java | 2 +-
2 files changed, 7 insertions(+), 2 deletions(-)
diff --git a/src/com/backtobedrock/augmentedhardcore/domain/data/BanManager.java b/src/com/backtobedrock/augmentedhardcore/domain/data/BanManager.java
index 0e7268c..933e023 100644
--- a/src/com/backtobedrock/augmentedhardcore/domain/data/BanManager.java
+++ b/src/com/backtobedrock/augmentedhardcore/domain/data/BanManager.java
@@ -3,6 +3,7 @@
import com.backtobedrock.augmentedhardcore.domain.Ban;
import org.javatuples.Pair;
+import java.util.Collections;
import java.util.Map;
import java.util.NavigableMap;
import java.util.TreeMap;
@@ -23,7 +24,7 @@ public BanManager(NavigableMap existing) {
}
public NavigableMap getBans() {
- return bans;
+ return Collections.unmodifiableNavigableMap(this.bans);
}
public int getBanCount() {
@@ -36,6 +37,10 @@ public Pair addBan(Ban ban) {
return new Pair<>(key, ban);
}
+ public void clearBans() {
+ this.bans.clear();
+ }
+
public Ban getLastDeathBan() {
Map.Entry entry = bans.lastEntry();
return entry == null ? null : entry.getValue();
diff --git a/src/com/backtobedrock/augmentedhardcore/domain/data/PlayerData.java b/src/com/backtobedrock/augmentedhardcore/domain/data/PlayerData.java
index 9ba507a..5a0c652 100644
--- a/src/com/backtobedrock/augmentedhardcore/domain/data/PlayerData.java
+++ b/src/com/backtobedrock/augmentedhardcore/domain/data/PlayerData.java
@@ -817,7 +817,7 @@ public void reset() {
this.setTimeTillNextRevive(this.plugin.getConfigurations().getReviveConfiguration().isReviveOnFirstJoin() ? 0L : this.plugin.getConfigurations().getReviveConfiguration().getTimeBetweenRevives());
this.setTimeTillNextLifePart(this.plugin.getConfigurations().getLivesAndLifePartsConfiguration().getPlaytimePerLifePart());
this.setTimeTillNextMaxHealth(this.plugin.getConfigurations().getMaxHealthConfiguration().getPlaytimePerHalfHeart());
- this.banManager.getBans().clear();
+ this.banManager.clearBans();
this.plugin.getServerRepository().getServerData(this.plugin.getServer()).thenAcceptAsync(serverData -> serverData.getBan(this.player.getUniqueId()).finish());
this.plugin.getPlayerRepository().deletePlayerData(this.player);
this.plugin.getPlayerRepository().updatePlayerData(this);
From 8729d73d58685181a3aa5b96cb2afae85ffcf7c9 Mon Sep 17 00:00:00 2001
From: Jake Hoolz <84546680+JakeHoolz@users.noreply.github.com>
Date: Sat, 30 Aug 2025 21:33:00 -0500
Subject: [PATCH 34/43] Return OptionalInt from number parser
---
.../commands/CommandAugmentedHardcore.java | 34 ++++++++++++-------
.../utilities/CommandUtils.java | 9 ++---
2 files changed, 27 insertions(+), 16 deletions(-)
diff --git a/src/com/backtobedrock/augmentedhardcore/commands/CommandAugmentedHardcore.java b/src/com/backtobedrock/augmentedhardcore/commands/CommandAugmentedHardcore.java
index 7e09a71..e0218bd 100644
--- a/src/com/backtobedrock/augmentedhardcore/commands/CommandAugmentedHardcore.java
+++ b/src/com/backtobedrock/augmentedhardcore/commands/CommandAugmentedHardcore.java
@@ -11,6 +11,7 @@
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
+import java.util.OptionalInt;
public class CommandAugmentedHardcore extends AbstractCommand {
public CommandAugmentedHardcore(CommandSender cs, String[] args) {
@@ -38,12 +39,16 @@ public void run() {
if (!this.hasCorrectAmountOfArguments(command))
return;
+ OptionalInt amountOptional;
+ int amount;
+
switch (command) {
case ADDLIVES:
- int amount = CommandUtils.getPositiveNumberFromString(this.cs, this.args[2]);
- if (amount == -1) {
+ amountOptional = CommandUtils.getPositiveNumberFromString(this.cs, this.args[2]);
+ if (amountOptional.isEmpty()) {
return;
}
+ amount = amountOptional.getAsInt();
this.hasPlayedBefore(this.args[1]).thenAcceptAsync(bool -> {
if (!bool) {
@@ -74,10 +79,11 @@ public void run() {
});
break;
case ADDLIFEPARTS:
- amount = CommandUtils.getPositiveNumberFromString(this.cs, this.args[2]);
- if (amount == -1) {
+ amountOptional = CommandUtils.getPositiveNumberFromString(this.cs, this.args[2]);
+ if (amountOptional.isEmpty()) {
return;
}
+ amount = amountOptional.getAsInt();
this.hasPlayedBefore(this.args[1]).thenAcceptAsync(bool -> {
if (!bool) {
@@ -108,10 +114,11 @@ public void run() {
});
break;
case SETLIVES:
- amount = CommandUtils.getPositiveNumberFromString(this.cs, this.args[2]);
- if (amount == -1) {
+ amountOptional = CommandUtils.getPositiveNumberFromString(this.cs, this.args[2]);
+ if (amountOptional.isEmpty()) {
return;
}
+ amount = amountOptional.getAsInt();
this.hasPlayedBefore(this.args[1]).thenAcceptAsync(bool -> {
if (!bool) {
@@ -142,10 +149,11 @@ public void run() {
});
break;
case SETLIFEPARTS:
- amount = CommandUtils.getPositiveNumberFromString(this.cs, this.args[2]);
- if (amount == -1) {
+ amountOptional = CommandUtils.getPositiveNumberFromString(this.cs, this.args[2]);
+ if (amountOptional.isEmpty()) {
return;
}
+ amount = amountOptional.getAsInt();
this.hasPlayedBefore(this.args[1]).thenAcceptAsync(bool -> {
if (!bool) {
@@ -176,10 +184,11 @@ public void run() {
});
break;
case ADDMAXHEALTH:
- amount = CommandUtils.getPositiveNumberFromString(this.cs, this.args[2]);
- if (amount == -1) {
+ amountOptional = CommandUtils.getPositiveNumberFromString(this.cs, this.args[2]);
+ if (amountOptional.isEmpty()) {
return;
}
+ amount = amountOptional.getAsInt();
this.hasPlayedBefore(this.args[1]).thenAcceptAsync(bool -> {
if (!bool) {
@@ -208,10 +217,11 @@ public void run() {
});
break;
case SETMAXHEALTH:
- amount = CommandUtils.getPositiveNumberFromString(this.cs, this.args[2]);
- if (amount == -1) {
+ amountOptional = CommandUtils.getPositiveNumberFromString(this.cs, this.args[2]);
+ if (amountOptional.isEmpty()) {
return;
}
+ amount = amountOptional.getAsInt();
this.hasPlayedBefore(this.args[1]).thenAcceptAsync(bool -> {
if (!bool) {
diff --git a/src/com/backtobedrock/augmentedhardcore/utilities/CommandUtils.java b/src/com/backtobedrock/augmentedhardcore/utilities/CommandUtils.java
index 180571b..71388d3 100644
--- a/src/com/backtobedrock/augmentedhardcore/utilities/CommandUtils.java
+++ b/src/com/backtobedrock/augmentedhardcore/utilities/CommandUtils.java
@@ -2,6 +2,7 @@
import com.backtobedrock.augmentedhardcore.domain.enums.Command;
import org.bukkit.command.CommandSender;
+import java.util.OptionalInt;
public class CommandUtils {
public static Command getCommand(String command) {
@@ -12,17 +13,17 @@ public static Command getCommand(String command) {
}
}
- public static int getPositiveNumberFromString(CommandSender sender, String number) {
+ public static OptionalInt getPositiveNumberFromString(CommandSender sender, String number) {
try {
int convertedNumber = Integer.parseInt(number);
if (convertedNumber < 1) {
sender.sendMessage(String.format("§c%s is not a valid number between 1 and %d.", number, Integer.MAX_VALUE));
- return -1;
+ return OptionalInt.empty();
}
- return convertedNumber;
+ return OptionalInt.of(convertedNumber);
} catch (NumberFormatException e) {
sender.sendMessage(String.format("§c%s is not a valid number between 1 and %d.", number, Integer.MAX_VALUE));
- return -1;
+ return OptionalInt.empty();
}
}
}
From 80b0baba3160aee902d470b953c8f0fc7f31d998 Mon Sep 17 00:00:00 2001
From: Jake Hoolz <84546680+JakeHoolz@users.noreply.github.com>
Date: Sat, 30 Aug 2025 21:34:01 -0500
Subject: [PATCH 35/43] Specify executor for async tasks
---
.../eventListeners/ListenerPlayerDeath.java | 10 +++++---
.../eventListeners/ListenerPlayerJoin.java | 10 +++++---
.../augmentedhardcore/guis/GuiRevive.java | 18 +++++++------
.../runnables/Playtime/AbstractPlaytime.java | 25 ++++++++++---------
.../augmentedhardcore/runnables/Unban.java | 3 ++-
5 files changed, 37 insertions(+), 29 deletions(-)
diff --git a/src/com/backtobedrock/augmentedhardcore/eventListeners/ListenerPlayerDeath.java b/src/com/backtobedrock/augmentedhardcore/eventListeners/ListenerPlayerDeath.java
index 5ca68a9..83bdf2f 100644
--- a/src/com/backtobedrock/augmentedhardcore/eventListeners/ListenerPlayerDeath.java
+++ b/src/com/backtobedrock/augmentedhardcore/eventListeners/ListenerPlayerDeath.java
@@ -13,10 +13,12 @@ public class ListenerPlayerDeath extends AbstractEventListener {
public void PlayerDeathListener(PlayerDeathEvent event) {
Player player = event.getEntity();
- this.plugin.getPlayerRepository().getByPlayer(player).thenAcceptAsync(playerData -> playerData.onDeath(event, player)).exceptionally(ex -> {
- this.plugin.getLogger().log(Level.SEVERE, "Error handling player death.", ex);
- return null;
- });
+ this.plugin.getPlayerRepository().getByPlayer(player)
+ .thenAcceptAsync(playerData -> playerData.onDeath(event, player), this.plugin.getExecutor())
+ .exceptionallyAsync(ex -> {
+ this.plugin.getLogger().log(Level.SEVERE, "Error handling player death.", ex);
+ return null;
+ }, this.plugin.getExecutor());
}
@Override
diff --git a/src/com/backtobedrock/augmentedhardcore/eventListeners/ListenerPlayerJoin.java b/src/com/backtobedrock/augmentedhardcore/eventListeners/ListenerPlayerJoin.java
index b05ab2c..eb24eac 100644
--- a/src/com/backtobedrock/augmentedhardcore/eventListeners/ListenerPlayerJoin.java
+++ b/src/com/backtobedrock/augmentedhardcore/eventListeners/ListenerPlayerJoin.java
@@ -14,10 +14,12 @@ public class ListenerPlayerJoin extends AbstractEventListener {
public void onPlayerJoin(PlayerJoinEvent event) {
Player player = event.getPlayer();
- this.plugin.getPlayerRepository().getByPlayer(player).thenAcceptAsync(e -> e.onJoin(player)).exceptionally(ex -> {
- this.plugin.getLogger().log(Level.SEVERE, "Error handling player join.", ex);
- return null;
- });
+ this.plugin.getPlayerRepository().getByPlayer(player)
+ .thenAcceptAsync(e -> e.onJoin(player), this.plugin.getExecutor())
+ .exceptionallyAsync(ex -> {
+ this.plugin.getLogger().log(Level.SEVERE, "Error handling player join.", ex);
+ return null;
+ }, this.plugin.getExecutor());
if (player.isOp() && this.plugin.getUpdateChecker().isOutdated()) {
Bukkit.getScheduler().runTaskLaterAsynchronously(this.plugin, () -> player.sendMessage(String.format("§eA new version (§f%s§e) of §f%s§e is available on Spigot.org. Your current version is §f%s§e.", this.plugin.getUpdateChecker().getNewestVersion(), this.plugin.getDescription().getName(), this.plugin.getDescription().getVersion())), 5L);
diff --git a/src/com/backtobedrock/augmentedhardcore/guis/GuiRevive.java b/src/com/backtobedrock/augmentedhardcore/guis/GuiRevive.java
index b4c8f1b..ef27dcc 100644
--- a/src/com/backtobedrock/augmentedhardcore/guis/GuiRevive.java
+++ b/src/com/backtobedrock/augmentedhardcore/guis/GuiRevive.java
@@ -19,14 +19,16 @@ public GuiRevive(PlayerData reviverData, OfflinePlayer reviving) {
super(String.format("Reviving %s", reviving.getName()));
this.reviverData = reviverData;
this.reviving = reviving;
- this.plugin.getPlayerRepository().getByPlayer(this.reviving).thenAcceptAsync(playerData -> {
- this.revivingData = playerData;
- this.updateInfo(true);
- this.updateConfirmation(true);
- }).exceptionally(ex -> {
- this.plugin.getLogger().log(Level.SEVERE, "Error loading revive GUI.", ex);
- return null;
- });
+ this.plugin.getPlayerRepository().getByPlayer(this.reviving)
+ .thenAcceptAsync(playerData -> {
+ this.revivingData = playerData;
+ this.updateInfo(true);
+ this.updateConfirmation(true);
+ }, this.plugin.getExecutor())
+ .exceptionallyAsync(ex -> {
+ this.plugin.getLogger().log(Level.SEVERE, "Error loading revive GUI.", ex);
+ return null;
+ }, this.plugin.getExecutor());
this.initialize();
}
diff --git a/src/com/backtobedrock/augmentedhardcore/runnables/Playtime/AbstractPlaytime.java b/src/com/backtobedrock/augmentedhardcore/runnables/Playtime/AbstractPlaytime.java
index 4796f5f..d3fcc50 100644
--- a/src/com/backtobedrock/augmentedhardcore/runnables/Playtime/AbstractPlaytime.java
+++ b/src/com/backtobedrock/augmentedhardcore/runnables/Playtime/AbstractPlaytime.java
@@ -32,18 +32,19 @@ public void stop() {
@Override
public void run() {
- this.plugin.getServerRepository().getServerData(this.plugin.getServer()).thenAcceptAsync(serverData -> {
- if (serverData.isDeathBanned(this.player.getUniqueId())) {
- return;
- }
-
- this.timerTask();
- this.timer++;
- if (this.timer == 300) {
- this.plugin.getPlayerRepository().updatePlayerData(this.playerData);
- this.timer = 0;
- }
- });
+ this.plugin.getServerRepository().getServerData(this.plugin.getServer())
+ .thenAcceptAsync(serverData -> {
+ if (serverData.isDeathBanned(this.player.getUniqueId())) {
+ return;
+ }
+
+ this.timerTask();
+ this.timer++;
+ if (this.timer == 300) {
+ this.plugin.getPlayerRepository().updatePlayerData(this.playerData);
+ this.timer = 0;
+ }
+ }, this.plugin.getExecutor());
}
protected abstract void timerTask();
diff --git a/src/com/backtobedrock/augmentedhardcore/runnables/Unban.java b/src/com/backtobedrock/augmentedhardcore/runnables/Unban.java
index 5c38b37..af34d9f 100644
--- a/src/com/backtobedrock/augmentedhardcore/runnables/Unban.java
+++ b/src/com/backtobedrock/augmentedhardcore/runnables/Unban.java
@@ -37,7 +37,8 @@ private void stop() {
public void finish() {
this.stop();
- this.plugin.getServerRepository().getServerData(this.plugin.getServer()).thenAcceptAsync(serverData -> serverData.removeBan(this.player));
+ this.plugin.getServerRepository().getServerData(this.plugin.getServer())
+ .thenAcceptAsync(serverData -> serverData.removeBan(this.player), this.plugin.getExecutor());
}
@Override
From cd494fd6023d90fccf8cf732f5cb49433f87baae Mon Sep 17 00:00:00 2001
From: Jake Hoolz <84546680+JakeHoolz@users.noreply.github.com>
Date: Sat, 30 Aug 2025 21:34:50 -0500
Subject: [PATCH 36/43] Refactor GUI constructors to use plugin instance
---
.../augmentedhardcore/commands/CommandDeathBans.java | 2 +-
.../augmentedhardcore/commands/CommandMyStats.java | 2 +-
.../augmentedhardcore/commands/CommandRevive.java | 2 +-
.../commands/CommandServerDeathBans.java | 2 +-
.../augmentedhardcore/guis/AbstractConfirmationGui.java | 7 ++++---
.../augmentedhardcore/guis/AbstractDeathBansGui.java | 5 +++--
.../augmentedhardcore/guis/AbstractGui.java | 5 ++---
.../augmentedhardcore/guis/AbstractPaginatedGui.java | 9 +++++----
.../augmentedhardcore/guis/CustomHolder.java | 5 -----
.../backtobedrock/augmentedhardcore/guis/GuiMyStats.java | 9 +++++----
.../augmentedhardcore/guis/GuiPlayerDeathBans.java | 5 +++--
.../backtobedrock/augmentedhardcore/guis/GuiRevive.java | 7 ++++---
.../augmentedhardcore/guis/GuiServerDeathBans.java | 7 ++++---
.../augmentedhardcore/guis/GuiUnDeathBan.java | 7 ++++---
.../guis/clickActions/AbstractClickAction.java | 5 ++---
.../guis/clickActions/ClickActionCloseInventory.java | 5 +++++
.../guis/clickActions/ClickActionConfirmRevive.java | 4 +++-
.../guis/clickActions/ClickActionConfirmUnDeathBan.java | 4 +++-
.../guis/clickActions/ClickActionNextPage.java | 4 +++-
.../guis/clickActions/ClickActionOpenBansGui.java | 6 ++++--
.../ClickActionOpenPlayerSelectionAnvilGui.java | 5 +++++
.../guis/clickActions/ClickActionOpenUnDeathBanGui.java | 6 ++++--
.../guis/clickActions/ClickActionPreviousPage.java | 4 +++-
23 files changed, 70 insertions(+), 47 deletions(-)
diff --git a/src/com/backtobedrock/augmentedhardcore/commands/CommandDeathBans.java b/src/com/backtobedrock/augmentedhardcore/commands/CommandDeathBans.java
index 5497eae..2c90e9e 100644
--- a/src/com/backtobedrock/augmentedhardcore/commands/CommandDeathBans.java
+++ b/src/com/backtobedrock/augmentedhardcore/commands/CommandDeathBans.java
@@ -48,7 +48,7 @@ public void run() {
}
private void runCommand(OfflinePlayer player) {
- this.plugin.getPlayerRepository().getByPlayer(player).thenAcceptAsync(playerData -> PlayerUtils.openInventory(this.sender, new GuiPlayerDeathBans(playerData)), this.plugin.getExecutor()).exceptionally(ex -> {
+ this.plugin.getPlayerRepository().getByPlayer(player).thenAcceptAsync(playerData -> PlayerUtils.openInventory(this.sender, new GuiPlayerDeathBans(this.plugin, playerData)), this.plugin.getExecutor()).exceptionally(ex -> {
this.plugin.getLogger().log(Level.SEVERE, "Error executing death bans command.", ex);
return null;
});
diff --git a/src/com/backtobedrock/augmentedhardcore/commands/CommandMyStats.java b/src/com/backtobedrock/augmentedhardcore/commands/CommandMyStats.java
index c477625..1baf72f 100644
--- a/src/com/backtobedrock/augmentedhardcore/commands/CommandMyStats.java
+++ b/src/com/backtobedrock/augmentedhardcore/commands/CommandMyStats.java
@@ -48,7 +48,7 @@ public void run() {
}
private void runCommand(OfflinePlayer player) {
- this.plugin.getPlayerRepository().getByPlayer(player).thenAcceptAsync(playerData -> PlayerUtils.openInventory(this.sender, new GuiMyStats(this.sender, playerData)), this.plugin.getExecutor()).exceptionally(ex -> {
+ this.plugin.getPlayerRepository().getByPlayer(player).thenAcceptAsync(playerData -> PlayerUtils.openInventory(this.sender, new GuiMyStats(this.plugin, this.sender, playerData)), this.plugin.getExecutor()).exceptionally(ex -> {
this.plugin.getLogger().log(Level.SEVERE, "Error executing my stats command.", ex);
return null;
});
diff --git a/src/com/backtobedrock/augmentedhardcore/commands/CommandRevive.java b/src/com/backtobedrock/augmentedhardcore/commands/CommandRevive.java
index 813804f..5c8db56 100644
--- a/src/com/backtobedrock/augmentedhardcore/commands/CommandRevive.java
+++ b/src/com/backtobedrock/augmentedhardcore/commands/CommandRevive.java
@@ -38,7 +38,7 @@ public void run() {
return;
}
- AbstractGui gui = new GuiRevive(playerData, this.target);
+ AbstractGui gui = new GuiRevive(this.plugin, playerData, this.target);
PlayerUtils.openInventory(this.sender, gui);
}, this.plugin.getExecutor()).exceptionally(ex -> {
this.plugin.getLogger().log(Level.SEVERE, "Error executing revive command.", ex);
diff --git a/src/com/backtobedrock/augmentedhardcore/commands/CommandServerDeathBans.java b/src/com/backtobedrock/augmentedhardcore/commands/CommandServerDeathBans.java
index e6d05ce..ddbae46 100644
--- a/src/com/backtobedrock/augmentedhardcore/commands/CommandServerDeathBans.java
+++ b/src/com/backtobedrock/augmentedhardcore/commands/CommandServerDeathBans.java
@@ -28,7 +28,7 @@ public void run() {
}
- this.plugin.getServerRepository().getServerData(this.plugin.getServer()).thenAcceptAsync(serverData -> PlayerUtils.openInventory(this.sender, new GuiServerDeathBans(this.sender, serverData)), this.plugin.getExecutor()).exceptionally(ex -> {
+ this.plugin.getServerRepository().getServerData(this.plugin.getServer()).thenAcceptAsync(serverData -> PlayerUtils.openInventory(this.sender, new GuiServerDeathBans(this.plugin, this.sender, serverData)), this.plugin.getExecutor()).exceptionally(ex -> {
this.plugin.getLogger().log(Level.SEVERE, "Error executing server death bans command.", ex);
return null;
});
diff --git a/src/com/backtobedrock/augmentedhardcore/guis/AbstractConfirmationGui.java b/src/com/backtobedrock/augmentedhardcore/guis/AbstractConfirmationGui.java
index 18692ea..1415a21 100644
--- a/src/com/backtobedrock/augmentedhardcore/guis/AbstractConfirmationGui.java
+++ b/src/com/backtobedrock/augmentedhardcore/guis/AbstractConfirmationGui.java
@@ -1,5 +1,6 @@
package com.backtobedrock.augmentedhardcore.guis;
+import com.backtobedrock.augmentedhardcore.AugmentedHardcore;
import com.backtobedrock.augmentedhardcore.guis.clickActions.AbstractClickAction;
import com.backtobedrock.augmentedhardcore.guis.clickActions.ClickActionCloseInventory;
@@ -9,8 +10,8 @@
public abstract class AbstractConfirmationGui extends AbstractGui {
- public AbstractConfirmationGui(String title) {
- super(new CustomHolder(54, title));
+ public AbstractConfirmationGui(AugmentedHardcore plugin, String title) {
+ super(plugin, new CustomHolder(54, title));
}
@Override
@@ -26,7 +27,7 @@ public void setData() {
}
public void updateCancellation(boolean update) {
- this.setIcon(38, new Icon(this.plugin.getConfigurations().getGuisConfiguration().getCancellationDisplay().getItem(), Collections.singletonList(new ClickActionCloseInventory())), update);
+ this.setIcon(38, new Icon(this.plugin.getConfigurations().getGuisConfiguration().getCancellationDisplay().getItem(), Collections.singletonList(new ClickActionCloseInventory(this.plugin))), update);
}
public void updateInfo(Icon icon, boolean update) {
diff --git a/src/com/backtobedrock/augmentedhardcore/guis/AbstractDeathBansGui.java b/src/com/backtobedrock/augmentedhardcore/guis/AbstractDeathBansGui.java
index a7035a1..aa4d4a1 100644
--- a/src/com/backtobedrock/augmentedhardcore/guis/AbstractDeathBansGui.java
+++ b/src/com/backtobedrock/augmentedhardcore/guis/AbstractDeathBansGui.java
@@ -1,5 +1,6 @@
package com.backtobedrock.augmentedhardcore.guis;
+import com.backtobedrock.augmentedhardcore.AugmentedHardcore;
import com.backtobedrock.augmentedhardcore.domain.Ban;
import org.bukkit.OfflinePlayer;
import org.javatuples.Pair;
@@ -11,8 +12,8 @@
public abstract class AbstractDeathBansGui extends AbstractPaginatedGui {
protected final Map, Ban> bans = new LinkedHashMap<>();
- public AbstractDeathBansGui(String title, int dataSize) {
- super(new CustomHolder(dataSize, title), dataSize);
+ public AbstractDeathBansGui(AugmentedHardcore plugin, String title, int dataSize) {
+ super(plugin, new CustomHolder(dataSize, title), dataSize);
}
@Override
diff --git a/src/com/backtobedrock/augmentedhardcore/guis/AbstractGui.java b/src/com/backtobedrock/augmentedhardcore/guis/AbstractGui.java
index 27948fa..7fd7205 100644
--- a/src/com/backtobedrock/augmentedhardcore/guis/AbstractGui.java
+++ b/src/com/backtobedrock/augmentedhardcore/guis/AbstractGui.java
@@ -2,7 +2,6 @@
import com.backtobedrock.augmentedhardcore.AugmentedHardcore;
import org.bukkit.inventory.Inventory;
-import org.bukkit.plugin.java.JavaPlugin;
import java.util.Collections;
import java.util.List;
@@ -11,8 +10,8 @@ public abstract class AbstractGui {
protected final AugmentedHardcore plugin;
protected final CustomHolder customHolder;
- public AbstractGui(CustomHolder customHolder) {
- this.plugin = JavaPlugin.getPlugin(AugmentedHardcore.class);
+ public AbstractGui(AugmentedHardcore plugin, CustomHolder customHolder) {
+ this.plugin = plugin;
this.customHolder = customHolder;
}
diff --git a/src/com/backtobedrock/augmentedhardcore/guis/AbstractPaginatedGui.java b/src/com/backtobedrock/augmentedhardcore/guis/AbstractPaginatedGui.java
index a6babef..80990b9 100644
--- a/src/com/backtobedrock/augmentedhardcore/guis/AbstractPaginatedGui.java
+++ b/src/com/backtobedrock/augmentedhardcore/guis/AbstractPaginatedGui.java
@@ -1,5 +1,6 @@
package com.backtobedrock.augmentedhardcore.guis;
+import com.backtobedrock.augmentedhardcore.AugmentedHardcore;
import com.backtobedrock.augmentedhardcore.guis.clickActions.ClickActionNextPage;
import com.backtobedrock.augmentedhardcore.guis.clickActions.ClickActionPreviousPage;
import com.backtobedrock.augmentedhardcore.utilities.MessageUtils;
@@ -12,8 +13,8 @@ public abstract class AbstractPaginatedGui extends AbstractGui {
protected int currentPage = 1;
protected int totalPages;
- public AbstractPaginatedGui(CustomHolder customHolder, int dataCount) {
- super(customHolder);
+ public AbstractPaginatedGui(AugmentedHardcore plugin, CustomHolder customHolder, int dataCount) {
+ super(plugin, customHolder);
this.totalPages = (int) Math.ceil((double) dataCount / 28);
}
@@ -28,7 +29,7 @@ public void initialize() {
protected void setData() {
//Previous page button
if (this.totalPages > 1 && this.currentPage > 1) {
- this.customHolder.setIcon((this.customHolder.getRowAmount() - 1) * 9 + 3, new Icon(this.previousPageDisplayItem(), Collections.singletonList(new ClickActionPreviousPage(this))));
+ this.customHolder.setIcon((this.customHolder.getRowAmount() - 1) * 9 + 3, new Icon(this.previousPageDisplayItem(), Collections.singletonList(new ClickActionPreviousPage(this.plugin, this))));
}
//Current page
@@ -36,7 +37,7 @@ protected void setData() {
//Next page button
if (this.totalPages > 1 && this.currentPage < this.totalPages) {
- this.customHolder.setIcon((this.customHolder.getRowAmount() - 1) * 9 + 5, new Icon(this.nextPageDisplayItem(), Collections.singletonList(new ClickActionNextPage(this))));
+ this.customHolder.setIcon((this.customHolder.getRowAmount() - 1) * 9 + 5, new Icon(this.nextPageDisplayItem(), Collections.singletonList(new ClickActionNextPage(this.plugin, this))));
}
}
diff --git a/src/com/backtobedrock/augmentedhardcore/guis/CustomHolder.java b/src/com/backtobedrock/augmentedhardcore/guis/CustomHolder.java
index 50e5d75..a47cc6a 100644
--- a/src/com/backtobedrock/augmentedhardcore/guis/CustomHolder.java
+++ b/src/com/backtobedrock/augmentedhardcore/guis/CustomHolder.java
@@ -1,20 +1,16 @@
package com.backtobedrock.augmentedhardcore.guis;
-import com.backtobedrock.augmentedhardcore.AugmentedHardcore;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.InventoryHolder;
import org.bukkit.inventory.ItemStack;
-import org.bukkit.plugin.java.JavaPlugin;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class CustomHolder implements InventoryHolder {
- private final AugmentedHardcore plugin;
-
private final String title;
private final int size;
private final int rowAmount;
@@ -23,7 +19,6 @@ public class CustomHolder implements InventoryHolder {
private Inventory inventory = null;
public CustomHolder(int size, String title) {
- this.plugin = JavaPlugin.getPlugin(AugmentedHardcore.class);
size = Math.max(1, size);
this.title = title;
this.size = Math.min((int) (Math.ceil((double) size / 7) * 9) + 18, 54);
diff --git a/src/com/backtobedrock/augmentedhardcore/guis/GuiMyStats.java b/src/com/backtobedrock/augmentedhardcore/guis/GuiMyStats.java
index b03ae78..a0737bb 100644
--- a/src/com/backtobedrock/augmentedhardcore/guis/GuiMyStats.java
+++ b/src/com/backtobedrock/augmentedhardcore/guis/GuiMyStats.java
@@ -1,5 +1,6 @@
package com.backtobedrock.augmentedhardcore.guis;
+import com.backtobedrock.augmentedhardcore.AugmentedHardcore;
import com.backtobedrock.augmentedhardcore.domain.data.PlayerData;
import com.backtobedrock.augmentedhardcore.domain.enums.Permission;
import com.backtobedrock.augmentedhardcore.domain.enums.TimePattern;
@@ -20,8 +21,8 @@ public class GuiMyStats extends AbstractGui {
private final Player sender;
private final boolean isOther;
- public GuiMyStats(Player sender, PlayerData playerData) {
- super(new CustomHolder(54, String.format("%s Information", playerData.getPlayer().getName())));
+ public GuiMyStats(AugmentedHardcore plugin, Player sender, PlayerData playerData) {
+ super(plugin, new CustomHolder(54, String.format("%s Information", playerData.getPlayer().getName())));
this.playerData = playerData;
this.sender = sender;
this.isOther = !sender.getUniqueId().toString().equals(this.playerData.getPlayer().getUniqueId().toString());
@@ -97,7 +98,7 @@ public void updateRevive(boolean update) {
);
icon = new Icon(MessageUtils.replaceItemNameAndLorePlaceholders(this.plugin.getConfigurations().getGuisConfiguration().getReviveOnCooldownDisplay().getItem(), placeholders), Collections.emptyList());
} else {
- icon = new Icon(this.plugin.getConfigurations().getGuisConfiguration().getReviveDisplay().getItem(), Collections.singletonList(new ClickActionOpenPlayerSelectionAnvilGui()));
+ icon = new Icon(this.plugin.getConfigurations().getGuisConfiguration().getReviveDisplay().getItem(), Collections.singletonList(new ClickActionOpenPlayerSelectionAnvilGui(this.plugin)));
}
this.setIcon(22, icon, update);
@@ -132,7 +133,7 @@ public void updateBansInformation(boolean update) {
Map placeholders = Map.of(
"total_death_bans", Integer.toString(playerData.getBanCount())
);
- icon = new Icon(MessageUtils.replaceItemNameAndLorePlaceholders(this.plugin.getConfigurations().getGuisConfiguration().getPreviousBansDisplay().getItem(), placeholders), Collections.singletonList(new ClickActionOpenBansGui(this.playerData)));
+ icon = new Icon(MessageUtils.replaceItemNameAndLorePlaceholders(this.plugin.getConfigurations().getGuisConfiguration().getPreviousBansDisplay().getItem(), placeholders), Collections.singletonList(new ClickActionOpenBansGui(this.plugin, this.playerData)));
}
this.setIcon(31, icon, update);
diff --git a/src/com/backtobedrock/augmentedhardcore/guis/GuiPlayerDeathBans.java b/src/com/backtobedrock/augmentedhardcore/guis/GuiPlayerDeathBans.java
index 7082cc0..5814191 100644
--- a/src/com/backtobedrock/augmentedhardcore/guis/GuiPlayerDeathBans.java
+++ b/src/com/backtobedrock/augmentedhardcore/guis/GuiPlayerDeathBans.java
@@ -1,5 +1,6 @@
package com.backtobedrock.augmentedhardcore.guis;
+import com.backtobedrock.augmentedhardcore.AugmentedHardcore;
import com.backtobedrock.augmentedhardcore.domain.Ban;
import com.backtobedrock.augmentedhardcore.domain.data.PlayerData;
import com.backtobedrock.augmentedhardcore.domain.enums.TimePattern;
@@ -19,8 +20,8 @@
public class GuiPlayerDeathBans extends AbstractDeathBansGui {
private final PlayerData playerData;
- public GuiPlayerDeathBans(PlayerData playerData) {
- super(String.format("%s Death Bans", playerData.getPlayer().getName()), playerData.getBanManager().getBanCount());
+ public GuiPlayerDeathBans(AugmentedHardcore plugin, PlayerData playerData) {
+ super(plugin, String.format("%s Death Bans", playerData.getPlayer().getName()), playerData.getBanManager().getBanCount());
playerData.getBanManager().getBans().forEach((key, value) -> this.bans.put(new Pair<>(playerData.getPlayer(), key), value));
this.playerData = playerData;
this.initialize();
diff --git a/src/com/backtobedrock/augmentedhardcore/guis/GuiRevive.java b/src/com/backtobedrock/augmentedhardcore/guis/GuiRevive.java
index b4c8f1b..e07a680 100644
--- a/src/com/backtobedrock/augmentedhardcore/guis/GuiRevive.java
+++ b/src/com/backtobedrock/augmentedhardcore/guis/GuiRevive.java
@@ -1,5 +1,6 @@
package com.backtobedrock.augmentedhardcore.guis;
+import com.backtobedrock.augmentedhardcore.AugmentedHardcore;
import com.backtobedrock.augmentedhardcore.domain.data.PlayerData;
import com.backtobedrock.augmentedhardcore.guis.clickActions.ClickActionConfirmRevive;
import com.backtobedrock.augmentedhardcore.utilities.InventoryUtils;
@@ -15,8 +16,8 @@ public class GuiRevive extends AbstractConfirmationGui {
private final OfflinePlayer reviving;
private PlayerData revivingData;
- public GuiRevive(PlayerData reviverData, OfflinePlayer reviving) {
- super(String.format("Reviving %s", reviving.getName()));
+ public GuiRevive(AugmentedHardcore plugin, PlayerData reviverData, OfflinePlayer reviving) {
+ super(plugin, String.format("Reviving %s", reviving.getName()));
this.reviverData = reviverData;
this.reviving = reviving;
this.plugin.getPlayerRepository().getByPlayer(this.reviving).thenAcceptAsync(playerData -> {
@@ -52,6 +53,6 @@ public void updateInfo(boolean update) {
}
public void updateConfirmation(boolean update) {
- super.updateConfirmation(Collections.singletonList(new ClickActionConfirmRevive(this.reviverData, this.revivingData)), update);
+ super.updateConfirmation(Collections.singletonList(new ClickActionConfirmRevive(this.plugin, this.reviverData, this.revivingData)), update);
}
}
diff --git a/src/com/backtobedrock/augmentedhardcore/guis/GuiServerDeathBans.java b/src/com/backtobedrock/augmentedhardcore/guis/GuiServerDeathBans.java
index 076a325..aaf8a73 100644
--- a/src/com/backtobedrock/augmentedhardcore/guis/GuiServerDeathBans.java
+++ b/src/com/backtobedrock/augmentedhardcore/guis/GuiServerDeathBans.java
@@ -1,5 +1,6 @@
package com.backtobedrock.augmentedhardcore.guis;
+import com.backtobedrock.augmentedhardcore.AugmentedHardcore;
import com.backtobedrock.augmentedhardcore.domain.data.ServerData;
import com.backtobedrock.augmentedhardcore.domain.enums.Permission;
import com.backtobedrock.augmentedhardcore.guis.clickActions.AbstractClickAction;
@@ -18,8 +19,8 @@ public class GuiServerDeathBans extends AbstractDeathBansGui {
private final ServerData serverData;
private final Player player;
- public GuiServerDeathBans(Player player, ServerData serverData) {
- super("Currently Ongoing Death Bans", serverData.getTotalOngoingBans());
+ public GuiServerDeathBans(AugmentedHardcore plugin, Player player, ServerData serverData) {
+ super(plugin, "Currently Ongoing Death Bans", serverData.getTotalOngoingBans());
serverData.getOngoingBans().forEach((key, value) -> this.bans.put(new Pair<>(Bukkit.getOfflinePlayer(key), value.getBan().getValue0()), value.getBan().getValue1()));
this.serverData = serverData;
this.player = player;
@@ -44,7 +45,7 @@ public Icon getIcon(OfflinePlayer player, Map placeholders) {
List clickActions = new ArrayList<>();
ItemStack item = InventoryUtils.createPlayerSkull(String.format("%s - %s", player.getName(), this.plugin.getConfigurations().getGuisConfiguration().getBanDisplay().getName()), this.plugin.getConfigurations().getGuisConfiguration().getBanDisplay().getLore(), player);
if (this.player.hasPermission(Permission.UNDEATHBAN.getPermissionString())) {
- clickActions.add(new ClickActionOpenUnDeathBanGui(player, item));
+ clickActions.add(new ClickActionOpenUnDeathBanGui(this.plugin, player, item));
}
return new Icon(MessageUtils.replaceItemNameAndLorePlaceholders(item, placeholders), clickActions);
}
diff --git a/src/com/backtobedrock/augmentedhardcore/guis/GuiUnDeathBan.java b/src/com/backtobedrock/augmentedhardcore/guis/GuiUnDeathBan.java
index c925b2a..4234727 100644
--- a/src/com/backtobedrock/augmentedhardcore/guis/GuiUnDeathBan.java
+++ b/src/com/backtobedrock/augmentedhardcore/guis/GuiUnDeathBan.java
@@ -1,5 +1,6 @@
package com.backtobedrock.augmentedhardcore.guis;
+import com.backtobedrock.augmentedhardcore.AugmentedHardcore;
import com.backtobedrock.augmentedhardcore.guis.clickActions.ClickActionConfirmUnDeathBan;
import org.bukkit.OfflinePlayer;
import org.bukkit.inventory.ItemStack;
@@ -10,8 +11,8 @@ public class GuiUnDeathBan extends AbstractConfirmationGui {
private final OfflinePlayer target;
private final ItemStack item;
- public GuiUnDeathBan(OfflinePlayer target, ItemStack item) {
- super(String.format("Undeathbanning %s", target.getName()));
+ public GuiUnDeathBan(AugmentedHardcore plugin, OfflinePlayer target, ItemStack item) {
+ super(plugin, String.format("Undeathbanning %s", target.getName()));
this.target = target;
this.item = item;
this.initialize();
@@ -29,6 +30,6 @@ public void updateInfo(boolean update) {
}
public void updateConfirmation(boolean update) {
- super.updateConfirmation(Collections.singletonList(new ClickActionConfirmUnDeathBan(this.target)), update);
+ super.updateConfirmation(Collections.singletonList(new ClickActionConfirmUnDeathBan(this.plugin, this.target)), update);
}
}
diff --git a/src/com/backtobedrock/augmentedhardcore/guis/clickActions/AbstractClickAction.java b/src/com/backtobedrock/augmentedhardcore/guis/clickActions/AbstractClickAction.java
index 820720f..a400254 100644
--- a/src/com/backtobedrock/augmentedhardcore/guis/clickActions/AbstractClickAction.java
+++ b/src/com/backtobedrock/augmentedhardcore/guis/clickActions/AbstractClickAction.java
@@ -2,14 +2,13 @@
import com.backtobedrock.augmentedhardcore.AugmentedHardcore;
import org.bukkit.entity.Player;
-import org.bukkit.plugin.java.JavaPlugin;
public abstract class AbstractClickAction {
protected final AugmentedHardcore plugin;
- public AbstractClickAction() {
- this.plugin = JavaPlugin.getPlugin(AugmentedHardcore.class);
+ public AbstractClickAction(AugmentedHardcore plugin) {
+ this.plugin = plugin;
}
public abstract void execute(Player player);
diff --git a/src/com/backtobedrock/augmentedhardcore/guis/clickActions/ClickActionCloseInventory.java b/src/com/backtobedrock/augmentedhardcore/guis/clickActions/ClickActionCloseInventory.java
index e9889ff..5487786 100644
--- a/src/com/backtobedrock/augmentedhardcore/guis/clickActions/ClickActionCloseInventory.java
+++ b/src/com/backtobedrock/augmentedhardcore/guis/clickActions/ClickActionCloseInventory.java
@@ -1,8 +1,13 @@
package com.backtobedrock.augmentedhardcore.guis.clickActions;
+import com.backtobedrock.augmentedhardcore.AugmentedHardcore;
import org.bukkit.entity.Player;
public class ClickActionCloseInventory extends AbstractClickAction {
+ public ClickActionCloseInventory(AugmentedHardcore plugin) {
+ super(plugin);
+ }
+
@Override
public void execute(Player player) {
player.closeInventory();
diff --git a/src/com/backtobedrock/augmentedhardcore/guis/clickActions/ClickActionConfirmRevive.java b/src/com/backtobedrock/augmentedhardcore/guis/clickActions/ClickActionConfirmRevive.java
index 16292b9..e7ea9cf 100644
--- a/src/com/backtobedrock/augmentedhardcore/guis/clickActions/ClickActionConfirmRevive.java
+++ b/src/com/backtobedrock/augmentedhardcore/guis/clickActions/ClickActionConfirmRevive.java
@@ -1,5 +1,6 @@
package com.backtobedrock.augmentedhardcore.guis.clickActions;
+import com.backtobedrock.augmentedhardcore.AugmentedHardcore;
import com.backtobedrock.augmentedhardcore.domain.data.PlayerData;
import org.bukkit.entity.Player;
@@ -7,7 +8,8 @@ public class ClickActionConfirmRevive extends AbstractClickAction {
private final PlayerData reviverData;
private final PlayerData revivingData;
- public ClickActionConfirmRevive(PlayerData reviverData, PlayerData revivingData) {
+ public ClickActionConfirmRevive(AugmentedHardcore plugin, PlayerData reviverData, PlayerData revivingData) {
+ super(plugin);
this.reviverData = reviverData;
this.revivingData = revivingData;
}
diff --git a/src/com/backtobedrock/augmentedhardcore/guis/clickActions/ClickActionConfirmUnDeathBan.java b/src/com/backtobedrock/augmentedhardcore/guis/clickActions/ClickActionConfirmUnDeathBan.java
index cea6222..2a70073 100644
--- a/src/com/backtobedrock/augmentedhardcore/guis/clickActions/ClickActionConfirmUnDeathBan.java
+++ b/src/com/backtobedrock/augmentedhardcore/guis/clickActions/ClickActionConfirmUnDeathBan.java
@@ -1,5 +1,6 @@
package com.backtobedrock.augmentedhardcore.guis.clickActions;
+import com.backtobedrock.augmentedhardcore.AugmentedHardcore;
import com.backtobedrock.augmentedhardcore.commands.CommandUnDeathBan;
import org.bukkit.OfflinePlayer;
import org.bukkit.entity.Player;
@@ -7,7 +8,8 @@
public class ClickActionConfirmUnDeathBan extends AbstractClickAction {
private final OfflinePlayer target;
- public ClickActionConfirmUnDeathBan(OfflinePlayer target) {
+ public ClickActionConfirmUnDeathBan(AugmentedHardcore plugin, OfflinePlayer target) {
+ super(plugin);
this.target = target;
}
diff --git a/src/com/backtobedrock/augmentedhardcore/guis/clickActions/ClickActionNextPage.java b/src/com/backtobedrock/augmentedhardcore/guis/clickActions/ClickActionNextPage.java
index b479802..808bd4b 100644
--- a/src/com/backtobedrock/augmentedhardcore/guis/clickActions/ClickActionNextPage.java
+++ b/src/com/backtobedrock/augmentedhardcore/guis/clickActions/ClickActionNextPage.java
@@ -1,5 +1,6 @@
package com.backtobedrock.augmentedhardcore.guis.clickActions;
+import com.backtobedrock.augmentedhardcore.AugmentedHardcore;
import com.backtobedrock.augmentedhardcore.guis.AbstractPaginatedGui;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
@@ -7,7 +8,8 @@
public class ClickActionNextPage extends AbstractClickAction {
private final AbstractPaginatedGui paginatedGui;
- public ClickActionNextPage(AbstractPaginatedGui paginatedGui) {
+ public ClickActionNextPage(AugmentedHardcore plugin, AbstractPaginatedGui paginatedGui) {
+ super(plugin);
this.paginatedGui = paginatedGui;
}
diff --git a/src/com/backtobedrock/augmentedhardcore/guis/clickActions/ClickActionOpenBansGui.java b/src/com/backtobedrock/augmentedhardcore/guis/clickActions/ClickActionOpenBansGui.java
index 548a68f..3e461dd 100644
--- a/src/com/backtobedrock/augmentedhardcore/guis/clickActions/ClickActionOpenBansGui.java
+++ b/src/com/backtobedrock/augmentedhardcore/guis/clickActions/ClickActionOpenBansGui.java
@@ -1,5 +1,6 @@
package com.backtobedrock.augmentedhardcore.guis.clickActions;
+import com.backtobedrock.augmentedhardcore.AugmentedHardcore;
import com.backtobedrock.augmentedhardcore.domain.data.PlayerData;
import com.backtobedrock.augmentedhardcore.guis.GuiPlayerDeathBans;
import com.backtobedrock.augmentedhardcore.utilities.PlayerUtils;
@@ -9,12 +10,13 @@ public class ClickActionOpenBansGui extends AbstractClickAction {
private final PlayerData playerData;
- public ClickActionOpenBansGui(PlayerData playerData) {
+ public ClickActionOpenBansGui(AugmentedHardcore plugin, PlayerData playerData) {
+ super(plugin);
this.playerData = playerData;
}
@Override
public void execute(Player player) {
- PlayerUtils.openInventory(player, new GuiPlayerDeathBans(this.playerData));
+ PlayerUtils.openInventory(player, new GuiPlayerDeathBans(this.plugin, this.playerData));
}
}
diff --git a/src/com/backtobedrock/augmentedhardcore/guis/clickActions/ClickActionOpenPlayerSelectionAnvilGui.java b/src/com/backtobedrock/augmentedhardcore/guis/clickActions/ClickActionOpenPlayerSelectionAnvilGui.java
index e2d0789..4dba687 100644
--- a/src/com/backtobedrock/augmentedhardcore/guis/clickActions/ClickActionOpenPlayerSelectionAnvilGui.java
+++ b/src/com/backtobedrock/augmentedhardcore/guis/clickActions/ClickActionOpenPlayerSelectionAnvilGui.java
@@ -1,5 +1,6 @@
package com.backtobedrock.augmentedhardcore.guis.clickActions;
+import com.backtobedrock.augmentedhardcore.AugmentedHardcore;
import com.backtobedrock.augmentedhardcore.commands.CommandRevive;
import net.wesjd.anvilgui.AnvilGUI;
import org.bukkit.entity.Player;
@@ -7,6 +8,10 @@
import java.util.Collections;
public class ClickActionOpenPlayerSelectionAnvilGui extends AbstractClickAction {
+ public ClickActionOpenPlayerSelectionAnvilGui(AugmentedHardcore plugin) {
+ super(plugin);
+ }
+
@Override
public void execute(Player player) {
new AnvilGUI.Builder()
diff --git a/src/com/backtobedrock/augmentedhardcore/guis/clickActions/ClickActionOpenUnDeathBanGui.java b/src/com/backtobedrock/augmentedhardcore/guis/clickActions/ClickActionOpenUnDeathBanGui.java
index 2eaaf47..8b4d526 100644
--- a/src/com/backtobedrock/augmentedhardcore/guis/clickActions/ClickActionOpenUnDeathBanGui.java
+++ b/src/com/backtobedrock/augmentedhardcore/guis/clickActions/ClickActionOpenUnDeathBanGui.java
@@ -1,5 +1,6 @@
package com.backtobedrock.augmentedhardcore.guis.clickActions;
+import com.backtobedrock.augmentedhardcore.AugmentedHardcore;
import com.backtobedrock.augmentedhardcore.guis.GuiUnDeathBan;
import com.backtobedrock.augmentedhardcore.utilities.PlayerUtils;
import org.bukkit.OfflinePlayer;
@@ -10,13 +11,14 @@ public class ClickActionOpenUnDeathBanGui extends AbstractClickAction {
private final OfflinePlayer target;
private final ItemStack item;
- public ClickActionOpenUnDeathBanGui(OfflinePlayer target, ItemStack item) {
+ public ClickActionOpenUnDeathBanGui(AugmentedHardcore plugin, OfflinePlayer target, ItemStack item) {
+ super(plugin);
this.target = target;
this.item = item;
}
@Override
public void execute(Player player) {
- PlayerUtils.openInventory(player, new GuiUnDeathBan(this.target, this.item));
+ PlayerUtils.openInventory(player, new GuiUnDeathBan(this.plugin, this.target, this.item));
}
}
diff --git a/src/com/backtobedrock/augmentedhardcore/guis/clickActions/ClickActionPreviousPage.java b/src/com/backtobedrock/augmentedhardcore/guis/clickActions/ClickActionPreviousPage.java
index f01f19a..dcae3c3 100644
--- a/src/com/backtobedrock/augmentedhardcore/guis/clickActions/ClickActionPreviousPage.java
+++ b/src/com/backtobedrock/augmentedhardcore/guis/clickActions/ClickActionPreviousPage.java
@@ -1,5 +1,6 @@
package com.backtobedrock.augmentedhardcore.guis.clickActions;
+import com.backtobedrock.augmentedhardcore.AugmentedHardcore;
import com.backtobedrock.augmentedhardcore.guis.AbstractPaginatedGui;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
@@ -7,7 +8,8 @@
public class ClickActionPreviousPage extends AbstractClickAction {
private final AbstractPaginatedGui paginatedGui;
- public ClickActionPreviousPage(AbstractPaginatedGui paginatedGui) {
+ public ClickActionPreviousPage(AugmentedHardcore plugin, AbstractPaginatedGui paginatedGui) {
+ super(plugin);
this.paginatedGui = paginatedGui;
}
From b86193ee985d6847448b260ecc29898502280813 Mon Sep 17 00:00:00 2001
From: Jake Hoolz <84546680+JakeHoolz@users.noreply.github.com>
Date: Sat, 30 Aug 2025 21:35:25 -0500
Subject: [PATCH 37/43] Cancel playtime task when player offline
---
.../runnables/Playtime/AbstractPlaytime.java | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/src/com/backtobedrock/augmentedhardcore/runnables/Playtime/AbstractPlaytime.java b/src/com/backtobedrock/augmentedhardcore/runnables/Playtime/AbstractPlaytime.java
index 4796f5f..ed1bf17 100644
--- a/src/com/backtobedrock/augmentedhardcore/runnables/Playtime/AbstractPlaytime.java
+++ b/src/com/backtobedrock/augmentedhardcore/runnables/Playtime/AbstractPlaytime.java
@@ -32,6 +32,11 @@ public void stop() {
@Override
public void run() {
+ if (!this.player.isOnline()) {
+ this.cancel();
+ return;
+ }
+
this.plugin.getServerRepository().getServerData(this.plugin.getServer()).thenAcceptAsync(serverData -> {
if (serverData.isDeathBanned(this.player.getUniqueId())) {
return;
From 7530aefab0129923304cd2abec874b099bcae3ee Mon Sep 17 00:00:00 2001
From: Jake Hoolz <84546680+JakeHoolz@users.noreply.github.com>
Date: Sat, 30 Aug 2025 21:58:06 -0500
Subject: [PATCH 38/43] Ensure shutdown waits for async tasks
---
.../augmentedhardcore/AugmentedHardcore.java | 10 +++++++++-
.../mappers/server/IServerMapper.java | 2 +-
.../mappers/server/MySQLServerMapper.java | 8 ++++----
.../mappers/server/YAMLServerMapper.java | 9 ++++++---
.../repositories/ServerRepository.java | 4 ++--
5 files changed, 22 insertions(+), 11 deletions(-)
diff --git a/src/com/backtobedrock/augmentedhardcore/AugmentedHardcore.java b/src/com/backtobedrock/augmentedhardcore/AugmentedHardcore.java
index a553013..a9df6a9 100644
--- a/src/com/backtobedrock/augmentedhardcore/AugmentedHardcore.java
+++ b/src/com/backtobedrock/augmentedhardcore/AugmentedHardcore.java
@@ -35,6 +35,7 @@
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadFactory;
+import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.logging.Level;
import java.util.stream.Collectors;
@@ -101,7 +102,7 @@ public void onDisable() {
if (this.getServerRepository() != null) {
ServerData serverData = this.getServerRepository().getServerDataSync();
if (serverData != null) {
- this.getServerRepository().updateServerData(serverData);
+ this.getServerRepository().updateServerData(serverData).join();
}
}
@@ -111,6 +112,13 @@ public void onDisable() {
if (this.executor != null) {
this.executor.shutdown();
+ try {
+ if (!this.executor.awaitTermination(10, TimeUnit.SECONDS)) {
+ this.getLogger().log(Level.WARNING, "Executor did not terminate in the allotted time.");
+ }
+ } catch (InterruptedException e) {
+ Thread.currentThread().interrupt();
+ }
}
if (this.getConfigurations() != null && this.getConfigurations().getDataConfiguration().getDatabase() != null) {
diff --git a/src/com/backtobedrock/augmentedhardcore/mappers/server/IServerMapper.java b/src/com/backtobedrock/augmentedhardcore/mappers/server/IServerMapper.java
index 29934f2..dca5698 100644
--- a/src/com/backtobedrock/augmentedhardcore/mappers/server/IServerMapper.java
+++ b/src/com/backtobedrock/augmentedhardcore/mappers/server/IServerMapper.java
@@ -18,7 +18,7 @@ public interface IServerMapper {
CompletableFuture getServerData(Server server);
//Update
- void updateServerData(ServerData data);
+ CompletableFuture updateServerData(ServerData data);
//Delete
void deleteServerData();
diff --git a/src/com/backtobedrock/augmentedhardcore/mappers/server/MySQLServerMapper.java b/src/com/backtobedrock/augmentedhardcore/mappers/server/MySQLServerMapper.java
index 091e1f9..bde9a7e 100644
--- a/src/com/backtobedrock/augmentedhardcore/mappers/server/MySQLServerMapper.java
+++ b/src/com/backtobedrock/augmentedhardcore/mappers/server/MySQLServerMapper.java
@@ -40,7 +40,7 @@ private MySQLServerMapper(AugmentedHardcore plugin) {
@Override
public void insertServerDataAsync(ServerData serverData) {
- CompletableFuture.runAsync(() -> this.updateServerData(serverData), this.plugin.getExecutor()).exceptionally(ex -> {
+ this.updateServerData(serverData).exceptionally(ex -> {
this.plugin.getLogger().log(Level.SEVERE, "Could not insert server data asynchronously.", ex);
return null;
});
@@ -48,7 +48,7 @@ public void insertServerDataAsync(ServerData serverData) {
@Override
public void insertServerDataSync(ServerData serverData) {
- Bukkit.getScheduler().runTask(this.plugin, () -> this.updateServerData(serverData));
+ Bukkit.getScheduler().runTask(this.plugin, () -> this.updateServerData(serverData).join());
}
@Override
@@ -84,8 +84,8 @@ public CompletableFuture getServerData(Server server) {
}
@Override
- public void updateServerData(ServerData data) {
- CompletableFuture.runAsync(() -> {
+ public CompletableFuture updateServerData(ServerData data) {
+ return CompletableFuture.runAsync(() -> {
String sql = "INSERT INTO ah_server (`server_ip`, `server_port`, `total_death_bans`)"
+ "VALUES(?, ?, ?)"
+ "ON DUPLICATE KEY UPDATE `total_death_bans` = ?;";
diff --git a/src/com/backtobedrock/augmentedhardcore/mappers/server/YAMLServerMapper.java b/src/com/backtobedrock/augmentedhardcore/mappers/server/YAMLServerMapper.java
index 866e011..9d983af 100644
--- a/src/com/backtobedrock/augmentedhardcore/mappers/server/YAMLServerMapper.java
+++ b/src/com/backtobedrock/augmentedhardcore/mappers/server/YAMLServerMapper.java
@@ -47,12 +47,15 @@ public CompletableFuture getServerData(Server server) {
}
@Override
- public void updateServerData(ServerData data) {
+ public CompletableFuture updateServerData(ServerData data) {
if (this.plugin.isStopping()) {
this.insertServerDataSync(data);
- } else {
- this.insertServerDataAsync(data);
+ return CompletableFuture.completedFuture(null);
}
+ return CompletableFuture.runAsync(() -> this.insertServerData(data), this.plugin.getExecutor()).exceptionally(ex -> {
+ this.plugin.getLogger().log(Level.SEVERE, "Could not insert server data.", ex);
+ return null;
+ });
}
@Override
diff --git a/src/com/backtobedrock/augmentedhardcore/repositories/ServerRepository.java b/src/com/backtobedrock/augmentedhardcore/repositories/ServerRepository.java
index 3966b53..df85f86 100644
--- a/src/com/backtobedrock/augmentedhardcore/repositories/ServerRepository.java
+++ b/src/com/backtobedrock/augmentedhardcore/repositories/ServerRepository.java
@@ -72,8 +72,8 @@ private ServerData getFromCache() {
return this.serverData;
}
- public void updateServerData(ServerData data) {
- this.mapper.updateServerData(data);
+ public CompletableFuture updateServerData(ServerData data) {
+ return this.mapper.updateServerData(data);
}
public void removeBanFromServerData(UUID uuid, Pair banPair) {
From 5b2244d35dda2b87c0b23f09354d560f3efa251d Mon Sep 17 00:00:00 2001
From: Jake Hoolz <84546680+JakeHoolz@users.noreply.github.com>
Date: Sat, 30 Aug 2025 21:59:05 -0500
Subject: [PATCH 39/43] refactor: remove MySQLServerMapper singleton
---
.../mappers/server/MySQLServerMapper.java | 10 +---------
.../repositories/ServerRepository.java | 3 +--
2 files changed, 2 insertions(+), 11 deletions(-)
diff --git a/src/com/backtobedrock/augmentedhardcore/mappers/server/MySQLServerMapper.java b/src/com/backtobedrock/augmentedhardcore/mappers/server/MySQLServerMapper.java
index 091e1f9..78dd968 100644
--- a/src/com/backtobedrock/augmentedhardcore/mappers/server/MySQLServerMapper.java
+++ b/src/com/backtobedrock/augmentedhardcore/mappers/server/MySQLServerMapper.java
@@ -23,17 +23,9 @@
public class MySQLServerMapper extends AbstractMapper implements IServerMapper {
- private static MySQLServerMapper instance;
private final MySQLBanMapper banMapper;
- public static synchronized MySQLServerMapper getInstance(AugmentedHardcore plugin) {
- if (instance == null) {
- instance = new MySQLServerMapper(plugin);
- }
- return instance;
- }
-
- private MySQLServerMapper(AugmentedHardcore plugin) {
+ public MySQLServerMapper(AugmentedHardcore plugin) {
super(plugin);
this.banMapper = new MySQLBanMapper(plugin);
}
diff --git a/src/com/backtobedrock/augmentedhardcore/repositories/ServerRepository.java b/src/com/backtobedrock/augmentedhardcore/repositories/ServerRepository.java
index 3966b53..af9aa4f 100644
--- a/src/com/backtobedrock/augmentedhardcore/repositories/ServerRepository.java
+++ b/src/com/backtobedrock/augmentedhardcore/repositories/ServerRepository.java
@@ -38,9 +38,8 @@ public void onReload() {
}
private void initializeMapper() {
- this.mapper = new YAMLServerMapper(this.plugin);
if (this.plugin.getConfigurations().getDataConfiguration().getStorageType() == StorageType.MYSQL) {
- this.mapper = MySQLServerMapper.getInstance(this.plugin);
+ this.mapper = new MySQLServerMapper(this.plugin);
} else {
this.mapper = new YAMLServerMapper(this.plugin);
}
From c7a52c6315bfef7d0ead5d99b09394d84e812a2a Mon Sep 17 00:00:00 2001
From: Jake Hoolz <84546680+JakeHoolz@users.noreply.github.com>
Date: Sat, 30 Aug 2025 21:59:54 -0500
Subject: [PATCH 40/43] Replace javatuples Pair with BanEntry
---
pom.xml | 6 ---
.../augmentedhardcore/domain/BanEntry.java | 7 +++
.../domain/data/BanManager.java | 6 +--
.../domain/data/PlayerData.java | 8 +--
.../domain/data/ServerData.java | 24 ++++-----
.../ListenerPlayerGameModeChange.java | 2 +-
.../eventListeners/ListenerPlayerLogin.java | 2 +-
.../guis/AbstractDeathBansGui.java | 9 ++--
.../guis/GuiPlayerDeathBans.java | 3 +-
.../guis/GuiServerDeathBans.java | 3 +-
.../mappers/ban/IBanMapper.java | 7 ++-
.../mappers/ban/MySQLBanMapper.java | 54 +++++++++----------
.../mappers/player/MySQLPlayerMapper.java | 6 +--
.../mappers/server/IServerMapper.java | 5 +-
.../mappers/server/MySQLServerMapper.java | 9 ++--
.../mappers/server/YAMLServerMapper.java | 5 +-
.../repositories/ServerRepository.java | 5 +-
.../augmentedhardcore/runnables/Unban.java | 10 ++--
src/resources/plugin.yml | 1 -
19 files changed, 82 insertions(+), 90 deletions(-)
create mode 100644 src/com/backtobedrock/augmentedhardcore/domain/BanEntry.java
diff --git a/pom.xml b/pom.xml
index 6cb4b76..5b7bebc 100644
--- a/pom.xml
+++ b/pom.xml
@@ -107,12 +107,6 @@
anvilgui
1.10.2-SNAPSHOT
-
- org.javatuples
- javatuples
- 1.2
- provided
-
com.github.sirblobman.combatlogx
api
diff --git a/src/com/backtobedrock/augmentedhardcore/domain/BanEntry.java b/src/com/backtobedrock/augmentedhardcore/domain/BanEntry.java
new file mode 100644
index 0000000..129d034
--- /dev/null
+++ b/src/com/backtobedrock/augmentedhardcore/domain/BanEntry.java
@@ -0,0 +1,7 @@
+package com.backtobedrock.augmentedhardcore.domain;
+
+/**
+ * Simple record representing a ban entry consisting of the ban's id and the {@link Ban} itself.
+ */
+public record BanEntry(int id, Ban ban) {
+}
diff --git a/src/com/backtobedrock/augmentedhardcore/domain/data/BanManager.java b/src/com/backtobedrock/augmentedhardcore/domain/data/BanManager.java
index 933e023..37206ef 100644
--- a/src/com/backtobedrock/augmentedhardcore/domain/data/BanManager.java
+++ b/src/com/backtobedrock/augmentedhardcore/domain/data/BanManager.java
@@ -1,7 +1,7 @@
package com.backtobedrock.augmentedhardcore.domain.data;
import com.backtobedrock.augmentedhardcore.domain.Ban;
-import org.javatuples.Pair;
+import com.backtobedrock.augmentedhardcore.domain.BanEntry;
import java.util.Collections;
import java.util.Map;
@@ -31,10 +31,10 @@ public int getBanCount() {
return bans.size();
}
- public Pair addBan(Ban ban) {
+ public BanEntry addBan(Ban ban) {
int key = (bans.isEmpty() ? 0 : bans.lastKey()) + 1;
bans.put(key, ban);
- return new Pair<>(key, ban);
+ return new BanEntry(key, ban);
}
public void clearBans() {
diff --git a/src/com/backtobedrock/augmentedhardcore/domain/data/PlayerData.java b/src/com/backtobedrock/augmentedhardcore/domain/data/PlayerData.java
index 5a0c652..ca89c4c 100644
--- a/src/com/backtobedrock/augmentedhardcore/domain/data/PlayerData.java
+++ b/src/com/backtobedrock/augmentedhardcore/domain/data/PlayerData.java
@@ -2,6 +2,7 @@
import com.backtobedrock.augmentedhardcore.AugmentedHardcore;
import com.backtobedrock.augmentedhardcore.domain.Ban;
+import com.backtobedrock.augmentedhardcore.domain.BanEntry;
import com.backtobedrock.augmentedhardcore.domain.Killer;
import com.backtobedrock.augmentedhardcore.domain.enums.DamageCause;
import com.backtobedrock.augmentedhardcore.domain.enums.Permission;
@@ -23,7 +24,6 @@
import org.bukkit.entity.Player;
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.entity.PlayerDeathEvent;
-import org.javatuples.Pair;
import java.time.LocalDateTime;
import java.util.*;
@@ -342,10 +342,10 @@ private void ban(PlayerDeathEvent event, Player player) {
});
}
- private Pair addBan(Ban ban) {
- Pair pair = this.banManager.addBan(ban);
+ private BanEntry addBan(Ban ban) {
+ BanEntry entry = this.banManager.addBan(ban);
this.observers.forEach((k, value) -> value.get(MyStatsDeathBansObserver.class).update());
- return pair;
+ return entry;
}
public void onRespawn(Player player) {
diff --git a/src/com/backtobedrock/augmentedhardcore/domain/data/ServerData.java b/src/com/backtobedrock/augmentedhardcore/domain/data/ServerData.java
index 06cbaf1..6c44578 100644
--- a/src/com/backtobedrock/augmentedhardcore/domain/data/ServerData.java
+++ b/src/com/backtobedrock/augmentedhardcore/domain/data/ServerData.java
@@ -2,13 +2,13 @@
import com.backtobedrock.augmentedhardcore.AugmentedHardcore;
import com.backtobedrock.augmentedhardcore.domain.Ban;
+import com.backtobedrock.augmentedhardcore.domain.BanEntry;
import com.backtobedrock.augmentedhardcore.domain.enums.Permission;
import com.backtobedrock.augmentedhardcore.runnables.Unban;
import org.bukkit.*;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;
-import org.javatuples.Pair;
import java.time.LocalDateTime;
import java.util.HashMap;
@@ -29,7 +29,7 @@ public ServerData() {
this(0, new HashMap<>());
}
- public ServerData(int totalDeathBans, Map> ongoingBans) {
+ public ServerData(int totalDeathBans, Map ongoingBans) {
this.plugin = JavaPlugin.getPlugin(AugmentedHardcore.class);
this.server = this.plugin.getServer();
this.totalDeathBans = totalDeathBans;
@@ -37,13 +37,13 @@ public ServerData(int totalDeathBans, Map> ongoingBans)
OfflinePlayer player = Bukkit.getOfflinePlayer(key);
this.startBan(player, value);
if (this.plugin.getConfigurations().getDeathBanConfiguration().getBanType() == BanList.Type.IP) {
- this.plugin.getPlayerRepository().getByPlayer(player).thenAcceptAsync(playerData -> this.ongoingIPBans.put(playerData.getLastKnownIp(), value.getValue1()));
+ this.plugin.getPlayerRepository().getByPlayer(player).thenAcceptAsync(playerData -> this.ongoingIPBans.put(playerData.getLastKnownIp(), value.ban()));
}
});
}
public static ServerData deserialize(ConfigurationSection section) {
- Map> cOngoingBans = new HashMap<>();
+ Map cOngoingBans = new HashMap<>();
int cTotalBans = section.getInt("TotalDeathBans", section.getInt("TotalBans", 0));
//get ongoing bans section
@@ -65,7 +65,7 @@ public static ServerData deserialize(ConfigurationSection section) {
}
//if exists, put in map
if (ban != null) {
- cOngoingBans.put(uuid, new Pair<>(id, ban));
+ cOngoingBans.put(uuid, new BanEntry(id, ban));
}
});
}
@@ -85,26 +85,26 @@ public int getTotalOngoingBans() {
return this.ongoingBans.size();
}
- public void addBan(PlayerData playerData, Player player, Pair ban) {
+ public void addBan(PlayerData playerData, Player player, BanEntry ban) {
if (player.hasPermission(Permission.BYPASS_BAN_SPECTATOR.getPermissionString())) {
Bukkit.getScheduler().runTask(plugin, () -> player.setGameMode(GameMode.SPECTATOR));
playerData.stopPlaytimeRunnables();
playerData.setSpectatorBanned(true);
} else {
- Bukkit.getScheduler().runTask(plugin, () -> player.kickPlayer(ban.getValue1().getBanMessage()));
+ Bukkit.getScheduler().runTask(plugin, () -> player.kickPlayer(ban.ban().getBanMessage()));
}
this.startBan(player, ban);
if (this.plugin.getConfigurations().getDeathBanConfiguration().getBanType() == BanList.Type.IP) {
- this.ongoingIPBans.put(playerData.getLastKnownIp(), ban.getValue1());
+ this.ongoingIPBans.put(playerData.getLastKnownIp(), ban.ban());
}
this.totalDeathBans++;
this.plugin.getServerRepository().updateServerData(this);
}
- private void startBan(OfflinePlayer player, Pair ban) {
+ private void startBan(OfflinePlayer player, BanEntry ban) {
Unban unban = new Unban(player, ban);
this.ongoingBans.put(player.getUniqueId(), unban);
- if (ban.getValue1().getBanTime() != -1) {
+ if (ban.ban().getBanTime() != -1) {
unban.start();
}
}
@@ -125,7 +125,7 @@ public boolean unDeathBan(UUID uuid) {
public void removeBan(OfflinePlayer player) {
Unban unban = this.ongoingBans.remove(player.getUniqueId());
if (unban != null) {
- unban.getBan().getValue1().setExpirationDate(LocalDateTime.now());
+ unban.getBan().ban().setExpirationDate(LocalDateTime.now());
this.plugin.getPlayerRepository().getByPlayer(player).thenAcceptAsync(playerData -> {
this.ongoingIPBans.remove(playerData.getLastKnownIp());
if (player.getPlayer() != null) {
@@ -149,7 +149,7 @@ public Map serialize() {
Map cOngoingBans = new HashMap<>();
this.ongoingBans.forEach((key, value) -> {
Map cOngoingBansPlayer = new HashMap<>();
- cOngoingBansPlayer.put(value.getBan().getValue0(), value.getBan().getValue1().serialize());
+ cOngoingBansPlayer.put(value.getBan().id(), value.getBan().ban().serialize());
cOngoingBans.put(key.toString(), cOngoingBansPlayer);
});
map.put("OngoingBans", cOngoingBans);
diff --git a/src/com/backtobedrock/augmentedhardcore/eventListeners/ListenerPlayerGameModeChange.java b/src/com/backtobedrock/augmentedhardcore/eventListeners/ListenerPlayerGameModeChange.java
index 9415efe..ae6fa04 100644
--- a/src/com/backtobedrock/augmentedhardcore/eventListeners/ListenerPlayerGameModeChange.java
+++ b/src/com/backtobedrock/augmentedhardcore/eventListeners/ListenerPlayerGameModeChange.java
@@ -24,7 +24,7 @@ public void onPlayerGameModeChange(PlayerGameModeChangeEvent event) {
Unban ban = this.plugin.getServerRepository().getServerDataSync().getBan(player.getUniqueId());
if (ban != null && event.getNewGameMode() != GameMode.SPECTATOR) {
- player.sendMessage(String.format("§cCannot change game mode, you are still banned for another %s.", MessageUtils.getTimeFromTicks(MessageUtils.timeUnitToTicks(ChronoUnit.SECONDS.between(LocalDateTime.now(), ban.getBan().getValue1().getExpirationDate()), TimeUnit.SECONDS), TimePattern.LONG)));
+ player.sendMessage(String.format("§cCannot change game mode, you are still banned for another %s.", MessageUtils.getTimeFromTicks(MessageUtils.timeUnitToTicks(ChronoUnit.SECONDS.between(LocalDateTime.now(), ban.getBan().ban().getExpirationDate()), TimeUnit.SECONDS), TimePattern.LONG));
event.setCancelled(true);
}
}
diff --git a/src/com/backtobedrock/augmentedhardcore/eventListeners/ListenerPlayerLogin.java b/src/com/backtobedrock/augmentedhardcore/eventListeners/ListenerPlayerLogin.java
index 20306db..787f172 100644
--- a/src/com/backtobedrock/augmentedhardcore/eventListeners/ListenerPlayerLogin.java
+++ b/src/com/backtobedrock/augmentedhardcore/eventListeners/ListenerPlayerLogin.java
@@ -25,7 +25,7 @@ public void OnPlayerLogin(PlayerLoginEvent event) {
return;
}
} else {
- ban = unban.getBan().getValue1();
+ ban = unban.getBan().ban();
}
if (player.hasPermission(Permission.BYPASS_BAN_SPECTATOR.getPermissionString())) {
diff --git a/src/com/backtobedrock/augmentedhardcore/guis/AbstractDeathBansGui.java b/src/com/backtobedrock/augmentedhardcore/guis/AbstractDeathBansGui.java
index aa4d4a1..1edecc7 100644
--- a/src/com/backtobedrock/augmentedhardcore/guis/AbstractDeathBansGui.java
+++ b/src/com/backtobedrock/augmentedhardcore/guis/AbstractDeathBansGui.java
@@ -3,14 +3,13 @@
import com.backtobedrock.augmentedhardcore.AugmentedHardcore;
import com.backtobedrock.augmentedhardcore.domain.Ban;
import org.bukkit.OfflinePlayer;
-import org.javatuples.Pair;
import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.util.logging.Level;
public abstract class AbstractDeathBansGui extends AbstractPaginatedGui {
- protected final Map, Ban> bans = new LinkedHashMap<>();
+ protected final Map, Ban> bans = new LinkedHashMap<>();
public AbstractDeathBansGui(AugmentedHardcore plugin, String title, int dataSize) {
super(plugin, new CustomHolder(dataSize, title), dataSize);
@@ -29,7 +28,7 @@ public void setData() {
super.setData();
List icons = new ArrayList<>();
- List, Ban>> currentData = new ArrayList<>(this.bans.entrySet()).subList((this.currentPage - 1) * 28, Math.min(this.currentPage * 28, this.bans.size()));
+ List, Ban>> currentData = new ArrayList<>(this.bans.entrySet()).subList((this.currentPage - 1) * 28, Math.min(this.currentPage * 28, this.bans.size()));
//loading icons
for (int i = 0; i < currentData.size(); i++) {
@@ -49,9 +48,9 @@ public void setData() {
Map placeholders = new HashMap<>();
CompletableFuture.runAsync(() -> {
currentData.forEach(e -> {
- placeholders.put("ban_number", e.getKey().getValue1().toString());
+ placeholders.put("ban_number", e.getKey().getValue().toString());
placeholders.putAll(e.getValue().getPlaceholdersReplacements());
- icons.add(this.getIcon(e.getKey().getValue0(), placeholders));
+ icons.add(this.getIcon(e.getKey().getKey(), placeholders));
if (icons.size() == 7) {
this.customHolder.addRow(icons);
icons.clear();
diff --git a/src/com/backtobedrock/augmentedhardcore/guis/GuiPlayerDeathBans.java b/src/com/backtobedrock/augmentedhardcore/guis/GuiPlayerDeathBans.java
index 5814191..c0f9b25 100644
--- a/src/com/backtobedrock/augmentedhardcore/guis/GuiPlayerDeathBans.java
+++ b/src/com/backtobedrock/augmentedhardcore/guis/GuiPlayerDeathBans.java
@@ -8,7 +8,6 @@
import com.backtobedrock.augmentedhardcore.utilities.MessageUtils;
import org.bukkit.OfflinePlayer;
import org.bukkit.Statistic;
-import org.javatuples.Pair;
import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;
@@ -22,7 +21,7 @@ public class GuiPlayerDeathBans extends AbstractDeathBansGui {
public GuiPlayerDeathBans(AugmentedHardcore plugin, PlayerData playerData) {
super(plugin, String.format("%s Death Bans", playerData.getPlayer().getName()), playerData.getBanManager().getBanCount());
- playerData.getBanManager().getBans().forEach((key, value) -> this.bans.put(new Pair<>(playerData.getPlayer(), key), value));
+ playerData.getBanManager().getBans().forEach((key, value) -> this.bans.put(Map.entry(playerData.getPlayer(), key), value));
this.playerData = playerData;
this.initialize();
}
diff --git a/src/com/backtobedrock/augmentedhardcore/guis/GuiServerDeathBans.java b/src/com/backtobedrock/augmentedhardcore/guis/GuiServerDeathBans.java
index aaf8a73..1a5c7e7 100644
--- a/src/com/backtobedrock/augmentedhardcore/guis/GuiServerDeathBans.java
+++ b/src/com/backtobedrock/augmentedhardcore/guis/GuiServerDeathBans.java
@@ -11,7 +11,6 @@
import org.bukkit.OfflinePlayer;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
-import org.javatuples.Pair;
import java.util.*;
@@ -21,7 +20,7 @@ public class GuiServerDeathBans extends AbstractDeathBansGui {
public GuiServerDeathBans(AugmentedHardcore plugin, Player player, ServerData serverData) {
super(plugin, "Currently Ongoing Death Bans", serverData.getTotalOngoingBans());
- serverData.getOngoingBans().forEach((key, value) -> this.bans.put(new Pair<>(Bukkit.getOfflinePlayer(key), value.getBan().getValue0()), value.getBan().getValue1()));
+ serverData.getOngoingBans().forEach((key, value) -> this.bans.put(Map.entry(Bukkit.getOfflinePlayer(key), value.getBan().id()), value.getBan().ban()));
this.serverData = serverData;
this.player = player;
this.initialize();
diff --git a/src/com/backtobedrock/augmentedhardcore/mappers/ban/IBanMapper.java b/src/com/backtobedrock/augmentedhardcore/mappers/ban/IBanMapper.java
index dc6839f..b5ba1b3 100644
--- a/src/com/backtobedrock/augmentedhardcore/mappers/ban/IBanMapper.java
+++ b/src/com/backtobedrock/augmentedhardcore/mappers/ban/IBanMapper.java
@@ -1,15 +1,14 @@
package com.backtobedrock.augmentedhardcore.mappers.ban;
-import com.backtobedrock.augmentedhardcore.domain.Ban;
+import com.backtobedrock.augmentedhardcore.domain.BanEntry;
import org.bukkit.Server;
-import org.javatuples.Pair;
import java.util.UUID;
public interface IBanMapper {
- void insertBan(Server server, UUID uuid, Pair ban);
+ void insertBan(Server server, UUID uuid, BanEntry ban);
- void updateBan(Server server, UUID uuid, Pair ban);
+ void updateBan(Server server, UUID uuid, BanEntry ban);
void deleteBan(UUID uuid, Integer id);
}
diff --git a/src/com/backtobedrock/augmentedhardcore/mappers/ban/MySQLBanMapper.java b/src/com/backtobedrock/augmentedhardcore/mappers/ban/MySQLBanMapper.java
index 0b5e323..a1a0f08 100644
--- a/src/com/backtobedrock/augmentedhardcore/mappers/ban/MySQLBanMapper.java
+++ b/src/com/backtobedrock/augmentedhardcore/mappers/ban/MySQLBanMapper.java
@@ -2,12 +2,12 @@
import com.backtobedrock.augmentedhardcore.AugmentedHardcore;
import com.backtobedrock.augmentedhardcore.domain.Ban;
+import com.backtobedrock.augmentedhardcore.domain.BanEntry;
import com.backtobedrock.augmentedhardcore.domain.Killer;
import com.backtobedrock.augmentedhardcore.domain.Location;
import com.backtobedrock.augmentedhardcore.mappers.AbstractMapper;
import com.backtobedrock.augmentedhardcore.utilities.ConfigUtils;
import org.bukkit.Server;
-import org.javatuples.Pair;
import java.net.InetAddress;
import java.net.UnknownHostException;
@@ -21,10 +21,10 @@ public MySQLBanMapper(AugmentedHardcore plugin) {
super(plugin);
}
- public Pair getBanFromResultSetSync(ResultSet resultSet) {
+ public BanEntry getBanFromResultSetSync(ResultSet resultSet) {
try {
if (resultSet.getObject("ban_id") != null) {
- return new Pair<>(resultSet.getInt("ban_id"),
+ return new BanEntry(resultSet.getInt("ban_id"),
new Ban(
resultSet.getTimestamp("start_date").toLocalDateTime(),
resultSet.getTimestamp("expiration_date").toLocalDateTime(),
@@ -47,12 +47,12 @@ public Pair getBanFromResultSetSync(ResultSet resultSet) {
}
@Override
- public void insertBan(Server server, UUID uuid, Pair ban) {
+ public void insertBan(Server server, UUID uuid, BanEntry ban) {
this.updateBan(server, uuid, ban);
}
@Override
- public void updateBan(Server server, UUID uuid, Pair ban) {
+ public void updateBan(Server server, UUID uuid, BanEntry ban) {
CompletableFuture.runAsync(() -> {
String sql = "INSERT INTO ah_ban (`ban_id`,`player_uuid`,`server_ip`,`server_port`,`start_date`,`expiration_date`,`ban_time`,`damage_cause`,`damage_cause_type`,`world`,`x`,`y`,`z`,`has_killer`,`killer_name`,`killer_display_name`,`killer_entity_type`,`in_combat`,`in_combat_with_name`,`in_combat_with_display_name`,`in_combat_with_entity_type`,`death_message`,`time_since_previous_death_ban`,`time_since_previous_death`)"
+ "VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"
@@ -93,34 +93,34 @@ public void updateBan(Server server, UUID uuid, Pair ban) {
});
}
- private void bindBanParameters(PreparedStatement preparedStatement, int startIndex, Server server, UUID uuid, Pair ban) throws SQLException, UnknownHostException {
+ private void bindBanParameters(PreparedStatement preparedStatement, int startIndex, Server server, UUID uuid, BanEntry ban) throws SQLException, UnknownHostException {
int index = startIndex;
if (startIndex == 1) {
- preparedStatement.setInt(index++, ban.getValue0());
+ preparedStatement.setInt(index++, ban.id());
preparedStatement.setString(index++, uuid.toString());
}
preparedStatement.setString(index++, server != null ? InetAddress.getLocalHost().getHostAddress() : null);
preparedStatement.setObject(index++, server != null ? this.plugin.getServer().getPort() : null);
- preparedStatement.setTimestamp(index++, Timestamp.valueOf(ban.getValue1().getStartDate()));
- preparedStatement.setTimestamp(index++, Timestamp.valueOf(ban.getValue1().getExpirationDate()));
- preparedStatement.setInt(index++, ban.getValue1().getBanTime());
- preparedStatement.setString(index++, ban.getValue1().getDamageCause().name());
- preparedStatement.setString(index++, ban.getValue1().getDamageCauseType().name());
- preparedStatement.setString(index++, ban.getValue1().getLocation().getWorld());
- preparedStatement.setDouble(index++, ban.getValue1().getLocation().getX());
- preparedStatement.setDouble(index++, ban.getValue1().getLocation().getY());
- preparedStatement.setDouble(index++, ban.getValue1().getLocation().getZ());
- preparedStatement.setBoolean(index++, ban.getValue1().getKiller() != null);
- preparedStatement.setString(index++, ban.getValue1().getKiller() == null ? null : ban.getValue1().getKiller().getName());
- preparedStatement.setString(index++, ban.getValue1().getKiller() == null ? null : ban.getValue1().getKiller().getDisplayName());
- preparedStatement.setString(index++, ban.getValue1().getKiller() == null ? null : ban.getValue1().getKiller().getType().name());
- preparedStatement.setBoolean(index++, ban.getValue1().getInCombatWith() != null);
- preparedStatement.setString(index++, ban.getValue1().getInCombatWith() == null ? null : ban.getValue1().getInCombatWith().getName());
- preparedStatement.setString(index++, ban.getValue1().getInCombatWith() == null ? null : ban.getValue1().getInCombatWith().getDisplayName());
- preparedStatement.setString(index++, ban.getValue1().getInCombatWith() == null ? null : ban.getValue1().getInCombatWith().getType().name());
- preparedStatement.setString(index++, ban.getValue1().getDeathMessage());
- preparedStatement.setLong(index++, ban.getValue1().getTimeSincePreviousDeathBan());
- preparedStatement.setLong(index, ban.getValue1().getTimeSincePreviousDeath());
+ preparedStatement.setTimestamp(index++, Timestamp.valueOf(ban.ban().getStartDate()));
+ preparedStatement.setTimestamp(index++, Timestamp.valueOf(ban.ban().getExpirationDate()));
+ preparedStatement.setInt(index++, ban.ban().getBanTime());
+ preparedStatement.setString(index++, ban.ban().getDamageCause().name());
+ preparedStatement.setString(index++, ban.ban().getDamageCauseType().name());
+ preparedStatement.setString(index++, ban.ban().getLocation().getWorld());
+ preparedStatement.setDouble(index++, ban.ban().getLocation().getX());
+ preparedStatement.setDouble(index++, ban.ban().getLocation().getY());
+ preparedStatement.setDouble(index++, ban.ban().getLocation().getZ());
+ preparedStatement.setBoolean(index++, ban.ban().getKiller() != null);
+ preparedStatement.setString(index++, ban.ban().getKiller() == null ? null : ban.ban().getKiller().getName());
+ preparedStatement.setString(index++, ban.ban().getKiller() == null ? null : ban.ban().getKiller().getDisplayName());
+ preparedStatement.setString(index++, ban.ban().getKiller() == null ? null : ban.ban().getKiller().getType().name());
+ preparedStatement.setBoolean(index++, ban.ban().getInCombatWith() != null);
+ preparedStatement.setString(index++, ban.ban().getInCombatWith() == null ? null : ban.ban().getInCombatWith().getName());
+ preparedStatement.setString(index++, ban.ban().getInCombatWith() == null ? null : ban.ban().getInCombatWith().getDisplayName());
+ preparedStatement.setString(index++, ban.ban().getInCombatWith() == null ? null : ban.ban().getInCombatWith().getType().name());
+ preparedStatement.setString(index++, ban.ban().getDeathMessage());
+ preparedStatement.setLong(index++, ban.ban().getTimeSincePreviousDeathBan());
+ preparedStatement.setLong(index, ban.ban().getTimeSincePreviousDeath());
}
@Override
diff --git a/src/com/backtobedrock/augmentedhardcore/mappers/player/MySQLPlayerMapper.java b/src/com/backtobedrock/augmentedhardcore/mappers/player/MySQLPlayerMapper.java
index 8df860b..fb0a7aa 100644
--- a/src/com/backtobedrock/augmentedhardcore/mappers/player/MySQLPlayerMapper.java
+++ b/src/com/backtobedrock/augmentedhardcore/mappers/player/MySQLPlayerMapper.java
@@ -2,12 +2,12 @@
import com.backtobedrock.augmentedhardcore.AugmentedHardcore;
import com.backtobedrock.augmentedhardcore.domain.Ban;
+import com.backtobedrock.augmentedhardcore.domain.BanEntry;
import com.backtobedrock.augmentedhardcore.domain.data.PlayerData;
import com.backtobedrock.augmentedhardcore.mappers.AbstractMapper;
import com.backtobedrock.augmentedhardcore.mappers.ban.MySQLBanMapper;
import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer;
-import org.javatuples.Pair;
import java.sql.*;
import java.time.LocalDateTime;
@@ -69,9 +69,9 @@ private PlayerData getPlayerData(OfflinePlayer player) {
deathBans
);
}
- Pair banPair = this.banMapper.getBanFromResultSetSync(resultSet);
+ BanEntry banPair = this.banMapper.getBanFromResultSetSync(resultSet);
if (banPair != null) {
- deathBans.put(banPair.getValue0(), banPair.getValue1());
+ deathBans.put(banPair.id(), banPair.ban());
}
}
return playerData;
diff --git a/src/com/backtobedrock/augmentedhardcore/mappers/server/IServerMapper.java b/src/com/backtobedrock/augmentedhardcore/mappers/server/IServerMapper.java
index 29934f2..b4cb675 100644
--- a/src/com/backtobedrock/augmentedhardcore/mappers/server/IServerMapper.java
+++ b/src/com/backtobedrock/augmentedhardcore/mappers/server/IServerMapper.java
@@ -1,9 +1,8 @@
package com.backtobedrock.augmentedhardcore.mappers.server;
-import com.backtobedrock.augmentedhardcore.domain.Ban;
+import com.backtobedrock.augmentedhardcore.domain.BanEntry;
import com.backtobedrock.augmentedhardcore.domain.data.ServerData;
import org.bukkit.Server;
-import org.javatuples.Pair;
import java.util.UUID;
import java.util.concurrent.CompletableFuture;
@@ -23,5 +22,5 @@ public interface IServerMapper {
//Delete
void deleteServerData();
- void deleteBanFromServerData(UUID uuid, Pair ban);
+ void deleteBanFromServerData(UUID uuid, BanEntry ban);
}
diff --git a/src/com/backtobedrock/augmentedhardcore/mappers/server/MySQLServerMapper.java b/src/com/backtobedrock/augmentedhardcore/mappers/server/MySQLServerMapper.java
index 091e1f9..1ae6aee 100644
--- a/src/com/backtobedrock/augmentedhardcore/mappers/server/MySQLServerMapper.java
+++ b/src/com/backtobedrock/augmentedhardcore/mappers/server/MySQLServerMapper.java
@@ -1,13 +1,12 @@
package com.backtobedrock.augmentedhardcore.mappers.server;
import com.backtobedrock.augmentedhardcore.AugmentedHardcore;
-import com.backtobedrock.augmentedhardcore.domain.Ban;
+import com.backtobedrock.augmentedhardcore.domain.BanEntry;
import com.backtobedrock.augmentedhardcore.domain.data.ServerData;
import com.backtobedrock.augmentedhardcore.mappers.AbstractMapper;
import com.backtobedrock.augmentedhardcore.mappers.ban.MySQLBanMapper;
import org.bukkit.Bukkit;
import org.bukkit.Server;
-import org.javatuples.Pair;
import java.net.InetAddress;
import java.net.UnknownHostException;
@@ -63,13 +62,13 @@ public CompletableFuture getServerData(Server server) {
preparedStatement.setString(1, InetAddress.getLocalHost().getHostAddress());
preparedStatement.setInt(2, server.getPort());
ResultSet resultSet = preparedStatement.executeQuery();
- Map> deathBans = new HashMap<>();
+ Map deathBans = new HashMap<>();
int totalDeathBans = 0;
while (resultSet.next()) {
totalDeathBans = resultSet.getInt("total_death_bans");
String uuidString = resultSet.getString("player_uuid");
if (uuidString != null && !uuidString.isEmpty()) {
- Pair banPair = this.banMapper.getBanFromResultSetSync(resultSet);
+ BanEntry banPair = this.banMapper.getBanFromResultSetSync(resultSet);
if (banPair != null) {
deathBans.put(UUID.fromString(uuidString), banPair);
}
@@ -127,7 +126,7 @@ public void deleteServerData() {
}
@Override
- public void deleteBanFromServerData(UUID uuid, Pair ban) {
+ public void deleteBanFromServerData(UUID uuid, BanEntry ban) {
this.banMapper.updateBan(null, uuid, ban);
}
}
diff --git a/src/com/backtobedrock/augmentedhardcore/mappers/server/YAMLServerMapper.java b/src/com/backtobedrock/augmentedhardcore/mappers/server/YAMLServerMapper.java
index 866e011..fdde59f 100644
--- a/src/com/backtobedrock/augmentedhardcore/mappers/server/YAMLServerMapper.java
+++ b/src/com/backtobedrock/augmentedhardcore/mappers/server/YAMLServerMapper.java
@@ -1,13 +1,12 @@
package com.backtobedrock.augmentedhardcore.mappers.server;
import com.backtobedrock.augmentedhardcore.AugmentedHardcore;
-import com.backtobedrock.augmentedhardcore.domain.Ban;
+import com.backtobedrock.augmentedhardcore.domain.BanEntry;
import com.backtobedrock.augmentedhardcore.domain.data.ServerData;
import org.bukkit.Bukkit;
import org.bukkit.Server;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
-import org.javatuples.Pair;
import java.io.File;
import java.io.IOException;
@@ -70,7 +69,7 @@ public void deleteServerData() {
}
@Override
- public void deleteBanFromServerData(UUID uuid, Pair ban) {
+ public void deleteBanFromServerData(UUID uuid, BanEntry ban) {
CompletableFuture.runAsync(() -> {
FileConfiguration config = this.getConfig();
config.set("OngoingBans." + uuid, null);
diff --git a/src/com/backtobedrock/augmentedhardcore/repositories/ServerRepository.java b/src/com/backtobedrock/augmentedhardcore/repositories/ServerRepository.java
index 3966b53..9569f36 100644
--- a/src/com/backtobedrock/augmentedhardcore/repositories/ServerRepository.java
+++ b/src/com/backtobedrock/augmentedhardcore/repositories/ServerRepository.java
@@ -1,14 +1,13 @@
package com.backtobedrock.augmentedhardcore.repositories;
import com.backtobedrock.augmentedhardcore.AugmentedHardcore;
-import com.backtobedrock.augmentedhardcore.domain.Ban;
+import com.backtobedrock.augmentedhardcore.domain.BanEntry;
import com.backtobedrock.augmentedhardcore.domain.data.ServerData;
import com.backtobedrock.augmentedhardcore.domain.enums.StorageType;
import com.backtobedrock.augmentedhardcore.mappers.server.IServerMapper;
import com.backtobedrock.augmentedhardcore.mappers.server.MySQLServerMapper;
import com.backtobedrock.augmentedhardcore.mappers.server.YAMLServerMapper;
import org.bukkit.Server;
-import org.javatuples.Pair;
import java.util.UUID;
import java.util.concurrent.CompletableFuture;
@@ -76,7 +75,7 @@ public void updateServerData(ServerData data) {
this.mapper.updateServerData(data);
}
- public void removeBanFromServerData(UUID uuid, Pair banPair) {
+ public void removeBanFromServerData(UUID uuid, BanEntry banPair) {
this.mapper.deleteBanFromServerData(uuid, banPair);
}
}
diff --git a/src/com/backtobedrock/augmentedhardcore/runnables/Unban.java b/src/com/backtobedrock/augmentedhardcore/runnables/Unban.java
index af34d9f..1d20312 100644
--- a/src/com/backtobedrock/augmentedhardcore/runnables/Unban.java
+++ b/src/com/backtobedrock/augmentedhardcore/runnables/Unban.java
@@ -2,11 +2,11 @@
import com.backtobedrock.augmentedhardcore.AugmentedHardcore;
import com.backtobedrock.augmentedhardcore.domain.Ban;
+import com.backtobedrock.augmentedhardcore.domain.BanEntry;
import com.backtobedrock.augmentedhardcore.utilities.MessageUtils;
import org.bukkit.OfflinePlayer;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.scheduler.BukkitRunnable;
-import org.javatuples.Pair;
import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;
@@ -15,16 +15,16 @@
public class Unban extends BukkitRunnable {
private final AugmentedHardcore plugin;
private final OfflinePlayer player;
- private final Pair ban;
+ private final BanEntry ban;
- public Unban(OfflinePlayer player, Pair ban) {
+ public Unban(OfflinePlayer player, BanEntry ban) {
this.plugin = JavaPlugin.getPlugin(AugmentedHardcore.class);
this.player = player;
this.ban = ban;
}
public void start() {
- this.runTaskLaterAsynchronously(this.plugin, MessageUtils.timeUnitToTicks(ChronoUnit.SECONDS.between(LocalDateTime.now(), this.ban.getValue1().getExpirationDate()), TimeUnit.SECONDS));
+ this.runTaskLaterAsynchronously(this.plugin, MessageUtils.timeUnitToTicks(ChronoUnit.SECONDS.between(LocalDateTime.now(), this.ban.ban().getExpirationDate()), TimeUnit.SECONDS));
}
private void stop() {
@@ -46,7 +46,7 @@ public void run() {
this.finish();
}
- public Pair getBan() {
+ public BanEntry getBan() {
return ban;
}
}
diff --git a/src/resources/plugin.yml b/src/resources/plugin.yml
index d796763..67c2b77 100644
--- a/src/resources/plugin.yml
+++ b/src/resources/plugin.yml
@@ -8,7 +8,6 @@ description: A very customizable and lightweight plugin that enhances the hardco
api-version: 1.13
softdepend: [ PlaceholderAPI, CombatLogX ]
libraries:
- - org.javatuples:javatuples:1.2
- com.zaxxer:HikariCP:4.0.3
commands:
augmentedhardcore:
From 5f3277097094c83da89e4ab5963c0122716cba15 Mon Sep 17 00:00:00 2001
From: Jake Hoolz <84546680+JakeHoolz@users.noreply.github.com>
Date: Sat, 30 Aug 2025 22:00:45 -0500
Subject: [PATCH 41/43] refactor: replace time literals with constants
---
pom.xml | 24 +++++++----
.../utilities/MessageUtils.java | 18 ++++++--
.../utilities/MessageUtilsTest.java | 43 +++++++++++++++++++
3 files changed, 73 insertions(+), 12 deletions(-)
create mode 100644 src/test/java/com/backtobedrock/augmentedhardcore/utilities/MessageUtilsTest.java
diff --git a/pom.xml b/pom.xml
index 6cb4b76..16e7141 100644
--- a/pom.xml
+++ b/pom.xml
@@ -89,7 +89,7 @@
-
+
org.spigotmc
spigot-api
@@ -124,11 +124,17 @@
ConfigUpdater
2.1-SNAPSHOT
-
- com.zaxxer
- HikariCP
- 7.0.2
- provided
-
-
-
\ No newline at end of file
+
+ com.zaxxer
+ HikariCP
+ 7.0.2
+ provided
+
+
+ org.junit.jupiter
+ junit-jupiter
+ 5.10.2
+ test
+
+
+
\ No newline at end of file
diff --git a/src/com/backtobedrock/augmentedhardcore/utilities/MessageUtils.java b/src/com/backtobedrock/augmentedhardcore/utilities/MessageUtils.java
index 85d52ec..9648bad 100644
--- a/src/com/backtobedrock/augmentedhardcore/utilities/MessageUtils.java
+++ b/src/com/backtobedrock/augmentedhardcore/utilities/MessageUtils.java
@@ -18,18 +18,30 @@ public class MessageUtils {
public static final DateTimeFormatter MEDIUM_FORMATTER = DateTimeFormatter.ofPattern("MMM dd yyyy',' HH:mm z").withZone(ZoneId.systemDefault());
public static final DateTimeFormatter LONG_FORMATTER = DateTimeFormatter.ofPattern("EEEE MMM dd yyyy 'at' HH:mm:ss z").withZone(ZoneId.systemDefault());
+ // Time constants
+ public static final long TICKS_PER_SECOND = 20L;
+ public static final long SECONDS_PER_MINUTE = 60L;
+ public static final long MINUTES_PER_HOUR = 60L;
+ public static final long HOURS_PER_DAY = 24L;
+ public static final long TICKS_PER_MINUTE = TICKS_PER_SECOND * SECONDS_PER_MINUTE;
+ public static final long TICKS_PER_HOUR = TICKS_PER_MINUTE * MINUTES_PER_HOUR;
+ public static final long TICKS_PER_DAY = TICKS_PER_HOUR * HOURS_PER_DAY;
+
public static long timeUnitToTicks(long time, TimeUnit unit) {
- return unit.toSeconds(time) * 20;
+ return unit.toSeconds(time) * TICKS_PER_SECOND;
}
public static long timeBetweenDatesToTicks(LocalDateTime date1, LocalDateTime date2) {
- return Math.abs(ChronoUnit.SECONDS.between(date1, date2)) * 20;
+ return Math.abs(ChronoUnit.SECONDS.between(date1, date2)) * TICKS_PER_SECOND;
}
public static String getTimeFromTicks(long amount, TimePattern pattern) {
StringBuilder sb = new StringBuilder();
- long d = amount / 1728000, h = amount % 1728000 / 72000, m = amount % 72000 / 1200, s = amount % 1200 / 20;
+ long d = amount / TICKS_PER_DAY;
+ long h = amount % TICKS_PER_DAY / TICKS_PER_HOUR;
+ long m = amount % TICKS_PER_HOUR / TICKS_PER_MINUTE;
+ long s = amount % TICKS_PER_MINUTE / TICKS_PER_SECOND;
switch (pattern) {
case LONG:
diff --git a/src/test/java/com/backtobedrock/augmentedhardcore/utilities/MessageUtilsTest.java b/src/test/java/com/backtobedrock/augmentedhardcore/utilities/MessageUtilsTest.java
new file mode 100644
index 0000000..309c245
--- /dev/null
+++ b/src/test/java/com/backtobedrock/augmentedhardcore/utilities/MessageUtilsTest.java
@@ -0,0 +1,43 @@
+package com.backtobedrock.augmentedhardcore.utilities;
+
+import com.backtobedrock.augmentedhardcore.domain.enums.TimePattern;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+/**
+ * Unit tests for {@link MessageUtils#getTimeFromTicks(long, TimePattern)} to ensure
+ * the various {@link TimePattern} formats handle edge cases correctly.
+ */
+public class MessageUtilsTest {
+
+ @Test
+ void testGetTimeFromTicksZero() {
+ assertEquals("", MessageUtils.getTimeFromTicks(0, TimePattern.LONG));
+ assertEquals("", MessageUtils.getTimeFromTicks(0, TimePattern.SHORT));
+ assertEquals("00:00:00:00", MessageUtils.getTimeFromTicks(0, TimePattern.DIGITAL));
+ }
+
+ @Test
+ void testGetTimeFromTicksMixedValues() {
+ long ticks = MessageUtils.TICKS_PER_DAY
+ + 2 * MessageUtils.TICKS_PER_HOUR
+ + 3 * MessageUtils.TICKS_PER_MINUTE
+ + 4 * MessageUtils.TICKS_PER_SECOND;
+
+ assertEquals("1 day, 2 hours, 3 minutes, 4 seconds",
+ MessageUtils.getTimeFromTicks(ticks, TimePattern.LONG));
+ assertEquals("1d, 2h, 3m, 4s",
+ MessageUtils.getTimeFromTicks(ticks, TimePattern.SHORT));
+ assertEquals("01:02:03:04",
+ MessageUtils.getTimeFromTicks(ticks, TimePattern.DIGITAL));
+ }
+
+ @Test
+ void testDigitalPadding() {
+ long ticks = 3 * MessageUtils.TICKS_PER_MINUTE + 5 * MessageUtils.TICKS_PER_SECOND;
+ assertEquals("00:00:03:05",
+ MessageUtils.getTimeFromTicks(ticks, TimePattern.DIGITAL));
+ }
+}
+
From b84c1b458ebbdcc309200a3daac67f5a7b860290 Mon Sep 17 00:00:00 2001
From: Jake Hoolz <84546680+JakeHoolz@users.noreply.github.com>
Date: Sat, 30 Aug 2025 22:01:37 -0500
Subject: [PATCH 42/43] Refactor initialization workflow
---
.../augmentedhardcore/AugmentedHardcore.java | 64 +++++++++----------
1 file changed, 30 insertions(+), 34 deletions(-)
diff --git a/src/com/backtobedrock/augmentedhardcore/AugmentedHardcore.java b/src/com/backtobedrock/augmentedhardcore/AugmentedHardcore.java
index a553013..f801080 100644
--- a/src/com/backtobedrock/augmentedhardcore/AugmentedHardcore.java
+++ b/src/com/backtobedrock/augmentedhardcore/AugmentedHardcore.java
@@ -130,34 +130,37 @@ public void initialize() {
this.executor = Executors.newFixedThreadPool(Math.max(2, Runtime.getRuntime().availableProcessors()), this.asyncThreadFactory);
}
- //initialize old config directory
+ this.prepareConfigFiles();
+ this.loadConfigurations();
+ this.setupDatabase();
+ this.initRepositories();
+ this.registerListeners();
+ }
+
+ private void prepareConfigFiles() {
File dir = new File(this.getDataFolder() + "/old");
- List configs = new ArrayList() {{
- add(new File(getDataFolder(), "config.old.yml"));
- add(new File(getDataFolder(), "messages.old.yml"));
- }};
+ List configs = List.of(
+ new File(getDataFolder(), "config.old.yml"),
+ new File(getDataFolder(), "messages.old.yml")
+ );
//noinspection ResultOfMethodCallIgnored
dir.mkdir();
//noinspection ResultOfMethodCallIgnored
configs.stream().filter(File::exists).forEach(File::delete);
- //get config.yml and make if none existent
File configFile = new File(this.getDataFolder(), "config.yml");
if (!configFile.exists()) {
this.getLogger().log(Level.INFO, "Creating {0}.", configFile.getAbsolutePath());
this.saveResource("config.yml", false);
}
- //get messages.yml and make if none existent
File messagesFile = new File(this.getDataFolder(), "messages.yml");
if (!messagesFile.exists()) {
this.getLogger().log(Level.INFO, "Creating {0}.", messagesFile.getAbsolutePath());
this.saveResource("messages.yml", false);
}
- //update configurations
try {
- //config.yml
File copy = new File(this.getDataFolder() + "/old/", "config.old.yml");
if (copy.exists()) {
//noinspection ResultOfMethodCallIgnored
@@ -165,13 +168,11 @@ public void initialize() {
}
Files.copy(configFile.toPath(), copy.toPath());
ConfigUpdater.update(this, "config.yml", configFile, Arrays.asList("LifePartsPerKill", "MaxHealthIncreasePerKill"));
- configFile = new File(this.getDataFolder(), "config.yml");
} catch (IOException e) {
getLogger().log(Level.SEVERE, "Failed to update config.yml", e);
}
try {
- //messages.yml
File copy = new File(this.getDataFolder() + "/old/", "messages.old.yml");
if (copy.exists()) {
//noinspection ResultOfMethodCallIgnored
@@ -179,38 +180,20 @@ public void initialize() {
}
Files.copy(messagesFile.toPath(), copy.toPath());
ConfigUpdater.update(this, "messages.yml", messagesFile, Collections.emptyList());
- messagesFile = new File(this.getDataFolder(), "messages.yml");
} catch (IOException e) {
getLogger().log(Level.SEVERE, "Failed to update messages.yml", e);
}
+ }
- //initialize config and messages
+ private void loadConfigurations() {
+ File configFile = new File(this.getDataFolder(), "config.yml");
+ File messagesFile = new File(this.getDataFolder(), "messages.yml");
this.configurations = new Configurations(configFile);
this.messages = new Messages(messagesFile);
-
- //initialize commands
this.commands = new Commands();
-
- //initialize database if needed
- this.initDB();
-
- //initialize repositories
- if (this.playerRepository == null) {
- this.playerRepository = new PlayerRepository(this);
- } else {
- this.playerRepository.onReload();
- }
- if (this.serverRepository == null) {
- this.serverRepository = new ServerRepository(this);
- } else {
- this.serverRepository.onReload();
- }
-
- //register event listeners
- this.registerListeners();
}
- private void initDB() {
+ private void setupDatabase() {
if (this.getConfigurations().getDataConfiguration().getStorageType() != StorageType.MYSQL) {
return;
}
@@ -244,6 +227,19 @@ private void initDB() {
getLogger().info("Setup complete.");
}
+ private void initRepositories() {
+ if (this.playerRepository == null) {
+ this.playerRepository = new PlayerRepository(this);
+ } else {
+ this.playerRepository.onReload();
+ }
+ if (this.serverRepository == null) {
+ this.serverRepository = new ServerRepository(this);
+ } else {
+ this.serverRepository.onReload();
+ }
+ }
+
private void registerListeners() {
Arrays.asList(
//dependencies
From c965f3391689b81cec19c2cd9b3785c27174d5e8 Mon Sep 17 00:00:00 2001
From: Jake Hoolz
Date: Thu, 18 Sep 2025 19:19:36 -0500
Subject: [PATCH 43/43] Update ListenerPlayerGameModeChange.java
---
.../eventListeners/ListenerPlayerGameModeChange.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/com/backtobedrock/augmentedhardcore/eventListeners/ListenerPlayerGameModeChange.java b/src/com/backtobedrock/augmentedhardcore/eventListeners/ListenerPlayerGameModeChange.java
index ae6fa04..c4f9566 100644
--- a/src/com/backtobedrock/augmentedhardcore/eventListeners/ListenerPlayerGameModeChange.java
+++ b/src/com/backtobedrock/augmentedhardcore/eventListeners/ListenerPlayerGameModeChange.java
@@ -24,7 +24,7 @@ public void onPlayerGameModeChange(PlayerGameModeChangeEvent event) {
Unban ban = this.plugin.getServerRepository().getServerDataSync().getBan(player.getUniqueId());
if (ban != null && event.getNewGameMode() != GameMode.SPECTATOR) {
- player.sendMessage(String.format("§cCannot change game mode, you are still banned for another %s.", MessageUtils.getTimeFromTicks(MessageUtils.timeUnitToTicks(ChronoUnit.SECONDS.between(LocalDateTime.now(), ban.getBan().ban().getExpirationDate()), TimeUnit.SECONDS), TimePattern.LONG));
+ player.sendMessage(String.format("§cCannot change game mode, you are still banned for another %s.", MessageUtils.getTimeFromTicks(MessageUtils.timeUnitToTicks(ChronoUnit.SECONDS.between(LocalDateTime.now(), ban.getBan().ban().getExpirationDate()), TimeUnit.SECONDS), TimePattern.LONG)));
event.setCancelled(true);
}
}