From 34394ef8a594024a2dd1ba0bfc7de3d630c9f190 Mon Sep 17 00:00:00 2001 From: Martin Robertz Date: Tue, 28 Oct 2025 21:07:20 +0100 Subject: [PATCH 1/4] update --- dependencies.gradle | 4 ++-- gradle.properties | 4 +++- settings.gradle | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/dependencies.gradle b/dependencies.gradle index bb5e0328..23f88bd6 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -1,8 +1,8 @@ // Add your dependencies here dependencies { - api("com.github.GTNewHorizons:GTNHLib:0.6.39:dev") - implementation("com.github.GTNewHorizons:NotEnoughItems:2.7.86-GTNH:dev") + api("com.github.GTNewHorizons:GTNHLib:0.7.1:dev") + implementation("com.github.GTNewHorizons:NotEnoughItems:2.8.21-GTNH:dev") testImplementation(platform('org.junit:junit-bom:5.9.2')) testImplementation('org.junit.jupiter:junit-jupiter') diff --git a/gradle.properties b/gradle.properties index 1baf9d19..453759b3 100644 --- a/gradle.properties +++ b/gradle.properties @@ -96,7 +96,9 @@ usesMixinDebug = false # Specify the location of your implementation of IMixinConfigPlugin. Leave it empty otherwise. mixinPlugin = -# Specify the package that contains all of your Mixins. You may only place Mixins in this package or the build will fail! +# Specify the package that contains all of your Mixins. The package must exist or +# the build will fail. If you have a package property defined in your mixins..json, +# it must match with this or the build will fail. mixinsPackage = mixins # Specify the core mod entry class if you use a core mod. This class must implement IFMLLoadingPlugin! diff --git a/settings.gradle b/settings.gradle index bc5e0f05..05c912eb 100644 --- a/settings.gradle +++ b/settings.gradle @@ -17,7 +17,7 @@ pluginManagement { } plugins { - id 'com.gtnewhorizons.gtnhsettingsconvention' version '1.0.42' + id 'com.gtnewhorizons.gtnhsettingsconvention' version '1.0.47' } From dd3413dcaa6772bcf6480da05ac6cabd07de9745 Mon Sep 17 00:00:00 2001 From: Wilhelm Schuster Date: Mon, 15 Dec 2025 02:33:15 +0100 Subject: [PATCH 2/4] Don't enable buttons in channel configuration when channel key is empty (#51) The channel configuration GUI would allow pressing the "Add" button even though the channel key field was empty, leading to a crash. fixes https://github.com/GTNewHorizons/GT-New-Horizons-Modpack/issues/22838 --- .../structurelib/gui/GuiScreenConfigureChannels.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/gtnewhorizon/structurelib/gui/GuiScreenConfigureChannels.java b/src/main/java/com/gtnewhorizon/structurelib/gui/GuiScreenConfigureChannels.java index b554bf97..db64b541 100644 --- a/src/main/java/com/gtnewhorizon/structurelib/gui/GuiScreenConfigureChannels.java +++ b/src/main/java/com/gtnewhorizon/structurelib/gui/GuiScreenConfigureChannels.java @@ -298,11 +298,10 @@ public class GuiScreenConfigureChannels extends GuiContainer implements IGuiScre } break; } - if (key.textboxKeyTyped(aChar, aKey)) { + if (key.textboxKeyTyped(aChar, aKey) || value.textboxKeyTyped(aChar, aKey)) { updateButtons(); return; } - if (value.textboxKeyTyped(aChar, aKey)) return; super.keyTyped(aChar, aKey); } @@ -313,7 +312,8 @@ public class GuiScreenConfigureChannels extends GuiContainer implements IGuiScre boolean existing = !StringUtils.isEmpty(keyText) && ChannelDataAccessor.hasSubChannel(trigger, keyText); getButtonList().get(ADD_BTN).displayString = existing ? I18n.format(I18N_PREFIX + "set") : I18n.format(I18N_PREFIX + "add"); - getButtonList().get(ADD_BTN).enabled = !StringUtils.isBlank(value.getText()) + getButtonList().get(ADD_BTN).enabled = !StringUtils.isBlank(key.getText()) + && !StringUtils.isBlank(value.getText()) && Integer.parseInt(value.getText()) > 0; getButtonList().get(UNSET_BTN).enabled = existing && !StringUtils.isBlank(value.getText()); From a05267a566c3f552a40201edd58409d03789f4d9 Mon Sep 17 00:00:00 2001 From: UltraProdigy <187078471+UltraProdigy@users.noreply.github.com> Date: Wed, 17 Dec 2025 02:04:19 -0500 Subject: [PATCH 3/4] Replace Dot Hints With Number Hints (#52) As title says, makes the holograms much more readable. Textures By: bapy_ Original PR By: kstvr32 Supercedes: https://github.com/GTNewHorizons/StructureLib/pull/32 Examples: image image --- .../structurelib/block/BlockHint.java | 4 ++++ .../textures/blocks/iconsets/HINT_0.png | Bin 273 -> 176 bytes .../textures/blocks/iconsets/HINT_1.png | Bin 279 -> 208 bytes .../textures/blocks/iconsets/HINT_10.png | Bin 296 -> 212 bytes .../textures/blocks/iconsets/HINT_11.png | Bin 301 -> 234 bytes .../textures/blocks/iconsets/HINT_2.png | Bin 282 -> 196 bytes .../textures/blocks/iconsets/HINT_3.png | Bin 281 -> 186 bytes .../textures/blocks/iconsets/HINT_4.png | Bin 285 -> 186 bytes .../textures/blocks/iconsets/HINT_5.png | Bin 289 -> 204 bytes .../textures/blocks/iconsets/HINT_6.png | Bin 293 -> 184 bytes .../textures/blocks/iconsets/HINT_7.png | Bin 295 -> 198 bytes .../textures/blocks/iconsets/HINT_8.png | Bin 296 -> 204 bytes .../textures/blocks/iconsets/HINT_9.png | Bin 297 -> 225 bytes .../textures/blocks/iconsets/HINT_AIR.png | Bin 255 -> 133 bytes .../textures/blocks/iconsets/HINT_DEFAULT.png | Bin 301 -> 183 bytes .../textures/blocks/iconsets/HINT_ERROR.png | Bin 306 -> 197 bytes .../textures/blocks/iconsets/HINT_NOAIR.png | Bin 281 -> 164 bytes 17 files changed, 4 insertions(+) diff --git a/src/main/java/com/gtnewhorizon/structurelib/block/BlockHint.java b/src/main/java/com/gtnewhorizon/structurelib/block/BlockHint.java index 6c66c491..8f8dc11c 100644 --- a/src/main/java/com/gtnewhorizon/structurelib/block/BlockHint.java +++ b/src/main/java/com/gtnewhorizon/structurelib/block/BlockHint.java @@ -50,6 +50,10 @@ public class BlockHint extends Block { @Override public IIcon getIcon(int aSide, int aMeta) { + // For numbered hints, top and bottom are blank + if (aSide <= 1 && aMeta <= 11) { + return hint[13]; + } return hint[aMeta]; } diff --git a/src/main/resources/assets/structurelib/textures/blocks/iconsets/HINT_0.png b/src/main/resources/assets/structurelib/textures/blocks/iconsets/HINT_0.png index ad6cc6eaa352b3d3cf72cd2426882a380ea05ff8..7c68d81a73c09aa0f0cea57275fa34b257a4cca5 100644 GIT binary patch delta 148 zcmbQpw1IJgN`1Mfi(^Q|oaCO^+F$m}tPQP=jg5*%CuZoJJ$-#{tHc2ySn%sByXUO@ z;$j0Zco>|rBJ@3Uk;5E_GaINHTqF^5D25)zcg_L!ni^b0GHG50hg=DG5}dKHrL@bfRJVe1{~2yY!qTOfEZf|x&W6;uq_!%aWujWxXsN$l13B* imajWYmSzS91_l7_nJl;j;Nda=0000q)9|UR5;7MlQ9m$Fc1XCR(?Q34?p1}6jb~rB^^ax zk&354m4b>Vb9e@ z_Y1d&kGxrd2t-L=FK_qf$+MVwp1`#^6on)aJ>MRLQpUn3P_%&AGJ#(6$?gow78c+) zA%4#GUoE6%8fM#{fnEZ2+od&@geh;;IJ7Z2BA#}7M`IsrG%o-E002ovPDHLkV1hQ5 BUj_gG diff --git a/src/main/resources/assets/structurelib/textures/blocks/iconsets/HINT_10.png b/src/main/resources/assets/structurelib/textures/blocks/iconsets/HINT_10.png index a6d05e419b05d1a56ae0c229ec18284b4f4b1f3a..d5b395f6306e4ea7a8e96cdcdd977ea6d4fd9c43 100644 GIT binary patch delta 184 zcmZ3%bcJz(O8sn47srr_Imtb-wZH6{SsPj#8ygjkPR!6bd;0p^R*3^Zu;ABMcF$S) z#l;3-pvWziHPuKWYwDvbExz+OBZcG-sGdIpR41S|-+Nlx4#w4TerXolf4zfFbssh=w$;Mdf0?TD5%&aB^?D* zq+%4PQcy8MbQC~doY?vCRrb4+bdv1ia(@ZH1(Fa29o%U}0DsAYdkJtpY{@}YHn50?p{&-Dt7WAADKW?WeCkac5V;FKS!UR)RQyRm4QT3F@T9J*>4Dwo7 zIKY@@G{iXJGS%xIp)xoSe^ontUO8rJp7srr_Imtb-wZH6{SsPj#8ygjkPR!6bd;0p^R*3^Zu;ABMcF$S) z#l;FS49sm&OL;)x`TEl2jE0j7Pa7u&H~1S{&F=(h^s$@1;MwQvyB_)v&W(RLS6uAieX!}LnK^q_T*K1bAV#2pD&Z5k86uZD{LuAY^pF7vJYD@<);T3K F0RUPXRhIw& delta 274 zcmV+t0qy?k0j&a%B!32COGiWi002w?o97;d7XSbN32;bRa{vGf6951U69E94oEQKA z00(qQO+^Rc2nq)?5TcT*^8f$le-zhFbstM_{#<~^sotwP*AZ;N;(Rr zNW~~nrJ!Pj=qP}Ewxc|+lC9I}VY#^6Uji_JBt$_6Gg^^AvVY`U0-O(9)}X2zO8aGa zzLy2>HXsUuB$u#1UR^s!NP3RQkK3uc``fvYBtotj2Tu7+qyl554silzv$79yLMv9I zH-mL8%p9P{=?!tJ3eOkv-S*zx+YPscp;E_ME92c>3X{G9Ro!&oSQ4i6sp6rAs?}w01E&B07*qoM6N<$f=@AT=Kufz diff --git a/src/main/resources/assets/structurelib/textures/blocks/iconsets/HINT_2.png b/src/main/resources/assets/structurelib/textures/blocks/iconsets/HINT_2.png index ba328f6ed6760f87ff07be3d94bdb42b1ab6c117..d59ad88217f6fd408e085e49803f6fe730800b7f 100644 GIT binary patch delta 168 zcmV;Z09XH-0>lB3B!7!ZL_t(|oMVh#efmEG1%QQtfq@}1$e1k6%h#QS7{I{5z@Yl| z2T7W5b8{eEfDIUGm7?&^U+c!Ij)@q}xWur!0HzS#MnkPq21Bh<3~>wta5)thAUX_i z8ICm!sNw=*!vMntFok5h;QY02oQ4n`2G|thiXEcE02hE803l1;qyiQO21u?V7XScu W4KV0+)skKS00000ns_TKmY&$r%6OXR5;7Uld%!PFc1V+Kkk5p96F&90wQ{GNJc;v zjwl5p2Sk+MKLW7E8suRl2VAC+?sR|uA5PbY09+sm5r}YS5O)bAPtFa%akr)hZP(NI z=ZE{VjJ#Qa2$-awkGK2t?42bw&){}BWQ8PQCALSQn6W4m$hk1wS>nP5QH|mZvRzn0 zt_tyc4&?tUAuiK6+vOSPEzov-Tw_VN(pF7Fo01Lj0tEv~V^FAlH~qM3mKEfA6YjLrYp z496RYB)b5Yv+;S0Vi!=?3%CHj7=arAOWS0*VEMYUWNBt#U>9Hj0Q6TR;#8MERsaA1 M07*qoM6N<$g2qQff&c&j delta 253 zcmV3P$T<$N&HUrb$FWR5;6}ld%y3ArM6$3>}!5YbQ2hU}P^Bni*Kd zMV6w`1xA)|`wdhEMs6J7Wen`+?`LtR>q7u0kc4nV%$P-nWOms)033H~S{TNOV4oZA z&${Bx3WUQ;`g?f0KQHe2tmg%8mqSrV628XvS14vI>I6zIJZAK`@Uv*9I)icxm82~+ zh4?!MvOa-c2O*v9T1CG$#UAkjN?%Q5SZ}$a00000NkvXXu0mjf DAIo1^ diff --git a/src/main/resources/assets/structurelib/textures/blocks/iconsets/HINT_4.png b/src/main/resources/assets/structurelib/textures/blocks/iconsets/HINT_4.png index ba0d72772231f53885c6d4e581c44ea6bb411679..12d26c2943b31a2579042d581e59498721bb5277 100644 GIT binary patch delta 158 zcmV;P0Ac@~0=fZ^B!7WPL_t(|oMVh#efmEG1%QQtfq@}1$e1k6%h#QS7{I{5z@Yl| z2T7W5b8{eEfDR0`N^xpDf2|vZ&qR{7SO8WR;Ia)Hpsfqg!vdR&u)5&~&C zVSp=Uu)4rds}yfk672$F3?V5Du!&Ke4&VmB(l)7pg@FN*s~5-x043fhrq}ftWdHyG M07*qoM6N<$f*UkM)&Kwi delta 257 zcmV+c0sj8F0i6PnB!32COGiWi002w?o97;d7XSbN32;bRa{vGf6951U69E94oEQKA z00(qQO+^Rc2nq)>6ujhLs{jB1s!2paR5;6}ld%!PFc1XSKk9&l96F&90wQ{GNJc;v zjwl5p2Sk+MKLWrbdE{ZjZGztyx0b^(6n? zaDT>%H!BbgCh6zl?fyKwXNBh(ZkIzxl`zthNEMfw+E(~}6>B0uFm~aMl3qf)V z;Sg){VAI)-1h~k;l$6hQ6qnutZP$>sx)+RdRKq|00009mP234*&oFu1Q2eR5;6}ld%=TFbqV0^s)gBJ#4}v6jbbzl8z!% zq+%4PQcy8MbQF-hIL`qTuJg0*tUF7^>2eo<3nU>52DsCS1b&hy=Mvz!TeAdJ(^C5T zh1(-W-mE|rn53`8+x>a=&JxcvxYmcPkR&Y9b}uw!EMfw=E(~}6>B2g(7~u@^7J?XC z2#1)P2b<3JC*m}~pDpBw$ujk`9feCTfvRbTHI{@c{i<=v%00000 LNkvXXu0mjfLJDZ+ diff --git a/src/main/resources/assets/structurelib/textures/blocks/iconsets/HINT_6.png b/src/main/resources/assets/structurelib/textures/blocks/iconsets/HINT_6.png index cb3aa9325d21996696d8b33f63e7a182e982fb18..0d6b6eac09e7221bdedb4a62e34e3eb0db659eac 100644 GIT binary patch delta 156 zcmZ3=w1aViN`1Yji(^Q|oaCO^+F$m}tPQP=jg5*%CuZoJJ$-#{tHc2ySn%sByXUO@ z;$nrE1|FWRULUh;>eouQo_CqFHG-jy`$BF5V~n2iDb^o*TrV)BoV^j#ex1Q-)<-Fa zp0p-Cg(WjJm^m0BLrFcqyPW_vPnciR5;6}ld%!PFbqXsblHH09yVbS3MzImm7 zD%_v3>BKV4Wa79;FISwax0 zgs_RFd9dkhmx71$)WEM2(%@2JwoJopN8!?&plQ2tjV0mAzbZ8?O*X^}dMH+7gp1D} Q00000NkvXXt^-0~g4(TVeos;_jE>_-SK3@E{55;J9v&2Fq-lHh-pn^*mSlnYN^JoPA=vk z#(NGnK$VAGU3N1>Dw{1o%y2H^fOtVgY{Pl8oT3OIC7?Wq?Z73ol|XA5C#^og%1|>! VSE$$P=|2V_@O1TaS?83{1OP)*Nbvvw delta 268 zcmX@cxSVN%Nfk$L90|U1(2s1Lwnj--eWH0gbb!C6Z z!NqQ*Rom(W6k*un>Eak-aeC?Gje>^^cwFO4ZZ@>ZnI#HxX_a|;x*rr-DZ#o*B&0{6 zmdoSZIn9SW`#1St+Wv2P%-nVSj5{2J7A3V$kkP+7K~v2VBO{so!VS^xJG)K3%5 z4^z+kZCFn|(g>P~p_htX7b+6-#9a6mPTsUy``@hvZSYBSKsgy*PYh zW>t!8ewpWPEPpPTSzL9=$-u;KGu!U!wR-0_Eqi+`Uxzc?Zq=17TW$#G&n%5hKKf#R Q2*?MXu70d8>zopr0I;B9_W%F@ diff --git a/src/main/resources/assets/structurelib/textures/blocks/iconsets/HINT_8.png b/src/main/resources/assets/structurelib/textures/blocks/iconsets/HINT_8.png index 03c11338c3f8fa325ed65cc2832544c195a4aefd..af7ef27ad071d110a9761ed5d54f48aa6c1c7471 100644 GIT binary patch delta 176 zcmV;h08js@0?YxBB!81hL_t(|oMVh#efmEG1%QQtfq@}1$e1k6%h#QS7{I{5z@Yl| z2T7W5b8{eEfDIUGm7?&^U+c!Ij)@q}xWup;fUNNRwQdxfu^EEZ1u)In*hCwEY#T1; zV>JNX$@nxgFyM#lPyo6E2UA~uD%VkrV=O2ij+SPg)sZBhXX e0|O*ikqZD)YB93to-*J70000GH&VGRsaA1wMj%lR5;6}ld%=TFc3q3?qvfSdf0?TD5%&aB^^bk zNW~~nrJ!PjoG2i9F*ptms_b_@S(4Ai>2eo<3nU>52DsCS0DqDP`x4-|TeAdJ(^C5T zhT9{rd9wmhV3KAJZ};cPngyOGaIFtfB1u?|?4D@ISmY7JR2c63qry6|7+)Er(w?@E zkT+)`8e&RCtY)9H9eeYB9aCt(NKIKQ$FrRamtF)_(+=NQ60Y#6#-WXy4eI$$zVWB>pFwn;=mR5;6>lf4zfFbssh=y?Mgdf0?TD5%&aB^?D* zq+%4PQcy8MbQF-hnArKd%6^iiyOUg8?k@qjKoX*$gFB6gAb)vu4*=)GmNh7=n&7_< z&-b#&yA6l}lQfyUKVGvji!^8OxSf)PBw7MOMVPN7Ei&V`1cRMxn_MBp9bEu9<3;o?*3YWeG%Bt?Zu_RpasQRY$9~6Ek$qp1wY}RpI~;Eco@6-E&rc zaj^jyOiVQuk}yrU(r_@5!AAeUC9_C2o%r%;IpPcqUxRqKvYQ(IFaUw4tDnm{r-UW| D?szEc delta 227 zcmV<90382?0sjGzB!32COGiWi+yLwV|2VwwZU6uP32;bRa{vGf6951U69E94oEQKA z00(qQO+^Rc2nq)=0F4va6#xJLj7da6R5;7Uld%!PKnw);f7}5HIi=7Iy*Q*5N3=rZ zz!4=_OJMl%lRZBJn<>y~?j)t_Z4n>@6-g8#SfxUvst16}`CQ01jMK~zuL<`@Tl47v zlE^AOeCZbPZ?Z~h@gU!OB!7NML_t(|oMVh#efmEG1%QQtfq@}1$e1k6%h#QS7{I{5z@Yl| z2T7W5b8{eEfDIUGm7?&^U+c!I4#NO+jp*X&2H|u8xeBBBRUpvg*rOGFaVb;h)zg^G~hG`0j&a%B!32COGiWi002w?o97;d7XSbN32;bRa{vGf6951U69E94oEQKA z00(qQO+^Rc2nq)^8WbJmYXATMx=BPqR5;6}lQ9;8Knz4b`}PJl_IeX9VnO9yDD5mb z1(ip^io(hxkg*Vy#qb22E-y2iWRlI!*Si2rAPJH2h8e9$Ab(jBM}X5|%Ni6_L$t2K z?XgU}+knW3l3c?6cuC^A%w1kgX6}S_nY)5M_whr7F=?ujmot$*Fm8L!XaO_+L1?vJ z?0T@cgSiHJoG%l98R_NX__q5B-XVD%#<@G6LLA=qQke95ps1SnHlQ9;8Fc3sPdAWg&z1+l$P*8anN;?Wp zLFG}fqOkG^?pWZ%1R;+&RkFJ?$<8Ll_4W{e2_zv3W|;935q~6$_8#DJKJpKme#G17 zg!?m(d^&(AaMJgVWz|wv?Ivk0@1mZA!aXrbxG*qu^(rA;hczZ*fi;mW^4tPuq(o9N z0JofT4t_kyHF0VoQ8;w(^brb$FWR5;6}ld%!PFcd?decphEo@~M*DX7>bC0z=p zNW~~nrJ!Pjd{MyVYzV#>tNJb^`OC69UG4%ffh2@uh8dGcAa+@D4gkmfmVeL0kfavrTI%>s>m>#!S#GtoIeqA4mskg z5ZCoURwqz Date: Mon, 5 Jan 2026 03:21:14 +0100 Subject: [PATCH 4/4] Autocomplete channel name with tab (#53) --- .../structurelib/gui/GuiScreenConfigureChannels.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/java/com/gtnewhorizon/structurelib/gui/GuiScreenConfigureChannels.java b/src/main/java/com/gtnewhorizon/structurelib/gui/GuiScreenConfigureChannels.java index db64b541..a0015179 100644 --- a/src/main/java/com/gtnewhorizon/structurelib/gui/GuiScreenConfigureChannels.java +++ b/src/main/java/com/gtnewhorizon/structurelib/gui/GuiScreenConfigureChannels.java @@ -261,6 +261,11 @@ public class GuiScreenConfigureChannels extends GuiContainer implements IGuiScre switch (aKey) { case Keyboard.KEY_TAB: if (key.isFocused()) { + if (autoCompleteList.getSelectedElement() != null) { + key.setText(autoCompleteList.getSelectedElement()); + return; + } + key.setFocused(false); value.setFocused(true); } else {