Public block fields / Better scripting

This commit is contained in:
Anuken
2019-11-27 13:51:07 -05:00
parent eabbd2fa32
commit 57f9aeee86
66 changed files with 718 additions and 257 deletions

View File

@@ -1,4 +1,4 @@
package io.anuke.mindustry;
package io.anuke.mindustry.tools;
import io.anuke.arc.collection.Array;
import io.anuke.arc.collection.OrderedMap;

View File

@@ -1,4 +1,4 @@
package io.anuke.mindustry;
package io.anuke.mindustry.tools;
import io.anuke.arc.collection.*;
import io.anuke.arc.graphics.*;
@@ -6,7 +6,7 @@ import io.anuke.arc.graphics.g2d.*;
import io.anuke.arc.math.*;
import io.anuke.arc.util.*;
import io.anuke.arc.util.noise.*;
import io.anuke.mindustry.ImagePacker.*;
import io.anuke.mindustry.tools.ImagePacker.*;
import io.anuke.mindustry.ctype.*;
import io.anuke.mindustry.type.*;
import io.anuke.mindustry.ui.*;

View File

@@ -1,9 +1,9 @@
package io.anuke.mindustry;
package io.anuke.mindustry.tools;
import io.anuke.arc.graphics.Color;
import io.anuke.arc.graphics.g2d.TextureRegion;
import io.anuke.arc.util.Structs;
import io.anuke.mindustry.ImagePacker.GenRegion;
import io.anuke.mindustry.tools.ImagePacker.GenRegion;
import javax.imageio.ImageIO;
import java.awt.*;

View File

@@ -1,4 +1,4 @@
package io.anuke.mindustry;
package io.anuke.mindustry.tools;
import io.anuke.arc.Core;
import io.anuke.arc.collection.ObjectMap;
@@ -7,6 +7,7 @@ import io.anuke.arc.graphics.g2d.TextureAtlas.AtlasRegion;
import io.anuke.arc.util.*;
import io.anuke.arc.util.Log.LogHandler;
import io.anuke.arc.util.Log.NoopLogHandler;
import io.anuke.mindustry.*;
import io.anuke.mindustry.core.ContentLoader;
import javax.imageio.ImageIO;

View File

@@ -0,0 +1,60 @@
package io.anuke.mindustry.tools;
import io.anuke.arc.*;
import io.anuke.arc.collection.*;
import io.anuke.arc.files.*;
import io.anuke.arc.graphics.g2d.*;
import io.anuke.arc.util.*;
import org.reflections.*;
import org.reflections.scanners.*;
import org.reflections.util.*;
import java.util.*;
public class ScriptStubGenerator{
public static void main(String[] args){
String base = "io.anuke.mindustry";
Array<String> blacklist = Array.with("plugin", "mod", "net", "io", "tools", "gen");
Array<String> nameBlacklist = Array.with("ClientLauncher", "NetClient", "NetServer");
Array<Class<?>> whitelist = Array.with(Draw.class, Core.class, TextureAtlas.class, TextureRegion.class);
String fileTemplate = "package io.anuke.mindustry.mod;\n" +
"\n" +
"import io.anuke.arc.collection.*;\n" +
"//obviously autogenerated, do not touch\n" +
"class ClassAccess{\n" +
"\tstatic final Array<Class<?>> allowedClasses = Array.with($ALLOWED_CLASSES$);\n" +
"\tstatic final ObjectSet<String> allowedClassNames = ObjectSet.with($ALLOWED_CLASS_NAMES$);\n" +
"}";
List<ClassLoader> classLoadersList = new LinkedList<>();
classLoadersList.add(ClasspathHelper.contextClassLoader());
classLoadersList.add(ClasspathHelper.staticClassLoader());
Reflections reflections = new Reflections(new ConfigurationBuilder()
.setScanners(new SubTypesScanner(false), new ResourcesScanner())
.setUrls(ClasspathHelper.forClassLoader(classLoadersList.toArray(new ClassLoader[0])))
.filterInputsBy(new FilterBuilder().include(FilterBuilder.prefix("io.anuke.mindustry"))));
Array<Class<?>> classes = Array.with(reflections.getSubTypesOf(Object.class));
classes.addAll(reflections.getSubTypesOf(Enum.class));
classes.addAll(whitelist);
classes.sort(Structs.comparing(Class::getName));
classes.removeAll(type -> type.isSynthetic() || type.isAnonymousClass() || type.isMemberClass() || type.getCanonicalName() == null
|| blacklist.contains(s -> type.getName().startsWith(base + "." + s + ".")) || nameBlacklist.contains(type.getSimpleName()));
StringBuilder result = new StringBuilder("//Generated class. Do not modify.\n");
for(Class type : classes){
result.append("const ").append(type.getSimpleName()).append(" = ").append("Java.type('").append(type.getCanonicalName()).append("')\n");
}
//Log.info(result);
new FileHandle("core/assets/scripts/global.js").writeString(result.toString());
new FileHandle("core/src/io/anuke/mindustry/mod/ClassAccess.java").writeString(fileTemplate
.replace("$ALLOWED_CLASSES$", classes.toString(", ", type -> type.getName() + ".class"))
.replace("$ALLOWED_CLASS_NAMES$", classes.toString(", ", type -> "\"" + type.getName() + "\"")));
}
}

View File

@@ -1,4 +1,4 @@
package io.anuke.mindustry;
package io.anuke.mindustry.tools;
import io.anuke.arc.Core;
import io.anuke.arc.files.FileHandle;

View File

@@ -1,4 +1,4 @@
package io.anuke.mindustry;
package io.anuke.mindustry.tools;
import io.anuke.arc.*;
import io.anuke.arc.backends.sdl.*;