11package net .guag .simplemodmanager .screen ;
22
33import net .guag .simplemodmanager .util .DrawingUtils ;
4- import net .guag .simplemodmanager .util .ResourceUtils ;
54import net .guag .simplemodmanager .widgets .CustomButtonWidget ;
65import net .guag .simplemodmanager .widgets .CustomTextWidget ;
6+
77import net .minecraft .client .Minecraft ;
88import net .minecraft .client .gui .GuiGraphicsExtractor ;
9+ import net .minecraft .client .gui .components .Tooltip ;
910import net .minecraft .client .gui .screens .Screen ;
1011import net .minecraft .client .gui .components .Button ;
1112import net .minecraft .client .gui .components .EditBox ;
1213import net .minecraft .network .chat .Component ;
13- import org .jetbrains .annotations .NotNull ;
1414
15+ import org .jetbrains .annotations .NotNull ;
1516
1617import java .util .*;
1718
1819
19- public class ModManagerScreen extends Screen {
20+ public class ContentManagerScreen extends Screen {
2021
2122 private final Minecraft client ;
22- private final List <ModToggle > modToggles ;
23- private final List <ModToggle > resourceToggles ;
24- private final List <ModToggle > shaderToggles ;
23+ private final List <FileToggle > modToggles ;
24+ private final List <FileToggle > resourceToggles ;
25+ private final List <FileToggle > shaderToggles ;
2526
2627 DrawingUtils drawUtil = new DrawingUtils ();
2728
@@ -50,8 +51,9 @@ public class ModManagerScreen extends Screen{
5051
5152 private final List <Button > headerButtons = new ArrayList <>();
5253
54+ private static final ArrayList <String > dependencies = new ArrayList <>();
5355
54- public ModManagerScreen (Minecraft client , List <ModToggle > modToggles , List <ModToggle > resourceToggles , List <ModToggle > shaderToggles ) {
56+ public ContentManagerScreen (Minecraft client , List <FileToggle > modToggles , List <FileToggle > resourceToggles , List <FileToggle > shaderToggles ) {
5557 super (Component .literal ("Simple Mod Manager" ));
5658 this .client = client ;
5759 this .modToggles = modToggles ;
@@ -61,7 +63,6 @@ public ModManagerScreen(Minecraft client, List<ModToggle> modToggles, List<ModTo
6163
6264 @ Override
6365 protected void init () {
64- ResourceUtils resourceUtil = new ResourceUtils ();
6566 this .modToggleButtons .clear ();
6667 this .modResetButtons .clear ();
6768 this .modMetadataButtons .clear ();
@@ -91,7 +92,7 @@ protected void init() {
9192 // Tab buttons
9293 int tabY = 42 ;
9394 int tabSpacing = 4 ;
94- int tabW = (this .width - 20 - tabSpacing * 2 ) / 3 ; // 20 = 10px from each edge
95+ int tabW = (this .width - 20 - tabSpacing * 2 ) / 3 ; // 20 = 10 px from each edge
9596 int tabStartX = 10 ;
9697 Button modsTab = CustomButtonWidget .builder (Component .literal ("Mods" ), _ -> { activeTab = "mods" ; updateScroll (); })
9798 .bounds (tabStartX , tabY , tabW , 18 ).build ();
@@ -107,23 +108,51 @@ protected void init() {
107108 addWidget (resourcesTab );
108109 addWidget (shadersTab );
109110
110- ModToggle .initializeDefaultDisabledMods ();
111+ FileToggle .initializeDefaultDisabledMods ();
111112
112113 int index = 0 ;
113- for (ModToggle toggle : modToggles ) {
114- Button toggleFunc = Button .builder (Component .literal (toggle .getButtonText ().getString ()), button -> {
115- toggle .toggled ();
116- button .setMessage (Component .literal (toggle .getButtonText ().getString ()));
114+
115+ //get dependencies
116+ for (FileToggle toggle : modToggles ) {
117+ for (String dependency : toggle .getDependencies ()) {
118+ if (!dependencies .contains (dependency )) dependencies .add (dependency );
119+ }
120+ }
121+
122+ //sort putting non-toggleable mods last
123+ modToggles .sort ((a , b ) -> {
124+ boolean aDep = dependencies .contains (a .getModId ());
125+ boolean bDep = dependencies .contains (b .getModId ());
126+ if (aDep != bDep ) return Boolean .compare (aDep , bDep ); // dependencies last
127+ return Boolean .compare (!a .isEnabled (), !b .isEnabled ()); // disabled last within each group
128+ });
129+
130+ for (FileToggle toggle : modToggles ) {
131+ Button toggleFunc = Button .builder (Component .literal (toggle .getButtonText ().getString ()), button -> {
132+ if (!dependencies .contains (toggle .getModId ())){
133+ toggle .toggled ();
134+ button .setMessage (Component .literal (toggle .getButtonText ().getString ()));
135+ } else {
136+ button .setTooltip (Tooltip .create (Component .literal ("§7Dependency" )));
137+ }
117138 }).bounds (0 , 0 , 60 , btnHeight ).build ();
139+
140+ toggleFunc .active = !dependencies .contains (toggle .getModId ()); //set toggle state depending on if it's a dependency
141+ // System.out.println(toggle.getModId() + (dependencies.contains(toggle.getModId()) ? " IS dependency " : " is NOT dependency"));
142+ // System.out.println(dependencies);
143+
118144 addWidget (toggleFunc );
119145 modToggleButtons .add (toggleFunc );
120146
121147 // capture before lambda
122148 Button resetFunc = Button .builder (Component .literal ("Reset" ), _ -> {
123- toggle .resetToDefault ();
124- toggleFunc .setMessage (Component .literal (toggle .getButtonText ().getString ()));
149+ if (!dependencies .contains (toggle .getModId ())){
150+ toggle .resetToDefault ();
151+ toggleFunc .setMessage (Component .literal (toggle .getButtonText ().getString ()));
152+ }
125153 }).bounds (0 , 0 , 50 , btnHeight ).build ();
126- addWidget (resetFunc ); // ← add this
154+ resetFunc .active = !dependencies .contains (toggle .getModId ());
155+ addWidget (resetFunc );
127156 modResetButtons .add (resetFunc );
128157
129158 Button metadataFunc = Button .builder (
@@ -137,7 +166,7 @@ protected void init() {
137166 }
138167
139168 index = 0 ;
140- for (ModToggle toggle : resourceToggles ) {
169+ for (FileToggle toggle : resourceToggles ) {
141170 Button resourceMetadataFunc = Button .builder (
142171 Component .literal (resourceToggles .get (index ).getFile ().getName ()), _ -> {}
143172 ).bounds (0 , 0 , 0 , btnHeight ).build ();
@@ -147,7 +176,6 @@ protected void init() {
147176
148177 Button resourceToggleFunc = Button .builder (Component .literal (toggle .getButtonText ().getString ()), button -> {
149178 toggle .toggled ();
150- resourceUtil .toggleResourcePack (toggle .getFile ().getName (), toggle .isEnabled ());
151179 button .setMessage (Component .literal (toggle .getButtonText ().getString ()));
152180 }).bounds (0 , 0 , 60 , btnHeight ).build ();
153181 addWidget (resourceToggleFunc );
@@ -156,7 +184,7 @@ protected void init() {
156184 }
157185
158186 index = 0 ;
159- for (ModToggle toggle : shaderToggles ) {
187+ for (FileToggle toggle : shaderToggles ) {
160188 Button shaderMetadataFunc = Button .builder (
161189 Component .literal (shaderToggles .get (index ).getFile ().getName ()), _ -> {}
162190 ).bounds (0 , 0 , 0 , btnHeight ).build ();
@@ -166,22 +194,18 @@ protected void init() {
166194
167195 Button shaderToggleFunc = Button .builder (Component .literal (toggle .getButtonText ().getString ()), button -> {
168196 toggle .toggled ();
169- resourceUtil .toggleShaderPack (toggle .getFile ().getName (), toggle .isEnabled ());
170197 button .setMessage (Component .literal (toggle .getButtonText ().getString ()));
171198 }).bounds (0 , 0 , 60 , btnHeight ).build ();
172199 addWidget (shaderToggleFunc );
173200 shaderToggleButtons .add (shaderToggleFunc );
174201 index ++;
175202 }
176203
177- Button resourceFunc = Button .builder (Component .literal ("Refresh Resources" ), _ -> {
178- Minecraft .getInstance ().reloadResourcePacks ();
179- client .setScreen (null );
180- }).bounds (0 , 0 , 160 , btnHeight ).build ();
181- addWidget (resourceFunc );
182-
183204 Button applyFunc = Button .builder (Component .literal ("Apply Changes" ), _ -> {
184- for (ModToggle toggle : modToggles ) toggle .applyChange ();
205+ for (FileToggle toggle : modToggles ) toggle .applyChange ("mod" );
206+ for (FileToggle toggle : resourceToggles ) toggle .applyChange ("resourcepack" ); //FileUtils.toggleResourcePack(toggle.getFile().getName(), toggle.isEnabled());
207+ for (FileToggle toggle : shaderToggles ) toggle .applyChange ("shaderpack" ); //FileUtils.toggleShaderPack(toggle.getFile().getName(), toggle.isEnabled());
208+
185209 client .setScreen (null );
186210 Minecraft .getInstance ().reloadResourcePacks ();
187211 }).bounds (0 , 0 , 120 , btnHeight ).build ();
@@ -230,7 +254,7 @@ public void extractRenderState(@NotNull GuiGraphicsExtractor context, int mouseX
230254 int toggleX = this .width - 190 ;
231255 int resetX = this .width - 120 ;
232256
233- //button container fill first so buttons are on top
257+ //button container fills first so buttons are on top
234258 context .fill (10 , listTop , this .width - 10 , listBottom , 0x88111111 );
235259
236260
@@ -239,7 +263,7 @@ public void extractRenderState(@NotNull GuiGraphicsExtractor context, int mouseX
239263 switch (activeTab ) {
240264 case "mods" -> {
241265 for (int i = 0 ; i < modToggles .size (); i ++) {
242- ModToggle toggle = modToggles .get (i );
266+ FileToggle toggle = modToggles .get (i );
243267
244268 // always increment y and skip if filtered
245269 if (!toggle .getDisplayName ().toLowerCase ().contains (searchQuery )) {
@@ -282,7 +306,7 @@ public void extractRenderState(@NotNull GuiGraphicsExtractor context, int mouseX
282306 }
283307 case "resourcepacks" -> {
284308 for (int i = 0 ; i < resourceToggles .size (); i ++) {
285- ModToggle toggle = resourceToggles .get (i );
309+ FileToggle toggle = resourceToggles .get (i );
286310
287311 // always increment y and skip if filtered
288312 if (!toggle .getDisplayName ().toLowerCase ().contains (searchQuery )) {
@@ -319,7 +343,7 @@ public void extractRenderState(@NotNull GuiGraphicsExtractor context, int mouseX
319343 }
320344 case "shaderpacks" -> {
321345 for (int i = 0 ; i < shaderToggles .size (); i ++) {
322- ModToggle toggle = shaderToggles .get (i );
346+ FileToggle toggle = shaderToggles .get (i );
323347
324348 // always increment y and skip if filtered
325349 if (!toggle .getDisplayName ().toLowerCase ().contains (searchQuery )) {
@@ -421,5 +445,4 @@ private void updateVisibleButtonsBasedOnSearch() {
421445 shaderMetadataButtons .get (i ).visible = show ;
422446 }
423447 }
424-
425448}
0 commit comments