diff --git a/core/src/io/anuke/mindustry/mod/ContentParser.java b/core/src/io/anuke/mindustry/mod/ContentParser.java index f3e1cbecb0..56b6448301 100644 --- a/core/src/io/anuke/mindustry/mod/ContentParser.java +++ b/core/src/io/anuke/mindustry/mod/ContentParser.java @@ -140,7 +140,7 @@ public class ContentParser{ if(value.has("consumes")){ for(JsonValue child : value.get("consumes")){ if(child.name.equals("item")){ - block.consumes.item(Vars.content.getByName(ContentType.item, child.asString())); + block.consumes.item(find(ContentType.item, child.asString())); }else if(child.name.equals("items")){ block.consumes.add((Consume)parser.readValue(ConsumeItems.class, child)); }else if(child.name.equals("liquid")){ @@ -164,7 +164,7 @@ public class ContentParser{ //add research tech node if(value.has("research")){ - TechTree.create(Vars.content.getByName(ContentType.block, value.get("research").asString()), block); + TechTree.create(find(ContentType.block, value.get("research").asString()), block); } //make block visible @@ -191,6 +191,13 @@ public class ContentParser{ ContentType.zone, parser(ContentType.zone, Zone::new) ); + private T find(ContentType type, String name){ + Content c = Vars.content.getByName(type, name); + if(c == null) c = Vars.content.getByName(type, currentMod.name + "-" + name); + if(c == null) throw new IllegalArgumentException("No " + type + " found with name '" + name + "'"); + return (T)c; + } + private TypeParser parser(ContentType type, Function constructor){ return (mod, name, value) -> { T item; @@ -418,6 +425,8 @@ public class ContentParser{ /** Tries to resolve a class from a list of potential class names. */ private Class resolve(String base, String... potentials){ + if(!base.isEmpty() && Character.isLowerCase(base.charAt(0))) base = Strings.capitalize(base); + for(String type : potentials){ try{ return (Class)Class.forName(type + '.' + base); diff --git a/core/src/io/anuke/mindustry/mod/Mods.java b/core/src/io/anuke/mindustry/mod/Mods.java index 24da6e0af1..21a5aa4073 100644 --- a/core/src/io/anuke/mindustry/mod/Mods.java +++ b/core/src/io/anuke/mindustry/mod/Mods.java @@ -295,6 +295,7 @@ public class Mods implements Loadable{ //this finishes parsing content fields parser.finishParsing(); + //load content for code mods each(Mod::loadContent); } @@ -466,6 +467,15 @@ public class Mods implements Loadable{ public boolean enabled(){ return Core.settings.getBool(name + "-enabled", true); } + + @Override + public String toString(){ + return "LoadedMod{" + + "file=" + file + + ", root=" + root + + ", name='" + name + '\'' + + '}'; + } } /** Plugin metadata information.*/