Work around the fact that our mixins may be loaded before Optifabric

This commit is contained in:
Jonas Herzig
2020-04-06 20:39:15 +02:00
parent 27bdc78688
commit e3f621b86a
4 changed files with 98 additions and 7 deletions

View File

@@ -0,0 +1,21 @@
//#if FABRIC>=1
package com.replaymod.core;
import org.spongepowered.asm.mixin.Mixins;
// We need to wait for MM to call us, otherwise we might initialize our mixins before it calls optifabric which would
// result in OF classes not existing while our mixins get resolved.
public class ReplayModMMLauncher implements Runnable {
@Override
public void run() {
Mixins.addConfiguration("mixins.compat.mapwriter.replaymod.json");
Mixins.addConfiguration("mixins.compat.shaders.replaymod.json");
Mixins.addConfiguration("mixins.core.replaymod.json");
Mixins.addConfiguration("mixins.extras.playeroverview.replaymod.json");
Mixins.addConfiguration("mixins.recording.replaymod.json");
Mixins.addConfiguration("mixins.render.blend.replaymod.json");
Mixins.addConfiguration("mixins.render.replaymod.json");
Mixins.addConfiguration("mixins.replay.replaymod.json");
}
}
//#endif

View File

@@ -0,0 +1,62 @@
//#if FABRIC>=1
package com.replaymod.core;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.objectweb.asm.tree.ClassNode;
import org.spongepowered.asm.mixin.extensibility.IMixinConfigPlugin;
import org.spongepowered.asm.mixin.extensibility.IMixinInfo;
import java.io.IOException;
import java.util.List;
import java.util.Set;
// See ReplayModMMLauncher. This is the fallback if MM is not installed.
public class ReplayModNonMMLauncher implements IMixinConfigPlugin {
private final Logger logger = LogManager.getLogger("replaymod/nonmm");
@Override
public void onLoad(String mixinPackage) {
}
@Override
public String getRefMapperConfig() {
return null;
}
@Override
public boolean shouldApplyMixin(String targetClassName, String mixinClassName) {
return false;
}
@Override
public void acceptTargets(Set<String> myTargets, Set<String> otherTargets) {
}
@Override
public List<String> getMixins() {
try {
if (ReplayModMixinConfigPlugin.hasClass("com.chocohead.mm.Plugin")) {
logger.info("Detected MM, they should call us...");
} else {
logger.info("Did not detect MM, initializing ourselves...");
new ReplayModMMLauncher().run();
}
return null;
} catch (IOException e) {
throw new RuntimeException(e);
}
}
@Override
public void preApply(String targetClassName, ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) {
}
@Override
public void postApply(String targetClassName, ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) {
}
}
//#endif