diff --git a/docs/code-bridge/status/ACTIVE_CONTEXT.md b/docs/code-bridge/status/ACTIVE_CONTEXT.md index 180a292..5c9f668 100644 --- a/docs/code-bridge/status/ACTIVE_CONTEXT.md +++ b/docs/code-bridge/status/ACTIVE_CONTEXT.md @@ -14,12 +14,13 @@ Rules mod config bug — iterating fixes for Otherworld (NC1, 1.20.1 Forge). - All 3 versions compiled (1.21.1 NeoForge on NC1, 1.20.1 + 1.16.5 Forge locally) - CurseForge project page copy pending from Chronicler -### Rules Mod Config Bug — IN PROGRESS 🔧 +### Rules Mod Config Bug — FIXED ✅ - v1.0.1: Added `ModConfigEvent.Loading` handler (symptom fix, not root cause) -- v1.0.2: Switched `ModConfig.Type.SERVER` → `COMMON` (config now persists across restarts ✅) -- v1.0.3: Fixed 1.20.1 event bus registration (config events were on wrong bus), added section header warnings to generated config -- v1.0.4: Diagnostic build (1.20.1 only) — INFO-level `[DIAG]` logs in RulesCommand + DiscordFetcher to trace where config-to-fetch pipeline breaks -- **Status:** Config loads correctly (Loading handler confirmed channel ID). `/rules` still returns defaults. Awaiting Chronicler's v1.0.4 diagnostic log output from Otherworld. +- v1.0.2: Switched `ModConfig.Type.SERVER` → `COMMON` (config persists ✅) +- v1.0.3: Fixed 1.20.1 event bus registration, added section header warnings +- v1.0.4: Diagnostic build — revealed DIAG logs never fired +- v1.0.5: **Root cause found** — console `/rules` hit early return, never fetched from Discord. Fixed: console path now fetches async. DIAG logging kept for observability. +- **Status:** WORKING on Otherworld. All 6 builds at v1.0.5. Ready for CurseForge submission. ### Bridge Queue — CLEAR ✅ - All REQs have matching RES files diff --git a/services/discord-rules/1.16.5/.gradle/7.6.4/checksums/checksums.lock b/services/discord-rules/1.16.5/.gradle/7.6.4/checksums/checksums.lock index 89537a4..7e5c63e 100644 Binary files a/services/discord-rules/1.16.5/.gradle/7.6.4/checksums/checksums.lock and b/services/discord-rules/1.16.5/.gradle/7.6.4/checksums/checksums.lock differ diff --git a/services/discord-rules/1.16.5/.gradle/7.6.4/executionHistory/executionHistory.bin b/services/discord-rules/1.16.5/.gradle/7.6.4/executionHistory/executionHistory.bin index f2dd2d3..59acfaf 100644 Binary files a/services/discord-rules/1.16.5/.gradle/7.6.4/executionHistory/executionHistory.bin and b/services/discord-rules/1.16.5/.gradle/7.6.4/executionHistory/executionHistory.bin differ diff --git a/services/discord-rules/1.16.5/.gradle/7.6.4/executionHistory/executionHistory.lock b/services/discord-rules/1.16.5/.gradle/7.6.4/executionHistory/executionHistory.lock index 1084d92..b80f80d 100644 Binary files a/services/discord-rules/1.16.5/.gradle/7.6.4/executionHistory/executionHistory.lock and b/services/discord-rules/1.16.5/.gradle/7.6.4/executionHistory/executionHistory.lock differ diff --git a/services/discord-rules/1.16.5/.gradle/7.6.4/fileHashes/fileHashes.bin b/services/discord-rules/1.16.5/.gradle/7.6.4/fileHashes/fileHashes.bin index b06d2ca..d079fc7 100644 Binary files a/services/discord-rules/1.16.5/.gradle/7.6.4/fileHashes/fileHashes.bin and b/services/discord-rules/1.16.5/.gradle/7.6.4/fileHashes/fileHashes.bin differ diff --git a/services/discord-rules/1.16.5/.gradle/7.6.4/fileHashes/fileHashes.lock b/services/discord-rules/1.16.5/.gradle/7.6.4/fileHashes/fileHashes.lock index 05dddc8..3bfbcae 100644 Binary files a/services/discord-rules/1.16.5/.gradle/7.6.4/fileHashes/fileHashes.lock and b/services/discord-rules/1.16.5/.gradle/7.6.4/fileHashes/fileHashes.lock differ diff --git a/services/discord-rules/1.16.5/.gradle/7.6.4/fileHashes/resourceHashesCache.bin b/services/discord-rules/1.16.5/.gradle/7.6.4/fileHashes/resourceHashesCache.bin index 2995216..408be67 100644 Binary files a/services/discord-rules/1.16.5/.gradle/7.6.4/fileHashes/resourceHashesCache.bin and b/services/discord-rules/1.16.5/.gradle/7.6.4/fileHashes/resourceHashesCache.bin differ diff --git a/services/discord-rules/1.16.5/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/services/discord-rules/1.16.5/.gradle/buildOutputCleanup/buildOutputCleanup.lock index 3034b2b..51cd701 100644 Binary files a/services/discord-rules/1.16.5/.gradle/buildOutputCleanup/buildOutputCleanup.lock and b/services/discord-rules/1.16.5/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ diff --git a/services/discord-rules/1.16.5/.gradle/buildOutputCleanup/outputFiles.bin b/services/discord-rules/1.16.5/.gradle/buildOutputCleanup/outputFiles.bin index 3785a87..7ea3836 100644 Binary files a/services/discord-rules/1.16.5/.gradle/buildOutputCleanup/outputFiles.bin and b/services/discord-rules/1.16.5/.gradle/buildOutputCleanup/outputFiles.bin differ diff --git a/services/discord-rules/1.16.5/.gradle/file-system.probe b/services/discord-rules/1.16.5/.gradle/file-system.probe index 7581ba4..56c6fa6 100644 Binary files a/services/discord-rules/1.16.5/.gradle/file-system.probe and b/services/discord-rules/1.16.5/.gradle/file-system.probe differ diff --git a/services/discord-rules/1.16.5/build.gradle b/services/discord-rules/1.16.5/build.gradle index d31da79..6c05348 100644 --- a/services/discord-rules/1.16.5/build.gradle +++ b/services/discord-rules/1.16.5/build.gradle @@ -10,7 +10,7 @@ buildscript { apply plugin: 'net.minecraftforge.gradle' -version = '1.0.3' +version = '1.0.5' group = 'com.discordrules' archivesBaseName = 'discordrules' diff --git a/services/discord-rules/1.16.5/src/main/java/com/discordrules/RulesCommand.java b/services/discord-rules/1.16.5/src/main/java/com/discordrules/RulesCommand.java index db26cea..6b2f5c9 100644 --- a/services/discord-rules/1.16.5/src/main/java/com/discordrules/RulesCommand.java +++ b/services/discord-rules/1.16.5/src/main/java/com/discordrules/RulesCommand.java @@ -15,8 +15,25 @@ public class RulesCommand { public static void register(CommandDispatcher dispatcher) { dispatcher.register(Commands.literal("rules").executes(context -> { CommandSource source = context.getSource(); + LOGGER.info("[DIAG] /rules invoked. isPlayer={}, token length={}, channel={}, messageId={}, isValid={}", + source.getEntity() instanceof ServerPlayerEntity, + ServerRulesConfig.BOT_TOKEN.get().length(), + ServerRulesConfig.CHANNEL_ID.get(), + ServerRulesConfig.MESSAGE_ID.get(), + ServerRulesConfig.isMessageIdValid()); if (!(source.getEntity() instanceof ServerPlayerEntity)) { - source.sendSuccess(DiscordFormatter.formatRules(RulesCache.getRules()), false); + LOGGER.info("[DIAG] Console path — fetching from Discord"); + DiscordFetcher.fetchRulesAsync().thenAccept(fetchedRules -> { + String rulesText; + if (fetchedRules != null) { + RulesCache.updateCache(fetchedRules); + rulesText = fetchedRules; + } else { + LOGGER.warn("Discord fetch failed. Using fallback rules."); + rulesText = RulesCache.getRules(); + } + source.getServer().execute(() -> source.sendSuccess(DiscordFormatter.formatRules(rulesText), false)); + }); return 1; } ServerPlayerEntity player = (ServerPlayerEntity) source.getEntity(); diff --git a/services/discord-rules/1.20.1/.gradle/8.8/checksums/checksums.lock b/services/discord-rules/1.20.1/.gradle/8.8/checksums/checksums.lock index 96edaee..123b6bd 100644 Binary files a/services/discord-rules/1.20.1/.gradle/8.8/checksums/checksums.lock and b/services/discord-rules/1.20.1/.gradle/8.8/checksums/checksums.lock differ diff --git a/services/discord-rules/1.20.1/.gradle/8.8/executionHistory/executionHistory.bin b/services/discord-rules/1.20.1/.gradle/8.8/executionHistory/executionHistory.bin index f6de6c4..2cfa2af 100644 Binary files a/services/discord-rules/1.20.1/.gradle/8.8/executionHistory/executionHistory.bin and b/services/discord-rules/1.20.1/.gradle/8.8/executionHistory/executionHistory.bin differ diff --git a/services/discord-rules/1.20.1/.gradle/8.8/executionHistory/executionHistory.lock b/services/discord-rules/1.20.1/.gradle/8.8/executionHistory/executionHistory.lock index fc6cb82..0516559 100644 Binary files a/services/discord-rules/1.20.1/.gradle/8.8/executionHistory/executionHistory.lock and b/services/discord-rules/1.20.1/.gradle/8.8/executionHistory/executionHistory.lock differ diff --git a/services/discord-rules/1.20.1/.gradle/8.8/fileHashes/fileHashes.bin b/services/discord-rules/1.20.1/.gradle/8.8/fileHashes/fileHashes.bin index 5dff49a..bac2a7b 100644 Binary files a/services/discord-rules/1.20.1/.gradle/8.8/fileHashes/fileHashes.bin and b/services/discord-rules/1.20.1/.gradle/8.8/fileHashes/fileHashes.bin differ diff --git a/services/discord-rules/1.20.1/.gradle/8.8/fileHashes/fileHashes.lock b/services/discord-rules/1.20.1/.gradle/8.8/fileHashes/fileHashes.lock index d51ae57..329de84 100644 Binary files a/services/discord-rules/1.20.1/.gradle/8.8/fileHashes/fileHashes.lock and b/services/discord-rules/1.20.1/.gradle/8.8/fileHashes/fileHashes.lock differ diff --git a/services/discord-rules/1.20.1/.gradle/8.8/fileHashes/resourceHashesCache.bin b/services/discord-rules/1.20.1/.gradle/8.8/fileHashes/resourceHashesCache.bin index 5e082e2..e331b87 100644 Binary files a/services/discord-rules/1.20.1/.gradle/8.8/fileHashes/resourceHashesCache.bin and b/services/discord-rules/1.20.1/.gradle/8.8/fileHashes/resourceHashesCache.bin differ diff --git a/services/discord-rules/1.20.1/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/services/discord-rules/1.20.1/.gradle/buildOutputCleanup/buildOutputCleanup.lock index 252a8d4..1e30140 100644 Binary files a/services/discord-rules/1.20.1/.gradle/buildOutputCleanup/buildOutputCleanup.lock and b/services/discord-rules/1.20.1/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ diff --git a/services/discord-rules/1.20.1/.gradle/buildOutputCleanup/outputFiles.bin b/services/discord-rules/1.20.1/.gradle/buildOutputCleanup/outputFiles.bin index 31591c9..af9feb9 100644 Binary files a/services/discord-rules/1.20.1/.gradle/buildOutputCleanup/outputFiles.bin and b/services/discord-rules/1.20.1/.gradle/buildOutputCleanup/outputFiles.bin differ diff --git a/services/discord-rules/1.20.1/.gradle/file-system.probe b/services/discord-rules/1.20.1/.gradle/file-system.probe index b10220d..b0f787b 100644 Binary files a/services/discord-rules/1.20.1/.gradle/file-system.probe and b/services/discord-rules/1.20.1/.gradle/file-system.probe differ diff --git a/services/discord-rules/1.20.1/build.gradle b/services/discord-rules/1.20.1/build.gradle index 6210bd5..e0ade4c 100755 --- a/services/discord-rules/1.20.1/build.gradle +++ b/services/discord-rules/1.20.1/build.gradle @@ -10,7 +10,7 @@ buildscript { apply plugin: 'net.minecraftforge.gradle' -version = '1.0.3' +version = '1.0.5' group = 'com.discordrules' archivesBaseName = 'discordrules' diff --git a/services/discord-rules/1.20.1/src/main/java/com/discordrules/RulesCommand.java b/services/discord-rules/1.20.1/src/main/java/com/discordrules/RulesCommand.java index d50f9b9..d3d7183 100755 --- a/services/discord-rules/1.20.1/src/main/java/com/discordrules/RulesCommand.java +++ b/services/discord-rules/1.20.1/src/main/java/com/discordrules/RulesCommand.java @@ -15,8 +15,25 @@ public class RulesCommand { public static void register(CommandDispatcher dispatcher) { dispatcher.register(Commands.literal("rules").executes(context -> { CommandSourceStack source = context.getSource(); + LOGGER.info("[DIAG] /rules invoked. isPlayer={}, token length={}, channel={}, messageId={}, isValid={}", + source.getEntity() instanceof ServerPlayer, + ServerRulesConfig.BOT_TOKEN.get().length(), + ServerRulesConfig.CHANNEL_ID.get(), + ServerRulesConfig.MESSAGE_ID.get(), + ServerRulesConfig.isMessageIdValid()); if (source.getEntity() == null || !(source.getEntity() instanceof ServerPlayer)) { - source.sendSystemMessage(DiscordFormatter.formatRules(RulesCache.getRules())); + LOGGER.info("[DIAG] Console path — fetching from Discord"); + DiscordFetcher.fetchRulesAsync().thenAccept(fetchedRules -> { + String rulesText; + if (fetchedRules != null) { + RulesCache.updateCache(fetchedRules); + rulesText = fetchedRules; + } else { + LOGGER.warn("Discord fetch failed. Using fallback rules."); + rulesText = RulesCache.getRules(); + } + source.getServer().execute(() -> source.sendSystemMessage(DiscordFormatter.formatRules(rulesText))); + }); return 1; } ServerPlayer player = (ServerPlayer) source.getEntity(); diff --git a/services/discord-rules/1.21.1/gradle.properties b/services/discord-rules/1.21.1/gradle.properties index f881f3d..d320e91 100644 --- a/services/discord-rules/1.21.1/gradle.properties +++ b/services/discord-rules/1.21.1/gradle.properties @@ -6,5 +6,5 @@ neo_version=21.1.65 mod_id=discordrules mod_name=Discord Rules -mod_version=1.0.3 +mod_version=1.0.5 mod_group_id=com.discordrules diff --git a/services/discord-rules/1.21.1/src/main/java/com/discordrules/RulesCommand.java b/services/discord-rules/1.21.1/src/main/java/com/discordrules/RulesCommand.java index 49dee53..a7e0bdc 100644 --- a/services/discord-rules/1.21.1/src/main/java/com/discordrules/RulesCommand.java +++ b/services/discord-rules/1.21.1/src/main/java/com/discordrules/RulesCommand.java @@ -15,8 +15,25 @@ public class RulesCommand { public static void register(CommandDispatcher dispatcher) { dispatcher.register(Commands.literal("rules").executes(context -> { CommandSourceStack source = context.getSource(); + LOGGER.info("[DIAG] /rules invoked. isPlayer={}, token length={}, channel={}, messageId={}, isValid={}", + source.isPlayer(), + ServerRulesConfig.BOT_TOKEN.get().length(), + ServerRulesConfig.CHANNEL_ID.get(), + ServerRulesConfig.MESSAGE_ID.get(), + ServerRulesConfig.isMessageIdValid()); if (!source.isPlayer()) { - source.sendSystemMessage(DiscordFormatter.formatRules(RulesCache.getRules())); + LOGGER.info("[DIAG] Console path — fetching from Discord"); + DiscordFetcher.fetchRulesAsync().thenAccept(fetchedRules -> { + String rulesText; + if (fetchedRules != null) { + RulesCache.updateCache(fetchedRules); + rulesText = fetchedRules; + } else { + LOGGER.warn("Discord fetch failed. Using fallback rules."); + rulesText = RulesCache.getRules(); + } + source.getServer().execute(() -> source.sendSystemMessage(DiscordFormatter.formatRules(rulesText))); + }); return 1; } ServerPlayer player = source.getPlayer(); diff --git a/services/discord-rules/discord-rules-1.0.3-1.16.5-forge.jar b/services/discord-rules/discord-rules-1.0.5-1.16.5-forge.jar similarity index 67% rename from services/discord-rules/discord-rules-1.0.3-1.16.5-forge.jar rename to services/discord-rules/discord-rules-1.0.5-1.16.5-forge.jar index 31f8554..462650b 100644 Binary files a/services/discord-rules/discord-rules-1.0.3-1.16.5-forge.jar and b/services/discord-rules/discord-rules-1.0.5-1.16.5-forge.jar differ diff --git a/services/discord-rules/discord-rules-1.0.3-1.20.1-forge.jar b/services/discord-rules/discord-rules-1.0.5-1.20.1-forge.jar similarity index 75% rename from services/discord-rules/discord-rules-1.0.3-1.20.1-forge.jar rename to services/discord-rules/discord-rules-1.0.5-1.20.1-forge.jar index d6ad4d1..6594d07 100644 Binary files a/services/discord-rules/discord-rules-1.0.3-1.20.1-forge.jar and b/services/discord-rules/discord-rules-1.0.5-1.20.1-forge.jar differ diff --git a/services/discord-rules/discord-rules-1.0.3-1.21.1-neoforge.jar b/services/discord-rules/discord-rules-1.0.5-1.21.1-neoforge.jar similarity index 70% rename from services/discord-rules/discord-rules-1.0.3-1.21.1-neoforge.jar rename to services/discord-rules/discord-rules-1.0.5-1.21.1-neoforge.jar index 72fc3a9..1482bd1 100644 Binary files a/services/discord-rules/discord-rules-1.0.3-1.21.1-neoforge.jar and b/services/discord-rules/discord-rules-1.0.5-1.21.1-neoforge.jar differ diff --git a/services/rules-mod/1.16.5/.gradle/7.6.4/checksums/checksums.lock b/services/rules-mod/1.16.5/.gradle/7.6.4/checksums/checksums.lock index 529cc53..253bd25 100644 Binary files a/services/rules-mod/1.16.5/.gradle/7.6.4/checksums/checksums.lock and b/services/rules-mod/1.16.5/.gradle/7.6.4/checksums/checksums.lock differ diff --git a/services/rules-mod/1.16.5/.gradle/7.6.4/executionHistory/executionHistory.bin b/services/rules-mod/1.16.5/.gradle/7.6.4/executionHistory/executionHistory.bin index 0ab2010..f33645b 100644 Binary files a/services/rules-mod/1.16.5/.gradle/7.6.4/executionHistory/executionHistory.bin and b/services/rules-mod/1.16.5/.gradle/7.6.4/executionHistory/executionHistory.bin differ diff --git a/services/rules-mod/1.16.5/.gradle/7.6.4/executionHistory/executionHistory.lock b/services/rules-mod/1.16.5/.gradle/7.6.4/executionHistory/executionHistory.lock index 0b95b8f..2bd76c8 100644 Binary files a/services/rules-mod/1.16.5/.gradle/7.6.4/executionHistory/executionHistory.lock and b/services/rules-mod/1.16.5/.gradle/7.6.4/executionHistory/executionHistory.lock differ diff --git a/services/rules-mod/1.16.5/.gradle/7.6.4/fileHashes/fileHashes.bin b/services/rules-mod/1.16.5/.gradle/7.6.4/fileHashes/fileHashes.bin index 437514c..87e6208 100644 Binary files a/services/rules-mod/1.16.5/.gradle/7.6.4/fileHashes/fileHashes.bin and b/services/rules-mod/1.16.5/.gradle/7.6.4/fileHashes/fileHashes.bin differ diff --git a/services/rules-mod/1.16.5/.gradle/7.6.4/fileHashes/fileHashes.lock b/services/rules-mod/1.16.5/.gradle/7.6.4/fileHashes/fileHashes.lock index 901268c..548008f 100644 Binary files a/services/rules-mod/1.16.5/.gradle/7.6.4/fileHashes/fileHashes.lock and b/services/rules-mod/1.16.5/.gradle/7.6.4/fileHashes/fileHashes.lock differ diff --git a/services/rules-mod/1.16.5/.gradle/7.6.4/fileHashes/resourceHashesCache.bin b/services/rules-mod/1.16.5/.gradle/7.6.4/fileHashes/resourceHashesCache.bin index 86cb7d3..f7d01d7 100644 Binary files a/services/rules-mod/1.16.5/.gradle/7.6.4/fileHashes/resourceHashesCache.bin and b/services/rules-mod/1.16.5/.gradle/7.6.4/fileHashes/resourceHashesCache.bin differ diff --git a/services/rules-mod/1.16.5/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/services/rules-mod/1.16.5/.gradle/buildOutputCleanup/buildOutputCleanup.lock index dd04d8a..84996e6 100644 Binary files a/services/rules-mod/1.16.5/.gradle/buildOutputCleanup/buildOutputCleanup.lock and b/services/rules-mod/1.16.5/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ diff --git a/services/rules-mod/1.16.5/.gradle/buildOutputCleanup/outputFiles.bin b/services/rules-mod/1.16.5/.gradle/buildOutputCleanup/outputFiles.bin index a6cccc4..388eb80 100644 Binary files a/services/rules-mod/1.16.5/.gradle/buildOutputCleanup/outputFiles.bin and b/services/rules-mod/1.16.5/.gradle/buildOutputCleanup/outputFiles.bin differ diff --git a/services/rules-mod/1.16.5/.gradle/file-system.probe b/services/rules-mod/1.16.5/.gradle/file-system.probe index c8d343b..a799ac1 100644 Binary files a/services/rules-mod/1.16.5/.gradle/file-system.probe and b/services/rules-mod/1.16.5/.gradle/file-system.probe differ diff --git a/services/rules-mod/1.16.5/build.gradle b/services/rules-mod/1.16.5/build.gradle index 778df8f..39d0cda 100644 --- a/services/rules-mod/1.16.5/build.gradle +++ b/services/rules-mod/1.16.5/build.gradle @@ -10,7 +10,7 @@ buildscript { apply plugin: 'net.minecraftforge.gradle' -version = '1.0.3' +version = '1.0.5' group = 'com.firefrostgaming.rules' archivesBaseName = 'firefrostrules' diff --git a/services/rules-mod/1.16.5/src/main/java/com/firefrostgaming/rules/RulesCommand.java b/services/rules-mod/1.16.5/src/main/java/com/firefrostgaming/rules/RulesCommand.java index d2d52cb..10e388a 100644 --- a/services/rules-mod/1.16.5/src/main/java/com/firefrostgaming/rules/RulesCommand.java +++ b/services/rules-mod/1.16.5/src/main/java/com/firefrostgaming/rules/RulesCommand.java @@ -15,8 +15,25 @@ public class RulesCommand { public static void register(CommandDispatcher dispatcher) { dispatcher.register(Commands.literal("rules").executes(context -> { CommandSource source = context.getSource(); + LOGGER.info("[DIAG] /rules invoked. isPlayer={}, token length={}, channel={}, messageId={}, isValid={}", + source.getEntity() instanceof ServerPlayerEntity, + ServerRulesConfig.BOT_TOKEN.get().length(), + ServerRulesConfig.CHANNEL_ID.get(), + ServerRulesConfig.MESSAGE_ID.get(), + ServerRulesConfig.isMessageIdValid()); if (!(source.getEntity() instanceof ServerPlayerEntity)) { - source.sendSuccess(DiscordFormatter.formatRules(RulesCache.getRules()), false); + LOGGER.info("[DIAG] Console path — fetching from Discord"); + DiscordFetcher.fetchRulesAsync().thenAccept(fetchedRules -> { + String rulesText; + if (fetchedRules != null) { + RulesCache.updateCache(fetchedRules); + rulesText = fetchedRules; + } else { + LOGGER.warn("Discord fetch failed. Using fallback rules."); + rulesText = RulesCache.getRules(); + } + source.getServer().execute(() -> source.sendSuccess(DiscordFormatter.formatRules(rulesText), false)); + }); return 1; } ServerPlayerEntity player = (ServerPlayerEntity) source.getEntity(); diff --git a/services/rules-mod/1.20.1/.gradle/8.8/checksums/checksums.lock b/services/rules-mod/1.20.1/.gradle/8.8/checksums/checksums.lock index 64d2a3b..3c2bef9 100644 Binary files a/services/rules-mod/1.20.1/.gradle/8.8/checksums/checksums.lock and b/services/rules-mod/1.20.1/.gradle/8.8/checksums/checksums.lock differ diff --git a/services/rules-mod/1.20.1/.gradle/8.8/executionHistory/executionHistory.bin b/services/rules-mod/1.20.1/.gradle/8.8/executionHistory/executionHistory.bin index da42365..b11af3b 100644 Binary files a/services/rules-mod/1.20.1/.gradle/8.8/executionHistory/executionHistory.bin and b/services/rules-mod/1.20.1/.gradle/8.8/executionHistory/executionHistory.bin differ diff --git a/services/rules-mod/1.20.1/.gradle/8.8/executionHistory/executionHistory.lock b/services/rules-mod/1.20.1/.gradle/8.8/executionHistory/executionHistory.lock index 2c06b24..d1d5714 100644 Binary files a/services/rules-mod/1.20.1/.gradle/8.8/executionHistory/executionHistory.lock and b/services/rules-mod/1.20.1/.gradle/8.8/executionHistory/executionHistory.lock differ diff --git a/services/rules-mod/1.20.1/.gradle/8.8/fileHashes/fileHashes.bin b/services/rules-mod/1.20.1/.gradle/8.8/fileHashes/fileHashes.bin index d1a0a7d..dff35c4 100644 Binary files a/services/rules-mod/1.20.1/.gradle/8.8/fileHashes/fileHashes.bin and b/services/rules-mod/1.20.1/.gradle/8.8/fileHashes/fileHashes.bin differ diff --git a/services/rules-mod/1.20.1/.gradle/8.8/fileHashes/fileHashes.lock b/services/rules-mod/1.20.1/.gradle/8.8/fileHashes/fileHashes.lock index cddf5d1..00a983c 100644 Binary files a/services/rules-mod/1.20.1/.gradle/8.8/fileHashes/fileHashes.lock and b/services/rules-mod/1.20.1/.gradle/8.8/fileHashes/fileHashes.lock differ diff --git a/services/rules-mod/1.20.1/.gradle/8.8/fileHashes/resourceHashesCache.bin b/services/rules-mod/1.20.1/.gradle/8.8/fileHashes/resourceHashesCache.bin index 7fb21ab..ea0f032 100644 Binary files a/services/rules-mod/1.20.1/.gradle/8.8/fileHashes/resourceHashesCache.bin and b/services/rules-mod/1.20.1/.gradle/8.8/fileHashes/resourceHashesCache.bin differ diff --git a/services/rules-mod/1.20.1/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/services/rules-mod/1.20.1/.gradle/buildOutputCleanup/buildOutputCleanup.lock index eea9814..fb7b7ab 100644 Binary files a/services/rules-mod/1.20.1/.gradle/buildOutputCleanup/buildOutputCleanup.lock and b/services/rules-mod/1.20.1/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ diff --git a/services/rules-mod/1.20.1/.gradle/buildOutputCleanup/outputFiles.bin b/services/rules-mod/1.20.1/.gradle/buildOutputCleanup/outputFiles.bin index bcbc59f..612e785 100644 Binary files a/services/rules-mod/1.20.1/.gradle/buildOutputCleanup/outputFiles.bin and b/services/rules-mod/1.20.1/.gradle/buildOutputCleanup/outputFiles.bin differ diff --git a/services/rules-mod/1.20.1/.gradle/file-system.probe b/services/rules-mod/1.20.1/.gradle/file-system.probe index 67c2bbe..dd0b3bb 100644 Binary files a/services/rules-mod/1.20.1/.gradle/file-system.probe and b/services/rules-mod/1.20.1/.gradle/file-system.probe differ diff --git a/services/rules-mod/1.21.1/gradle.properties b/services/rules-mod/1.21.1/gradle.properties index 4834876..99f3e31 100644 --- a/services/rules-mod/1.21.1/gradle.properties +++ b/services/rules-mod/1.21.1/gradle.properties @@ -6,5 +6,5 @@ neo_version=21.1.65 mod_id=firefrostrules mod_name=Firefrost Rules -mod_version=1.0.3 +mod_version=1.0.5 mod_group_id=com.firefrostgaming.rules diff --git a/services/rules-mod/1.21.1/src/main/java/com/firefrostgaming/rules/RulesCommand.java b/services/rules-mod/1.21.1/src/main/java/com/firefrostgaming/rules/RulesCommand.java index 11d3b9d..fb4807f 100644 --- a/services/rules-mod/1.21.1/src/main/java/com/firefrostgaming/rules/RulesCommand.java +++ b/services/rules-mod/1.21.1/src/main/java/com/firefrostgaming/rules/RulesCommand.java @@ -15,8 +15,25 @@ public class RulesCommand { public static void register(CommandDispatcher dispatcher) { dispatcher.register(Commands.literal("rules").executes(context -> { CommandSourceStack source = context.getSource(); + LOGGER.info("[DIAG] /rules invoked. isPlayer={}, token length={}, channel={}, messageId={}, isValid={}", + source.isPlayer(), + ServerRulesConfig.BOT_TOKEN.get().length(), + ServerRulesConfig.CHANNEL_ID.get(), + ServerRulesConfig.MESSAGE_ID.get(), + ServerRulesConfig.isMessageIdValid()); if (!source.isPlayer()) { - source.sendSystemMessage(DiscordFormatter.formatRules(RulesCache.getRules())); + LOGGER.info("[DIAG] Console path — fetching from Discord"); + DiscordFetcher.fetchRulesAsync().thenAccept(fetchedRules -> { + String rulesText; + if (fetchedRules != null) { + RulesCache.updateCache(fetchedRules); + rulesText = fetchedRules; + } else { + LOGGER.warn("Discord fetch failed. Using fallback rules."); + rulesText = RulesCache.getRules(); + } + source.getServer().execute(() -> source.sendSystemMessage(DiscordFormatter.formatRules(rulesText))); + }); return 1; } ServerPlayer player = source.getPlayer(); diff --git a/services/rules-mod/CHANGELOG.md b/services/rules-mod/CHANGELOG.md index 9c1b33d..280564c 100644 --- a/services/rules-mod/CHANGELOG.md +++ b/services/rules-mod/CHANGELOG.md @@ -1,13 +1,17 @@ # Rules Mod Changelog -## [1.0.5] - 2026-04-13 *(diagnostic + fix — 1.20.1 only)* +## [1.0.5] - 2026-04-13 ### Fixed - **Console path never fetched from Discord** — `/rules` from server console hit early return that only read from cache/fallback, never triggered `DiscordFetcher`. Console now fetches async like the player path. - **DIAG logs placed after early exit** — moved `[DIAG]` logging before the player/console branch so it fires on every invocation regardless of source -### Note -- Only `firefrostrules-1.0.5-1.20.1-forge.jar` was built. Other versions remain at 1.0.3. +### Added +- `[DIAG]` INFO-level logging on every `/rules` invocation: isPlayer, token length, channel, messageId, isValid +- INSTALL.md note about testing from console vs in-game + +### Applies To +- All 6 builds at 1.0.5 (3 firefrostrules + 3 discordrules) --- diff --git a/services/rules-mod/INSTALL.md b/services/rules-mod/INSTALL.md index f9895c7..e905cc4 100644 --- a/services/rules-mod/INSTALL.md +++ b/services/rules-mod/INSTALL.md @@ -30,6 +30,14 @@ Rules mod is using default config values! Edit config/firefrostrules-common.toml The config lives at `config/firefrostrules-common.toml` (COMMON type). This loads once at startup and persists reliably across restarts. +## Testing /rules + +Both console and in-game `/rules` will fetch from Discord. However, +for the best test, have a player run `/rules` in-game. The console +path fetches async and displays the result, but the in-game path +also shows the "Fetching latest rules..." message and applies the +per-player cooldown. + ## Upgrading from v1.0.0 or v1.0.1 Old versions used `world/serverconfig/firefrostrules-server.toml`. diff --git a/services/rules-mod/firefrostrules-1.0.3-1.20.1-forge.jar b/services/rules-mod/firefrostrules-1.0.3-1.20.1-forge.jar deleted file mode 100644 index aea7a76..0000000 Binary files a/services/rules-mod/firefrostrules-1.0.3-1.20.1-forge.jar and /dev/null differ diff --git a/services/rules-mod/firefrostrules-1.0.4-1.20.1-forge.jar b/services/rules-mod/firefrostrules-1.0.4-1.20.1-forge.jar deleted file mode 100644 index 4dc0d75..0000000 Binary files a/services/rules-mod/firefrostrules-1.0.4-1.20.1-forge.jar and /dev/null differ diff --git a/services/rules-mod/firefrostrules-1.0.3-1.16.5-forge.jar b/services/rules-mod/firefrostrules-1.0.5-1.16.5-forge.jar similarity index 64% rename from services/rules-mod/firefrostrules-1.0.3-1.16.5-forge.jar rename to services/rules-mod/firefrostrules-1.0.5-1.16.5-forge.jar index e3c83e1..a7d26aa 100644 Binary files a/services/rules-mod/firefrostrules-1.0.3-1.16.5-forge.jar and b/services/rules-mod/firefrostrules-1.0.5-1.16.5-forge.jar differ diff --git a/services/rules-mod/firefrostrules-1.0.3-1.21.1-neoforge.jar b/services/rules-mod/firefrostrules-1.0.5-1.21.1-neoforge.jar similarity index 70% rename from services/rules-mod/firefrostrules-1.0.3-1.21.1-neoforge.jar rename to services/rules-mod/firefrostrules-1.0.5-1.21.1-neoforge.jar index 768bc09..5ee9c0b 100644 Binary files a/services/rules-mod/firefrostrules-1.0.3-1.21.1-neoforge.jar and b/services/rules-mod/firefrostrules-1.0.5-1.21.1-neoforge.jar differ