From 60740386ac2f8094a87ff66615117611a80fc38c Mon Sep 17 00:00:00 2001 From: "Claude (Chronicler #83 - The Compiler)" Date: Mon, 13 Apr 2026 17:22:39 -0500 Subject: [PATCH] =?UTF-8?q?v1.0.2:=20Fix=20config=20reset=20=E2=80=94=20sw?= =?UTF-8?q?itch=20from=20SERVER=20to=20COMMON=20config=20type?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit SERVER configs in world/serverconfig/ are tied to the world load/unload lifecycle, causing Forge to overwrite edited values on every restart. COMMON configs in config/ load once at startup and persist reliably. Config location changed: firefrostrules: config/firefrostrules-common.toml discordrules: config/discordrules-common.toml All 6 builds updated (3 firefrostrules + 3 discordrules). Co-Authored-By: Claude Opus 4.6 (1M context) --- services/discord-rules/1.16.5/build.gradle | 2 +- .../java/com/discordrules/ServerRules.java | 4 ++-- services/discord-rules/1.20.1/build.gradle | 2 +- .../java/com/discordrules/ServerRules.java | 4 ++-- .../discord-rules/1.21.1/gradle.properties | 2 +- .../java/com/discordrules/ServerRules.java | 4 ++-- ...r => discord-rules-1.0.2-1.16.5-forge.jar} | Bin 13938 -> 13932 bytes ...r => discord-rules-1.0.2-1.20.1-forge.jar} | Bin 14044 -> 14039 bytes ...> discord-rules-1.0.2-1.21.1-neoforge.jar} | Bin 14083 -> 14077 bytes services/rules-mod/1.16.5/build.gradle | 2 +- .../firefrostgaming/rules/ServerRules.java | 4 ++-- services/rules-mod/1.20.1/build.gradle | 2 +- .../firefrostgaming/rules/ServerRules.java | 4 ++-- services/rules-mod/1.21.1/gradle.properties | 2 +- .../firefrostgaming/rules/ServerRules.java | 4 ++-- services/rules-mod/CHANGELOG.md | 21 ++++++++++++++++++ services/rules-mod/CLAUDE.md | 9 +++----- services/rules-mod/INSTALL.md | 21 ++++++++---------- ... => firefrostrules-1.0.2-1.16.5-forge.jar} | Bin 13625 -> 13617 bytes ... => firefrostrules-1.0.2-1.20.1-forge.jar} | Bin 13798 -> 13794 bytes ... firefrostrules-1.0.2-1.21.1-neoforge.jar} | Bin 13840 -> 13831 bytes 21 files changed, 51 insertions(+), 36 deletions(-) rename services/discord-rules/{discord-rules-1.0.1-1.16.5-forge.jar => discord-rules-1.0.2-1.16.5-forge.jar} (72%) rename services/discord-rules/{discord-rules-1.0.1-1.20.1-forge.jar => discord-rules-1.0.2-1.20.1-forge.jar} (82%) rename services/discord-rules/{discord-rules-1.0.1-1.21.1-neoforge.jar => discord-rules-1.0.2-1.21.1-neoforge.jar} (73%) rename services/rules-mod/{firefrostrules-1.0.1-1.16.5-forge.jar => firefrostrules-1.0.2-1.16.5-forge.jar} (68%) rename services/rules-mod/{firefrostrules-1.0.1-1.20.1-forge.jar => firefrostrules-1.0.2-1.20.1-forge.jar} (80%) rename services/rules-mod/{firefrostrules-1.0.1-1.21.1-neoforge.jar => firefrostrules-1.0.2-1.21.1-neoforge.jar} (70%) diff --git a/services/discord-rules/1.16.5/build.gradle b/services/discord-rules/1.16.5/build.gradle index 730fb39..58632e7 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.1' +version = '1.0.2' group = 'com.discordrules' archivesBaseName = 'discordrules' diff --git a/services/discord-rules/1.16.5/src/main/java/com/discordrules/ServerRules.java b/services/discord-rules/1.16.5/src/main/java/com/discordrules/ServerRules.java index cd693fe..a7c3428 100644 --- a/services/discord-rules/1.16.5/src/main/java/com/discordrules/ServerRules.java +++ b/services/discord-rules/1.16.5/src/main/java/com/discordrules/ServerRules.java @@ -16,7 +16,7 @@ public class ServerRules { private static final Logger LOGGER = LogManager.getLogger(ServerRules.class); public ServerRules() { - ModLoadingContext.get().registerConfig(ModConfig.Type.SERVER, ServerRulesConfig.SPEC); + ModLoadingContext.get().registerConfig(ModConfig.Type.COMMON, ServerRulesConfig.SPEC); FMLJavaModLoadingContext.get().getModEventBus().addListener(this::onConfigLoaded); MinecraftForge.EVENT_BUS.register(this); LOGGER.info("Discord Rules Mod Initialized."); @@ -26,7 +26,7 @@ public class ServerRules { if (event.getConfig().getSpec() == ServerRulesConfig.SPEC) { String token = ServerRulesConfig.BOT_TOKEN.get(); if (token.equals("YOUR_TOKEN_HERE")) { - LOGGER.warn("Rules mod is using default config values! Edit world/serverconfig/discordrules-server.toml"); + LOGGER.warn("Rules mod is using default config values! Edit config/discordrules-common.toml"); } else { LOGGER.info("Rules mod config loaded successfully. Channel: {}", ServerRulesConfig.CHANNEL_ID.get()); } diff --git a/services/discord-rules/1.20.1/build.gradle b/services/discord-rules/1.20.1/build.gradle index a30c0b3..550517c 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.1' +version = '1.0.2' group = 'com.discordrules' archivesBaseName = 'discordrules' diff --git a/services/discord-rules/1.20.1/src/main/java/com/discordrules/ServerRules.java b/services/discord-rules/1.20.1/src/main/java/com/discordrules/ServerRules.java index b6ef874..029f73d 100755 --- a/services/discord-rules/1.20.1/src/main/java/com/discordrules/ServerRules.java +++ b/services/discord-rules/1.20.1/src/main/java/com/discordrules/ServerRules.java @@ -16,7 +16,7 @@ public class ServerRules { private static final Logger LOGGER = LoggerFactory.getLogger(ServerRules.class); public ServerRules() { - ModLoadingContext.get().registerConfig(ModConfig.Type.SERVER, ServerRulesConfig.SPEC); + ModLoadingContext.get().registerConfig(ModConfig.Type.COMMON, ServerRulesConfig.SPEC); MinecraftForge.EVENT_BUS.register(this); LOGGER.info("Discord Rules Mod Initialized."); } @@ -37,7 +37,7 @@ public class ServerRules { if (event.getConfig().getSpec() == ServerRulesConfig.SPEC) { String token = ServerRulesConfig.BOT_TOKEN.get(); if (token.equals("YOUR_TOKEN_HERE")) { - LOGGER.warn("Rules mod is using default config values! Edit world/serverconfig/discordrules-server.toml"); + LOGGER.warn("Rules mod is using default config values! Edit config/discordrules-common.toml"); } else { LOGGER.info("Rules mod config loaded successfully. Channel: {}", ServerRulesConfig.CHANNEL_ID.get()); } diff --git a/services/discord-rules/1.21.1/gradle.properties b/services/discord-rules/1.21.1/gradle.properties index 3ed6dd9..b3d1fdd 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.1 +mod_version=1.0.2 mod_group_id=com.discordrules diff --git a/services/discord-rules/1.21.1/src/main/java/com/discordrules/ServerRules.java b/services/discord-rules/1.21.1/src/main/java/com/discordrules/ServerRules.java index 9f1b900..e933c1a 100644 --- a/services/discord-rules/1.21.1/src/main/java/com/discordrules/ServerRules.java +++ b/services/discord-rules/1.21.1/src/main/java/com/discordrules/ServerRules.java @@ -17,7 +17,7 @@ public class ServerRules { private static final Logger LOGGER = LoggerFactory.getLogger(ServerRules.class); public ServerRules(IEventBus modEventBus, ModContainer modContainer) { - modContainer.registerConfig(ModConfig.Type.SERVER, ServerRulesConfig.SPEC); + modContainer.registerConfig(ModConfig.Type.COMMON, ServerRulesConfig.SPEC); modEventBus.addListener(this::onConfigLoaded); modEventBus.addListener(this::onConfigReload); NeoForge.EVENT_BUS.register(this); @@ -39,7 +39,7 @@ public class ServerRules { if (event.getConfig().getSpec() == ServerRulesConfig.SPEC) { String token = ServerRulesConfig.BOT_TOKEN.get(); if (token.equals("YOUR_TOKEN_HERE")) { - LOGGER.warn("Rules mod is using default config values! Edit world/serverconfig/discordrules-server.toml"); + LOGGER.warn("Rules mod is using default config values! Edit config/discordrules-common.toml"); } else { LOGGER.info("Rules mod config loaded successfully. Channel: {}", ServerRulesConfig.CHANNEL_ID.get()); } diff --git a/services/discord-rules/discord-rules-1.0.1-1.16.5-forge.jar b/services/discord-rules/discord-rules-1.0.2-1.16.5-forge.jar similarity index 72% rename from services/discord-rules/discord-rules-1.0.1-1.16.5-forge.jar rename to services/discord-rules/discord-rules-1.0.2-1.16.5-forge.jar index 30c41ed8923d1a2481ed122314fe0dfbd1298cfa..c38458f2ac81468a5517714b44f344d78f871cff 100644 GIT binary patch delta 2336 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 F{TE*fHW2^- delta 2308 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 X0QnG;IyPVdmy??|I|e#400000+jo$% delta 1890 zcmV-o2c7uWZQN~;Oai!wkxpd}ke7>>3jk0{2MBFyg>|vPsU!lph?8t3MSpRsMcYC< zY;J%>2%$vN7L&FrE_FJ&2~#FBb(Uh?cg20*_kCZg*5U^rKl_t>e0)6j&LqS%fuep$ z=H5H^yyx8aoO{lh-~amMR{&RGp5Z*hDQS7rGaNVX1{U|U9CxR=n-yaPjA7-ZKCNq( zZWp!TiAiqw3YuxPYFnS!!GCa3#^%0OGHq_SdciL^Zjoz+lBJP~l4EOwPJS1|(rMia zI76aZDZ}Q5vUb5N3fZI_b&kwTaRo7kOBN}ipp{{X5MvmqBg3b;?Q8Ti{TXe_(r37< z9g>ffc+(k1uGfOu7}95v%z^n$l6ndwtrv_$9F7TBDmaIsd(ol_&Shw=l4sccFHWB2R{8Ab zGsG%WhGm)Ifq_((p*=%Lnr9VuOlp#Bm%?w^ZqqjXeun0*?y&?e#6@u|K_^3310zUp zL=dU>`5i>s#Ux$ipb| zk6eb!1xZ)b_eeRFlvkzY3U*Qmq{dQ1Bjfu`y>NM+{9kz_4L|=rmP&N+r6~G{vN; zTjrfS-`9eJlwNB?SHU&pO4BYlHOg|nOF<@;WiZ%^YcWI{{UatN)eV_b#R%PocE`?E z+*>N?cAliR*MD_zco}PVOFl?B!o(m>C!!;*(C`7@3W@;3SGAyTyNBm9czHvkl z-$PeW9J1t03N|KOvq-m&vTh`LaxZ!MdfX7l7;a=Ze*rPkwUI&!ZlWOSS}btr=v(5r z8MiW=TQ;8ORZU{6MkqqAy^RVW5A%Iv!WytlchRvcwSU722qSX}SDjf!lRk_QxhW}D zC%0+G9M{U%g(YeWD8{h@M{2L_DWnuk(j6*|Z`-nU#}(rgjHFSN$pHaeQ#Pq-FJ zaU6xspe}G((s8W3bIcypZCzfGDQYWRUUH^+sDWWsS1qJ)mJ2VA+d%}T|2O`mcfwpI z5)O)U`dHiJ9kI2(6SeJ2c&T^V{$i;(_D5x58U#*x5% zWXHbYk@1n?Yg3e4E?;~hscsVp?*Tk0ipoRO0+n4|oi9a!d?b!_c=R7lXPDp=JkGG< z#^KRyXvg@$R5sOuC#aV4+XLP58sy-^2|R_T<9|4gXBZBL8Mj0k*YwoDBV0Al3wmJr zYRG^pyHl@2P328r4P)1nDKlcIIskjaH+{ZSvRd#QrQKt?YbWqRn1^3v*m_c7gm1~% zP`$t~xaSoD%bMv^lSg#h=GIR2u6tVWGDAFhaPQDiDl?v@!trXz+H2JD*2(+z%T5Mw z2!9LSq-^6mN4YJUp#`GUc>S07tP1$B`(oJpuL8c(yUCD`C=0g+uI`(Tt-3tqt%E8h zdC1JuGWpKXDgRPd{eWS8gM==2DENptHOrDbflox+_c1KmPQv%ylXB2!HUgdC=VPmx;la}szySf)PtA7c6jc?-k3g1#>C7nEV$}2Kt=ul9a;O>Y% zVR6~y8oD*6yQY{&i|euhC9e`6Gd+_Q_S&}NOCsr(EYJD6adc3hiuNYb6nd^SLVSnC zb57tI{D5h3bWp#tggz9hriu22M$2eSEi?UpPqSOmOe3JP=Vxr3$EI0mv$%8)SAWi8 zPtOUYnlOuj_Vfu1H_82C4y?ga`fn%XRai+WY8_S+;u`!wtBDW~hj5+Ln?(+x><~Sh zgxsb%9G=IxK-O!J+sGb}tqRuTESx71*Mw3Lq8LrUAmksT(~L+xdGJV2l4e4pmGqc% zaOM%5R1lZ1RC;z)fwxw`TM2x60e|>0+!2AlPX-DT`w9H+IowZdeS+<1Ds3ecfuwk7`5RD62MBTJ zG&1Z4000FM002-+0|XQR2$Kf`6SJ`_)dmQ-h>curYK3*Pjx(784!DSoTyf_#GVBHb c00j|~H8x-ZoGg=kB_5NtHXH^&GXMYp05frwK>z>% diff --git a/services/discord-rules/discord-rules-1.0.1-1.21.1-neoforge.jar b/services/discord-rules/discord-rules-1.0.2-1.21.1-neoforge.jar similarity index 73% rename from services/discord-rules/discord-rules-1.0.1-1.21.1-neoforge.jar rename to services/discord-rules/discord-rules-1.0.2-1.21.1-neoforge.jar index 88242bca6996173fdde998652385c95b6c30ac1f..f2fb51a988b0c11029325d48ad1fdab3b1d3d1e2 100644 GIT binary patch delta 2454 zcmZXWc{Cf?9>-&sN~#i6%4m_)UQ6sst<@m46;;dBzBLi0Xo?gOq?VFeimGDl`x-$P zl+qH^){(}(bViG3sj<{!&U3|ni))8#>;P~5)IAJ&3}~Xd4-NQxrG$ zttjw;=V})Q^ouYH=}(=pT58wO+hB`W^L`&@-Xs z#T%Df=gj3C5{OZG9y7YrNOQ!zW48C>D){(z5Ci6OmFqMrzJI0r87OXC0<~XVumtvm zE79cx-i5-lZJjMn8M0Lr){#dzJVG$z3;$F1XpYNeYTyICJAc~>x6r`bz zG-+^wfX?SA7D)}{j{qeZ2Pm#e>&Ycdv+y;Xa=ADw3hTw?&L*4kLq7FwY%W8gps%Qr zYO2>#cWzo^gF}5C-*@XUP~3yUHzcXQ)U^zNZl%Q=+!Ombfmd8E%@!rv2;~!H&KfBB z-GsG)?(_$NWX*0%XvF9PYaVX^29-soqOV*cWLaLcn^(-Vk^cwYlaS=at5@a102)aciW@lwAs{n2-)>7O>+r6NKror>b0P0ZbcxG1=D2Hd8G zx|ad_WNXaD0#P~P-kyflZ+zqWW&TG~jxlvZaY zh%JbC*C+h0*WClRXt%|Mkp2jJja)nQb0`j~3CsWq-zV*dO2uVMICSCshd=%%a4ou_ zx{lP!U-6X0UZdIawsI{y31%mbo}CtL zPBDmuOm3Gcv|@YI2V#HtgxfXAVe`nkds*urr##x7ccme(a3Oc(QgdN2!MSPaKjzw2 z7HU!3Qt+Ku2&?BF?lHW2+T@-{ZXsG7W4-4 z4%)`|78x|C#g-TKS}P{KMWVmt?xPCd+fk|8m*p6eA>t2RkBAn=n!P39i3{fjZ)JSt za5c=QwX7TTTeM}n7u~nI_6SoI0-cgn%*474?$E4nFRvWgx;@maH0!&dDRdnZqE=PF zOLSRZeb0cTHit~r3ix8-*w8BZ=A=I?zD&b?gq zG?vE#?zx}bLx-`tJECY?JZeVQG2>0-XVD&G^tb{2O9R>vRgbB>KQ;X#pFC)2{?`1W zrb(1;ypm6ooA;-Vll)aS43#z{VAGvQOjvOf%aw!~j)NPW1iHt8$g6zawj}`>*993w z+0qEj)NRbX&RTWZblOFx$~G1)M&@~Pg*}Dg@$1eeo51@`TGDKXm*jcF^z`pLcMi_k zqmiCrxk4ExrOO)n0|Fn$6XYS0UAXDN5%R5FuLQ(wXmA6_*gC=S)&Uw@nLpt=p0M)hp( zY8*yJGeu404_Qj^&)KwT+`fEm8MXV@*1)S=cDPzjw{Uyc_V{Y1z!q7bu%95nu#fq( zv5nJWD1ZyT_c=+6*3fdB*O&1KOKXv(f+bN5$u9(dl~Iz#>_dK)$zWG>XMe?~r} zi!gx;=lg_kie$0Bn$p~6w*K5GrxxqVkupBxyDF#<;L`2rJA8_1B`oA5Jfo?1>tWZV z@x*R~kqdvvN}={FOq_OYLs$HVZ@7-07L^?Q_;F;6Wdu^sdGq`hiu$jB#u4RmcMdAA zphf^6H}jXr9f{vFHX{;OG_Iey{={;mzMN1R%O8=mpgO0`f-t~(&v@pSIXm>kcA`yX*O|B&zYZjS8+E z3dgISfMFx`>a!aV9rS@Hp=kN}%Avy6f$WcDg4@v%;D1pe$tgU7uK^BJ0v=OBgFQrq z{Y38x?sA=IfM_=7iSi&)IZiZBM)L1@uTlrgaZe#3RZpY?sdr2olq00#NvEWu1OACM zC=XN&PcB}oh_Hfz6eU$CC0UJ|VhRMwTAH!2^0WPyTaui7yc^x7*#LkEP5?j*@J}^H z8B-Kh6)&_LGt4c-ox@fx06^=QVI=-}0%(kK7d$qHQSt=;-}n|B<79ViiUb1yQa^oi zrVOd7pTq;IiLm|!|2y6#gaE}t4RkVfKAtAZ{3o>d`I7+Ot7ANfEC4_)D*zz;lUEak Mu6Bv@F7jmfZ;452v;Y7A delta 2403 zcmY+GdpHw(8^=fHIH?g^h{rLMh0P)6oEAAHltYf?5VkZA8J5$?VVUL7L^LfThqR_S z#pD<JG)A(ND%!tXTL-iFLvpP(ntaXS`3j5GkCLiPvCkl!OD$Up%te8E-2CF|o9 z62y$s*)*LGpDe+mnU#^ud)Z^^z9+o|qe^JF658g5cl=IGmF(>k4DMXumS1UlhwIp! zTx=`)h1&)K?tQNp4R_J0aI!=0hfG}HTyfWP*Qw75xv*N>JAz?1fY5mrhOZ1bX?E}v znSG&z=a>;T@)>*a7Jl(#jAQ@4lj;|}O;qc1CcJ!VnHsXQSa!ZsB@L`aC<`vo-{lx; zRg-22Wt5k4hiiRZ;H;qu;_NzYNjq%v=Ic@!Kaprq%!0%KoY)H6YiRV4in3ae4JymJlq=Z<4Y&DSR}A5(rrcK3^rFJ*3!vnDMa8sy*N9HEe#^(%>k@()zTW=2EaRMm0a@ zoA&2h6*+3NF@y3vU&00VvHW+g+!(lrt7*pbhI+ABs&|(aRBz=7)|1F8j=IfV136x+ z?jG-6840G~D-5nkhjta%=}}u)8K$^FZY*md+>1zFij;@xOffVLVzbgwE?;zGROr$BWD$dZeaJ2oG zh&-z3+1GcnMj%7NQ$LO`D-S!M1|ZKMte;tBV;$VX2QSl@mb1E<*~{%ZXC&(Am!>4N z!tg5gU~2*wb7xWsMh;v9637wPM+HYmM+X<{Yk7DT zZ$Ya|yDqA=di2;dqv&+vTytazCGpvQ_rvbNxnJjjxO1@ZDX5NT|K+*WxYRVGf#RML z$dd0=xFB!9)Xma|O&dS^^J-0C$QPnJeyqN~6!Z`bhaQc7c^|C{US^djlDzs+Vcs95 z1MCRNXRS@(=6XoIBy+1L(Fr<>JGVPk)9R%$(m=67ko;xP8rn@t@;HyceHB>gV45d1 zN9f%DGG29l^HoNVrdzVy*c`apR;Wl1_Cfsp$y`*&*BV;O3D1`C%nYcmFcM#7iR{Br z+a2Pmlrp!(v25Y3V{<0v3ok|(na6fj-sF|w=dfUGi1ko0v-sRuJm=Oa#nh<`sV}Y2 zRPcQ&Pd7!_;#q8@ys})>__i&Yke&0^<7eod3GKCJN`S_#+SjQXNfD;vkRP;!@DX6* z07mi-_tE(`Whi+;PTL6?c2dvKQ9C=Bc39&BPJiI0&}^6EyEhYQ;3VQNKZN*mtLyez zGycYnqvrIin|o|K@lCJ=*%!4j&+I!VX@L{9l}H3G>~yKbW$Zqz{YyBj|3S)bq3nji z5Svx@Bf8m51dHXY7P;x$Cpx5Xe8p!tLQ#&iEKk^c?CAj?Hqt&M)Y!Astb-ld{Ytq;?q3{JMw)o;tRrD1%POaKqgGm^W3Wl+PThyi@{?FR!4o4-Br~1aZ$tehZ+G1jXp9#} zrlr@Lr@qM7AiUuIgZ(t$Ge0oOQ1a^PKM%T86Eax)STuLD|8J3~PJw{)vC8!DyNZ5K z^fidffCOGBQmePP^+F>s#3YW zkT-+3I`xaGUe&$quHb8%Bvy2;`_m|EaS6P2Z=|Qq`%I@QB2L)!=a9GD_rEtnf#2@$ z+x=SHY_m@sv&VEE)sfMceMc@4Yi@STR!-}^O}9mAy+mbd4N638!AO*21pG|-UGCiV z2~RCBr<%)lB_8?MnywmmGOsOXt?-}3w0UED{2pR~3;SVsRXQlKWCbx}ngXt4xYsXN!4{9xSkOv*a)7wWae=(gYdhUb>z@9y`%1^#4)27$~bsFg6)n3i!q>0^6k)ys)k#3U7HeyY?8J+vPQ5mP9VK5iK=6fOV7W6T|1>zl z7acfK^8W${IRpPYdJzyomrKm+in9wq-KD;pw|`JPnomf(-V v004eB0HFED0(g|1ul>JMM9F!E`}zNH diff --git a/services/rules-mod/1.16.5/build.gradle b/services/rules-mod/1.16.5/build.gradle index bc166a5..d7bf1cb 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.1' +version = '1.0.2' group = 'com.firefrostgaming.rules' archivesBaseName = 'firefrostrules' diff --git a/services/rules-mod/1.16.5/src/main/java/com/firefrostgaming/rules/ServerRules.java b/services/rules-mod/1.16.5/src/main/java/com/firefrostgaming/rules/ServerRules.java index e8785b2..9600d3e 100644 --- a/services/rules-mod/1.16.5/src/main/java/com/firefrostgaming/rules/ServerRules.java +++ b/services/rules-mod/1.16.5/src/main/java/com/firefrostgaming/rules/ServerRules.java @@ -16,7 +16,7 @@ public class ServerRules { private static final Logger LOGGER = LogManager.getLogger(ServerRules.class); public ServerRules() { - ModLoadingContext.get().registerConfig(ModConfig.Type.SERVER, ServerRulesConfig.SPEC); + ModLoadingContext.get().registerConfig(ModConfig.Type.COMMON, ServerRulesConfig.SPEC); FMLJavaModLoadingContext.get().getModEventBus().addListener(this::onConfigLoaded); MinecraftForge.EVENT_BUS.register(this); LOGGER.info("Firefrost Rules Mod Initialized."); @@ -26,7 +26,7 @@ public class ServerRules { if (event.getConfig().getSpec() == ServerRulesConfig.SPEC) { String token = ServerRulesConfig.BOT_TOKEN.get(); if (token.equals("YOUR_TOKEN_HERE")) { - LOGGER.warn("Rules mod is using default config values! Edit world/serverconfig/firefrostrules-server.toml"); + LOGGER.warn("Rules mod is using default config values! Edit config/firefrostrules-common.toml"); } else { LOGGER.info("Rules mod config loaded successfully. Channel: {}", ServerRulesConfig.CHANNEL_ID.get()); } diff --git a/services/rules-mod/1.20.1/build.gradle b/services/rules-mod/1.20.1/build.gradle index 8d2f756..b0e82c8 100755 --- a/services/rules-mod/1.20.1/build.gradle +++ b/services/rules-mod/1.20.1/build.gradle @@ -10,7 +10,7 @@ buildscript { apply plugin: 'net.minecraftforge.gradle' -version = '1.0.1' +version = '1.0.2' group = 'com.firefrostgaming.rules' archivesBaseName = 'firefrostrules' diff --git a/services/rules-mod/1.20.1/src/main/java/com/firefrostgaming/rules/ServerRules.java b/services/rules-mod/1.20.1/src/main/java/com/firefrostgaming/rules/ServerRules.java index 989e016..cd43c39 100755 --- a/services/rules-mod/1.20.1/src/main/java/com/firefrostgaming/rules/ServerRules.java +++ b/services/rules-mod/1.20.1/src/main/java/com/firefrostgaming/rules/ServerRules.java @@ -16,7 +16,7 @@ public class ServerRules { private static final Logger LOGGER = LoggerFactory.getLogger(ServerRules.class); public ServerRules() { - ModLoadingContext.get().registerConfig(ModConfig.Type.SERVER, ServerRulesConfig.SPEC); + ModLoadingContext.get().registerConfig(ModConfig.Type.COMMON, ServerRulesConfig.SPEC); MinecraftForge.EVENT_BUS.register(this); LOGGER.info("Firefrost Rules Mod Initialized."); } @@ -37,7 +37,7 @@ public class ServerRules { if (event.getConfig().getSpec() == ServerRulesConfig.SPEC) { String token = ServerRulesConfig.BOT_TOKEN.get(); if (token.equals("YOUR_TOKEN_HERE")) { - LOGGER.warn("Rules mod is using default config values! Edit world/serverconfig/firefrostrules-server.toml"); + LOGGER.warn("Rules mod is using default config values! Edit config/firefrostrules-common.toml"); } else { LOGGER.info("Rules mod config loaded successfully. Channel: {}", ServerRulesConfig.CHANNEL_ID.get()); } diff --git a/services/rules-mod/1.21.1/gradle.properties b/services/rules-mod/1.21.1/gradle.properties index a77c052..d729a3c 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.1 +mod_version=1.0.2 mod_group_id=com.firefrostgaming.rules diff --git a/services/rules-mod/1.21.1/src/main/java/com/firefrostgaming/rules/ServerRules.java b/services/rules-mod/1.21.1/src/main/java/com/firefrostgaming/rules/ServerRules.java index ee195f8..4ea9289 100644 --- a/services/rules-mod/1.21.1/src/main/java/com/firefrostgaming/rules/ServerRules.java +++ b/services/rules-mod/1.21.1/src/main/java/com/firefrostgaming/rules/ServerRules.java @@ -17,7 +17,7 @@ public class ServerRules { private static final Logger LOGGER = LoggerFactory.getLogger(ServerRules.class); public ServerRules(IEventBus modEventBus, ModContainer modContainer) { - modContainer.registerConfig(ModConfig.Type.SERVER, ServerRulesConfig.SPEC); + modContainer.registerConfig(ModConfig.Type.COMMON, ServerRulesConfig.SPEC); modEventBus.addListener(this::onConfigLoaded); modEventBus.addListener(this::onConfigReload); NeoForge.EVENT_BUS.register(this); @@ -39,7 +39,7 @@ public class ServerRules { if (event.getConfig().getSpec() == ServerRulesConfig.SPEC) { String token = ServerRulesConfig.BOT_TOKEN.get(); if (token.equals("YOUR_TOKEN_HERE")) { - LOGGER.warn("Rules mod is using default config values! Edit world/serverconfig/firefrostrules-server.toml"); + LOGGER.warn("Rules mod is using default config values! Edit config/firefrostrules-common.toml"); } else { LOGGER.info("Rules mod config loaded successfully. Channel: {}", ServerRulesConfig.CHANNEL_ID.get()); } diff --git a/services/rules-mod/CHANGELOG.md b/services/rules-mod/CHANGELOG.md index 58ed8c0..bcd623d 100644 --- a/services/rules-mod/CHANGELOG.md +++ b/services/rules-mod/CHANGELOG.md @@ -1,5 +1,26 @@ # Rules Mod Changelog +## [1.0.2] - 2026-04-13 + +### Fixed +- **Config reset on restart** — switched from `ModConfig.Type.SERVER` to `ModConfig.Type.COMMON` +- SERVER configs live in `world/serverconfig/` and are tied to world load/unload lifecycle, causing Forge to overwrite edited values on every restart +- COMMON configs live in `config/` and load once at startup — values persist reliably + +### Changed +- Config location: `world/serverconfig/firefrostrules-server.toml` → `config/firefrostrules-common.toml` +- Config location (generic): `world/serverconfig/discordrules-server.toml` → `config/discordrules-common.toml` +- Updated `INSTALL.md` with new config path + +### Breaking +- Old config file at `world/serverconfig/` will be ignored — must re-enter values in new `config/` location + +### Applies To +- `firefrostrules` 1.0.2 (FFG branded, all 3 MC versions) +- `discordrules` 1.0.2 (generic/CurseForge fork, all 3 MC versions) + +--- + ## [1.0.1] - 2026-04-13 ### Fixed diff --git a/services/rules-mod/CLAUDE.md b/services/rules-mod/CLAUDE.md index 0dacb0c..1ce7c59 100644 --- a/services/rules-mod/CLAUDE.md +++ b/services/rules-mod/CLAUDE.md @@ -9,12 +9,9 @@ Player types `/rules` → mod fetches rules from a Discord message → displays in-game with colored formatting. Admins update rules by editing a Discord message — no restarts, no file editing. ## Config Location -Config file is created at `world/serverconfig/firefrostrules-server.toml` — NOT in `config/`. This applies to all three versions. - -## Install Procedure (IMPORTANT) -Do NOT place config files manually before first start. Forge must generate the file. -See `INSTALL.md` for full steps. Placing a config manually causes Forge to overwrite -it with defaults on startup (missing version header → config reset bug). +Config file is at `config/firefrostrules-common.toml` (COMMON type). +Changed from SERVER to COMMON in v1.0.2 to fix config reset on restart. +See `INSTALL.md` for full install steps. ## 7 Source Files (each version) - ServerRules.java — main mod class diff --git a/services/rules-mod/INSTALL.md b/services/rules-mod/INSTALL.md index f20e100..26e5623 100644 --- a/services/rules-mod/INSTALL.md +++ b/services/rules-mod/INSTALL.md @@ -1,19 +1,11 @@ # Rules Mod — Install Procedure -## Important: Do NOT place config files manually - -Forge generates `world/serverconfig/firefrostrules-server.toml` (or -`discordrules-server.toml` for the generic version) on first server start. -Placing a config file manually before the first run will cause Forge to -overwrite it with defaults — your bot token, channel ID, and message ID -will be lost. - ## Correct Install Steps 1. Place the jar in the server's `mods/` folder 2. Start the server once — Forge generates the config with defaults 3. Stop the server -4. Edit `world/serverconfig/firefrostrules-server.toml`: +4. Edit `config/firefrostrules-common.toml` (or `config/discordrules-common.toml`): - Set `bot_token` to your Discord bot token - Set `channel_id` to the channel containing your rules message - Set `message_id` to the specific message ID @@ -28,10 +20,15 @@ Rules mod config loaded successfully. Channel: If you see this instead, the config is still on defaults: ``` -Rules mod is using default config values! Edit world/serverconfig/firefrostrules-server.toml +Rules mod is using default config values! Edit config/firefrostrules-common.toml ``` ## Config Location -The config lives at `world/serverconfig/` — NOT `config/`. -This is standard Forge SERVER config behavior. +The config lives at `config/firefrostrules-common.toml` (COMMON type). +This loads once at startup and persists reliably across restarts. + +## Upgrading from v1.0.0 or v1.0.1 + +Old versions used `world/serverconfig/firefrostrules-server.toml`. +That file is now ignored. Copy your values to the new location above. diff --git a/services/rules-mod/firefrostrules-1.0.1-1.16.5-forge.jar b/services/rules-mod/firefrostrules-1.0.2-1.16.5-forge.jar similarity index 68% rename from services/rules-mod/firefrostrules-1.0.1-1.16.5-forge.jar rename to services/rules-mod/firefrostrules-1.0.2-1.16.5-forge.jar index 414599e6dc606e348dce792ac972de78dc130d7b..cf7d0653971a7965fb061f55b9d6e53826c7faa8 100644 GIT binary patch delta 2256 zcmY+GcT^L|7REy)l+b$@LlG$NE3+^frSvnP$Q@`QF;lX zcSM?iAfZVJMU=8Y5Tpq5$e#1wo}F`Mely?s?wvos+u&X0&2D9ShLIn@!omWmNJwGV z2A-ZKo>K7{i5YAFD^q5ciDY{XBLD#4dbg)~qoHWo>p8V0Qj1H#AdtDt1h5gQdTT-XC@9NYP0Y#=Ox zJfhSoi%*;AKtdUZ@1Sb45q@L3u#xQVSqbyX;x<)h;y}C)sWP~&&6^_kdh-q;E&+>-{6mpgm(EMFIT=Cz2)8oSq$} zo^3KW+$7qeC5>*4$P~5WVcN(}sHx95cX8tjPde2~PkptdOuKZ=i3%4p_bX`3DW>3l z6%?}pF^~9GlCXUN!BLRuzb1KvNBQ#4U7XbXEbvXA#a8(Grx;TSuyU}QBemT8VH(-A zA!=xKG%<`4`~?K!szjUma51{LZmtLxJ_?#8m2O^xt+E=j(%PD_X7`{oH3xn+b)}^% z1HApW?5>KsOF-*8Z9e}9%^!3-Yf&Ip{I>XKJ4ORqCOjEB=fTAH71mfjLMCrv}%9kc_!3(+5>-K&{<3+bq*&3MOm zSkEQw>y?1(0ZqIof>g&uT%zpH@J(ea1J z4jVc?#!cBsmwEHlm=R&dT&=xRpXCZCfzB_k9*o8>*F^f+staiS-1p9arWrqE{B38x zoqYa7Qd5^rVI5HJ9%^Fh+_$gJ2v376;)Wzo!wwBl5d0WMaJjK}qsybr<;_c_w&w^r z>%N9%cCHWaNK%cY4Auj`aHIE_x-I8O>0MKjN>9uvxK&QE)|ySl8+oMnevhUfd1l=9 zqP^5CEnMb`N?3$q_iDSi`s(=n7gph&9l@$;ik!Z%fr-^SE38vPic2v#pCjgn=YB&1 z=g}1^RZvXe=vst*RjwHqd$zD9QnQSCu(|t?q>e=Tr+|fMc?m*WK0%o3Lz;;e&K_Mp zB{ECa?|0#iZ!ql3(#Q*7T{rRl43)0I3JAdFW7~UAI8=WY285QVEJ#ilHo(efJn_Q;5!T?}hQVB-{%P8ix{?)+?jT9HX5_pw;1+}AHso4v>pOnbihQ9FYc4;5 zT++NOZwE69couh0eL*5yKXbnt7Ep`#iP+jYfi?da85BS_?#X^>!MZ1o2tEj7y??Xk zK$d-%(k@dO6|4d0*r5pUFXc_DH36IcG+`*lq@6I2be<>^Fw@Z%5m|xmu&^qw=yg@h z*B6c+jGXnd!nT_iHm9e#?SpO19*`1fYbj+?*IF(#M zwKWep`)KK-rywo#9;zdQpl?Z_Y5cCsUzz)Ei#~Q$ic*{4yd}grnx(<_bmmi>_5+yp zv-0=yA!0b{0A?R7kuNPE_jR>oUv!o~gvs@r_R7YE3V#Qo*~dX5!zM-%LEPaI*A4mW4ykv=LufjF z8M=dt2c zvjXtBh|Bcid4xD{NE~0KDvsxr;KnPeveQ+hsyL7n^0#UM;Z?LUWdQO6{x^vvIZ=7S nH)=rufCC!5l&bl_M0^ delta 2236 zcmY+GcQhMZAIFK6+KMOkXzkfZ)E-q)v#8dHk!mYK(HKDxsn~+jXw9mTqIRE9vncPw zgA$`f)kp_Q)qL#Ym7epy=RAMh`#JY>zvtdRzrR<$Exw#~R!qzS3_u`|ft-}dsRuaQ zExa#eWD~PF80@UrfNVQE=xYoN42ZM!uk4t{S(e1gXhMf2qxl&qS&VZ)Iz!l{S?D^O z2f@xqyHI44_cWcH`IuK79~qV#yl${JeE+m%Q{&;4b~SX^u%ZvkxF&n;*8|v_d(*HX zE|s2fjRd_1&HO<%#=wx_5PFtZW$fwI2-*Dk2A)T|AOXQ>y5oqXB^s_8GWU zY1gJ%V2+!DDElsOHA6XOT$5ROgl90{T*cvXP-5vqLuwoW2Qc6wDut7bk94t%V{k&w zZhP>D5i>6QL_Z!e@l*feV7QJ`?4N{KK$suy=G&hD)lqDVP-lpuru4|OGM+q-iC{_s zl20wSx}AI2M>ymFzyC;tQ+vuH{U;SBqnks_|Gl2O4VA6QLhLiB1$cv+|0wW9v! zm5Eqc*phoi0n3b(eo=^6hRJDyRo&O>5FDB%=Hh*$llTPJQFU~6@mO`)&bb7mVA&^R zH&s$&ta+q-U?mrm&^_r^v(bN|deU}TB(D2W5B#T|6k|EoGEr}C(X7QG8W!QII#~a3 zD9&izm-$C(*TJEuuQ5!hIaq1IY$Hf(z`MWg|IPidy8weB~5a=>r>?1R_xF%{5^m$|H`TckAX#u zW46agaK~3Qh46>*uJA~yjl&4rCWTqbk94mnrwDu7OO{EeUJ#9zMnCG}EIGhMcsyGc zngSN|NeyeDv0K?w7g9BdSnbS!ijvA{ruhbZgURisD3Y-CKW~amQ<6OaxoW%A{^<}G zJ&1rcKgQs>?cjL|my=ZC)L44zdfUcry}9H>Uy4)XGsou%uriuw% z#m`{*yB%*oZnAEp`Bh|FMp*FHcKh~;S?YhM=Bf0Ta`k3v*XLFFg;pC{_*H|yYyjN^ zl~6Xt-2EC>j?99!Dndu!rbt8*1_$fbqdPnwh?TB|1y?UW^IAV)j>xg$xOgDx1^Gr+7=u zN!DM>Ks@>@X-jDY3Fm12?n@Hf7>_XhCtAn*nthF1d7uO`VN*2mO$VxOKFrcl*{~Og z7Z=Xvc%3Iq@cKGcpI&=DOEx+&RW?*D!po^6ghZ`g zc$=y9ZhQnbQNh8!WM|dKPc8OXmfwPO$`8pP*P{Cr1+6rcqv+ISoI~+l+v?Dn8_5lQ zQU#SCfhCGTUzh9smTS6_^C!aP{*KU@d?%90%SQT{YrkO=yb5GxpELVDc65%cpzTFm2#_;CBbIQBK$;K%zi z;(Y^pldJZ#6ITyC&L_2)_2+7p?46$?O;xy>A%&HdJi57JGEYTOtM*Glj$SiH4Y$f& zFnbHY#fpQtyOVHxdDU6c&?$0W2;5FEs@!KfG3~I_#a`}7ha$XH6uh{?ZcyO~_c-Ls zUB_GR4;&5jxClhSaOd`!|BWTR={FPeY-{qB!>2QzEQ>ahh?p`-<*1vIMPn zh?ZZIWgo*gYO_4(;foSR6yFUYe<8c!1QDhA04nXr3~4QWQ^^)HI_sUiSrGE=nrPRQ zc*h8z!mp&3_%}}Qk06Vhm9>&JNr&zEmVnPYqMoVIgy)W{GFW-pX`iKRtNkI3=r*J= zS5x}-bklY0QRP;s(&;SgLe2iM??_t@ioxIAW)Qi*O;l*-h2tB8#5g~5|B9XTKoSdX zh8Cxx=1l4qz{1j?ec%Pd?A8ubmq~d$zEuJ*{7E<-y8bV$KJ9h>ryHpFyZKw zgI>-Q!nv$$HUni#bn`kClF|QGdutFKBhJ4v?Ib z=05$SeqXVS@r{g~w?p*Zz|34=x aH|Z1f_e;xAF~*l9R!vz}Mex}q!th@Lw;1jK diff --git a/services/rules-mod/firefrostrules-1.0.1-1.20.1-forge.jar b/services/rules-mod/firefrostrules-1.0.2-1.20.1-forge.jar similarity index 80% rename from services/rules-mod/firefrostrules-1.0.1-1.20.1-forge.jar rename to services/rules-mod/firefrostrules-1.0.2-1.20.1-forge.jar index 8eb9e08a94f5f371fa0fb74c319f2e2512d3d6a1..5a631f2aa221d0deb4b22f131f96001370dd3bb9 100644 GIT binary patch delta 1899 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 diff --git a/services/rules-mod/firefrostrules-1.0.1-1.21.1-neoforge.jar b/services/rules-mod/firefrostrules-1.0.2-1.21.1-neoforge.jar similarity index 70% rename from services/rules-mod/firefrostrules-1.0.1-1.21.1-neoforge.jar rename to services/rules-mod/firefrostrules-1.0.2-1.21.1-neoforge.jar index c2aeada1ee50798e884411f5841418af06ab1b0c..005c6bd9d31f0d2c27f91440ebc6b473ece2091f 100644 GIT binary patch delta 2515 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 aP;FJD#4Jrfzi~X@(LFo{0PLx9rvCuHhk4%s