From 13cc103be214b81f54836d69562c706bccf305c0 Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Thu, 27 Jul 2023 16:26:16 -0400 Subject: [PATCH 1/2] Switch to compile-only Arch Transformer --- build.gradle | 13 ++++ .../org/embeddedt/modernfix/ModernFix.java | 6 +- .../embeddedt/modernfix/ModernFixClient.java | 6 +- .../ChunkGeneratorMixin.java | 2 +- .../TextureAtlasMixin.java | 4 +- .../StitcherMixin.java | 4 +- .../modernfix/core/ModernFixMixinPlugin.java | 12 ++-- .../core/config/ModernFixEarlyConfig.java | 12 ++-- .../dynamicresources/ModelBakeryHelpers.java | 2 +- .../entity/EntityDataIDSyncHandler.java | 2 +- .../platform/ModernFixPlatformHooks.java | 72 +++++++++---------- .../platform/PlatformHookLoader.java | 23 ++++++ .../resources/PackResourcesCacheEngine.java | 2 +- .../modernfix/screen/OptionList.java | 2 +- .../structure/CachingStructureManager.java | 2 +- fabric/build.gradle | 1 - .../fabric/ModernFixPlatformHooksImpl.java | 37 +++++----- forge/build.gradle | 1 - .../forge/ModernFixPlatformHooksImpl.java | 37 +++++----- 19 files changed, 138 insertions(+), 102 deletions(-) create mode 100644 common/src/main/java/org/embeddedt/modernfix/platform/PlatformHookLoader.java diff --git a/build.gradle b/build.gradle index def48f11..38e67e4c 100644 --- a/build.gradle +++ b/build.gradle @@ -28,6 +28,10 @@ allprojects { } } + architectury { + compileOnly() + } + group = 'org.embeddedt' // extract base version from tag, generate other metadata ourselves def details = versionDetails() @@ -189,6 +193,15 @@ configure(subprojects.findAll {it.name == "forge" || it.name == "fabric"}) { apply plugin: 'com.matthewprenger.cursegradle' apply plugin: 'com.modrinth.minotaur' + loom { + mods { + main { // to match the default mod generated for Forge + sourceSet project.sourceSets.main + sourceSet project(':common').sourceSets.main + } + } + } + def copyJarNameConsistent = tasks.register('copyJarNameConsistent', Copy) { from remapJar // shortcut for createJar.outputs.files into project.file("build/libs") diff --git a/common/src/main/java/org/embeddedt/modernfix/ModernFix.java b/common/src/main/java/org/embeddedt/modernfix/ModernFix.java index 545f59a9..151f2189 100644 --- a/common/src/main/java/org/embeddedt/modernfix/ModernFix.java +++ b/common/src/main/java/org/embeddedt/modernfix/ModernFix.java @@ -50,15 +50,15 @@ public class ModernFix { INSTANCE = this; if(ModernFixMixinPlugin.instance.isOptionEnabled("feature.snapshot_easter_egg.NameChange") && !SharedConstants.getCurrentVersion().isStable()) NAME = "PreemptiveFix"; - ModernFixPlatformHooks.onServerCommandRegister(ModernFixCommands::register); + ModernFixPlatformHooks.INSTANCE.onServerCommandRegister(ModernFixCommands::register); } public void onServerStarted() { - if(ModernFixPlatformHooks.isDedicatedServer()) { + if(ModernFixPlatformHooks.INSTANCE.isDedicatedServer()) { float gameStartTime = ManagementFactory.getRuntimeMXBean().getUptime() / 1000f; if(ModernFixMixinPlugin.instance.isOptionEnabled("feature.measure_time.ServerLoad")) ModernFix.LOGGER.warn("Dedicated server took " + gameStartTime + " seconds to load"); - ModernFixPlatformHooks.onLaunchComplete(); + ModernFixPlatformHooks.INSTANCE.onLaunchComplete(); } ClassInfoManager.clear(); } diff --git a/common/src/main/java/org/embeddedt/modernfix/ModernFixClient.java b/common/src/main/java/org/embeddedt/modernfix/ModernFixClient.java index cca96b4a..033b7e86 100644 --- a/common/src/main/java/org/embeddedt/modernfix/ModernFixClient.java +++ b/common/src/main/java/org/embeddedt/modernfix/ModernFixClient.java @@ -42,9 +42,9 @@ public class ModernFixClient { // clear reserve as it's not needed Minecraft.reserve = new byte[0]; if(ModernFixMixinPlugin.instance.isOptionEnabled("feature.branding.F3Screen")) { - brandingString = ModernFix.NAME + " " + ModernFixPlatformHooks.getVersionString(); + brandingString = ModernFix.NAME + " " + ModernFixPlatformHooks.INSTANCE.getVersionString(); } - for(String className : ModernFixPlatformHooks.getCustomModOptions().get(IntegrationConstants.CLIENT_INTEGRATION_CLASS)) { + for(String className : ModernFixPlatformHooks.INSTANCE.getCustomModOptions().get(IntegrationConstants.CLIENT_INTEGRATION_CLASS)) { try { CLIENT_INTEGRATIONS.add((ModernFixClientIntegration)Class.forName(className).getDeclaredConstructor().newInstance()); } catch(ReflectiveOperationException | ClassCastException e) { @@ -67,7 +67,7 @@ public class ModernFixClient { gameStartTimeSeconds = ManagementFactory.getRuntimeMXBean().getUptime() / 1000f; if(ModernFixMixinPlugin.instance.isOptionEnabled("feature.measure_time.GameLoad")) ModernFix.LOGGER.warn("Game took " + gameStartTimeSeconds + " seconds to start"); - ModernFixPlatformHooks.onLaunchComplete(); + ModernFixPlatformHooks.INSTANCE.onLaunchComplete(); ClassInfoManager.clear(); } } diff --git a/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/cache_strongholds/ChunkGeneratorMixin.java b/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/cache_strongholds/ChunkGeneratorMixin.java index 761e0121..b2bf82ce 100644 --- a/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/cache_strongholds/ChunkGeneratorMixin.java +++ b/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/cache_strongholds/ChunkGeneratorMixin.java @@ -38,7 +38,7 @@ public class ChunkGeneratorMixin { } private ServerLevel searchLevel() { - MinecraftServer server = ModernFixPlatformHooks.getCurrentServer(); + MinecraftServer server = ModernFixPlatformHooks.INSTANCE.getCurrentServer(); if(server != null) { ServerLevel ourLevel = null; for (ServerLevel level : server.getAllLevels()) { diff --git a/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/faster_texture_loading/TextureAtlasMixin.java b/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/faster_texture_loading/TextureAtlasMixin.java index b27150cc..fd605967 100644 --- a/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/faster_texture_loading/TextureAtlasMixin.java +++ b/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/faster_texture_loading/TextureAtlasMixin.java @@ -41,7 +41,7 @@ public abstract class TextureAtlasMixin { */ @Inject(method = "getBasicSpriteInfos", at = @At("HEAD")) private void loadImages(ResourceManager manager, Set imageLocations, CallbackInfoReturnable> cir) { - usingFasterLoad = ModernFixPlatformHooks.isLoadingNormally(); + usingFasterLoad = ModernFixPlatformHooks.INSTANCE.isLoadingNormally(); } @Redirect(method = "getBasicSpriteInfos", at = @At(value = "INVOKE", target = "Ljava/util/Set;iterator()Ljava/util/Iterator;", ordinal = 0)) @@ -107,7 +107,7 @@ public abstract class TextureAtlasMixin { } else { TextureAtlasSprite sprite = null; try { - sprite = ModernFixPlatformHooks.loadTextureAtlasSprite((TextureAtlas)(Object)this, resourceManager, spriteInfo, pair.getFirst(), width, height, originX, originY, mipmapLevel, pair.getSecond()); + sprite = ModernFixPlatformHooks.INSTANCE.loadTextureAtlasSprite((TextureAtlas)(Object)this, resourceManager, spriteInfo, pair.getFirst(), width, height, originX, originY, mipmapLevel, pair.getSecond()); } catch(RuntimeException e) { ModernFix.LOGGER.error("Error loading texture {}: {}", spriteInfo.name(), e); } finally { diff --git a/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/faster_texture_stitching/StitcherMixin.java b/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/faster_texture_stitching/StitcherMixin.java index 88924e9d..5972177a 100644 --- a/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/faster_texture_stitching/StitcherMixin.java +++ b/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/faster_texture_stitching/StitcherMixin.java @@ -36,7 +36,7 @@ public class StitcherMixin { */ @Inject(method = "stitch", at = @At("HEAD"), cancellable = true) private void stitchFast(CallbackInfo ci) { - if(!ModernFixPlatformHooks.isLoadingNormally()) { + if(!ModernFixPlatformHooks.INSTANCE.isLoadingNormally()) { ModernFix.LOGGER.error("Using vanilla stitcher implementation due to invalid loading state"); return; } @@ -57,7 +57,7 @@ public class StitcherMixin { */ @Inject(method = "gatherSprites", at = @At("HEAD"), cancellable = true) private void gatherSpritesFast(Stitcher.SpriteLoader spriteLoader, CallbackInfo ci) { - if(!ModernFixPlatformHooks.isLoadingNormally()) + if(!ModernFixPlatformHooks.INSTANCE.isLoadingNormally()) return; ci.cancel(); for(StbStitcher.LoadableSpriteInfo info : loadableSpriteInfos) { diff --git a/common/src/main/java/org/embeddedt/modernfix/core/ModernFixMixinPlugin.java b/common/src/main/java/org/embeddedt/modernfix/core/ModernFixMixinPlugin.java index 454afa95..6c902036 100644 --- a/common/src/main/java/org/embeddedt/modernfix/core/ModernFixMixinPlugin.java +++ b/common/src/main/java/org/embeddedt/modernfix/core/ModernFixMixinPlugin.java @@ -22,7 +22,7 @@ public class ModernFixMixinPlugin implements IMixinConfigPlugin { public ModernFixMixinPlugin() { /* invoke early to ensure it gets read on one thread */ - ModernFixPlatformHooks.getCustomModOptions(); + ModernFixPlatformHooks.INSTANCE.getCustomModOptions(); boolean firstConfig = instance == null; if(firstConfig) { instance = this; @@ -33,7 +33,7 @@ public class ModernFixMixinPlugin implements IMixinConfigPlugin { } this.logger.info("Loaded configuration file for ModernFix {}: {} options available, {} override(s) found", - ModernFixPlatformHooks.getVersionString(), config.getOptionCount(), config.getOptionOverrideCount()); + ModernFixPlatformHooks.INSTANCE.getVersionString(), config.getOptionCount(), config.getOptionOverrideCount()); config.getOptionMap().values().forEach(option -> { if (option.isOverridden()) { @@ -41,7 +41,7 @@ public class ModernFixMixinPlugin implements IMixinConfigPlugin { if (option.isUserDefined()) { source = "user configuration"; - } else if (!ModernFixPlatformHooks.isEarlyLoadingNormally()) { + } else if (!ModernFixPlatformHooks.INSTANCE.isEarlyLoadingNormally()) { source = "load error"; } else if (option.isModDefined()) { source = "mods [" + String.join(", ", option.getDefiningMods()) + "]"; @@ -64,7 +64,7 @@ public class ModernFixMixinPlugin implements IMixinConfigPlugin { } /* We abuse the constructor of a mixin plugin as a safe location to start modifying the classloader */ - ModernFixPlatformHooks.injectPlatformSpecificHacks(); + ModernFixPlatformHooks.INSTANCE.injectPlatformSpecificHacks(); if(ModernFixMixinPlugin.instance.isOptionEnabled("feature.spam_thread_dump.ThreadDumper")) { // run once to trigger classloading @@ -119,7 +119,7 @@ public class ModernFixMixinPlugin implements IMixinConfigPlugin { if (option == null) { String msg = "No rules matched mixin '{}', treating as foreign and disabling!"; - if(ModernFixPlatformHooks.isDevEnv()) + if(ModernFixPlatformHooks.INSTANCE.isDevEnv()) this.logger.error(msg, mixin); else this.logger.debug(msg, mixin); @@ -146,6 +146,6 @@ public class ModernFixMixinPlugin implements IMixinConfigPlugin { @Override public void postApply(String targetClassName, ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) { - ModernFixPlatformHooks.applyASMTransformers(mixinClassName, targetClass); + ModernFixPlatformHooks.INSTANCE.applyASMTransformers(mixinClassName, targetClass); } } \ No newline at end of file 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 601f71c9..3ddd4905 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 @@ -51,7 +51,7 @@ public class ModernFixEarlyConfig { if(modId.equals("optifine")) return OPTIFINE_PRESENT; else - return ModernFixPlatformHooks.modPresent(modId); + return ModernFixPlatformHooks.INSTANCE.modPresent(modId); } private static final String MIXIN_DESC = Type.getDescriptor(Mixin.class); @@ -122,11 +122,11 @@ public class ModernFixEarlyConfig { isDevOnly = true; } } - if(isMixin && (!isDevOnly || ModernFixPlatformHooks.isDevEnv())) { + if(isMixin && (!isDevOnly || ModernFixPlatformHooks.INSTANCE.isDevEnv())) { String mixinClassName = sanitize(node.name.replace('/', '.')).replace("org.embeddedt.modernfix.mixin.", ""); if(!requiredModPresent) mixinsMissingMods.put(mixinClassName, requiredModId); - else if(isClientOnly && !ModernFixPlatformHooks.isClient()) + else if(isClientOnly && !ModernFixPlatformHooks.INSTANCE.isClient()) mixinsMissingMods.put(mixinClassName, "[not client]"); List mixinOptionNames = dotSplitter.splitToList(mixinClassName); StringBuilder optionBuilder = new StringBuilder(mixinClassName.length()); @@ -151,7 +151,7 @@ public class ModernFixEarlyConfig { } private static final boolean shouldReplaceSearchTrees; - private static final boolean isDevEnv = ModernFixPlatformHooks.isDevEnv(); + private static final boolean isDevEnv = ModernFixPlatformHooks.INSTANCE.isDevEnv(); static { shouldReplaceSearchTrees = modPresent("jei"); @@ -174,7 +174,7 @@ 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) - .putConditionally(ModernFixPlatformHooks::isDevEnv, "mixin.perf.rewrite_registry", false) + .putConditionally(ModernFixPlatformHooks.INSTANCE::isDevEnv, "mixin.perf.rewrite_registry", false) .put("mixin.perf.clear_mixin_classinfo", false) .put("mixin.bugfix.packet_leak", false) .put("mixin.perf.deduplicate_location", false) @@ -245,7 +245,7 @@ public class ModernFixEarlyConfig { private void disableIfModPresent(String configName, String... ids) { for(String id : ids) { - if(!ModernFixPlatformHooks.isEarlyLoadingNormally() || modPresent(id)) { + if(!ModernFixPlatformHooks.INSTANCE.isEarlyLoadingNormally() || modPresent(id)) { Option option = this.options.get(configName); if(option != null) option.addModOverride(false, id); diff --git a/common/src/main/java/org/embeddedt/modernfix/dynamicresources/ModelBakeryHelpers.java b/common/src/main/java/org/embeddedt/modernfix/dynamicresources/ModelBakeryHelpers.java index 5fe31f1a..2a16fc0c 100644 --- a/common/src/main/java/org/embeddedt/modernfix/dynamicresources/ModelBakeryHelpers.java +++ b/common/src/main/java/org/embeddedt/modernfix/dynamicresources/ModelBakeryHelpers.java @@ -117,7 +117,7 @@ public class ModelBakeryHelpers { Set modelFiles, UnbakedModel missingModel, Function modelDeserializer, Function bakeryModelGetter) { - if(!ModernFixPlatformHooks.isLoadingNormally()) + if(!ModernFixPlatformHooks.INSTANCE.isLoadingNormally()) return; Stopwatch stopwatch = Stopwatch.createStarted(); final Object2IntOpenHashMap blockstateErrors = new Object2IntOpenHashMap<>(); diff --git a/common/src/main/java/org/embeddedt/modernfix/entity/EntityDataIDSyncHandler.java b/common/src/main/java/org/embeddedt/modernfix/entity/EntityDataIDSyncHandler.java index 695076c8..9a9bb88d 100644 --- a/common/src/main/java/org/embeddedt/modernfix/entity/EntityDataIDSyncHandler.java +++ b/common/src/main/java/org/embeddedt/modernfix/entity/EntityDataIDSyncHandler.java @@ -51,7 +51,7 @@ public class EntityDataIDSyncHandler { } EntityIDSyncPacket packet = new EntityIDSyncPacket(fieldsToSyncMap); ModernFix.LOGGER.debug("Sending ID correction packet to client with " + fieldsToSyncMap.size() + " classes"); - ModernFixPlatformHooks.sendPacket(targetPlayer, packet); + ModernFixPlatformHooks.INSTANCE.sendPacket(targetPlayer, packet); } } } diff --git a/common/src/main/java/org/embeddedt/modernfix/platform/ModernFixPlatformHooks.java b/common/src/main/java/org/embeddedt/modernfix/platform/ModernFixPlatformHooks.java index 1c18021e..0a89c5f8 100644 --- a/common/src/main/java/org/embeddedt/modernfix/platform/ModernFixPlatformHooks.java +++ b/common/src/main/java/org/embeddedt/modernfix/platform/ModernFixPlatformHooks.java @@ -3,7 +3,6 @@ package org.embeddedt.modernfix.platform; import com.google.common.collect.Multimap; import com.mojang.blaze3d.platform.NativeImage; import com.mojang.brigadier.CommandDispatcher; -import dev.architectury.injectables.annotations.ExpectPlatform; import net.minecraft.client.renderer.texture.TextureAtlas; import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.commands.CommandSourceStack; @@ -16,59 +15,60 @@ import org.objectweb.asm.tree.ClassNode; import java.nio.file.Path; import java.util.function.Consumer; -public class ModernFixPlatformHooks { - @ExpectPlatform - public static boolean isClient() { +public interface ModernFixPlatformHooks { + ModernFixPlatformHooks INSTANCE = PlatformHookLoader.findInstance(); + + default boolean isClient() { throw new AssertionError(); } - @ExpectPlatform - public static boolean isDedicatedServer() { + + default boolean isDedicatedServer() { throw new AssertionError(); } - @ExpectPlatform - public static String getVersionString() { + + default String getVersionString() { throw new AssertionError(); } - @ExpectPlatform - public static boolean modPresent(String modId) { + + default boolean modPresent(String modId) { throw new AssertionError(); } - @ExpectPlatform - public static boolean isDevEnv() { + + default boolean isDevEnv() { throw new AssertionError(); } - @ExpectPlatform - public static void injectPlatformSpecificHacks() { + + default void injectPlatformSpecificHacks() { throw new AssertionError(); } - @ExpectPlatform - public static void applyASMTransformers(String mixinClassName, ClassNode targetClass) { + + default void applyASMTransformers(String mixinClassName, ClassNode targetClass) { throw new AssertionError(); } - @ExpectPlatform - public static MinecraftServer getCurrentServer() { + + default MinecraftServer getCurrentServer() { throw new AssertionError(); } - @ExpectPlatform - public static boolean isEarlyLoadingNormally() { + + default boolean isEarlyLoadingNormally() { throw new AssertionError(); } - @ExpectPlatform - public static boolean isLoadingNormally() { + + default boolean isLoadingNormally() { throw new AssertionError(); } - @ExpectPlatform - public static TextureAtlasSprite loadTextureAtlasSprite(TextureAtlas atlasTexture, + + default TextureAtlasSprite loadTextureAtlasSprite(TextureAtlas atlasTexture, ResourceManager resourceManager, TextureAtlasSprite.Info textureInfo, Resource resource, int atlasWidth, int atlasHeight, @@ -77,33 +77,33 @@ public class ModernFixPlatformHooks { throw new AssertionError(); } - @ExpectPlatform - public static Path getGameDirectory() { + + default Path getGameDirectory() { throw new AssertionError(); } - @ExpectPlatform - public static void sendPacket(ServerPlayer player, Object packet) { + + default void sendPacket(ServerPlayer player, Object packet) { throw new AssertionError(); } - @ExpectPlatform - public static void onServerCommandRegister(Consumer> handler) { + + default void onServerCommandRegister(Consumer> handler) { throw new AssertionError(); } - @ExpectPlatform - public static Multimap getCustomModOptions() { + + default Multimap getCustomModOptions() { throw new AssertionError(); } - @ExpectPlatform - public static void onLaunchComplete() { + + default void onLaunchComplete() { } - @ExpectPlatform - public static String getPlatformName() { + + default String getPlatformName() { throw new AssertionError(); } } diff --git a/common/src/main/java/org/embeddedt/modernfix/platform/PlatformHookLoader.java b/common/src/main/java/org/embeddedt/modernfix/platform/PlatformHookLoader.java new file mode 100644 index 00000000..87f4fca4 --- /dev/null +++ b/common/src/main/java/org/embeddedt/modernfix/platform/PlatformHookLoader.java @@ -0,0 +1,23 @@ +package org.embeddedt.modernfix.platform; + +import java.lang.reflect.Constructor; + +class PlatformHookLoader { + static ModernFixPlatformHooks findInstance() { + String[] locations = new String[] { "forge", "fabric" }; + for(String location : locations) { + try { + Class clz = Class.forName("org.embeddedt.modernfix.platform." + location + ".ModernFixPlatformHooksImpl"); + Constructor constructor = clz.getConstructor(); + constructor.setAccessible(true); + return (ModernFixPlatformHooks)constructor.newInstance(); + } catch(ClassNotFoundException ignored) { + } catch(ReflectiveOperationException | ClassCastException e) { + e.printStackTrace(); + } + } + System.err.println("ModernFix has failed to load platform hooks. It cannot function, the game will now close"); + Runtime.getRuntime().exit(1); + throw new AssertionError("Somehow couldn't exit"); + } +} diff --git a/common/src/main/java/org/embeddedt/modernfix/resources/PackResourcesCacheEngine.java b/common/src/main/java/org/embeddedt/modernfix/resources/PackResourcesCacheEngine.java index dc559787..6d03156d 100644 --- a/common/src/main/java/org/embeddedt/modernfix/resources/PackResourcesCacheEngine.java +++ b/common/src/main/java/org/embeddedt/modernfix/resources/PackResourcesCacheEngine.java @@ -172,7 +172,7 @@ public class PackResourcesCacheEngine { } public static void invalidate() { - if(!ModernFixPlatformHooks.isDevEnv()) + if(!ModernFixPlatformHooks.INSTANCE.isDevEnv()) return; synchronized (cachingPacks) { cachingPacks.keySet().forEach(pack -> { diff --git a/common/src/main/java/org/embeddedt/modernfix/screen/OptionList.java b/common/src/main/java/org/embeddedt/modernfix/screen/OptionList.java index c5ed97bb..8adc08e2 100644 --- a/common/src/main/java/org/embeddedt/modernfix/screen/OptionList.java +++ b/common/src/main/java/org/embeddedt/modernfix/screen/OptionList.java @@ -147,7 +147,7 @@ public class OptionList extends ContainerObjectSelectionList { }); if(!I18n.exists("modernfix.option." + optionName)) { this.helpButton.active = false; - if(ModernFixPlatformHooks.isDevEnv() && OPTIONS_MISSING_HELP.add(optionName)) + if(ModernFixPlatformHooks.INSTANCE.isDevEnv() && OPTIONS_MISSING_HELP.add(optionName)) ModernFix.LOGGER.warn("Missing help for {}", optionName); } } diff --git a/common/src/main/java/org/embeddedt/modernfix/structure/CachingStructureManager.java b/common/src/main/java/org/embeddedt/modernfix/structure/CachingStructureManager.java index 9f96c0ee..6b7baf3d 100644 --- a/common/src/main/java/org/embeddedt/modernfix/structure/CachingStructureManager.java +++ b/common/src/main/java/org/embeddedt/modernfix/structure/CachingStructureManager.java @@ -26,7 +26,7 @@ public class CachingStructureManager { throw new RuntimeException(e); } }); - private static final File STRUCTURE_CACHE_FOLDER = FileUtil.childFile(ModernFixPlatformHooks.getGameDirectory().resolve("modernfix").resolve("structureCacheV1").toFile()); + private static final File STRUCTURE_CACHE_FOLDER = FileUtil.childFile(ModernFixPlatformHooks.INSTANCE.getGameDirectory().resolve("modernfix").resolve("structureCacheV1").toFile()); static { STRUCTURE_CACHE_FOLDER.mkdirs(); diff --git a/fabric/build.gradle b/fabric/build.gradle index 070eba7d..31de4880 100644 --- a/fabric/build.gradle +++ b/fabric/build.gradle @@ -17,7 +17,6 @@ configurations { shadowCommon // Don't use shadow from the shadow plugin since it *excludes* files. compileClasspath.extendsFrom common runtimeClasspath.extendsFrom common - developmentFabric.extendsFrom common modIncludeImplementation diff --git a/fabric/src/main/java/org/embeddedt/modernfix/platform/fabric/ModernFixPlatformHooksImpl.java b/fabric/src/main/java/org/embeddedt/modernfix/platform/fabric/ModernFixPlatformHooksImpl.java index d0e0f149..f23af062 100644 --- a/fabric/src/main/java/org/embeddedt/modernfix/platform/fabric/ModernFixPlatformHooksImpl.java +++ b/fabric/src/main/java/org/embeddedt/modernfix/platform/fabric/ModernFixPlatformHooksImpl.java @@ -21,6 +21,7 @@ import org.embeddedt.modernfix.ModernFixFabric; import org.embeddedt.modernfix.api.constants.IntegrationConstants; import org.embeddedt.modernfix.core.ModernFixMixinPlugin; import org.embeddedt.modernfix.fabric.spark.SparkLaunchProfiler; +import org.embeddedt.modernfix.platform.ModernFixPlatformHooks; import org.embeddedt.modernfix.util.CommonModUtil; import org.objectweb.asm.tree.*; @@ -28,18 +29,18 @@ import java.nio.file.Path; import java.util.*; import java.util.function.Consumer; -public class ModernFixPlatformHooksImpl { - public static boolean isClient() { +public class ModernFixPlatformHooksImpl implements ModernFixPlatformHooks { + public boolean isClient() { return FabricLoader.getInstance().getEnvironmentType() == EnvType.CLIENT; } - public static boolean isDedicatedServer() { + public boolean isDedicatedServer() { return FabricLoader.getInstance().getEnvironmentType() == EnvType.SERVER; } private static String verString; - public static String getVersionString() { + public String getVersionString() { if(verString == null) { ModContainer mfModContainer = FabricLoader.getInstance().getModContainer("modernfix").get(); verString = mfModContainer.getMetadata().getVersion().getFriendlyString(); @@ -47,27 +48,27 @@ public class ModernFixPlatformHooksImpl { return verString; } - public static boolean modPresent(String modId) { + public boolean modPresent(String modId) { return FabricLoader.getInstance().getModContainer(modId).isPresent(); } - public static boolean isDevEnv() { + public boolean isDevEnv() { return FabricLoader.getInstance().isDevelopmentEnvironment(); } - public static MinecraftServer getCurrentServer() { + public MinecraftServer getCurrentServer() { return ModernFixFabric.theServer.get(); } - public static boolean isEarlyLoadingNormally() { + public boolean isEarlyLoadingNormally() { return true; } - public static boolean isLoadingNormally() { + public boolean isLoadingNormally() { return true; } - public static TextureAtlasSprite loadTextureAtlasSprite(TextureAtlas atlasTexture, + public TextureAtlasSprite loadTextureAtlasSprite(TextureAtlas atlasTexture, ResourceManager resourceManager, TextureAtlasSprite.Info textureInfo, Resource resource, int atlasWidth, int atlasHeight, @@ -76,27 +77,27 @@ public class ModernFixPlatformHooksImpl { return new TextureAtlasSprite(atlasTexture, textureInfo, mipmapLevel, atlasWidth, atlasHeight, spriteX, spriteY, image); } - public static Path getGameDirectory() { + public Path getGameDirectory() { return FabricLoader.getInstance().getGameDir(); } - public static void sendPacket(ServerPlayer player, Object packet) { + public void sendPacket(ServerPlayer player, Object packet) { //PacketHandler.INSTANCE.send(PacketDistributor.PLAYER.with(() -> player), packet); } - public static void injectPlatformSpecificHacks() { + public void injectPlatformSpecificHacks() { } - public static void applyASMTransformers(String mixinClassName, ClassNode targetClass) { + public void applyASMTransformers(String mixinClassName, ClassNode targetClass) { } - public static void onServerCommandRegister(Consumer> handler) { + public void onServerCommandRegister(Consumer> handler) { CommandRegistrationCallback.EVENT.register((dispatcher, arg) -> handler.accept(dispatcher)); } private static Multimap modOptions; - public static Multimap getCustomModOptions() { + public Multimap getCustomModOptions() { if(modOptions == null) { modOptions = ArrayListMultimap.create(); for (ModContainer container : FabricLoader.getInstance().getAllMods()) { @@ -117,13 +118,13 @@ public class ModernFixPlatformHooksImpl { return modOptions; } - public static void onLaunchComplete() { + public void onLaunchComplete() { if(ModernFixMixinPlugin.instance.isOptionEnabled("feature.spark_profile_launch.OnFabric")) { CommonModUtil.runWithoutCrash(() -> SparkLaunchProfiler.stop("launch"), "Failed to stop profiler"); } } - public static String getPlatformName() { + public String getPlatformName() { return "Fabric"; } } diff --git a/forge/build.gradle b/forge/build.gradle index 3868a69d..f7005e78 100644 --- a/forge/build.gradle +++ b/forge/build.gradle @@ -25,7 +25,6 @@ configurations { shadowCommon // Don't use shadow from the shadow plugin since it *excludes* files. compileClasspath.extendsFrom common runtimeClasspath.extendsFrom common - developmentForge.extendsFrom common } dependencies { diff --git a/forge/src/main/java/org/embeddedt/modernfix/platform/forge/ModernFixPlatformHooksImpl.java b/forge/src/main/java/org/embeddedt/modernfix/platform/forge/ModernFixPlatformHooksImpl.java index 0339c395..44565b96 100644 --- a/forge/src/main/java/org/embeddedt/modernfix/platform/forge/ModernFixPlatformHooksImpl.java +++ b/forge/src/main/java/org/embeddedt/modernfix/platform/forge/ModernFixPlatformHooksImpl.java @@ -32,6 +32,7 @@ import org.embeddedt.modernfix.forge.classloading.ModernFixResourceFinder; import org.embeddedt.modernfix.forge.config.NightConfigFixer; import org.embeddedt.modernfix.forge.packet.PacketHandler; import org.embeddedt.modernfix.forge.spark.SparkLaunchProfiler; +import org.embeddedt.modernfix.platform.ModernFixPlatformHooks; import org.embeddedt.modernfix.util.CommonModUtil; import org.embeddedt.modernfix.util.DummyList; import org.objectweb.asm.Opcodes; @@ -56,18 +57,18 @@ import java.util.Optional; import java.util.function.Consumer; import java.util.function.Function; -public class ModernFixPlatformHooksImpl { - public static boolean isClient() { +public class ModernFixPlatformHooksImpl implements ModernFixPlatformHooks { + public boolean isClient() { return FMLLoader.getDist() == Dist.CLIENT; } - public static boolean isDedicatedServer() { + public boolean isDedicatedServer() { return FMLLoader.getDist().isDedicatedServer(); } private static String verString; - public static String getVersionString() { + public String getVersionString() { if(verString == null) { try { verString = ModernFixMixinPlugin.class.getPackage().getImplementationVersion(); @@ -79,28 +80,28 @@ public class ModernFixPlatformHooksImpl { return verString; } - public static boolean modPresent(String modId) { + public boolean modPresent(String modId) { return FMLLoader.getLoadingModList().getModFileById(modId) != null; } - public static boolean isDevEnv() { + public boolean isDevEnv() { return !FMLLoader.isProduction(); } - public static MinecraftServer getCurrentServer() { + public MinecraftServer getCurrentServer() { return ServerLifecycleHooks.getCurrentServer(); } - public static boolean isEarlyLoadingNormally() { + public boolean isEarlyLoadingNormally() { return LoadingModList.get().getErrors().isEmpty(); } - public static boolean isLoadingNormally() { + public boolean isLoadingNormally() { return isEarlyLoadingNormally() && ModLoader.isLoadingStateValid(); } - public static TextureAtlasSprite loadTextureAtlasSprite(TextureAtlas atlasTexture, + public TextureAtlasSprite loadTextureAtlasSprite(TextureAtlas atlasTexture, ResourceManager resourceManager, TextureAtlasSprite.Info textureInfo, Resource resource, int atlasWidth, int atlasHeight, @@ -142,15 +143,15 @@ public class ModernFixPlatformHooksImpl { } } - public static Path getGameDirectory() { + public Path getGameDirectory() { return FMLPaths.GAMEDIR.get(); } - public static void sendPacket(ServerPlayer player, Object packet) { + public void sendPacket(ServerPlayer player, Object packet) { PacketHandler.INSTANCE.send(PacketDistributor.PLAYER.with(() -> player), packet); } - public static void injectPlatformSpecificHacks() { + public void injectPlatformSpecificHacks() { /* We abuse the constructor of a mixin plugin as a safe location to start modifying the classloader */ /* Swap the transformer for ours */ ClassLoader loader = Thread.currentThread().getContextClassLoader(); @@ -227,7 +228,7 @@ public class ModernFixPlatformHooksImpl { return resourceEnumeratorLocator; } - public static void applyASMTransformers(String mixinClassName, ClassNode targetClass) { + public void applyASMTransformers(String mixinClassName, ClassNode targetClass) { if(mixinClassName.equals("org.embeddedt.modernfix.forge.mixin.bugfix.chunk_deadlock.valhesia.BlockStateBaseMixin")) { // We need to destroy Valhelsia's callback so it can never run getBlockState for(MethodNode m : targetClass.methods) { @@ -239,14 +240,14 @@ public class ModernFixPlatformHooksImpl { } } - public static void onServerCommandRegister(Consumer> handler) { + public void onServerCommandRegister(Consumer> handler) { MinecraftForge.EVENT_BUS.addListener((RegisterCommandsEvent event) -> { handler.accept(event.getDispatcher()); }); } private static Multimap modOptions; - public static Multimap getCustomModOptions() { + public Multimap getCustomModOptions() { if(modOptions == null) { modOptions = ArrayListMultimap.create(); for (ModInfo meta : LoadingModList.get().getMods()) { @@ -265,13 +266,13 @@ public class ModernFixPlatformHooksImpl { return modOptions; } - public static void onLaunchComplete() { + public void onLaunchComplete() { if(ModernFixMixinPlugin.instance.isOptionEnabled("feature.spark_profile_launch.OnForge")) { CommonModUtil.runWithoutCrash(() -> SparkLaunchProfiler.stop("launch"), "Failed to stop profiler"); } } - public static String getPlatformName() { + public String getPlatformName() { return "Forge"; } } From 7b02351f1138315e3504b1ca737c5783da2c18ed Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Thu, 27 Jul 2023 16:39:15 -0400 Subject: [PATCH 2/2] Update for 1.18 --- .../modernfix/searchtree/JEIBackedSearchTree.java | 2 +- .../modernfix/searchtree/REIBackedSearchTree.java | 2 +- .../embeddedt/modernfix/spark/SparkLaunchProfiler.java | 8 ++++---- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/common/src/main/java/org/embeddedt/modernfix/searchtree/JEIBackedSearchTree.java b/common/src/main/java/org/embeddedt/modernfix/searchtree/JEIBackedSearchTree.java index 6779e51c..d7ce5d98 100644 --- a/common/src/main/java/org/embeddedt/modernfix/searchtree/JEIBackedSearchTree.java +++ b/common/src/main/java/org/embeddedt/modernfix/searchtree/JEIBackedSearchTree.java @@ -99,7 +99,7 @@ public class JEIBackedSearchTree extends DummySearchTree { @Override public boolean canUse() { - return ModernFixPlatformHooks.modPresent("jei") && !ModernFixPlatformHooks.modPresent("emi") && getIngredientListUncached != null && filterField != null; + return ModernFixPlatformHooks.INSTANCE.modPresent("jei") && !ModernFixPlatformHooks.INSTANCE.modPresent("emi") && getIngredientListUncached != null && filterField != null; } @Override diff --git a/common/src/main/java/org/embeddedt/modernfix/searchtree/REIBackedSearchTree.java b/common/src/main/java/org/embeddedt/modernfix/searchtree/REIBackedSearchTree.java index fdd5f3d0..b88232c6 100644 --- a/common/src/main/java/org/embeddedt/modernfix/searchtree/REIBackedSearchTree.java +++ b/common/src/main/java/org/embeddedt/modernfix/searchtree/REIBackedSearchTree.java @@ -123,7 +123,7 @@ public class REIBackedSearchTree extends DummySearchTree { @Override public boolean canUse() { - return ModernFixPlatformHooks.modPresent("roughlyenoughitems"); + return ModernFixPlatformHooks.INSTANCE.modPresent("roughlyenoughitems"); } @Override diff --git a/common/src/main/java/org/embeddedt/modernfix/spark/SparkLaunchProfiler.java b/common/src/main/java/org/embeddedt/modernfix/spark/SparkLaunchProfiler.java index e0d933e4..428a6586 100644 --- a/common/src/main/java/org/embeddedt/modernfix/spark/SparkLaunchProfiler.java +++ b/common/src/main/java/org/embeddedt/modernfix/spark/SparkLaunchProfiler.java @@ -87,17 +87,17 @@ public class SparkLaunchProfiler { @Override public Type getType() { - return ModernFixPlatformHooks.isClient() ? Type.CLIENT : Type.SERVER; + return ModernFixPlatformHooks.INSTANCE.isClient() ? Type.CLIENT : Type.SERVER; } @Override public String getName() { - return ModernFixPlatformHooks.getPlatformName(); + return ModernFixPlatformHooks.INSTANCE.getPlatformName(); } @Override public String getVersion() { - return ModernFixPlatformHooks.getVersionString(); + return ModernFixPlatformHooks.INSTANCE.getVersionString(); } @Override @@ -146,7 +146,7 @@ public class SparkLaunchProfiler { @Override public Path getPluginDirectory() { - return ModernFixPlatformHooks.getGameDirectory().resolve("spark-modernfix"); + return ModernFixPlatformHooks.INSTANCE.getGameDirectory().resolve("spark-modernfix"); } @Override