From c7f5b36f2b717b1dc4f82541a05a74f4f89f76da Mon Sep 17 00:00:00 2001 From: Remy Duijsens Date: Mon, 27 Jul 2026 16:03:58 +0200 Subject: [PATCH 1/5] Make Nametags cleanup safe after partial initialization --- .../serverfeatures/features/nametags/Nametags.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/serverfeatures-platform-paper/src/main/java/nl/hauntedmc/serverfeatures/features/nametags/Nametags.java b/serverfeatures-platform-paper/src/main/java/nl/hauntedmc/serverfeatures/features/nametags/Nametags.java index 4fd98843..aa123f12 100644 --- a/serverfeatures-platform-paper/src/main/java/nl/hauntedmc/serverfeatures/features/nametags/Nametags.java +++ b/serverfeatures-platform-paper/src/main/java/nl/hauntedmc/serverfeatures/features/nametags/Nametags.java @@ -66,7 +66,9 @@ public void initialize() { getLifecycleManager().getDataManager().registerConnection("ormConnection", DatabaseType.MYSQL, "player_data_rw"); this.ormContext = getLifecycleManager().getDataManager() .createORMContext("ormConnection", PlayerNametagEntity.class) - .orElseThrow(); + .orElseThrow(() -> new IllegalStateException( + "Nametags requires the MYSQL/player_data_rw connection and could not create its ORM context." + )); this.repository = new NametagDBService(this); // Runtime manager @@ -84,7 +86,9 @@ public void initialize() { @Override public void disable() { - this.nametagManager.removeAllNametags(); + if (this.nametagManager != null) { + this.nametagManager.removeAllNametags(); + } } public NametagManager getNametagManager() { From 9a60f32f9a63c97d3685b8bbcf823347b1980b23 Mon Sep 17 00:00:00 2001 From: Remy Duijsens Date: Mon, 27 Jul 2026 16:53:30 +0200 Subject: [PATCH 2/5] Improve ChatLog database startup failure diagnostics --- .../nl/hauntedmc/serverfeatures/features/chatlog/ChatLog.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/serverfeatures-platform-paper/src/main/java/nl/hauntedmc/serverfeatures/features/chatlog/ChatLog.java b/serverfeatures-platform-paper/src/main/java/nl/hauntedmc/serverfeatures/features/chatlog/ChatLog.java index 8a4be8dc..4e369d62 100644 --- a/serverfeatures-platform-paper/src/main/java/nl/hauntedmc/serverfeatures/features/chatlog/ChatLog.java +++ b/serverfeatures-platform-paper/src/main/java/nl/hauntedmc/serverfeatures/features/chatlog/ChatLog.java @@ -56,7 +56,9 @@ public void initialize() { getLifecycleManager().getDataManager().registerConnection("ormConnection", DatabaseType.MYSQL, "player_data_rw"); ormContext = getLifecycleManager().getDataManager().createORMContext("ormConnection", ChatMessageEntity.class, - ReportedChatMessageEntity.class).orElseThrow(); + ReportedChatMessageEntity.class).orElseThrow(() -> new IllegalStateException( + "ChatLog requires the MYSQL/player_data_rw connection and could not create its ORM context." + )); reportHandler = new ReportHandler(this); getLifecycleManager().getListenerManager().registerListener(new ChatListener(this)); From 0a489a7b4f2eb8bb10378dbc51d6d5d3f763f52f Mon Sep 17 00:00:00 2001 From: Remy Duijsens Date: Mon, 27 Jul 2026 16:53:49 +0200 Subject: [PATCH 3/5] Improve CommandLogger database startup failure diagnostics --- .../serverfeatures/features/commandlogger/CommandLogger.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/serverfeatures-platform-paper/src/main/java/nl/hauntedmc/serverfeatures/features/commandlogger/CommandLogger.java b/serverfeatures-platform-paper/src/main/java/nl/hauntedmc/serverfeatures/features/commandlogger/CommandLogger.java index fa2aea65..d1aabdb8 100644 --- a/serverfeatures-platform-paper/src/main/java/nl/hauntedmc/serverfeatures/features/commandlogger/CommandLogger.java +++ b/serverfeatures-platform-paper/src/main/java/nl/hauntedmc/serverfeatures/features/commandlogger/CommandLogger.java @@ -42,7 +42,9 @@ public void initialize() { ormContext = getLifecycleManager().getDataManager().createORMContext( "ormConnection", CommandExecutionEntity.class - ).orElseThrow(); + ).orElseThrow(() -> new IllegalStateException( + "CommandLogger requires the MYSQL/player_data_rw connection and could not create its ORM context." + )); this.commandLogService = new CommandLogService(this); @@ -61,5 +63,4 @@ public ORMContext getOrmContext() { public CommandLogService getCommandLogService() { return commandLogService; } - } From 2a0f27c7abc20dc8b1ded90e8cebb4eadee2f5cd Mon Sep 17 00:00:00 2001 From: Remy Duijsens Date: Mon, 27 Jul 2026 16:54:16 +0200 Subject: [PATCH 4/5] Improve Sanctions database startup failure diagnostics --- .../serverfeatures/features/sanctions/Sanctions.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/serverfeatures-platform-paper/src/main/java/nl/hauntedmc/serverfeatures/features/sanctions/Sanctions.java b/serverfeatures-platform-paper/src/main/java/nl/hauntedmc/serverfeatures/features/sanctions/Sanctions.java index 5b21e307..acc92559 100644 --- a/serverfeatures-platform-paper/src/main/java/nl/hauntedmc/serverfeatures/features/sanctions/Sanctions.java +++ b/serverfeatures-platform-paper/src/main/java/nl/hauntedmc/serverfeatures/features/sanctions/Sanctions.java @@ -49,9 +49,10 @@ public void initialize() { getLifecycleManager().getDataManager().registerConnection( "orm", DatabaseType.MYSQL, "player_data_rw"); orm = getLifecycleManager().getDataManager() - .createORMContext("orm", - SanctionEntity.class) - .orElseThrow(); + .createORMContext("orm", SanctionEntity.class) + .orElseThrow(() -> new IllegalStateException( + "Sanctions requires the MYSQL/player_data_rw connection and could not create its ORM context." + )); this.service = new SanctionsDataService(this); this.muteRegistry = new MuteRegistry(service); @@ -94,5 +95,4 @@ public ORMContext getOrm() { public SanctionsDataService getService() { return service; } - } From 5f0011d579241abe153d5f7fd1751c17c2bd8e79 Mon Sep 17 00:00:00 2001 From: Remy Duijsens Date: Mon, 27 Jul 2026 16:54:52 +0200 Subject: [PATCH 5/5] Improve Glow database startup failure diagnostics --- .../java/nl/hauntedmc/serverfeatures/features/glow/Glow.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/serverfeatures-platform-paper/src/main/java/nl/hauntedmc/serverfeatures/features/glow/Glow.java b/serverfeatures-platform-paper/src/main/java/nl/hauntedmc/serverfeatures/features/glow/Glow.java index 3dd763aa..8afcaf1f 100644 --- a/serverfeatures-platform-paper/src/main/java/nl/hauntedmc/serverfeatures/features/glow/Glow.java +++ b/serverfeatures-platform-paper/src/main/java/nl/hauntedmc/serverfeatures/features/glow/Glow.java @@ -70,7 +70,9 @@ public void initialize() { ormContext = getLifecycleManager().getDataManager().createORMContext( "glowOrmConnection", PlayerGlowStateEntity.class - ).orElseThrow(); + ).orElseThrow(() -> new IllegalStateException( + "Glow requires the MYSQL/player_data_rw connection and could not create its ORM context." + )); this.registry = new GlowRegistry(); this.glowHandler = new GlowHandler(this);