From fe52a55830a22e65d7352d31c30a76675cbd625f Mon Sep 17 00:00:00 2001 From: Drefvelin <54400154+Drefvelin@users.noreply.github.com> Date: Mon, 12 Oct 2026 16:45:34 +0000 Subject: [PATCH] fix: reopen guild house tables after a restart SimpleFactions and RPCharacters soft depend on each other, so Paper can enable Games before SimpleFactions. Tables loaded then read every guild cap as zero, count as over cap, and stay closed until someone touches them. Ready every idle table again once the server has loaded, and again if SimpleFactions enables late. Co-Authored-By: Claude Opus 5.5 --- .../tfminecraft/games/table/TableManager.java | 26 ++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/tfminecraft/games/table/TableManager.java b/src/main/java/net/tfminecraft/games/table/TableManager.java index 1c0b940..7a00ffa 100644 --- a/src/main/java/net/tfminecraft/games/table/TableManager.java +++ b/src/main/java/net/tfminecraft/games/table/TableManager.java @@ -49,6 +49,8 @@ import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.event.player.PlayerSwapHandItemsEvent; import org.bukkit.event.player.PlayerToggleSneakEvent; +import org.bukkit.event.server.PluginEnableEvent; +import org.bukkit.event.server.ServerLoadEvent; import org.bukkit.event.world.ChunkLoadEvent; import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.ItemStack; @@ -1818,8 +1820,30 @@ private void refreshGuildAutoIdle(String guildId) { if (guildId == null || guildId.isBlank()) { return; } + refreshIdle(guildId); + } + + /** + * SimpleFactions and RPCharacters soft depend on each other, so Paper may enable Games before + * SimpleFactions. Tables loaded then read every guild cap as zero and stay closed, so ready + * every idle table again once the server has loaded, and again if SimpleFactions enables late. + */ + @EventHandler + public void onServerLoad(ServerLoadEvent event) { + refreshIdle(null); + } + + @EventHandler + public void onPluginEnable(PluginEnableEvent event) { + if ("SimpleFactions".equals(event.getPlugin().getName())) { + refreshIdle(null); + } + } + + /** Ready every idle table again, or only those of {@code guildId} when it is not null. */ + private void refreshIdle(String guildId) { for (Table table : tables.values()) { - if (table.live() || !guildId.equals(table.ownerGuildId())) { + if (table.live() || (guildId != null && !guildId.equals(table.ownerGuildId()))) { continue; } Game game = gameOf(table);