فهرست منبع

Fabric: Disable some Mixins when Hydrogen is installed, increase priority on some others

malte0811 4 سال پیش
والد
کامیت
6d5809a70a

+ 2 - 14
common/src/main/java/malte0811/ferritecore/mixin/blockstatecache/Config.java

@@ -1,22 +1,10 @@
 package malte0811.ferritecore.mixin.blockstatecache;
 
-import com.google.common.collect.ImmutableList;
 import malte0811.ferritecore.mixin.config.FerriteConfig;
 import malte0811.ferritecore.mixin.config.FerriteMixinConfig;
 
-import java.util.List;
-
 public class Config extends FerriteMixinConfig {
-    @Override
-    protected List<String> getAllMixins() {
-        return ImmutableList.of(
-                "AbstractBlockStateMixin", "BlockStateCacheAccess", "VoxelShapeAccess", "VSArrayAccess",
-                "VSPBitSetAccess", "VSPSplitAccess", "VSSplitAccess"
-        );
-    }
-
-    @Override
-    protected boolean isEnabled(String mixin) {
-        return FerriteConfig.DEDUP_BLOCKSTATE_CACHE.isEnabled();
+    public Config() {
+        super(FerriteConfig.DEDUP_BLOCKSTATE_CACHE, false);
     }
 }

+ 17 - 14
common/src/main/java/malte0811/ferritecore/mixin/config/FerriteMixinConfig.java

@@ -6,38 +6,41 @@ 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 org.spongepowered.asm.mixin.transformer.ClassInfo;
 
 import java.util.List;
 import java.util.Set;
 
 public abstract class FerriteMixinConfig implements IMixinConfigPlugin {
     private static final Logger LOGGER = LogManager.getLogger("ferritecore-mixin");
+    private static final boolean HAS_HYDROGEN = ClassInfo.forName("me.jellysquid.mods.hydrogen.common.HydrogenMod") != null;
     private String prefix = null;
-    private List<String> providedMixins;
+    private final FerriteConfig.Option enableOption;
+    private final boolean disableWithHydrogen;
+
+    protected FerriteMixinConfig(FerriteConfig.Option enableOption, boolean disableWithHydrogen) {
+        this.enableOption = enableOption;
+        this.disableWithHydrogen = disableWithHydrogen;
+    }
 
     @Override
     public boolean shouldApplyMixin(String targetClassName, String mixinClassName) {
         Preconditions.checkState(mixinClassName.startsWith(prefix), "Unexpected prefix on " + mixinClassName);
         final String name = mixinClassName.substring(prefix.length());
-        Preconditions.checkState(
-                providedMixins.contains(name),
-                "Unexpected Mixin: " + name + " (" + mixinClassName + ")"
-        );
-        final boolean result = isEnabled(name);
-        if (!result) {
-            LOGGER.debug("Mixin " + mixinClassName + " is disabled by config");
+        if (!enableOption.isEnabled()) {
+            LOGGER.warn("Mixin " + mixinClassName + " is disabled by config");
+            return false;
+        } else if (HAS_HYDROGEN && disableWithHydrogen) {
+            LOGGER.warn("Mixin " + mixinClassName + " is disabled as Hydrogen is installed");
+            return false;
+        } else {
+            return true;
         }
-        return result;
     }
 
-    protected abstract List<String> getAllMixins();
-
-    protected abstract boolean isEnabled(String mixin);
-
     @Override
     public void onLoad(String mixinPackage) {
         prefix = mixinPackage + ".";
-        providedMixins = getAllMixins();
     }
 
     @Override

+ 2 - 11
common/src/main/java/malte0811/ferritecore/mixin/dedupbakedquad/Config.java

@@ -1,19 +1,10 @@
 package malte0811.ferritecore.mixin.dedupbakedquad;
 
-import com.google.common.collect.ImmutableList;
 import malte0811.ferritecore.mixin.config.FerriteConfig;
 import malte0811.ferritecore.mixin.config.FerriteMixinConfig;
 
-import java.util.List;
-
 public class Config extends FerriteMixinConfig {
-    @Override
-    protected List<String> getAllMixins() {
-        return ImmutableList.of("SimpleModelBuilderMixin", "BakedQuadAccess");
-    }
-
-    @Override
-    protected boolean isEnabled(String mixin) {
-        return FerriteConfig.DEDUP_QUADS.isEnabled();
+    public Config() {
+        super(FerriteConfig.DEDUP_QUADS, true);
     }
 }

+ 2 - 11
common/src/main/java/malte0811/ferritecore/mixin/dedupmultipart/Config.java

@@ -1,19 +1,10 @@
 package malte0811.ferritecore.mixin.dedupmultipart;
 
-import com.google.common.collect.ImmutableList;
 import malte0811.ferritecore.mixin.config.FerriteConfig;
 import malte0811.ferritecore.mixin.config.FerriteMixinConfig;
 
-import java.util.List;
-
 public class Config extends FerriteMixinConfig {
-    @Override
-    protected List<String> getAllMixins() {
-        return ImmutableList.of("MixinMultipartBuilder");
-    }
-
-    @Override
-    protected boolean isEnabled(String mixin) {
-        return FerriteConfig.DEDUP_MULTIPART.isEnabled();
+    public Config() {
+        super(FerriteConfig.DEDUP_MULTIPART, false);
     }
 }

+ 3 - 11
common/src/main/java/malte0811/ferritecore/mixin/fastmap/Config.java

@@ -1,19 +1,11 @@
 package malte0811.ferritecore.mixin.fastmap;
 
-import com.google.common.collect.ImmutableList;
 import malte0811.ferritecore.mixin.config.FerriteConfig;
 import malte0811.ferritecore.mixin.config.FerriteMixinConfig;
 
-import java.util.List;
-
 public class Config extends FerriteMixinConfig {
-    @Override
-    protected List<String> getAllMixins() {
-        return ImmutableList.of("FastMapStateHolderMixin");
-    }
-
-    @Override
-    protected boolean isEnabled(String mixin) {
-        return FerriteConfig.NEIGHBOR_LOOKUP.isEnabled();
+    public Config() {
+        // TODO make compatible
+        super(FerriteConfig.NEIGHBOR_LOOKUP, true);
     }
 }

+ 2 - 11
common/src/main/java/malte0811/ferritecore/mixin/mrl/Config.java

@@ -1,19 +1,10 @@
 package malte0811.ferritecore.mixin.mrl;
 
-import com.google.common.collect.ImmutableList;
 import malte0811.ferritecore.mixin.config.FerriteConfig;
 import malte0811.ferritecore.mixin.config.FerriteMixinConfig;
 
-import java.util.List;
-
 public class Config extends FerriteMixinConfig {
-    @Override
-    protected List<String> getAllMixins() {
-        return ImmutableList.of("ResourceLocationAccess", "ModelResourceLocationMixin");
-    }
-
-    @Override
-    protected boolean isEnabled(String mixin) {
-        return FerriteConfig.MRL_CACHE.isEnabled();
+    public Config() {
+        super(FerriteConfig.MRL_CACHE, false);
     }
 }

+ 1 - 1
common/src/main/java/malte0811/ferritecore/mixin/predicates/AndConditionMixin.java

@@ -14,7 +14,7 @@ import org.spongepowered.asm.mixin.Shadow;
 
 import java.util.function.Predicate;
 
-@Mixin(AndCondition.class)
+@Mixin(value = AndCondition.class, priority = 2000)
 public class AndConditionMixin {
     @Shadow
     @Final

+ 2 - 11
common/src/main/java/malte0811/ferritecore/mixin/predicates/Config.java

@@ -1,19 +1,10 @@
 package malte0811.ferritecore.mixin.predicates;
 
-import com.google.common.collect.ImmutableList;
 import malte0811.ferritecore.mixin.config.FerriteConfig;
 import malte0811.ferritecore.mixin.config.FerriteMixinConfig;
 
-import java.util.List;
-
 public class Config extends FerriteMixinConfig {
-    @Override
-    protected List<String> getAllMixins() {
-        return ImmutableList.of("AndConditionMixin", "OrConditionMixin", "PropertyValueConditionMixin");
-    }
-
-    @Override
-    protected boolean isEnabled(String mixin) {
-        return FerriteConfig.PREDICATES.isEnabled();
+    public Config() {
+        super(FerriteConfig.PREDICATES, false);
     }
 }

+ 1 - 1
common/src/main/java/malte0811/ferritecore/mixin/predicates/OrConditionMixin.java

@@ -14,7 +14,7 @@ import org.spongepowered.asm.mixin.Shadow;
 
 import java.util.function.Predicate;
 
-@Mixin(OrCondition.class)
+@Mixin(value = OrCondition.class, priority = 2000)
 public class OrConditionMixin {
     @Shadow
     @Final

+ 1 - 1
common/src/main/java/malte0811/ferritecore/mixin/predicates/PropertyValueConditionMixin.java

@@ -13,7 +13,7 @@ import org.spongepowered.asm.mixin.Shadow;
 
 import java.util.function.Predicate;
 
-@Mixin(PropertyValueCondition.class)
+@Mixin(value = PropertyValueCondition.class, priority = 2000)
 public class PropertyValueConditionMixin {
     @Shadow
     @Final