ExtendedAE_Plus/src/main/java/com/extendedae_plus/mixin/MixinConditions.java
2026-03-26 11:05:00 +08:00

80 lines
2.5 KiB
Java

package com.extendedae_plus.mixin;
import com.extendedae_plus.util.ModCheckUtils;
import org.spongepowered.asm.mixin.extensibility.IMixinConfigPlugin;
import org.spongepowered.asm.mixin.extensibility.IMixinInfo;
import java.util.List;
import java.util.Set;
/**
* Mixin条件加载插件
* 用于根据模组存在情况动态加载不同的Mixin
*/
public class MixinConditions implements IMixinConfigPlugin {
@Override
public void onLoad(String mixinPackage) {
// 初始化时调用
}
@Override
public String getRefMapperConfig() {
return null;
}
@Override
public boolean shouldApplyMixin(String targetClassName, String mixinClassName) {
try {
// === MAE2 兼容 ===
if (mixinClassName.contains("CraftingCPUClusterMixin")) {
return !ModCheckUtils.isLoaded(ModCheckUtils.MODID_MAE2);
}
// === AAE 兼容 ===
if (mixinClassName.startsWith("com.extendedae_plus.mixin.advancedae")) {
return ModCheckUtils.isLoaded(ModCheckUtils.MODID_AAE);
}
// === AppFlux 兼容 ===
if (mixinClassName.startsWith("com.extendedae_plus.mixin.appflux")) {
return ModCheckUtils.isLoaded(ModCheckUtils.MODID_APPFLUX);
}
// === GuideME 版本兼容 ===
if (mixinClassName.startsWith("com.extendedae_plus.mixin.guideme.")) {
return ModCheckUtils.isLoadedAndLowerThan(ModCheckUtils.MODID_GUIDEME, "20.1.14");
}
if (mixinClassName.contains("CraftConfirmScreen")) {
return !ModCheckUtils.isLoaded(ModCheckUtils.MODID_EPA);
}
return true;
} catch (Exception e) {
System.err.println("[ExtendedAE_Plus] 检查 Mixin 条件时出错: " + e.getMessage());
return true; // 出错默认加载,避免意外禁用
}
}
@Override
public void acceptTargets(Set<String> myTargets, Set<String> otherTargets) {
// 接受目标类
}
@Override
public List<String> getMixins() {
return null;
}
@Override
public void preApply(String targetClassName, org.objectweb.asm.tree.ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) {
// 应用前调用
}
@Override
public void postApply(String targetClassName, org.objectweb.asm.tree.ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) {
// 应用后调用
}
}