Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
package com.soliddowant.gregtechenergistics.mixins;

import java.util.List;
import java.util.Set;

import org.spongepowered.asm.lib.tree.ClassNode;
import org.spongepowered.asm.mixin.extensibility.IMixinConfigPlugin;
import org.spongepowered.asm.mixin.extensibility.IMixinInfo;

import net.minecraftforge.fml.common.Loader;

/**
* Mixin config plugin that conditionally loads mixins based on mod presence.
* This prevents crashes when optional dependencies like JEI are not installed.
*
* <p>This plugin assumes that JEI-specific mixins are placed in a ".jei" subpackage
* under the main mixin package. For example, if the mixin package is
* "com.soliddowant.gregtechenergistics.mixins", then JEI mixins should be in
* "com.soliddowant.gregtechenergistics.mixins.jei".</p>
*/
public class GregTechEnergisticsMixinPlugin implements IMixinConfigPlugin {

private static final String JEI_PACKAGE_SUFFIX = ".jei.";
private static final String JEI_MOD_ID = "jei";

private String mixinPackage;

@Override
public void onLoad(String mixinPackage) {
this.mixinPackage = mixinPackage;
}

@Override
public String getRefMapperConfig() {
return null;
}

@Override
public boolean shouldApplyMixin(String targetClassName, String mixinClassName) {
// Only gate JEI-related mixins behind JEI presence check
// Check if the mixin is in the jei subpackage
String jeiMixinPackage = mixinPackage + JEI_PACKAGE_SUFFIX;
if (mixinClassName.startsWith(jeiMixinPackage)) {
return Loader.isModLoaded(JEI_MOD_ID);
}

// Apply all other mixins unconditionally
return true;
}

@Override
public void acceptTargets(Set<String> myTargets, Set<String> otherTargets) {
// No special target handling needed
}

@Override
public List<String> getMixins() {
// Return null to let the config file handle mixin listing
return null;
}

@Override
public void preApply(String targetClassName, ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) {
// No pre-apply processing needed
}

@Override
public void postApply(String targetClassName, ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) {
// No post-apply processing needed
}
}
1 change: 1 addition & 0 deletions src/main/resources/mixins.gregtechenergistics.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
"target": "@env(DEFAULT)",
"minVersion": "0.8",
"compatibilityLevel": "JAVA_8",
"plugin": "com.soliddowant.gregtechenergistics.mixins.GregTechEnergisticsMixinPlugin",
"mixins": [
"MetaTileEntityHolderMixin"
],
Expand Down