From 4ea7b864a86cea367abaef7c43ead49cc88a5302 Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Mon, 10 Jul 2023 19:00:37 -0400 Subject: [PATCH] Add facility to hide mixin options outside dev --- .../annotation/IgnoreOutsideDev.java | 15 ++++++++++++++ .../core/config/ModernFixEarlyConfig.java | 20 ++++++++++++------- .../rewrite_registry/ForgeRegistryMixin.java | 2 ++ .../ForgeRegistrySnapshotMixin.java | 2 ++ 4 files changed, 32 insertions(+), 7 deletions(-) create mode 100644 common/src/main/java/org/embeddedt/modernfix/annotation/IgnoreOutsideDev.java diff --git a/common/src/main/java/org/embeddedt/modernfix/annotation/IgnoreOutsideDev.java b/common/src/main/java/org/embeddedt/modernfix/annotation/IgnoreOutsideDev.java new file mode 100644 index 00000000..ae4307c3 --- /dev/null +++ b/common/src/main/java/org/embeddedt/modernfix/annotation/IgnoreOutsideDev.java @@ -0,0 +1,15 @@ +package org.embeddedt.modernfix.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * The config system will ignore mixins with this annotation when generating config options unless running + * in a dev environment. + */ +@Retention(RetentionPolicy.CLASS) +@Target(ElementType.TYPE) +public @interface IgnoreOutsideDev { +} diff --git a/common/src/main/java/org/embeddedt/modernfix/core/config/ModernFixEarlyConfig.java b/common/src/main/java/org/embeddedt/modernfix/core/config/ModernFixEarlyConfig.java index ad237a34..fc965085 100644 --- a/common/src/main/java/org/embeddedt/modernfix/core/config/ModernFixEarlyConfig.java +++ b/common/src/main/java/org/embeddedt/modernfix/core/config/ModernFixEarlyConfig.java @@ -8,10 +8,14 @@ import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.embeddedt.modernfix.ModernFix; +import org.embeddedt.modernfix.annotation.ClientOnlyMixin; +import org.embeddedt.modernfix.annotation.IgnoreOutsideDev; +import org.embeddedt.modernfix.annotation.RequiresMod; import org.embeddedt.modernfix.platform.ModernFixPlatformHooks; import org.objectweb.asm.ClassReader; import org.objectweb.asm.tree.AnnotationNode; import org.objectweb.asm.tree.ClassNode; +import org.spongepowered.asm.mixin.Mixin; import java.io.*; import java.nio.charset.StandardCharsets; @@ -47,9 +51,10 @@ public class ModernFixEarlyConfig { return ModernFixPlatformHooks.modPresent(modId); } - private static final String MIXIN_DESC = "Lorg/spongepowered/asm/mixin/Mixin;"; - private static final String MIXIN_CLIENT_ONLY_DESC = "Lorg/embeddedt/modernfix/annotation/ClientOnlyMixin;"; - private static final String MIXIN_REQUIRES_MOD_DESC = "Lorg/embeddedt/modernfix/annotation/RequiresMod;"; + private static final String MIXIN_DESC = Mixin.class.descriptorString(); + private static final String MIXIN_CLIENT_ONLY_DESC = ClientOnlyMixin.class.descriptorString(); + private static final String MIXIN_REQUIRES_MOD_DESC = RequiresMod.class.descriptorString(); + private static final String MIXIN_DEV_ONLY_DESC = IgnoreOutsideDev.class.descriptorString(); private static final Pattern PLATFORM_PREFIX = Pattern.compile("(forge|fabric|common)\\."); @@ -92,7 +97,7 @@ public class ModernFixEarlyConfig { reader.accept(node, ClassReader.SKIP_CODE | ClassReader.SKIP_FRAMES | ClassReader.SKIP_DEBUG); if(node.invisibleAnnotations == null) return; - boolean isMixin = false, isClientOnly = false, requiredModPresent = true; + boolean isMixin = false, isClientOnly = false, requiredModPresent = true, isDevOnly = false; String requiredModId = ""; for(AnnotationNode annotation : node.invisibleAnnotations) { if(Objects.equals(annotation.desc, MIXIN_DESC)) { @@ -110,9 +115,11 @@ public class ModernFixEarlyConfig { break; } } + } else if(Objects.equals(annotation.desc, MIXIN_DEV_ONLY_DESC)) { + isDevOnly = true; } } - if(isMixin) { + if(isMixin && (!isDevOnly || ModernFixPlatformHooks.isDevEnv())) { String mixinClassName = sanitize(node.name.replace('/', '.')).replace("org.embeddedt.modernfix.mixin.", ""); if(!requiredModPresent) mixinsMissingMods.put(mixinClassName, requiredModId); @@ -157,9 +164,8 @@ public class ModernFixEarlyConfig { private static final ImmutableMap DEFAULT_SETTING_OVERRIDES = new DefaultSettingMapBuilder() .put("mixin.perf.dynamic_resources", false) .put("mixin.feature.direct_stack_trace", false) - .put("mixin.perf.rewrite_registry", false) + .putConditionally(ModernFixPlatformHooks::isDevEnv, "mixin.perf.rewrite_registry", false) .put("mixin.perf.clear_mixin_classinfo", false) - .put("mixin.perf.compress_blockstate", false) .put("mixin.bugfix.packet_leak", false) .put("mixin.perf.deduplicate_location", false) .put("mixin.feature.integrated_server_watchdog", true) diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/rewrite_registry/ForgeRegistryMixin.java b/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/rewrite_registry/ForgeRegistryMixin.java index 621db8c5..1e955230 100644 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/rewrite_registry/ForgeRegistryMixin.java +++ b/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/rewrite_registry/ForgeRegistryMixin.java @@ -6,6 +6,7 @@ import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; import net.minecraftforge.registries.ForgeRegistry; import net.minecraftforge.registries.IForgeRegistryEntry; +import org.embeddedt.modernfix.annotation.IgnoreOutsideDev; import org.embeddedt.modernfix.forge.registry.FastForgeRegistry; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; @@ -17,6 +18,7 @@ import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(value = ForgeRegistry.class, remap = false) +@IgnoreOutsideDev public class ForgeRegistryMixin> { @Shadow @Final diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/rewrite_registry/ForgeRegistrySnapshotMixin.java b/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/rewrite_registry/ForgeRegistrySnapshotMixin.java index 8421e5cf..a538a112 100644 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/rewrite_registry/ForgeRegistrySnapshotMixin.java +++ b/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/rewrite_registry/ForgeRegistrySnapshotMixin.java @@ -4,6 +4,7 @@ import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet; import net.minecraft.resources.ResourceLocation; import net.minecraftforge.registries.ForgeRegistry; +import org.embeddedt.modernfix.annotation.IgnoreOutsideDev; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mutable; @@ -16,6 +17,7 @@ import java.util.Map; import java.util.Set; @Mixin(ForgeRegistry.Snapshot.class) +@IgnoreOutsideDev public class ForgeRegistrySnapshotMixin { @Shadow @Final @Mutable public Map ids;