Clear mixin ClassInfo cache when load finishes
This commit is contained in:
parent
201c2f3b51
commit
e5028535e9
|
|
@ -2,11 +2,13 @@ package org.embeddedt.modernfix;
|
|||
|
||||
import net.minecraftforge.api.distmarker.Dist;
|
||||
import net.minecraftforge.common.MinecraftForge;
|
||||
import net.minecraftforge.eventbus.api.EventPriority;
|
||||
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
||||
import net.minecraftforge.fml.*;
|
||||
import net.minecraftforge.fml.common.Mod;
|
||||
import net.minecraftforge.fml.config.ModConfig;
|
||||
import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
|
||||
import net.minecraftforge.fml.event.lifecycle.FMLLoadCompleteEvent;
|
||||
import net.minecraftforge.fml.event.server.FMLServerStartedEvent;
|
||||
import net.minecraftforge.fml.event.server.FMLServerStartingEvent;
|
||||
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
|
||||
|
|
@ -20,6 +22,7 @@ import org.embeddedt.modernfix.entity.EntityDataIDSyncHandler;
|
|||
import org.embeddedt.modernfix.packet.PacketHandler;
|
||||
import org.embeddedt.modernfix.registry.ObjectHolderClearer;
|
||||
import org.embeddedt.modernfix.structure.AsyncLocator;
|
||||
import org.embeddedt.modernfix.util.ClassInfoManager;
|
||||
import org.embeddedt.modernfix.util.KubeUtil;
|
||||
|
||||
import java.lang.management.ManagementFactory;
|
||||
|
|
@ -68,6 +71,7 @@ public class ModernFix {
|
|||
// Register ourselves for server and other game events we are interested in
|
||||
MinecraftForge.EVENT_BUS.register(this);
|
||||
FMLJavaModLoadingContext.get().getModEventBus().addListener(this::commonSetup);
|
||||
FMLJavaModLoadingContext.get().getModEventBus().addListener(this::onLoadComplete);
|
||||
DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> MinecraftForge.EVENT_BUS.register(new ModernFixClient()));
|
||||
ModLoadingContext.get().registerExtensionPoint(ExtensionPoint.DISPLAYTEST, () -> Pair.of(() -> FMLNetworkConstants.IGNORESERVERONLY, (a, b) -> true));
|
||||
ModLoadingContext.get().registerConfig(ModConfig.Type.COMMON, ModernFixConfig.COMMON_CONFIG);
|
||||
|
|
@ -102,4 +106,9 @@ public class ModernFix {
|
|||
ModernFix.LOGGER.warn("Dedicated server took " + gameStartTime + " seconds to load");
|
||||
}
|
||||
}
|
||||
|
||||
@SubscribeEvent(priority = EventPriority.LOWEST)
|
||||
public void onLoadComplete(FMLLoadCompleteEvent event) {
|
||||
ClassInfoManager.clear();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,24 @@
|
|||
package org.embeddedt.modernfix.util;
|
||||
|
||||
import org.spongepowered.asm.mixin.transformer.ClassInfo;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.Iterator;
|
||||
import java.util.Map;
|
||||
|
||||
public class ClassInfoManager {
|
||||
private static Map<String, ClassInfo> classInfoCache = null;
|
||||
public static void clear() {
|
||||
if(classInfoCache == null) {
|
||||
try {
|
||||
Field field = ClassInfo.class.getDeclaredField("cache");
|
||||
field.setAccessible(true);
|
||||
classInfoCache = (Map<String, ClassInfo>)field.get(null);
|
||||
} catch(ReflectiveOperationException | RuntimeException e) {
|
||||
e.printStackTrace();
|
||||
return;
|
||||
}
|
||||
}
|
||||
classInfoCache.entrySet().removeIf(entry -> !entry.getKey().equals("java/lang/Object"));
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user