From 8efd62e6688d2cdd6a11a3a50fbae42ee5ac01ba Mon Sep 17 00:00:00 2001 From: Anuken Date: Mon, 10 Feb 2025 17:03:46 -0500 Subject: [PATCH] PR cleanup --- core/assets/bundles/bundle.properties | 3 +- core/src/mindustry/Vars.java | 2 + core/src/mindustry/mod/Mods.java | 44 +++++++++++-------- core/src/mindustry/ui/dialogs/ModsDialog.java | 4 ++ 4 files changed, 33 insertions(+), 20 deletions(-) diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index 0ea8f34a89..f59a38ad30 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -131,13 +131,14 @@ feature.unsupported = Your device does not support this feature. mods.initfailed = [red]\u26A0[] The previous Mindustry instance failed to initialize. This was likely caused by misbehaving mods.\n\nTo prevent a crash loop, [red]all mods have been disabled.[] mods = Mods +mods.name = Mod: mods.none = [lightgray]No mods found! mods.guide = Modding Guide mods.report = Report Bug mods.openfolder = Open Folder mods.viewcontent = View Content mods.reload = Reload -mods.reloadexit = The game will now exit, to reload mods. +mods.reloadexit = To reload mods, the game will now exit. mod.installed = [[Installed] mod.display = [gray]Mod:[orange] {0} mod.enabled = [lightgray]Enabled diff --git a/core/src/mindustry/Vars.java b/core/src/mindustry/Vars.java index eacdd4bd2d..8fef2f1616 100644 --- a/core/src/mindustry/Vars.java +++ b/core/src/mindustry/Vars.java @@ -49,6 +49,8 @@ public class Vars implements Loadable{ public static String steamPlayerName = ""; /** If true, the BE server list is always used. */ public static boolean forceBeServers = false; + /** If true, mod code and scripts do not run. For internal testing only. This WILL break mods if enabled. */ + public static boolean skipModCode = false; /** Default accessible content types used for player-selectable icons. */ public static final ContentType[] defaultContentIcons = {ContentType.item, ContentType.liquid, ContentType.block, ContentType.unit}; /** Default rule environment. */ diff --git a/core/src/mindustry/mod/Mods.java b/core/src/mindustry/mod/Mods.java index c8df0509a1..45dc6530ab 100644 --- a/core/src/mindustry/mod/Mods.java +++ b/core/src/mindustry/mod/Mods.java @@ -462,7 +462,7 @@ public class Mods implements Loadable{ // Add local mods Seq.with(modDirectory.list()) - .retainAll(f -> f.extEquals("jar") || f.extEquals("zip") || (f.isDirectory() && Structs.contains(metaFiles, meta -> f.child(meta).exists()))) + .retainAll(f -> f.extEquals("jar") || f.extEquals("zip") || (f.isDirectory() && Structs.contains(metaFiles, meta -> resolveRoot(f).child(meta).exists()))) .each(candidates::add); // Add Steam workshop mods @@ -679,41 +679,44 @@ public class Mods implements Loadable{ cont.row(); cont.pane(p -> { toCheck.each(mod -> { - p.add(mod.meta.displayName).wrap().growX().left().labelAlign(Align.left); + p.add(Core.bundle.get("mods.name") + " [accent]" + mod.meta.displayName).wrap().growX().left().labelAlign(Align.left); p.row(); p.table(d -> { mod.missingDependencies.each(dep -> { - d.add(dep).wrap().growX().left().labelAlign(Align.left); + d.add("[lightgray] > []" + dep).wrap().growX().left().labelAlign(Align.left); d.row(); }); if(soft){ mod.missingSoftDependencies.each(dep -> { - d.add(dep + " " + Core.bundle.get("mod.dependencies.soft")).wrap().growX().left().labelAlign(Align.left); + d.add("[lightgray] > []" + dep + " [lightgray]" + Core.bundle.get("mod.dependencies.soft")).wrap().growX().left().labelAlign(Align.left); d.row(); }); } - }).growX().padBottom(8f).padLeft(12f); + }).growX().padBottom(8f).padLeft(8f); p.row(); }); }).fillX().colspan(span); cont.row(); - cont.button("@cancel", this::hide).size(150, 50); - cont.button(soft ? "@mod.dependencies.downloadreq" : "@mod.dependencies.download", () -> { + cont.button("@cancel", Icon.cancel, this::hide).size(160, 50); + cont.button(soft ? "@mod.dependencies.downloadreq" : "@mod.dependencies.download", Icon.download, () -> { hide(); Seq toImport = new Seq<>(); toCheck.each(mod -> mod.missingDependencies.each(toImport::addUnique)); downloadDependencies(toImport); - }).size(150, 50); + }).size(160, 50); if(soft){ - cont.button("@mod.dependencies.downloadall", () -> { + if(Core.graphics.isPortrait()){ + cont.row(); + } + cont.button("@mod.dependencies.downloadall", Icon.download, () -> { hide(); Seq toImport = new Seq<>(); toCheck.each(mod -> mod.missingDependencies.each(toImport::addUnique)); toCheck.each(mod -> mod.missingSoftDependencies.each(toImport::addUnique)); downloadDependencies(toImport); - }).size(150, 50); + }).size(160, 50); } }}.show(); } @@ -732,39 +735,39 @@ public class Mods implements Loadable{ setFillParent(true); cont.margin(15); - cont.add("@mod.dependencies.status").center(); + cont.add("@mod.dependencies.status").color(Pal.accent).center(); cont.row(); - cont.image().width(300f).pad(2).height(4f).color(Color.lightGray); + cont.image().width(300f).pad(2).height(4f).color(Pal.accent); cont.row(); cont.pane(p -> { if(success.any()){ - p.add("@mod.dependencies.success").wrap().fillX().left().labelAlign(Align.left); + p.add("@mod.dependencies.success").color(Pal.accent).wrap().fillX().left().labelAlign(Align.left); p.row(); p.table(t -> { success.each(d -> { - t.add(d).wrap().growX().left().labelAlign(Align.left); + t.add("[accent] > []" + d).wrap().growX().left().labelAlign(Align.left); t.row(); }); - }).growX().padBottom(8f).padLeft(12f); + }).growX().padBottom(8f).padLeft(8f); p.row(); } if(failed.any()){ - p.add("@mod.dependencies.failure").wrap().fillX().left().labelAlign(Align.left); + p.add("@mod.dependencies.failure").color(Color.scarlet).wrap().fillX().left().labelAlign(Align.left); p.row(); p.table(t -> { failed.each(d -> { - t.add(d).wrap().growX().left().labelAlign(Align.left); + t.add("[scarlet] > []" + d).wrap().growX().left().labelAlign(Align.left); t.row(); }); - }).growX().padBottom(8f).padLeft(12f); + }).growX().padBottom(8f).padLeft(8f); } }).fillX(); cont.row(); if(success.any()){ - cont.image().width(300f).pad(2).height(4f).color(Color.lightGray); + cont.image().width(300f).pad(2).height(4f).color(Pal.accent); cont.row(); cont.add("@mods.reloadexit").center(); cont.row(); @@ -800,6 +803,8 @@ public class Mods implements Loadable{ /** This must be run on the main thread! */ public void loadScripts(){ + if(skipModCode) return; + Time.mark(); boolean[] any = {false}; @@ -1147,6 +1152,7 @@ public class Mods implements Loadable{ Core.settings.getBool("mod-" + baseName + "-enabled", true) && Version.isAtLeast(meta.minGameVersion) && (meta.getMinMajor() >= 136 || headless) && + !skipModCode && initialize ){ if(ios){ diff --git a/core/src/mindustry/ui/dialogs/ModsDialog.java b/core/src/mindustry/ui/dialogs/ModsDialog.java index 449ae17dac..4d955d9fef 100644 --- a/core/src/mindustry/ui/dialogs/ModsDialog.java +++ b/core/src/mindustry/ui/dialogs/ModsDialog.java @@ -114,6 +114,10 @@ public class ModsDialog extends BaseDialog{ } } + void getModList(Cons> listener){ + getModList(0, listener); + } + void getModList(int index, Cons> listener){ if(index >= modJsonURLs.length) return;