diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/mod/util/remapper/GlobalClassRepo.java b/arclight-common/src/main/java/io/izzel/arclight/common/mod/util/remapper/GlobalClassRepo.java index b431d639..b924faf6 100644 --- a/arclight-common/src/main/java/io/izzel/arclight/common/mod/util/remapper/GlobalClassRepo.java +++ b/arclight-common/src/main/java/io/izzel/arclight/common/mod/util/remapper/GlobalClassRepo.java @@ -11,13 +11,15 @@ import java.util.Collections; import java.util.Objects; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.TimeUnit; public class GlobalClassRepo implements ClassRepo { public static final GlobalClassRepo INSTANCE = new GlobalClassRepo(); private static final PluginInheritanceProvider PROVIDER = new PluginInheritanceProvider(INSTANCE); - private final LoadingCache cache = CacheBuilder.newBuilder().maximumSize(65536).build(CacheLoader.from(this::findParallel)); + private final LoadingCache cache = CacheBuilder.newBuilder().maximumSize(256) + .expireAfterAccess(1, TimeUnit.MINUTES).build(CacheLoader.from(this::findParallel)); private final Set repos = Collections.newSetFromMap(new ConcurrentHashMap<>()); private GlobalClassRepo() { diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/mod/util/remapper/generated/ArclightReflectionHandler.java b/arclight-common/src/main/java/io/izzel/arclight/common/mod/util/remapper/generated/ArclightReflectionHandler.java index 61de69f4..14a6603a 100644 --- a/arclight-common/src/main/java/io/izzel/arclight/common/mod/util/remapper/generated/ArclightReflectionHandler.java +++ b/arclight-common/src/main/java/io/izzel/arclight/common/mod/util/remapper/generated/ArclightReflectionHandler.java @@ -4,6 +4,7 @@ import io.izzel.arclight.api.ArclightVersion; import io.izzel.arclight.api.Unsafe; import io.izzel.arclight.common.mod.util.remapper.ClassLoaderAdapter; import io.izzel.arclight.common.mod.util.remapper.ClassLoaderRemapper; +import org.objectweb.asm.ClassReader; import org.objectweb.asm.Type; import java.lang.invoke.MethodHandle; @@ -53,12 +54,6 @@ public class ArclightReflectionHandler extends ClassLoader { // bukkit -> srg public static Method redirectGetMethod(Class cl, String bukkitName, Class... pTypes) throws NoSuchMethodException { - if (ClassLoaderAdapter.isDefineClassMethod(cl, bukkitName, pTypes)) { - Class[] classes = new Class[pTypes.length + 1]; - classes[0] = ClassLoader.class; - System.arraycopy(pTypes, 0, classes, 1, pTypes.length); - return ArclightReflectionHandler.class.getMethod(bukkitName, classes); - } Method method = remapper.tryMapMethodToSrg(cl, bukkitName, pTypes); if (method != null) { return method; @@ -69,12 +64,6 @@ public class ArclightReflectionHandler extends ClassLoader { // bukkit -> srg public static Method redirectGetDeclaredMethod(Class cl, String bukkitName, Class... pTypes) throws NoSuchMethodException { - if (ClassLoaderAdapter.isDefineClassMethod(cl, bukkitName, pTypes)) { - Class[] classes = new Class[pTypes.length + 1]; - classes[0] = ClassLoader.class; - System.arraycopy(pTypes, 0, classes, 1, pTypes.length); - return ArclightReflectionHandler.class.getDeclaredMethod(bukkitName, classes); - } Method method = remapper.tryMapMethodToSrg(cl, bukkitName, pTypes); if (method != null) { return method; @@ -253,7 +242,7 @@ public class ArclightReflectionHandler extends ClassLoader { public static Class defineClass(ClassLoader loader, String name, byte[] b, int off, int len, ProtectionDomain pd) { byte[] bytes = remapper.remapClass(b); - return Unsafe.defineClass(name, bytes, 0, bytes.length, loader, pd); + return Unsafe.defineClass(new ClassReader(bytes).getClassName().replace('/', '.'), bytes, 0, bytes.length, loader, pd); } public static Class defineClass(ClassLoader loader, String name, ByteBuffer b, ProtectionDomain pd) { diff --git a/arclight-forge-1.16/src/main/java/io/izzel/arclight/impl/mixin/optimization/general/trackingrange/ChunkManagerMixin_TrackingRange.java b/arclight-forge-1.16/src/main/java/io/izzel/arclight/impl/mixin/optimization/general/trackingrange/ChunkManagerMixin_TrackingRange.java new file mode 100644 index 00000000..ff9169a2 --- /dev/null +++ b/arclight-forge-1.16/src/main/java/io/izzel/arclight/impl/mixin/optimization/general/trackingrange/ChunkManagerMixin_TrackingRange.java @@ -0,0 +1,17 @@ +package io.izzel.arclight.impl.mixin.optimization.general.trackingrange; + +import net.minecraft.entity.Entity; +import net.minecraft.world.server.ChunkManager; +import org.spigotmc.TrackingRange; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.ModifyVariable; + +@Mixin(ChunkManager.class) +public class ChunkManagerMixin_TrackingRange { + + @ModifyVariable(method = "track", index = 3, at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/EntityType;getUpdateFrequency()I")) + private int trackingRange$updateRange(int defaultRange, Entity entity) { + return TrackingRange.getEntityTrackingRange(entity, defaultRange); + } +} diff --git a/arclight-forge-1.16/src/main/resources/mixins.arclight.impl.optimization.1_16.json b/arclight-forge-1.16/src/main/resources/mixins.arclight.impl.optimization.1_16.json index 0905cca1..27aa7766 100644 --- a/arclight-forge-1.16/src/main/resources/mixins.arclight.impl.optimization.1_16.json +++ b/arclight-forge-1.16/src/main/resources/mixins.arclight.impl.optimization.1_16.json @@ -15,6 +15,7 @@ "activationrange.entity.FireworkRocketEntityMixin_ActivationRange", "activationrange.entity.ItemEntityMixin_ActivationRange", "activationrange.entity.LivingEntityMixin_ActivationRange", - "activationrange.entity.VillagerEntityMixin_ActivationRange" + "activationrange.entity.VillagerEntityMixin_ActivationRange", + "trackingrange.ChunkManagerMixin_TrackingRange" ] } \ No newline at end of file