diff --git a/build.gradle b/build.gradle index a986b4e058..9146c9160c 100644 --- a/build.gradle +++ b/build.gradle @@ -324,8 +324,6 @@ project(":tools"){ implementation arcModule("natives:natives-freetype-desktop") implementation arcModule("natives:natives-box2d-desktop") implementation arcModule("backends:backend-headless") - - implementation "org.reflections:reflections:0.9.11" } } diff --git a/core/assets/maps/groundZero.msav b/core/assets/maps/groundZero.msav index c2d66b2cc8..b6d02df43c 100644 Binary files a/core/assets/maps/groundZero.msav and b/core/assets/maps/groundZero.msav differ diff --git a/core/assets/scripts/global.js b/core/assets/scripts/global.js index 4bbf0aa1c5..4f2843c3a1 100755 --- a/core/assets/scripts/global.js +++ b/core/assets/scripts/global.js @@ -30,11 +30,73 @@ const extend = function(classType, params){ const newEffect = (lifetime, renderer) => new Effects.Effect(lifetime, new Effects.EffectRenderer({render: renderer})) Call = Packages.mindustry.gen.Call -importPackage(Packages.arc.graphics.g2d) +importPackage(Packages.mindustry.maps) +importPackage(Packages.mindustry.world.blocks.production) +importPackage(Packages.mindustry.graphics.g3d) +importPackage(Packages.mindustry.ai.types) +importPackage(Packages.mindustry.world.draw) +importPackage(Packages.mindustry.game) +importPackage(Packages.mindustry.logic) +importPackage(Packages.mindustry.entities.comp) +importPackage(Packages.mindustry.world.blocks.sandbox) +importPackage(Packages.mindustry.world.consumers) +importPackage(Packages.mindustry.type) +importPackage(Packages.mindustry.maps.filters) +importPackage(Packages.arc.struct) +importPackage(Packages.mindustry.world.meta.values) +importPackage(Packages.mindustry.world.blocks.distribution) +importPackage(Packages.mindustry.ui.dialogs) importPackage(Packages.mindustry.gen) +importPackage(Packages.mindustry.graphics) +importPackage(Packages.arc.scene.ui) +importPackage(Packages.mindustry.ai) +importPackage(Packages.mindustry.content) +importPackage(Packages.mindustry.ctype) +importPackage(Packages.arc.scene.event) +importPackage(Packages.mindustry.entities.bullet) +importPackage(Packages.arc.math.geom) +importPackage(Packages.mindustry.ui) +importPackage(Packages.mindustry.ai.formations) +importPackage(Packages.arc.func) +importPackage(Packages.mindustry.ui.fragments) +importPackage(Packages.mindustry.world.blocks.units) +importPackage(Packages.mindustry.world.modules) +importPackage(Packages.mindustry.world.blocks.power) +importPackage(Packages.arc.scene.utils) +importPackage(Packages.mindustry.entities) +importPackage(Packages.mindustry.audio) importPackage(Packages.arc.math) -importPackage(Packages.arc.graphics) +importPackage(Packages.arc.scene.ui.layout) +importPackage(Packages.arc.scene.actions) +importPackage(Packages.arc.scene.style) +importPackage(Packages.mindustry.world.blocks.defense.turrets) +importPackage(Packages.mindustry.core) +importPackage(Packages.arc.scene) +importPackage(Packages.mindustry.entities.units) +importPackage(Packages.mindustry.world.blocks.defense) +importPackage(Packages.mindustry.world) +importPackage(Packages.mindustry.world.blocks) +importPackage(Packages.mindustry.editor) +importPackage(Packages.mindustry.world.blocks.storage) +importPackage(Packages.mindustry.world.blocks.environment) +importPackage(Packages.mindustry.async) +importPackage(Packages.mindustry.maps.planet) +importPackage(Packages.mindustry.world.blocks.liquid) +importPackage(Packages.mindustry.ai.formations.patterns) +importPackage(Packages.mindustry.ui.layout) +importPackage(Packages.mindustry.input) +importPackage(Packages.mindustry.world.blocks.legacy) +importPackage(Packages.mindustry.entities.abilities) +importPackage(Packages.mindustry) +importPackage(Packages.mindustry.world.meta) +importPackage(Packages.mindustry.world.blocks.experimental) +importPackage(Packages.mindustry.world.blocks.payloads) +importPackage(Packages.mindustry.maps.generators) +importPackage(Packages.arc.graphics.g2d) importPackage(Packages.arc.util) +importPackage(Packages.mindustry.world.blocks.campaign) +importPackage(Packages.arc.graphics) +importPackage(Packages.mindustry.world.producers) importPackage(Packages.arc) const PlayerIpUnbanEvent = Packages.mindustry.game.EventType.PlayerIpUnbanEvent const PlayerIpBanEvent = Packages.mindustry.game.EventType.PlayerIpBanEvent diff --git a/core/src/mindustry/graphics/Shaders.java b/core/src/mindustry/graphics/Shaders.java index fd418c9673..884f70b84e 100644 --- a/core/src/mindustry/graphics/Shaders.java +++ b/core/src/mindustry/graphics/Shaders.java @@ -24,11 +24,12 @@ public class Shaders{ public static PlanetShader planet; public static PlanetGridShader planetGrid; public static AtmosphereShader atmosphere; - public static MeshShader mesh = new MeshShader(); + public static MeshShader mesh; public static Shader unlit; public static Shader screenspace; public static void init(){ + mesh = new MeshShader(); blockbuild = new BlockBuild(); try{ shield = new ShieldShader(); diff --git a/core/src/mindustry/io/legacy/LegacySaveVersion.java b/core/src/mindustry/io/legacy/LegacySaveVersion.java index 9dac92b8de..7e78855f7e 100644 --- a/core/src/mindustry/io/legacy/LegacySaveVersion.java +++ b/core/src/mindustry/io/legacy/LegacySaveVersion.java @@ -66,7 +66,7 @@ public abstract class LegacySaveVersion extends SaveVersion{ readChunk(stream, true, in -> { byte version = in.readByte(); //legacy impl of Building#read() - tile.build.health(stream.readUnsignedShort()); + tile.build.health = stream.readUnsignedShort(); byte packedrot = stream.readByte(); byte team = Pack.leftByte(packedrot) == 8 ? stream.readByte() : Pack.leftByte(packedrot); byte rotation = Pack.rightByte(packedrot); diff --git a/core/src/mindustry/maps/Maps.java b/core/src/mindustry/maps/Maps.java index e71425539f..8fe2910eeb 100644 --- a/core/src/mindustry/maps/Maps.java +++ b/core/src/mindustry/maps/Maps.java @@ -3,11 +3,11 @@ package mindustry.maps; import arc.*; import arc.assets.*; import arc.assets.loaders.*; -import arc.struct.*; -import arc.struct.IntSet.*; import arc.files.*; import arc.func.*; import arc.graphics.*; +import arc.struct.IntSet.*; +import arc.struct.*; import arc.util.ArcAnnotate.*; import arc.util.*; import arc.util.async.*; @@ -15,7 +15,7 @@ import arc.util.io.*; import arc.util.serialization.*; import mindustry.*; import mindustry.content.*; -import mindustry.ctype.*; +import mindustry.core.*; import mindustry.game.EventType.*; import mindustry.game.*; import mindustry.io.*; @@ -87,7 +87,7 @@ public class Maps{ }); if(Core.assets != null){ - ((CustomLoader) Core.assets.getLoader(Content.class)).loaded = this::createAllPreviews; + ((CustomLoader)Core.assets.getLoader(ContentLoader.class)).loaded = this::createAllPreviews; } } diff --git a/core/src/mindustry/world/blocks/BuildBlock.java b/core/src/mindustry/world/blocks/BuildBlock.java index b664d5d099..50a6d45688 100644 --- a/core/src/mindustry/world/blocks/BuildBlock.java +++ b/core/src/mindustry/world/blocks/BuildBlock.java @@ -190,7 +190,7 @@ public class BuildBlock extends Block{ }); } - public boolean construct(Unitc builder, @Nullable Building core, float amount, boolean configured){ + public boolean construct(Unit builder, @Nullable Building core, float amount, boolean configured){ if(cblock == null){ kill(); return false; @@ -211,10 +211,10 @@ public class BuildBlock extends Block{ maxProgress = core == null || team.rules().infiniteResources ? maxProgress : checkRequired(core.items, maxProgress, true); progress = Mathf.clamp(progress + maxProgress); - builderID = builder.id(); + builderID = builder.id; if(progress >= 1f || state.rules.infiniteResources){ - constructed(tile, cblock, builderID, (byte)rotation, builder.team(), configured); + constructed(tile, cblock, builderID, (byte)rotation, builder.team, configured); return true; } return false; diff --git a/core/src/mindustry/world/blocks/defense/OverdriveProjector.java b/core/src/mindustry/world/blocks/defense/OverdriveProjector.java index c42543266a..8af0b723c2 100644 --- a/core/src/mindustry/world/blocks/defense/OverdriveProjector.java +++ b/core/src/mindustry/world/blocks/defense/OverdriveProjector.java @@ -79,7 +79,7 @@ public class OverdriveProjector extends Block{ phaseHeat = Mathf.lerpDelta(phaseHeat, Mathf.num(cons.optionalValid()), 0.1f); } - if(timer(timerUse, useTime) && efficiency() > 0){ + if(timer(timerUse, useTime) && efficiency() > 0 && consValid()){ consume(); } diff --git a/core/src/mindustry/world/blocks/defense/turrets/Turret.java b/core/src/mindustry/world/blocks/defense/turrets/Turret.java index 73b478d582..a14b2bc2f9 100644 --- a/core/src/mindustry/world/blocks/defense/turrets/Turret.java +++ b/core/src/mindustry/world/blocks/defense/turrets/Turret.java @@ -395,6 +395,7 @@ public abstract class Turret extends Block{ @Override public void read(Reads read, byte revision){ super.read(read, revision); + if(revision == 1){ reload = read.f(); rotation = read.f(); diff --git a/tools/src/mindustry/tools/ScriptStubGenerator.java b/tools/src/mindustry/tools/ScriptStubGenerator.java index 560047b112..46fcf6a7bb 100644 --- a/tools/src/mindustry/tools/ScriptStubGenerator.java +++ b/tools/src/mindustry/tools/ScriptStubGenerator.java @@ -1,22 +1,19 @@ package mindustry.tools; import arc.*; -import arc.struct.Seq; -import arc.struct.*; import arc.files.*; import arc.graphics.*; import arc.graphics.g2d.*; import arc.graphics.g2d.TextureAtlas.*; import arc.math.*; +import arc.struct.*; import arc.util.*; import mindustry.game.*; import mindustry.gen.*; -import org.reflections.*; -import org.reflections.scanners.*; -import org.reflections.util.*; import java.io.*; import java.lang.reflect.*; +import java.net.*; import java.util.*; public class ScriptStubGenerator{ @@ -26,28 +23,18 @@ public class ScriptStubGenerator{ Seq blacklist = Seq.with("plugin", "mod", "net", "io", "tools"); Seq nameBlacklist = Seq.with("ClassAccess"); Seq> whitelist = Seq.with(Draw.class, Fill.class, Lines.class, Core.class, TextureAtlas.class, TextureRegion.class, Time.class, System.class, PrintStream.class, - AtlasRegion.class, String.class, Mathf.class, Angles.class, Color.class, Runnable.class, Object.class, Icon.class, Tex.class, - Sounds.class, Musics.class, Call.class, Texture.class, TextureData.class, Pixmap.class, I18NBundle.class, Interval.class, DataInput.class, DataOutput.class, - DataInputStream.class, DataOutputStream.class, Integer.class, Float.class, Double.class, Long.class, Boolean.class, Short.class, Byte.class, Character.class); + AtlasRegion.class, String.class, Mathf.class, Angles.class, Color.class, Runnable.class, Object.class, Icon.class, Tex.class, + Sounds.class, Musics.class, Call.class, Texture.class, TextureData.class, Pixmap.class, I18NBundle.class, Interval.class, DataInput.class, DataOutput.class, + DataInputStream.class, DataOutputStream.class, Integer.class, Float.class, Double.class, Long.class, Boolean.class, Short.class, Byte.class, Character.class); Seq nopackage = Seq.with("java.lang", "java"); - List 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("mindustry")) - .include(FilterBuilder.prefix("arc.func")) - .include(FilterBuilder.prefix("arc.struct")) - .include(FilterBuilder.prefix("arc.scene")) - .include(FilterBuilder.prefix("arc.math")) - )); - - Seq> classes = Seq.with(reflections.getSubTypesOf(Object.class)); - classes.addAll(reflections.getSubTypesOf(Enum.class)); + Seq> classes = Seq.withArrays( + getClasses("mindustry"), + getClasses("arc.func"), + getClasses("arc.struct"), + getClasses("arc.scene"), + getClasses("arc.math") + ); classes.addAll(whitelist); classes.sort(Structs.comparing(Class::getName)); @@ -72,4 +59,35 @@ public class ScriptStubGenerator{ new Fi("core/assets/scripts/global.js").writeString(result.toString()); } + + + private static Seq getClasses(String packageName) throws Exception{ + ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); + Seq dirs = new Seq<>(); + + for(URL resource : Collections.list(classLoader.getResources(packageName.replace('.', '/')))){ + dirs.add(new File(resource.getFile())); + } + + Seq classes = new Seq<>(); + for(File directory : dirs){ + classes.addAll(findClasses(directory, packageName)); + } + return classes; + } + + private static Seq findClasses(File directory, String packageName) throws Exception{ + Seq classes = new Seq<>(); + if(!directory.exists()) return classes; + + File[] files = directory.listFiles(); + for(File file : files){ + if(file.isDirectory()){ + classes.addAll(findClasses(file, packageName + "." + file.getName())); + }else if(file.getName().endsWith(".class")){ + classes.add(Class.forName(packageName + '.' + file.getName().substring(0, file.getName().length() - 6), false, Thread.currentThread().getContextClassLoader())); + } + } + return classes; + } }