diff --git a/android/src/mindustry/android/AndroidRhinoContext.java b/android/src/mindustry/android/AndroidRhinoContext.java index 7a45b1b11d..1b845d61cf 100644 --- a/android/src/mindustry/android/AndroidRhinoContext.java +++ b/android/src/mindustry/android/AndroidRhinoContext.java @@ -13,7 +13,6 @@ import com.android.dx.dex.cf.*; import com.android.dx.dex.file.DexFile; import com.android.dx.merge.*; import dalvik.system.*; -import mindustry.*; import mindustry.mod.*; import rhino.*; @@ -67,9 +66,6 @@ public class AndroidRhinoContext{ protected Context makeContext(){ Context ctx = super.makeContext(); ctx.setClassShutter(Scripts::allowClass); - if(Vars.mods != null){ - ctx.setApplicationClassLoader(Vars.mods.mainLoader()); - } return ctx; } diff --git a/core/src/mindustry/core/Platform.java b/core/src/mindustry/core/Platform.java index e953497420..ff139fa14a 100644 --- a/core/src/mindustry/core/Platform.java +++ b/core/src/mindustry/core/Platform.java @@ -7,7 +7,6 @@ import arc.math.*; import arc.struct.*; import arc.util.*; import arc.util.serialization.*; -import mindustry.*; import mindustry.mod.*; import mindustry.net.*; import mindustry.net.Net.*; @@ -85,9 +84,6 @@ public interface Platform{ protected Context makeContext(){ Context ctx = super.makeContext(); ctx.setClassShutter(Scripts::allowClass); - if(Vars.mods != null){ - ctx.setApplicationClassLoader(Vars.mods.mainLoader()); - } return ctx; } }); diff --git a/core/src/mindustry/mod/ModClassLoader.java b/core/src/mindustry/mod/ModClassLoader.java index 89a76e5714..40d6fd07ef 100644 --- a/core/src/mindustry/mod/ModClassLoader.java +++ b/core/src/mindustry/mod/ModClassLoader.java @@ -4,7 +4,12 @@ import arc.struct.*; public class ModClassLoader extends ClassLoader{ private Seq children = new Seq<>(); - private volatile boolean inChild = false; + private ThreadLocal inChild = new ThreadLocal<>(){ + @Override + protected Boolean initialValue(){ + return Boolean.FALSE; + } + }; public void addChild(ClassLoader child){ children.add(child); @@ -13,21 +18,25 @@ public class ModClassLoader extends ClassLoader{ @Override protected Class findClass(String name) throws ClassNotFoundException{ //a child may try to delegate class loading to its parent, which is *this class loader* - do not let that happen - if(inChild) throw new ClassNotFoundException(name); + if(inChild.get()){ + inChild.set(false); + throw new ClassNotFoundException(name); + } ClassNotFoundException last = null; int size = children.size; + + inChild.set(true); //if it doesn't exist in the main class loader, try all the children for(int i = 0; i < size; i++){ try{ - inChild = true; - var out = children.get(i).loadClass(name); - inChild = false; - return out; + return children.get(i).loadClass(name); }catch(ClassNotFoundException e){ last = e; } } + inChild.set(false); + throw (last == null ? new ClassNotFoundException(name) : last); } } diff --git a/core/src/mindustry/world/blocks/power/ImpactReactor.java b/core/src/mindustry/world/blocks/power/ImpactReactor.java index adf46ace7d..d692699100 100644 --- a/core/src/mindustry/world/blocks/power/ImpactReactor.java +++ b/core/src/mindustry/world/blocks/power/ImpactReactor.java @@ -40,6 +40,8 @@ public class ImpactReactor extends PowerGenerator{ hasItems = true; outputsPower = consumesPower = true; flags = EnumSet.of(BlockFlag.reactor, BlockFlag.generator); + lightRadius = 115f; + emitLight = true; } @Override diff --git a/core/src/mindustry/world/draw/DrawSmelter.java b/core/src/mindustry/world/draw/DrawSmelter.java index 5b4880eba9..9402ecbd75 100644 --- a/core/src/mindustry/world/draw/DrawSmelter.java +++ b/core/src/mindustry/world/draw/DrawSmelter.java @@ -25,6 +25,7 @@ public class DrawSmelter extends DrawBlock{ @Override public void load(Block block){ top = Core.atlas.find(block.name + "-top"); + block.clipSize = Math.max(block.clipSize, (lightRadius + lightSinMag) * 2f * block.size); } @Override