diff --git a/core/src/mindustry/ClientLauncher.java b/core/src/mindustry/ClientLauncher.java index 70fb6a43b7..640b126e40 100644 --- a/core/src/mindustry/ClientLauncher.java +++ b/core/src/mindustry/ClientLauncher.java @@ -183,7 +183,10 @@ public abstract class ClientLauncher extends ApplicationCore implements Platform assets.load(schematics); - assets.loadRun("contentinit", ContentLoader.class, () -> content.init(), () -> content.load()); + assets.loadRun("contentinit", ContentLoader.class, () -> content.init(), () -> { + content.load(); + mods.loadModPatches(); + }); assets.loadRun("baseparts", BaseRegistry.class, () -> {}, () -> bases.load()); Core.assets.load("sprites/schematic-background.png", Texture.class).loaded = t -> t.setWrap(TextureWrap.repeat); diff --git a/core/src/mindustry/mod/Mods.java b/core/src/mindustry/mod/Mods.java index 4598ec571d..141b319580 100644 --- a/core/src/mindustry/mod/Mods.java +++ b/core/src/mindustry/mod/Mods.java @@ -22,6 +22,7 @@ import mindustry.gen.*; import mindustry.graphics.*; import mindustry.graphics.MultiPacker.*; import mindustry.mod.ContentParser.*; +import mindustry.mod.data.*; import mindustry.type.*; import mindustry.ui.*; @@ -936,6 +937,24 @@ public class Mods implements Loadable{ Events.fire(new ModContentLoadEvent()); } + public void loadModPatches(){ + for(LoadedMod mod : orderedMods()){ + if(mod.root.child("patches").exists()){ + try{ + Seq patches = mod.root.child("patches").findAll(f -> f.extEquals("json") || f.extEquals("hjson")); + if(patches.size > 0){ + //create a new patcher per mod so the fields don't get reset + DataPatcher patcher = new DataPatcher(); + patches.sort(); + patcher.apply(patches.map(f -> new PatchAsset(f.readString())), new Seq<>()); + } + }catch(Exception e){ + Log.err("Failed to apply patches from mod " + mod.meta.name, e); + } + } + } + } + public void handleContentError(Content content, Throwable error){ parser.markError(content, error); } diff --git a/server/src/mindustry/server/ServerLauncher.java b/server/src/mindustry/server/ServerLauncher.java index d8737fc5e1..72a7528676 100644 --- a/server/src/mindustry/server/ServerLauncher.java +++ b/server/src/mindustry/server/ServerLauncher.java @@ -54,6 +54,7 @@ public class ServerLauncher implements ApplicationListener{ mods.loadScripts(); content.createModContent(); content.init(); + mods.loadModPatches(); if(mods.hasContentErrors()){ err("Error occurred loading mod content:");