From 4097ba3cceb361c1ef48c8331a895d686f39cca7 Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Mon, 1 May 2023 10:09:32 -0400 Subject: [PATCH] Generate mixin class list at build/run time --- build.gradle | 30 +++ .../modernfix/annotation/ClientOnlyMixin.java | 11 ++ .../modernfix/annotation/RequiresMod.java | 12 ++ .../modernfix/core/ModernFixMixinPlugin.java | 5 +- .../core/config/ModernFixEarlyConfig.java | 175 ++++++++++++------ .../valhesia/BlockStateBaseMixin.java | 2 + .../bugfix/concurrency/MinecraftMixin.java | 2 + .../bugfix/concurrency/RenderTypeMixin.java | 2 + .../SynchedEntityDataMixin_Client.java | 2 + .../ClientPlayNetHandlerMixin.java | 2 + .../SCustomPayloadPlayPacketMixin.java | 2 + .../WindowMixin.java | 2 + .../FluidExternalStorageCacheMixin.java | 2 + .../te_bug/FluidExternalStorageMixin.java | 2 + .../FluidExternalStorageProviderMixin.java | 2 + .../te_bug/ItemExternalStorageCacheMixin.java | 2 + .../te_bug/ItemExternalStorageMixin.java | 2 + .../ItemExternalStorageProviderMixin.java | 2 + .../StarLightEngineMixin.java | 2 + .../TwilightForestModMixin.java | 2 + .../modernfix/mixin/core/MinecraftMixin.java | 2 + .../mixin/core/SynchedEntityDataMixin.java | 2 + .../mixin/devenv/MinecraftMixin.java | 2 + .../modernfix/mixin/devenv/NarratorMixin.java | 2 + .../feature/measure_time/MinecraftMixin.java | 2 + .../ModelBakeryMixin.java | 2 + .../ClientLifecycleHandlerMixin.java | 4 + .../IngredientListElementFactoryMixin.java | 2 + .../perf/async_jei/InputConstantsMixin.java | 2 + .../mixin/perf/async_jei/JeiStarterMixin.java | 2 + .../perf/async_jei/PluginCallerMixin.java | 2 + .../async_jei/RecipeManagerInternalMixin.java | 2 + .../blast_search_trees/MinecraftMixin.java | 2 + .../BlockModelMixin.java | 2 + .../cache_model_materials/MultipartMixin.java | 2 + .../VanillaModelMixin.java | 2 + .../MinecraftMixin.java | 2 + .../BlockElementFaceDeserializerMixin.java | 2 + .../BlockModelShaperMixin.java | 2 + .../ItemModelShaperMixin.java | 2 + .../dynamic_resources/ItemRendererMixin.java | 2 + .../dynamic_resources/ModelBakeryMixin.java | 2 + .../ae2/RegistrationMixin.java | 4 + .../ctm/CTMPackReloadListenerMixin.java | 4 + .../ctm/TextureMetadataHandlerMixin.java | 4 + .../rs/ClientSetupMixin.java | 4 + .../ClientRegistrationHandlerMixin.java | 4 + .../LegacyUnicodeBitmapsProviderMixin.java | 2 + .../TextureAtlasMixin.java | 2 + .../StitcherMixin.java | 2 + .../VillagerEntryMixin.java | 2 + .../perf/kubejs/CustomIngredientMixin.java | 2 + .../mixin/perf/kubejs/IDFilterMixin.java | 2 + .../mixin/perf/kubejs/RecipeEventJSMixin.java | 2 + .../mixin/perf/kubejs/RecipeJSMixin.java | 2 + .../perf/kubejs/TagIngredientJSMixin.java | 2 + .../mixin/perf/kubejs/TagWrapperMixin.java | 2 + .../model_optimizations/OBJLoaderMixin.java | 2 + .../model_optimizations/SelectorMixin.java | 2 + .../TransformationMatrixMixin.java | 2 + .../ClientBookRegistryMixin.java | 4 + .../perf/reuse_datapacks/MinecraftMixin.java | 2 + .../reuse_datapacks/MinecraftServerMixin.java | 2 + .../MinecraftMixin.java | 2 + .../IntegratedServerMixin.java | 2 + .../PiglinBarteringRecipeBuilderMixin.java | 4 + .../jeresources/LootTableHelperMixin.java | 4 + .../mixin/safety/BlockColorsMixin.java | 2 + .../mixin/safety/ItemColorsMixin.java | 2 + .../modernfix/packet/PacketHandler.java | 11 +- src/main/resources/modernfix.mixins.json | 130 +------------ 71 files changed, 333 insertions(+), 187 deletions(-) create mode 100644 src/main/java/org/embeddedt/modernfix/annotation/ClientOnlyMixin.java create mode 100644 src/main/java/org/embeddedt/modernfix/annotation/RequiresMod.java diff --git a/build.gradle b/build.gradle index ec910a7b..49204fd0 100644 --- a/build.gradle +++ b/build.gradle @@ -124,6 +124,36 @@ tasks.withType(JavaCompile) { */ } +processResources { + def mixinFileList = [] + def mixinDirectory = file("src/main/java/org/embeddedt/modernfix/mixin") + fileTree(mixinDirectory).visit { FileVisitDetails details -> + if(details.file.isFile()) { + def fileName = mixinDirectory.relativePath(details.file).toString().replaceFirst(/\.java$/, "").replace('/', '.') + mixinFileList << fileName + } + } + + def mixinClassesStringB = new StringBuilder() + for(int i = 0; i < mixinFileList.size(); i++) { + mixinClassesStringB.append(" \"") + mixinClassesStringB.append(mixinFileList.get(i)) + mixinClassesStringB.append('"') + if(i < (mixinFileList.size() - 1)) + mixinClassesStringB.append(',') + mixinClassesStringB.append('\n') + } + + def replacements = [ + mixin_classes: mixinClassesStringB.toString() + ] + + inputs.properties replacements + filesMatching("modernfix.mixins.json") { + expand replacements + } +} + task generateChangelog(type: se.bjurr.gitchangelog.plugin.gradle.GitChangelogTask) { def details = versionDetails(); if(details.commitDistance > 0) { diff --git a/src/main/java/org/embeddedt/modernfix/annotation/ClientOnlyMixin.java b/src/main/java/org/embeddedt/modernfix/annotation/ClientOnlyMixin.java new file mode 100644 index 00000000..412e299f --- /dev/null +++ b/src/main/java/org/embeddedt/modernfix/annotation/ClientOnlyMixin.java @@ -0,0 +1,11 @@ +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; + +@Retention(RetentionPolicy.CLASS) +@Target(ElementType.TYPE) +public @interface ClientOnlyMixin { +} + diff --git a/src/main/java/org/embeddedt/modernfix/annotation/RequiresMod.java b/src/main/java/org/embeddedt/modernfix/annotation/RequiresMod.java new file mode 100644 index 00000000..7f718bc0 --- /dev/null +++ b/src/main/java/org/embeddedt/modernfix/annotation/RequiresMod.java @@ -0,0 +1,12 @@ +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; + +@Retention(RetentionPolicy.CLASS) +@Target(ElementType.TYPE) +public @interface RequiresMod { + String value() default ""; +} diff --git a/src/main/java/org/embeddedt/modernfix/core/ModernFixMixinPlugin.java b/src/main/java/org/embeddedt/modernfix/core/ModernFixMixinPlugin.java index facdbb8f..d552acc0 100644 --- a/src/main/java/org/embeddedt/modernfix/core/ModernFixMixinPlugin.java +++ b/src/main/java/org/embeddedt/modernfix/core/ModernFixMixinPlugin.java @@ -155,7 +155,10 @@ public class ModernFixMixinPlugin implements IMixinConfigPlugin { } String mixin = mixinClassName.substring(MIXIN_PACKAGE_ROOT.length()); - return isOptionEnabled(mixin); + if(!isOptionEnabled(mixin)) + return false; + String disabledBecauseMod = config.getPermanentlyDisabledMixins().get(mixin); + return disabledBecauseMod == null; } public boolean isOptionEnabled(String mixin) { diff --git a/src/main/java/org/embeddedt/modernfix/core/config/ModernFixEarlyConfig.java b/src/main/java/org/embeddedt/modernfix/core/config/ModernFixEarlyConfig.java index f3019646..c89ca64b 100644 --- a/src/main/java/org/embeddedt/modernfix/core/config/ModernFixEarlyConfig.java +++ b/src/main/java/org/embeddedt/modernfix/core/config/ModernFixEarlyConfig.java @@ -1,13 +1,27 @@ package org.embeddedt.modernfix.core.config; +import com.google.common.base.Splitter; +import com.google.common.collect.ImmutableMap; +import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; +import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet; +import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.fml.loading.FMLLoader; import net.minecraftforge.fml.loading.moddiscovery.ExplodedDirectoryLocator; +import net.minecraftforge.forgespi.locating.IModFile; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import org.embeddedt.modernfix.ModernFix; +import org.objectweb.asm.ClassReader; +import org.objectweb.asm.tree.AnnotationNode; +import org.objectweb.asm.tree.ClassNode; +import org.objectweb.asm.tree.TypeAnnotationNode; import java.io.*; +import java.nio.file.Files; +import java.nio.file.Path; import java.util.*; import java.util.stream.Collectors; +import java.util.stream.Stream; public class ModernFixEarlyConfig { private static final Logger LOGGER = LogManager.getLogger("ModernFixConfig"); @@ -35,77 +49,126 @@ public class ModernFixEarlyConfig { return FMLLoader.getLoadingModList().getModFileById(modId) != null; } + 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 final Set mixinOptions = new ObjectOpenHashSet<>(); + private final Map mixinsMissingMods = new Object2ObjectOpenHashMap<>(); + + public Map getPermanentlyDisabledMixins() { + return mixinsMissingMods; + } + + private void scanForAndBuildMixinOptions() { + IModFile file = FMLLoader.getLoadingModList().getModFileById("modernfix").getFile(); + Path mixinFolder = file.getLocator().findPath(file, "org", "embeddedt", "modernfix", "mixin"); + try(Stream mixinFiles = Files.find(mixinFolder, Integer.MAX_VALUE, (p, a) -> true)) { + Splitter dotSplitter = Splitter.on('.'); + // filter via toString + mixinFiles + .filter(p -> { + Path fileName = p.getFileName(); + return fileName != null && fileName.toString().endsWith(".class"); + }) + .forEach(path -> { + try(InputStream stream = Files.newInputStream(path)) { + ClassReader reader = new ClassReader(stream); + ClassNode node = new ClassNode(); + reader.accept(node, ClassReader.SKIP_CODE | ClassReader.SKIP_FRAMES | ClassReader.SKIP_DEBUG); + if(node.invisibleAnnotations == null) + return; + boolean isMixin = false, isClientOnly = false, requiredModPresent = true; + String requiredModId = ""; + for(AnnotationNode annotation : node.invisibleAnnotations) { + if(Objects.equals(annotation.desc, MIXIN_DESC)) { + isMixin = true; + } else if(Objects.equals(annotation.desc, MIXIN_CLIENT_ONLY_DESC)) { + isClientOnly = true; + } else if(Objects.equals(annotation.desc, MIXIN_REQUIRES_MOD_DESC)) { + for(int i = 0; i < annotation.values.size(); i += 2) { + if(annotation.values.get(i).equals("value")) { + String modId = (String)annotation.values.get(i + 1); + if(modId != null) { + requiredModPresent = modPresent(modId); + requiredModId = modId; + } + break; + } + } + } + } + if(isMixin) { + String mixinClassName = node.name.replace("org/embeddedt/modernfix/mixin/", "").replace('/', '.'); + if(!requiredModPresent) + mixinsMissingMods.put(mixinClassName, requiredModId); + else if(isClientOnly && FMLLoader.getDist() != Dist.CLIENT) + mixinsMissingMods.put(mixinClassName, "[not client]"); + List mixinOptionNames = dotSplitter.splitToList(mixinClassName); + StringBuilder optionBuilder = new StringBuilder(mixinClassName.length()); + optionBuilder.append("mixin"); + for(int i = 0; i < mixinOptionNames.size() - 1; i++) { + optionBuilder.append('.'); + optionBuilder.append(mixinOptionNames.get(i)); + mixinOptions.add(optionBuilder.toString()); + } + } + } catch(IOException e) { + ModernFix.LOGGER.error("Error scanning file " + path, e); + } + }); + } catch(IOException e) { + ModernFix.LOGGER.error("Error scanning for mixins", e); + } + } + + private static final boolean shouldReplaceSearchTrees; + private static final boolean isDevEnv = !FMLLoader.isProduction() && FMLLoader.getLoadingModList().getModFileById("modernfix").getFile().getLocator() instanceof ExplodedDirectoryLocator;; + + static { + shouldReplaceSearchTrees = modPresent("jei"); + } + + private static final ImmutableMap DEFAULT_SETTING_OVERRIDES = ImmutableMap.builder() + .put("mixin.perf.dynamic_resources", false) + .put("mixin.feature.reduce_loading_screen_freezes", false) + .put("mixin.feature.direct_stack_trace", false) + .put("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.perf.preload_block_classes", false) + .put("mixin.perf.faster_singleplayer_load", false) + .put("mixin.perf.blast_search_trees", shouldReplaceSearchTrees) + .put("mixin.devenv", isDevEnv) + .put("mixin.perf.remove_spawn_chunks", isDevEnv) + .build(); + private ModernFixEarlyConfig(File file) { this.configFile = file; + + this.scanForAndBuildMixinOptions(); + for(String optionName : mixinOptions) { + boolean defaultEnabled = DEFAULT_SETTING_OVERRIDES.getOrDefault(optionName, true); + this.options.putIfAbsent(optionName, new Option(optionName, defaultEnabled, false)); + } // Defines the default rules which can be configured by the user or other mods. // You must manually add a rule for any new mixins not covered by an existing package rule. - this.addMixinRule("core", true); // TODO: Don't actually allow the user to disable this - this.addMixinRule("feature.branding", true); - this.addMixinRule("feature.measure_time", true); - this.addMixinRule("feature.reduce_loading_screen_freezes", false); - this.addMixinRule("feature.direct_stack_trace", false); - this.addMixinRule("perf.fast_registry_validation", true); - // not stable yet - this.addMixinRule("perf.rewrite_registry", false); + this.addMixinRule("launch.class_search_cache", true); + /* this.addMixinRule("perf.use_integrated_resources.jepb", modPresent("jepb")); this.addMixinRule("perf.use_integrated_resources.jeresources", modPresent("jeresources")); this.addMixinRule("perf.jeresources_startup", modPresent("jeresources")); - this.addMixinRule("perf.remove_biome_temperature_cache", true); - this.addMixinRule("perf.resourcepacks", true); - this.addMixinRule("perf.reduce_blockstate_cache_rebuilds", true); - this.addMixinRule("perf.boost_worker_count", true); - this.addMixinRule("perf.skip_first_datapack_reload", true); - this.addMixinRule("perf.reuse_datapacks", true); - this.addMixinRule("perf.model_optimizations", true); - this.addMixinRule("perf.dynamic_resources", false); - this.addMixinRule("perf.dedicated_reload_executor", true); - /* Use a simpler ArrayMap if FerriteCore is using the map intelligently anyway */ this.addMixinRule("perf.state_definition_construct", modPresent("ferritecore")); - this.addMixinRule("perf.cache_strongholds", true); - this.addMixinRule("perf.clear_mixin_classinfo", false); - this.addMixinRule("perf.cache_upgraded_structures", true); - this.addMixinRule("perf.biome_zoomer", true); - this.addMixinRule("perf.compress_blockstate", false); - this.addMixinRule("bugfix.concurrency", true); - this.addMixinRule("bugfix.preserve_early_window_pos", true); - this.addMixinRule("bugfix.edge_chunk_not_saved", true); this.addMixinRule("bugfix.starlight_emptiness", modPresent("starlight")); - this.addMixinRule("bugfix.packet_leak", false); - this.addMixinRule("perf.dynamic_structure_manager", true); - this.addMixinRule("bugfix.mc218112", true); - this.addMixinRule("bugfix.chunk_deadlock", true); - this.addMixinRule("bugfix.remove_block_chunkloading", true); - this.addMixinRule("bugfix.paper_chunk_patches", true); this.addMixinRule("bugfix.chunk_deadlock.valhesia", modPresent("valhelsia_structures")); this.addMixinRule("bugfix.tf_cme_on_load", modPresent("twilightforest")); this.addMixinRule("bugfix.refinedstorage", modPresent("refinedstorage")); this.addMixinRule("perf.async_jei", modPresent("jei")); - this.addMixinRule("perf.thread_priorities", true); - this.addMixinRule("perf.preload_block_classes", false); - this.addMixinRule("perf.scan_cache", true); - this.addMixinRule("perf.compress_biome_container", true); - this.addMixinRule("perf.nuke_empty_chunk_sections", true); - this.addMixinRule("perf.flatten_model_predicates", true); - this.addMixinRule("perf.deduplicate_location", false); - this.addMixinRule("perf.cache_blockstate_cache_arrays", true); - this.addMixinRule("perf.cache_model_materials", true); - this.addMixinRule("perf.nbt_memory_usage", true); this.addMixinRule("perf.patchouli_deduplicate_books", modPresent("patchouli")); - this.addMixinRule("perf.datapack_reload_exceptions", true); - this.addMixinRule("perf.dynamic_dfu", true); - this.addMixinRule("perf.async_locator", true); - this.addMixinRule("perf.faster_texture_stitching", true); - this.addMixinRule("perf.faster_texture_loading", true); - this.addMixinRule("perf.faster_font_loading", true); this.addMixinRule("perf.kubejs", modPresent("kubejs")); - this.addMixinRule("perf.faster_singleplayer_load", false); - /* Keep this off if JEI isn't installed to prevent breaking vanilla gameplay */ - this.addMixinRule("perf.blast_search_trees", modPresent("jei")); - this.addMixinRule("safety", true); - this.addMixinRule("launch.class_search_cache", true); - boolean isDevEnv = !FMLLoader.isProduction() && FMLLoader.getLoadingModList().getModFileById("modernfix").getFile().getLocator() instanceof ExplodedDirectoryLocator; - this.addMixinRule("devenv", isDevEnv); - this.addMixinRule("perf.remove_spawn_chunks", isDevEnv); + */ /* Mod compat */ disableIfModPresent("mixin.perf.thread_priorities", "smoothboot"); diff --git a/src/main/java/org/embeddedt/modernfix/mixin/bugfix/chunk_deadlock/valhesia/BlockStateBaseMixin.java b/src/main/java/org/embeddedt/modernfix/mixin/bugfix/chunk_deadlock/valhesia/BlockStateBaseMixin.java index b66d9ed4..d2f1d2a5 100644 --- a/src/main/java/org/embeddedt/modernfix/mixin/bugfix/chunk_deadlock/valhesia/BlockStateBaseMixin.java +++ b/src/main/java/org/embeddedt/modernfix/mixin/bugfix/chunk_deadlock/valhesia/BlockStateBaseMixin.java @@ -7,6 +7,7 @@ import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockBehaviour; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.Vec3; +import org.embeddedt.modernfix.annotation.RequiresMod; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; @@ -14,6 +15,7 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; @Mixin(value = BlockBehaviour.BlockStateBase.class, priority = 900) +@RequiresMod("valhelsia_structures") public abstract class BlockStateBaseMixin { @Shadow public abstract Block getBlock(); diff --git a/src/main/java/org/embeddedt/modernfix/mixin/bugfix/concurrency/MinecraftMixin.java b/src/main/java/org/embeddedt/modernfix/mixin/bugfix/concurrency/MinecraftMixin.java index 54dfea2d..65e5c56c 100644 --- a/src/main/java/org/embeddedt/modernfix/mixin/bugfix/concurrency/MinecraftMixin.java +++ b/src/main/java/org/embeddedt/modernfix/mixin/bugfix/concurrency/MinecraftMixin.java @@ -3,11 +3,13 @@ package org.embeddedt.modernfix.mixin.bugfix.concurrency; import net.minecraft.client.Minecraft; import net.minecraft.util.thread.BlockableEventLoop; import org.embeddedt.modernfix.ModernFix; +import org.embeddedt.modernfix.annotation.ClientOnlyMixin; import org.spongepowered.asm.mixin.Mixin; import java.util.function.BooleanSupplier; @Mixin(Minecraft.class) +@ClientOnlyMixin public abstract class MinecraftMixin extends BlockableEventLoop { protected MinecraftMixin(String p_i50403_1_) { diff --git a/src/main/java/org/embeddedt/modernfix/mixin/bugfix/concurrency/RenderTypeMixin.java b/src/main/java/org/embeddedt/modernfix/mixin/bugfix/concurrency/RenderTypeMixin.java index c28f7a1f..d8c308c8 100644 --- a/src/main/java/org/embeddedt/modernfix/mixin/bugfix/concurrency/RenderTypeMixin.java +++ b/src/main/java/org/embeddedt/modernfix/mixin/bugfix/concurrency/RenderTypeMixin.java @@ -3,12 +3,14 @@ package org.embeddedt.modernfix.mixin.bugfix.concurrency; import it.unimi.dsi.fastutil.objects.ObjectOpenCustomHashSet; import net.minecraft.client.renderer.RenderType; import com.mojang.blaze3d.vertex.VertexFormat; +import org.embeddedt.modernfix.annotation.ClientOnlyMixin; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Overwrite; import org.spongepowered.asm.mixin.Shadow; @Mixin(RenderType.CompositeRenderType.class) +@ClientOnlyMixin public class RenderTypeMixin { @Shadow @Final private static ObjectOpenCustomHashSet INSTANCES; diff --git a/src/main/java/org/embeddedt/modernfix/mixin/bugfix/mc218112/SynchedEntityDataMixin_Client.java b/src/main/java/org/embeddedt/modernfix/mixin/bugfix/mc218112/SynchedEntityDataMixin_Client.java index 156442e0..18190e3f 100644 --- a/src/main/java/org/embeddedt/modernfix/mixin/bugfix/mc218112/SynchedEntityDataMixin_Client.java +++ b/src/main/java/org/embeddedt/modernfix/mixin/bugfix/mc218112/SynchedEntityDataMixin_Client.java @@ -2,6 +2,7 @@ package org.embeddedt.modernfix.mixin.bugfix.mc218112; import net.minecraft.network.syncher.SynchedEntityData; import net.minecraft.world.entity.Entity; +import org.embeddedt.modernfix.annotation.ClientOnlyMixin; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Overwrite; @@ -12,6 +13,7 @@ import java.util.Map; import java.util.concurrent.locks.ReadWriteLock; @Mixin(SynchedEntityData.class) +@ClientOnlyMixin public abstract class SynchedEntityDataMixin_Client { @Shadow @Final private ReadWriteLock lock; diff --git a/src/main/java/org/embeddedt/modernfix/mixin/bugfix/packet_leak/ClientPlayNetHandlerMixin.java b/src/main/java/org/embeddedt/modernfix/mixin/bugfix/packet_leak/ClientPlayNetHandlerMixin.java index 5fa5cba0..3dade1ed 100644 --- a/src/main/java/org/embeddedt/modernfix/mixin/bugfix/packet_leak/ClientPlayNetHandlerMixin.java +++ b/src/main/java/org/embeddedt/modernfix/mixin/bugfix/packet_leak/ClientPlayNetHandlerMixin.java @@ -3,12 +3,14 @@ package org.embeddedt.modernfix.mixin.bugfix.packet_leak; import net.minecraft.client.multiplayer.ClientPacketListener; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.protocol.game.ClientboundCustomPayloadPacket; +import org.embeddedt.modernfix.annotation.ClientOnlyMixin; import org.embeddedt.modernfix.duck.IClientNetHandler; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; @Mixin(ClientPacketListener.class) +@ClientOnlyMixin public class ClientPlayNetHandlerMixin implements IClientNetHandler { private FriendlyByteBuf savedCopy = null; /** diff --git a/src/main/java/org/embeddedt/modernfix/mixin/bugfix/packet_leak/SCustomPayloadPlayPacketMixin.java b/src/main/java/org/embeddedt/modernfix/mixin/bugfix/packet_leak/SCustomPayloadPlayPacketMixin.java index 739ee1d3..3c010f70 100644 --- a/src/main/java/org/embeddedt/modernfix/mixin/bugfix/packet_leak/SCustomPayloadPlayPacketMixin.java +++ b/src/main/java/org/embeddedt/modernfix/mixin/bugfix/packet_leak/SCustomPayloadPlayPacketMixin.java @@ -4,6 +4,7 @@ import net.minecraft.network.protocol.game.ClientGamePacketListener; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.protocol.game.ClientboundCustomPayloadPacket; import net.minecraft.resources.ResourceLocation; +import org.embeddedt.modernfix.annotation.ClientOnlyMixin; import org.embeddedt.modernfix.duck.IClientNetHandler; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -13,6 +14,7 @@ import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(ClientboundCustomPayloadPacket.class) +@ClientOnlyMixin public class SCustomPayloadPlayPacketMixin { @Shadow private FriendlyByteBuf data; diff --git a/src/main/java/org/embeddedt/modernfix/mixin/bugfix/preserve_early_window_pos/WindowMixin.java b/src/main/java/org/embeddedt/modernfix/mixin/bugfix/preserve_early_window_pos/WindowMixin.java index b3bed93d..8ce0fa71 100644 --- a/src/main/java/org/embeddedt/modernfix/mixin/bugfix/preserve_early_window_pos/WindowMixin.java +++ b/src/main/java/org/embeddedt/modernfix/mixin/bugfix/preserve_early_window_pos/WindowMixin.java @@ -5,6 +5,7 @@ import com.mojang.blaze3d.platform.ScreenManager; import com.mojang.blaze3d.platform.Window; import net.minecraftforge.fml.common.ObfuscationReflectionHelper; import net.minecraftforge.fml.loading.progress.EarlyProgressVisualization; +import org.embeddedt.modernfix.annotation.ClientOnlyMixin; import org.lwjgl.glfw.GLFW; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -16,6 +17,7 @@ import java.util.function.LongSupplier; import java.util.function.Supplier; @Mixin(Window.class) +@ClientOnlyMixin public class WindowMixin { @Shadow private boolean fullscreen; @Shadow private int width; diff --git a/src/main/java/org/embeddedt/modernfix/mixin/bugfix/refinedstorage/te_bug/FluidExternalStorageCacheMixin.java b/src/main/java/org/embeddedt/modernfix/mixin/bugfix/refinedstorage/te_bug/FluidExternalStorageCacheMixin.java index 98266338..924dcb8e 100644 --- a/src/main/java/org/embeddedt/modernfix/mixin/bugfix/refinedstorage/te_bug/FluidExternalStorageCacheMixin.java +++ b/src/main/java/org/embeddedt/modernfix/mixin/bugfix/refinedstorage/te_bug/FluidExternalStorageCacheMixin.java @@ -4,6 +4,7 @@ import com.refinedmods.refinedstorage.api.network.INetwork; import com.refinedmods.refinedstorage.apiimpl.storage.externalstorage.FluidExternalStorageCache; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.capability.IFluidHandler; +import org.embeddedt.modernfix.annotation.RequiresMod; import org.embeddedt.modernfix.duck.rs.IFluidExternalStorageCache; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -16,6 +17,7 @@ import java.util.ArrayList; import java.util.List; @Mixin(FluidExternalStorageCache.class) +@RequiresMod("refinedstorage") public class FluidExternalStorageCacheMixin implements IFluidExternalStorageCache { @Shadow(remap = false) private List cache; diff --git a/src/main/java/org/embeddedt/modernfix/mixin/bugfix/refinedstorage/te_bug/FluidExternalStorageMixin.java b/src/main/java/org/embeddedt/modernfix/mixin/bugfix/refinedstorage/te_bug/FluidExternalStorageMixin.java index 3424d38d..629e50bc 100644 --- a/src/main/java/org/embeddedt/modernfix/mixin/bugfix/refinedstorage/te_bug/FluidExternalStorageMixin.java +++ b/src/main/java/org/embeddedt/modernfix/mixin/bugfix/refinedstorage/te_bug/FluidExternalStorageMixin.java @@ -5,6 +5,7 @@ import com.refinedmods.refinedstorage.apiimpl.storage.externalstorage.FluidExter import com.refinedmods.refinedstorage.apiimpl.storage.externalstorage.ItemExternalStorageCache; import net.minecraftforge.fluids.capability.IFluidHandler; import net.minecraftforge.items.IItemHandler; +import org.embeddedt.modernfix.annotation.RequiresMod; import org.embeddedt.modernfix.duck.rs.IFluidExternalStorageCache; import org.embeddedt.modernfix.duck.rs.IItemExternalStorageCache; import org.spongepowered.asm.mixin.Final; @@ -16,6 +17,7 @@ import org.spongepowered.asm.mixin.injection.Redirect; import java.util.function.Supplier; @Mixin(FluidExternalStorage.class) +@RequiresMod("refinedstorage") public class FluidExternalStorageMixin { @Shadow(remap = false) @Final diff --git a/src/main/java/org/embeddedt/modernfix/mixin/bugfix/refinedstorage/te_bug/FluidExternalStorageProviderMixin.java b/src/main/java/org/embeddedt/modernfix/mixin/bugfix/refinedstorage/te_bug/FluidExternalStorageProviderMixin.java index f89b64b7..ccc4c730 100644 --- a/src/main/java/org/embeddedt/modernfix/mixin/bugfix/refinedstorage/te_bug/FluidExternalStorageProviderMixin.java +++ b/src/main/java/org/embeddedt/modernfix/mixin/bugfix/refinedstorage/te_bug/FluidExternalStorageProviderMixin.java @@ -11,10 +11,12 @@ import net.minecraft.core.Direction; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraftforge.fluids.FluidStack; +import org.embeddedt.modernfix.annotation.RequiresMod; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Overwrite; @Mixin(FluidExternalStorageProvider.class) +@RequiresMod("refinedstorage") public class FluidExternalStorageProviderMixin { /** * @author embeddedt diff --git a/src/main/java/org/embeddedt/modernfix/mixin/bugfix/refinedstorage/te_bug/ItemExternalStorageCacheMixin.java b/src/main/java/org/embeddedt/modernfix/mixin/bugfix/refinedstorage/te_bug/ItemExternalStorageCacheMixin.java index 86768652..c36e8e12 100644 --- a/src/main/java/org/embeddedt/modernfix/mixin/bugfix/refinedstorage/te_bug/ItemExternalStorageCacheMixin.java +++ b/src/main/java/org/embeddedt/modernfix/mixin/bugfix/refinedstorage/te_bug/ItemExternalStorageCacheMixin.java @@ -5,6 +5,7 @@ import com.refinedmods.refinedstorage.apiimpl.storage.externalstorage.ItemExtern import net.minecraft.world.item.ItemStack; import net.minecraftforge.fluids.capability.IFluidHandler; import net.minecraftforge.items.IItemHandler; +import org.embeddedt.modernfix.annotation.RequiresMod; import org.embeddedt.modernfix.duck.rs.IItemExternalStorageCache; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -17,6 +18,7 @@ import java.util.ArrayList; import java.util.List; @Mixin(ItemExternalStorageCache.class) +@RequiresMod("refinedstorage") public class ItemExternalStorageCacheMixin implements IItemExternalStorageCache { @Shadow(remap = false) private List cache; diff --git a/src/main/java/org/embeddedt/modernfix/mixin/bugfix/refinedstorage/te_bug/ItemExternalStorageMixin.java b/src/main/java/org/embeddedt/modernfix/mixin/bugfix/refinedstorage/te_bug/ItemExternalStorageMixin.java index 31489225..da8ba691 100644 --- a/src/main/java/org/embeddedt/modernfix/mixin/bugfix/refinedstorage/te_bug/ItemExternalStorageMixin.java +++ b/src/main/java/org/embeddedt/modernfix/mixin/bugfix/refinedstorage/te_bug/ItemExternalStorageMixin.java @@ -3,6 +3,7 @@ package org.embeddedt.modernfix.mixin.bugfix.refinedstorage.te_bug; import com.refinedmods.refinedstorage.apiimpl.storage.externalstorage.ItemExternalStorage; import com.refinedmods.refinedstorage.apiimpl.storage.externalstorage.ItemExternalStorageCache; import net.minecraftforge.items.IItemHandler; +import org.embeddedt.modernfix.annotation.RequiresMod; import org.embeddedt.modernfix.duck.rs.IItemExternalStorageCache; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; @@ -13,6 +14,7 @@ import org.spongepowered.asm.mixin.injection.Redirect; import java.util.function.Supplier; @Mixin(ItemExternalStorage.class) +@RequiresMod("refinedstorage") public class ItemExternalStorageMixin { @Shadow(remap = false) @Final private ItemExternalStorageCache cache; diff --git a/src/main/java/org/embeddedt/modernfix/mixin/bugfix/refinedstorage/te_bug/ItemExternalStorageProviderMixin.java b/src/main/java/org/embeddedt/modernfix/mixin/bugfix/refinedstorage/te_bug/ItemExternalStorageProviderMixin.java index a8664075..a08b86dc 100644 --- a/src/main/java/org/embeddedt/modernfix/mixin/bugfix/refinedstorage/te_bug/ItemExternalStorageProviderMixin.java +++ b/src/main/java/org/embeddedt/modernfix/mixin/bugfix/refinedstorage/te_bug/ItemExternalStorageProviderMixin.java @@ -11,10 +11,12 @@ import net.minecraft.core.Direction; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.BlockEntity; +import org.embeddedt.modernfix.annotation.RequiresMod; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Overwrite; @Mixin(ItemExternalStorageProvider.class) +@RequiresMod("refinedstorage") public class ItemExternalStorageProviderMixin { /** * @author embeddedt diff --git a/src/main/java/org/embeddedt/modernfix/mixin/bugfix/starlight_emptiness/StarLightEngineMixin.java b/src/main/java/org/embeddedt/modernfix/mixin/bugfix/starlight_emptiness/StarLightEngineMixin.java index e20ded13..42550f4a 100644 --- a/src/main/java/org/embeddedt/modernfix/mixin/bugfix/starlight_emptiness/StarLightEngineMixin.java +++ b/src/main/java/org/embeddedt/modernfix/mixin/bugfix/starlight_emptiness/StarLightEngineMixin.java @@ -4,6 +4,7 @@ import ca.spottedleaf.starlight.common.light.StarLightEngine; import net.minecraft.world.level.chunk.ChunkAccess; import net.minecraft.world.level.chunk.LevelChunkSection; import net.minecraft.world.level.chunk.LightChunkGetter; +import org.embeddedt.modernfix.annotation.RequiresMod; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Pseudo; @@ -13,6 +14,7 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; @Mixin(StarLightEngine.class) +@RequiresMod("starlight") public abstract class StarLightEngineMixin { @Shadow protected abstract LevelChunkSection getChunkSection(int chunkX, int chunkY, int chunkZ); diff --git a/src/main/java/org/embeddedt/modernfix/mixin/bugfix/tf_cme_on_load/TwilightForestModMixin.java b/src/main/java/org/embeddedt/modernfix/mixin/bugfix/tf_cme_on_load/TwilightForestModMixin.java index c05751f3..32dbcba3 100644 --- a/src/main/java/org/embeddedt/modernfix/mixin/bugfix/tf_cme_on_load/TwilightForestModMixin.java +++ b/src/main/java/org/embeddedt/modernfix/mixin/bugfix/tf_cme_on_load/TwilightForestModMixin.java @@ -1,5 +1,6 @@ package org.embeddedt.modernfix.mixin.bugfix.tf_cme_on_load; +import org.embeddedt.modernfix.annotation.RequiresMod; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -9,6 +10,7 @@ import twilightforest.TwilightForestMod; import twilightforest.worldgen.biomes.BiomeKeys; @Mixin(TwilightForestMod.class) +@RequiresMod("twilightforest") public class TwilightForestModMixin { @Redirect(method = "init", at = @At(value = "INVOKE", target = "Ltwilightforest/worldgen/biomes/BiomeKeys;addBiomeTypes()V"), remap = false) private static void avoidBiomeTypes() { diff --git a/src/main/java/org/embeddedt/modernfix/mixin/core/MinecraftMixin.java b/src/main/java/org/embeddedt/modernfix/mixin/core/MinecraftMixin.java index 7665941d..d7bd2789 100644 --- a/src/main/java/org/embeddedt/modernfix/mixin/core/MinecraftMixin.java +++ b/src/main/java/org/embeddedt/modernfix/mixin/core/MinecraftMixin.java @@ -8,6 +8,7 @@ import net.minecraft.world.level.DataPackConfig; import net.minecraft.world.level.storage.LevelStorageSource; import net.minecraft.world.level.storage.WorldData; import org.embeddedt.modernfix.ModernFix; +import org.embeddedt.modernfix.annotation.ClientOnlyMixin; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -17,6 +18,7 @@ import java.util.concurrent.CountDownLatch; import java.util.function.Function; @Mixin(Minecraft.class) +@ClientOnlyMixin public class MinecraftMixin { @Inject(method = "loadWorld", at = @At("HEAD")) private void setLatch(String string, RegistryAccess.RegistryHolder arg, Function function, Function4 function4, boolean bl, Minecraft.ExperimentalDialogType arg2, boolean creating, CallbackInfo ci) { diff --git a/src/main/java/org/embeddedt/modernfix/mixin/core/SynchedEntityDataMixin.java b/src/main/java/org/embeddedt/modernfix/mixin/core/SynchedEntityDataMixin.java index 67133e3f..9b7e505a 100644 --- a/src/main/java/org/embeddedt/modernfix/mixin/core/SynchedEntityDataMixin.java +++ b/src/main/java/org/embeddedt/modernfix/mixin/core/SynchedEntityDataMixin.java @@ -3,12 +3,14 @@ package org.embeddedt.modernfix.mixin.core; import net.minecraft.network.syncher.SynchedEntityData; import net.minecraft.world.entity.Entity; import org.embeddedt.modernfix.ModernFixClient; +import org.embeddedt.modernfix.annotation.ClientOnlyMixin; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(SynchedEntityData.class) +@ClientOnlyMixin public class SynchedEntityDataMixin { /** * Store this in our set of all entity data objects. diff --git a/src/main/java/org/embeddedt/modernfix/mixin/devenv/MinecraftMixin.java b/src/main/java/org/embeddedt/modernfix/mixin/devenv/MinecraftMixin.java index e4e90f44..3e4b86c4 100644 --- a/src/main/java/org/embeddedt/modernfix/mixin/devenv/MinecraftMixin.java +++ b/src/main/java/org/embeddedt/modernfix/mixin/devenv/MinecraftMixin.java @@ -3,12 +3,14 @@ package org.embeddedt.modernfix.mixin.devenv; import com.mojang.authlib.minecraft.OfflineSocialInteractions; import com.mojang.authlib.minecraft.SocialInteractionsService; import net.minecraft.client.Minecraft; +import org.embeddedt.modernfix.annotation.ClientOnlyMixin; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; @Mixin(Minecraft.class) +@ClientOnlyMixin public class MinecraftMixin { @Inject(method = "createSocialInteractions", at = @At("HEAD"), cancellable = true) private void noSocialInteraction(CallbackInfoReturnable cir) { diff --git a/src/main/java/org/embeddedt/modernfix/mixin/devenv/NarratorMixin.java b/src/main/java/org/embeddedt/modernfix/mixin/devenv/NarratorMixin.java index 1397a848..8d02ba42 100644 --- a/src/main/java/org/embeddedt/modernfix/mixin/devenv/NarratorMixin.java +++ b/src/main/java/org/embeddedt/modernfix/mixin/devenv/NarratorMixin.java @@ -3,11 +3,13 @@ package org.embeddedt.modernfix.mixin.devenv; import com.mojang.text2speech.Narrator; import com.mojang.text2speech.NarratorDummy; import net.minecraft.client.gui.chat.NarratorChatListener; +import org.embeddedt.modernfix.annotation.ClientOnlyMixin; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; @Mixin(NarratorChatListener.class) +@ClientOnlyMixin public class NarratorMixin { @Redirect(method = "", at = @At(value = "INVOKE", target = "Lcom/mojang/text2speech/Narrator;getNarrator()Lcom/mojang/text2speech/Narrator;", remap = false)) private Narrator useDummyNarrator() { diff --git a/src/main/java/org/embeddedt/modernfix/mixin/feature/measure_time/MinecraftMixin.java b/src/main/java/org/embeddedt/modernfix/mixin/feature/measure_time/MinecraftMixin.java index 5a71b12d..880c4953 100644 --- a/src/main/java/org/embeddedt/modernfix/mixin/feature/measure_time/MinecraftMixin.java +++ b/src/main/java/org/embeddedt/modernfix/mixin/feature/measure_time/MinecraftMixin.java @@ -9,6 +9,7 @@ import net.minecraft.world.level.storage.WorldData; import net.minecraft.world.level.storage.LevelStorageSource; import org.embeddedt.modernfix.ModernFix; import org.embeddedt.modernfix.ModernFixClient; +import org.embeddedt.modernfix.annotation.ClientOnlyMixin; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -18,6 +19,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import java.util.function.Function; @Mixin(Minecraft.class) +@ClientOnlyMixin public class MinecraftMixin { private long datapackReloadStartTime; diff --git a/src/main/java/org/embeddedt/modernfix/mixin/feature/reduce_loading_screen_freezes/ModelBakeryMixin.java b/src/main/java/org/embeddedt/modernfix/mixin/feature/reduce_loading_screen_freezes/ModelBakeryMixin.java index 8e73592c..8297b278 100644 --- a/src/main/java/org/embeddedt/modernfix/mixin/feature/reduce_loading_screen_freezes/ModelBakeryMixin.java +++ b/src/main/java/org/embeddedt/modernfix/mixin/feature/reduce_loading_screen_freezes/ModelBakeryMixin.java @@ -4,6 +4,7 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.resources.model.ModelBakery; import net.minecraft.Util; import net.minecraftforge.fml.loading.progress.StartupMessageManager; +import org.embeddedt.modernfix.annotation.ClientOnlyMixin; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; @@ -13,6 +14,7 @@ import java.util.concurrent.CompletableFuture; import java.util.function.Consumer; @Mixin(ModelBakery.class) +@ClientOnlyMixin public class ModelBakeryMixin { @Redirect(method = "uploadTextures", at = @At(value = "INVOKE", target = "Ljava/util/Set;forEach(Ljava/util/function/Consumer;)V", ordinal = 0)) private void bakeAndTickGUI(Set instance, Consumer consumer) { diff --git a/src/main/java/org/embeddedt/modernfix/mixin/perf/async_jei/ClientLifecycleHandlerMixin.java b/src/main/java/org/embeddedt/modernfix/mixin/perf/async_jei/ClientLifecycleHandlerMixin.java index d7708b98..51045e8a 100644 --- a/src/main/java/org/embeddedt/modernfix/mixin/perf/async_jei/ClientLifecycleHandlerMixin.java +++ b/src/main/java/org/embeddedt/modernfix/mixin/perf/async_jei/ClientLifecycleHandlerMixin.java @@ -14,6 +14,8 @@ import mezz.jei.startup.NetworkHandler; import net.minecraft.client.Minecraft; import net.minecraftforge.client.event.ClientPlayerNetworkEvent; import org.embeddedt.modernfix.ModernFix; +import org.embeddedt.modernfix.annotation.ClientOnlyMixin; +import org.embeddedt.modernfix.annotation.RequiresMod; import org.embeddedt.modernfix.jei.async.JEILoadingInterruptedException; import org.embeddedt.modernfix.jei.async.JEIReloadThread; import org.embeddedt.modernfix.util.JEIUtil; @@ -28,6 +30,8 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import java.util.List; @Mixin(ClientLifecycleHandler.class) +@RequiresMod("jei") +@ClientOnlyMixin public class ClientLifecycleHandlerMixin { @Shadow(remap = false) @Final private JeiStarter starter; @Shadow(remap = false) @Final private List plugins; diff --git a/src/main/java/org/embeddedt/modernfix/mixin/perf/async_jei/IngredientListElementFactoryMixin.java b/src/main/java/org/embeddedt/modernfix/mixin/perf/async_jei/IngredientListElementFactoryMixin.java index 021562fe..58222135 100644 --- a/src/main/java/org/embeddedt/modernfix/mixin/perf/async_jei/IngredientListElementFactoryMixin.java +++ b/src/main/java/org/embeddedt/modernfix/mixin/perf/async_jei/IngredientListElementFactoryMixin.java @@ -5,6 +5,7 @@ import mezz.jei.api.runtime.IIngredientManager; import mezz.jei.gui.ingredients.IIngredientListElement; import mezz.jei.ingredients.IngredientListElementFactory; import net.minecraft.core.NonNullList; +import org.embeddedt.modernfix.annotation.RequiresMod; import org.embeddedt.modernfix.jei.async.IAsyncJeiStarter; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @@ -12,6 +13,7 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(IngredientListElementFactory.class) +@RequiresMod("jei") public class IngredientListElementFactoryMixin { private static int ingredientNum = 0; @Inject(method = "addToBaseList", at = @At(value = "INVOKE", target = "Lnet/minecraft/core/NonNullList;add(Ljava/lang/Object;)Z")) diff --git a/src/main/java/org/embeddedt/modernfix/mixin/perf/async_jei/InputConstantsMixin.java b/src/main/java/org/embeddedt/modernfix/mixin/perf/async_jei/InputConstantsMixin.java index d6a60cdb..304aafaa 100644 --- a/src/main/java/org/embeddedt/modernfix/mixin/perf/async_jei/InputConstantsMixin.java +++ b/src/main/java/org/embeddedt/modernfix/mixin/perf/async_jei/InputConstantsMixin.java @@ -2,12 +2,14 @@ package org.embeddedt.modernfix.mixin.perf.async_jei; import com.mojang.blaze3d.platform.InputConstants; import com.mojang.blaze3d.systems.RenderSystem; +import org.embeddedt.modernfix.annotation.RequiresMod; import org.lwjgl.glfw.GLFW; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; @Mixin(InputConstants.class) +@RequiresMod("jei") public class InputConstantsMixin { @Redirect(method = "isKeyDown", at = @At(value = "INVOKE", target = "Lorg/lwjgl/glfw/GLFW;glfwGetKey(JI)I", remap = false)) private static int offThreadKeyFetch(long win, int k) { diff --git a/src/main/java/org/embeddedt/modernfix/mixin/perf/async_jei/JeiStarterMixin.java b/src/main/java/org/embeddedt/modernfix/mixin/perf/async_jei/JeiStarterMixin.java index f6e9edd0..8f01a8ba 100644 --- a/src/main/java/org/embeddedt/modernfix/mixin/perf/async_jei/JeiStarterMixin.java +++ b/src/main/java/org/embeddedt/modernfix/mixin/perf/async_jei/JeiStarterMixin.java @@ -9,6 +9,7 @@ import mezz.jei.ingredients.IIngredientSorter; import mezz.jei.load.PluginCaller; import mezz.jei.startup.JeiStarter; import net.minecraft.client.Minecraft; +import org.embeddedt.modernfix.annotation.RequiresMod; import org.embeddedt.modernfix.jei.async.IAsyncJeiStarter; import org.embeddedt.modernfix.jei.async.JEILoadingInterruptedException; import org.spongepowered.asm.mixin.Mixin; @@ -25,6 +26,7 @@ import java.util.concurrent.CompletionException; import java.util.function.Consumer; @Mixin(JeiStarter.class) +@RequiresMod("jei") public class JeiStarterMixin { @Shadow(remap = false) private boolean started; diff --git a/src/main/java/org/embeddedt/modernfix/mixin/perf/async_jei/PluginCallerMixin.java b/src/main/java/org/embeddedt/modernfix/mixin/perf/async_jei/PluginCallerMixin.java index d089afa2..db7cf046 100644 --- a/src/main/java/org/embeddedt/modernfix/mixin/perf/async_jei/PluginCallerMixin.java +++ b/src/main/java/org/embeddedt/modernfix/mixin/perf/async_jei/PluginCallerMixin.java @@ -4,6 +4,7 @@ import mezz.jei.api.IModPlugin; import mezz.jei.load.PluginCaller; import net.minecraft.client.Minecraft; import org.embeddedt.modernfix.ModernFix; +import org.embeddedt.modernfix.annotation.RequiresMod; import org.embeddedt.modernfix.core.config.ModernFixConfig; import org.embeddedt.modernfix.jei.async.IAsyncJeiStarter; import org.spongepowered.asm.mixin.Mixin; @@ -18,6 +19,7 @@ import java.util.concurrent.CompletionException; import java.util.function.Consumer; @Mixin(PluginCaller.class) +@RequiresMod("jei") public class PluginCallerMixin { @Inject(method = "callOnPlugins", at = @At(value = "INVOKE", target = "Ljava/util/Iterator;hasNext()Z"), remap = false) private static void checkForInterrupt(String title, List plugins, Consumer func, CallbackInfo ci) { diff --git a/src/main/java/org/embeddedt/modernfix/mixin/perf/async_jei/RecipeManagerInternalMixin.java b/src/main/java/org/embeddedt/modernfix/mixin/perf/async_jei/RecipeManagerInternalMixin.java index 75cd87b7..56b4988d 100644 --- a/src/main/java/org/embeddedt/modernfix/mixin/perf/async_jei/RecipeManagerInternalMixin.java +++ b/src/main/java/org/embeddedt/modernfix/mixin/perf/async_jei/RecipeManagerInternalMixin.java @@ -3,6 +3,7 @@ package org.embeddedt.modernfix.mixin.perf.async_jei; import com.google.common.collect.ImmutableListMultimap; import mezz.jei.recipes.RecipeManagerInternal; import net.minecraft.resources.ResourceLocation; +import org.embeddedt.modernfix.annotation.RequiresMod; import org.embeddedt.modernfix.jei.async.IAsyncJeiStarter; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @@ -10,6 +11,7 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(RecipeManagerInternal.class) +@RequiresMod("jei") public class RecipeManagerInternalMixin { @Inject(method = "addRecipes", at = @At(value = "INVOKE", target = "Lmezz/jei/recipes/RecipeManagerInternal;addRecipeTyped(Ljava/lang/Object;Lnet/minecraft/resources/ResourceLocation;)V")) private void checkForInterrupt(ImmutableListMultimap recipes, CallbackInfo ci) { diff --git a/src/main/java/org/embeddedt/modernfix/mixin/perf/blast_search_trees/MinecraftMixin.java b/src/main/java/org/embeddedt/modernfix/mixin/perf/blast_search_trees/MinecraftMixin.java index 3e2335f6..c400474c 100644 --- a/src/main/java/org/embeddedt/modernfix/mixin/perf/blast_search_trees/MinecraftMixin.java +++ b/src/main/java/org/embeddedt/modernfix/mixin/perf/blast_search_trees/MinecraftMixin.java @@ -3,6 +3,7 @@ package org.embeddedt.modernfix.mixin.perf.blast_search_trees; import net.minecraft.client.Minecraft; import net.minecraft.client.searchtree.SearchRegistry; import net.minecraftforge.fml.ModList; +import org.embeddedt.modernfix.annotation.ClientOnlyMixin; import org.embeddedt.modernfix.searchtree.DummySearchTree; import org.embeddedt.modernfix.searchtree.JEIBackedSearchTree; import org.spongepowered.asm.mixin.Final; @@ -13,6 +14,7 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(Minecraft.class) +@ClientOnlyMixin public class MinecraftMixin { @Shadow @Final private SearchRegistry searchRegistry; diff --git a/src/main/java/org/embeddedt/modernfix/mixin/perf/cache_model_materials/BlockModelMixin.java b/src/main/java/org/embeddedt/modernfix/mixin/perf/cache_model_materials/BlockModelMixin.java index 691a28e5..4796d40b 100644 --- a/src/main/java/org/embeddedt/modernfix/mixin/perf/cache_model_materials/BlockModelMixin.java +++ b/src/main/java/org/embeddedt/modernfix/mixin/perf/cache_model_materials/BlockModelMixin.java @@ -3,6 +3,7 @@ package org.embeddedt.modernfix.mixin.perf.cache_model_materials; import com.mojang.datafixers.util.Either; import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.client.resources.model.Material; +import org.embeddedt.modernfix.annotation.ClientOnlyMixin; import org.embeddedt.modernfix.duck.ICachedMaterialsModel; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -19,6 +20,7 @@ import java.util.Map; import java.util.Set; @Mixin(BlockModel.class) +@ClientOnlyMixin public class BlockModelMixin { @Shadow @Final @Mutable public Map> textureMap; diff --git a/src/main/java/org/embeddedt/modernfix/mixin/perf/cache_model_materials/MultipartMixin.java b/src/main/java/org/embeddedt/modernfix/mixin/perf/cache_model_materials/MultipartMixin.java index aa23cdc3..51655b03 100644 --- a/src/main/java/org/embeddedt/modernfix/mixin/perf/cache_model_materials/MultipartMixin.java +++ b/src/main/java/org/embeddedt/modernfix/mixin/perf/cache_model_materials/MultipartMixin.java @@ -2,6 +2,7 @@ package org.embeddedt.modernfix.mixin.perf.cache_model_materials; import net.minecraft.client.renderer.block.model.multipart.MultiPart; import net.minecraft.resources.ResourceLocation; +import org.embeddedt.modernfix.annotation.ClientOnlyMixin; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -10,6 +11,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import java.util.Collection; @Mixin(MultiPart.class) +@ClientOnlyMixin public class MultipartMixin { private Collection dependencyCache = null; @Inject(method = "getDependencies", at = @At("HEAD"), cancellable = true) diff --git a/src/main/java/org/embeddedt/modernfix/mixin/perf/cache_model_materials/VanillaModelMixin.java b/src/main/java/org/embeddedt/modernfix/mixin/perf/cache_model_materials/VanillaModelMixin.java index 54413655..04594dd4 100644 --- a/src/main/java/org/embeddedt/modernfix/mixin/perf/cache_model_materials/VanillaModelMixin.java +++ b/src/main/java/org/embeddedt/modernfix/mixin/perf/cache_model_materials/VanillaModelMixin.java @@ -7,6 +7,7 @@ import net.minecraft.client.resources.model.Material; import net.minecraft.client.renderer.block.model.MultiVariant; import net.minecraft.client.renderer.block.model.multipart.MultiPart; import net.minecraft.resources.ResourceLocation; +import org.embeddedt.modernfix.annotation.ClientOnlyMixin; import org.embeddedt.modernfix.duck.ICachedMaterialsModel; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @@ -19,6 +20,7 @@ import java.util.Set; import java.util.function.Function; @Mixin(value = {MultiVariant.class, MultiPart.class, BlockModel.class}) +@ClientOnlyMixin public class VanillaModelMixin implements ICachedMaterialsModel { private Collection materialsCache = null; diff --git a/src/main/java/org/embeddedt/modernfix/mixin/perf/dedicated_reload_executor/MinecraftMixin.java b/src/main/java/org/embeddedt/modernfix/mixin/perf/dedicated_reload_executor/MinecraftMixin.java index 296c7fd0..f0cc1747 100644 --- a/src/main/java/org/embeddedt/modernfix/mixin/perf/dedicated_reload_executor/MinecraftMixin.java +++ b/src/main/java/org/embeddedt/modernfix/mixin/perf/dedicated_reload_executor/MinecraftMixin.java @@ -2,6 +2,7 @@ package org.embeddedt.modernfix.mixin.perf.dedicated_reload_executor; import net.minecraft.client.Minecraft; import org.embeddedt.modernfix.ModernFix; +import org.embeddedt.modernfix.annotation.ClientOnlyMixin; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; @@ -9,6 +10,7 @@ import org.spongepowered.asm.mixin.injection.Redirect; import java.util.concurrent.Executor; @Mixin(Minecraft.class) +@ClientOnlyMixin public class MinecraftMixin { @Redirect(method = { "", "makeServerStem", "reloadResourcePacks" }, at = @At(value = "INVOKE", target = "Lnet/minecraft/Util;backgroundExecutor()Ljava/util/concurrent/Executor;", ordinal = 0)) private Executor getResourceReloadExecutor() { diff --git a/src/main/java/org/embeddedt/modernfix/mixin/perf/dynamic_resources/BlockElementFaceDeserializerMixin.java b/src/main/java/org/embeddedt/modernfix/mixin/perf/dynamic_resources/BlockElementFaceDeserializerMixin.java index eb4b3ee5..2d2c8214 100644 --- a/src/main/java/org/embeddedt/modernfix/mixin/perf/dynamic_resources/BlockElementFaceDeserializerMixin.java +++ b/src/main/java/org/embeddedt/modernfix/mixin/perf/dynamic_resources/BlockElementFaceDeserializerMixin.java @@ -3,6 +3,7 @@ package org.embeddedt.modernfix.mixin.perf.dynamic_resources; import com.google.gson.JsonDeserializationContext; import com.google.gson.JsonElement; import net.minecraft.client.renderer.block.model.BlockElementFace; +import org.embeddedt.modernfix.annotation.ClientOnlyMixin; import org.embeddedt.modernfix.dynamicresources.UVController; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @@ -11,6 +12,7 @@ import org.spongepowered.asm.mixin.injection.Redirect; import java.lang.reflect.Type; @Mixin(BlockElementFace.Deserializer.class) +@ClientOnlyMixin public class BlockElementFaceDeserializerMixin { @Redirect(method = "deserialize(Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/client/renderer/block/model/BlockElementFace;", diff --git a/src/main/java/org/embeddedt/modernfix/mixin/perf/dynamic_resources/BlockModelShaperMixin.java b/src/main/java/org/embeddedt/modernfix/mixin/perf/dynamic_resources/BlockModelShaperMixin.java index 91d45970..7a4efebf 100644 --- a/src/main/java/org/embeddedt/modernfix/mixin/perf/dynamic_resources/BlockModelShaperMixin.java +++ b/src/main/java/org/embeddedt/modernfix/mixin/perf/dynamic_resources/BlockModelShaperMixin.java @@ -12,6 +12,7 @@ import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.properties.Property; +import org.embeddedt.modernfix.annotation.ClientOnlyMixin; import org.embeddedt.modernfix.dynamicresources.ModelLocationCache; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; @@ -27,6 +28,7 @@ import java.util.concurrent.CompletableFuture; import java.util.concurrent.ConcurrentHashMap; @Mixin(BlockModelShaper.class) +@ClientOnlyMixin public class BlockModelShaperMixin { @Shadow @Final private ModelManager modelManager; diff --git a/src/main/java/org/embeddedt/modernfix/mixin/perf/dynamic_resources/ItemModelShaperMixin.java b/src/main/java/org/embeddedt/modernfix/mixin/perf/dynamic_resources/ItemModelShaperMixin.java index 62d3c0a6..2922533d 100644 --- a/src/main/java/org/embeddedt/modernfix/mixin/perf/dynamic_resources/ItemModelShaperMixin.java +++ b/src/main/java/org/embeddedt/modernfix/mixin/perf/dynamic_resources/ItemModelShaperMixin.java @@ -8,6 +8,7 @@ import net.minecraft.world.item.Item; import net.minecraftforge.client.ItemModelMesherForge; import net.minecraftforge.registries.ForgeRegistries; import net.minecraftforge.registries.IRegistryDelegate; +import org.embeddedt.modernfix.annotation.ClientOnlyMixin; import org.embeddedt.modernfix.dynamicresources.ModelLocationCache; import org.embeddedt.modernfix.util.ItemMesherMap; import org.jetbrains.annotations.NotNull; @@ -23,6 +24,7 @@ import java.util.Map; import java.util.Set; @Mixin(ItemModelMesherForge.class) +@ClientOnlyMixin public abstract class ItemModelShaperMixin extends ItemModelShaper { @Shadow @Final @Mutable private Map, ModelResourceLocation> locations; diff --git a/src/main/java/org/embeddedt/modernfix/mixin/perf/dynamic_resources/ItemRendererMixin.java b/src/main/java/org/embeddedt/modernfix/mixin/perf/dynamic_resources/ItemRendererMixin.java index 3e47df2d..27e4e5d5 100644 --- a/src/main/java/org/embeddedt/modernfix/mixin/perf/dynamic_resources/ItemRendererMixin.java +++ b/src/main/java/org/embeddedt/modernfix/mixin/perf/dynamic_resources/ItemRendererMixin.java @@ -4,11 +4,13 @@ import net.minecraft.client.renderer.ItemModelShaper; import net.minecraft.client.renderer.entity.ItemRenderer; import net.minecraft.client.resources.model.ModelResourceLocation; import net.minecraft.world.item.Item; +import org.embeddedt.modernfix.annotation.ClientOnlyMixin; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; @Mixin(ItemRenderer.class) +@ClientOnlyMixin public class ItemRendererMixin { /** * Don't waste space putting all these locations into the cache, compute them on demand later. diff --git a/src/main/java/org/embeddedt/modernfix/mixin/perf/dynamic_resources/ModelBakeryMixin.java b/src/main/java/org/embeddedt/modernfix/mixin/perf/dynamic_resources/ModelBakeryMixin.java index e7e3e708..22436f8b 100644 --- a/src/main/java/org/embeddedt/modernfix/mixin/perf/dynamic_resources/ModelBakeryMixin.java +++ b/src/main/java/org/embeddedt/modernfix/mixin/perf/dynamic_resources/ModelBakeryMixin.java @@ -46,6 +46,7 @@ import net.minecraftforge.registries.ForgeRegistryEntry; import org.apache.commons.lang3.tuple.Triple; import org.apache.logging.log4j.Logger; import org.embeddedt.modernfix.ModernFix; +import org.embeddedt.modernfix.annotation.ClientOnlyMixin; import org.embeddedt.modernfix.duck.IExtendedModelBakery; import org.embeddedt.modernfix.dynamicresources.*; import org.spongepowered.asm.mixin.*; @@ -71,6 +72,7 @@ import java.util.stream.Stream; /* high priority so that our injectors are added before other mods' */ @Mixin(value = ModelBakery.class, priority = 600) +@ClientOnlyMixin public abstract class ModelBakeryMixin implements IExtendedModelBakery { private static final boolean debugDynamicModelLoading = Boolean.getBoolean("modernfix.debugDynamicModelLoading"); diff --git a/src/main/java/org/embeddedt/modernfix/mixin/perf/dynamic_resources/ae2/RegistrationMixin.java b/src/main/java/org/embeddedt/modernfix/mixin/perf/dynamic_resources/ae2/RegistrationMixin.java index a04946a8..07f95f4c 100644 --- a/src/main/java/org/embeddedt/modernfix/mixin/perf/dynamic_resources/ae2/RegistrationMixin.java +++ b/src/main/java/org/embeddedt/modernfix/mixin/perf/dynamic_resources/ae2/RegistrationMixin.java @@ -10,6 +10,8 @@ import net.minecraft.resources.ResourceLocation; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.fml.common.ObfuscationReflectionHelper; import org.embeddedt.modernfix.ModernFix; +import org.embeddedt.modernfix.annotation.ClientOnlyMixin; +import org.embeddedt.modernfix.annotation.RequiresMod; import org.embeddedt.modernfix.dynamicresources.DynamicModelBakeEvent; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @@ -21,6 +23,8 @@ import java.util.Map; import java.util.function.BiFunction; @Mixin(targets = { "appeng/core/Registration" }) +@RequiresMod("appliedenergistics2") +@ClientOnlyMixin public class RegistrationMixin { private static Field customizerField; @Inject(method = "registerClientEvents", at = @At("TAIL"), remap = false) diff --git a/src/main/java/org/embeddedt/modernfix/mixin/perf/dynamic_resources/ctm/CTMPackReloadListenerMixin.java b/src/main/java/org/embeddedt/modernfix/mixin/perf/dynamic_resources/ctm/CTMPackReloadListenerMixin.java index bd980f94..dc5a0302 100644 --- a/src/main/java/org/embeddedt/modernfix/mixin/perf/dynamic_resources/ctm/CTMPackReloadListenerMixin.java +++ b/src/main/java/org/embeddedt/modernfix/mixin/perf/dynamic_resources/ctm/CTMPackReloadListenerMixin.java @@ -19,6 +19,8 @@ import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; import net.minecraftforge.registries.ForgeRegistries; import net.minecraftforge.registries.IRegistryDelegate; import org.embeddedt.modernfix.ModernFix; +import org.embeddedt.modernfix.annotation.ClientOnlyMixin; +import org.embeddedt.modernfix.annotation.RequiresMod; import org.embeddedt.modernfix.duck.IExtendedModelBakery; import org.embeddedt.modernfix.dynamicresources.DynamicModelBakeEvent; import org.spongepowered.asm.mixin.Final; @@ -36,6 +38,8 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.function.Predicate; @Mixin(CTMPackReloadListener.class) +@RequiresMod("ctm") +@ClientOnlyMixin public abstract class CTMPackReloadListenerMixin { /* caches the original render checks */ @Shadow @Final private static Map, Predicate> blockRenderChecks; diff --git a/src/main/java/org/embeddedt/modernfix/mixin/perf/dynamic_resources/ctm/TextureMetadataHandlerMixin.java b/src/main/java/org/embeddedt/modernfix/mixin/perf/dynamic_resources/ctm/TextureMetadataHandlerMixin.java index 67ad067d..0b26663f 100644 --- a/src/main/java/org/embeddedt/modernfix/mixin/perf/dynamic_resources/ctm/TextureMetadataHandlerMixin.java +++ b/src/main/java/org/embeddedt/modernfix/mixin/perf/dynamic_resources/ctm/TextureMetadataHandlerMixin.java @@ -9,6 +9,8 @@ import net.minecraft.resources.ResourceLocation; import net.minecraftforge.client.model.ModelLoader; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.eventbus.api.SubscribeEvent; +import org.embeddedt.modernfix.annotation.ClientOnlyMixin; +import org.embeddedt.modernfix.annotation.RequiresMod; import org.embeddedt.modernfix.dynamicresources.DynamicModelBakeEvent; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; @@ -28,6 +30,8 @@ import java.io.IOException; import java.util.*; @Mixin(TextureMetadataHandler.class) +@RequiresMod("ctm") +@ClientOnlyMixin public abstract class TextureMetadataHandlerMixin { @Shadow @Nonnull protected abstract BakedModel wrap(ResourceLocation loc, UnbakedModel model, BakedModel object, ModelLoader loader) throws IOException; diff --git a/src/main/java/org/embeddedt/modernfix/mixin/perf/dynamic_resources/rs/ClientSetupMixin.java b/src/main/java/org/embeddedt/modernfix/mixin/perf/dynamic_resources/rs/ClientSetupMixin.java index 8facb447..1fb44328 100644 --- a/src/main/java/org/embeddedt/modernfix/mixin/perf/dynamic_resources/rs/ClientSetupMixin.java +++ b/src/main/java/org/embeddedt/modernfix/mixin/perf/dynamic_resources/rs/ClientSetupMixin.java @@ -5,6 +5,8 @@ import com.refinedmods.refinedstorage.setup.ClientSetup; import net.minecraft.client.resources.model.ModelResourceLocation; import net.minecraft.resources.ResourceLocation; import net.minecraftforge.common.MinecraftForge; +import org.embeddedt.modernfix.annotation.ClientOnlyMixin; +import org.embeddedt.modernfix.annotation.RequiresMod; import org.embeddedt.modernfix.dynamicresources.DynamicModelBakeEvent; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; @@ -14,6 +16,8 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(ClientSetup.class) +@RequiresMod("refinedstorage") +@ClientOnlyMixin public class ClientSetupMixin { @Shadow @Final private BakedModelOverrideRegistry bakedModelOverrideRegistry; diff --git a/src/main/java/org/embeddedt/modernfix/mixin/perf/dynamic_resources/supermartijncore/ClientRegistrationHandlerMixin.java b/src/main/java/org/embeddedt/modernfix/mixin/perf/dynamic_resources/supermartijncore/ClientRegistrationHandlerMixin.java index 2e400c99..2a1e53a3 100644 --- a/src/main/java/org/embeddedt/modernfix/mixin/perf/dynamic_resources/supermartijncore/ClientRegistrationHandlerMixin.java +++ b/src/main/java/org/embeddedt/modernfix/mixin/perf/dynamic_resources/supermartijncore/ClientRegistrationHandlerMixin.java @@ -8,6 +8,8 @@ import net.minecraft.resources.ResourceLocation; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; +import org.embeddedt.modernfix.annotation.ClientOnlyMixin; +import org.embeddedt.modernfix.annotation.RequiresMod; import org.embeddedt.modernfix.dynamicresources.DynamicModelBakeEvent; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; @@ -25,6 +27,8 @@ import java.util.function.Supplier; import java.util.stream.Stream; @Mixin(ClientRegistrationHandler.class) +@RequiresMod("supermartijn642corelib") +@ClientOnlyMixin public class ClientRegistrationHandlerMixin { @Shadow @Final private List>, Function>> modelOverwrites; diff --git a/src/main/java/org/embeddedt/modernfix/mixin/perf/faster_font_loading/LegacyUnicodeBitmapsProviderMixin.java b/src/main/java/org/embeddedt/modernfix/mixin/perf/faster_font_loading/LegacyUnicodeBitmapsProviderMixin.java index 53dfe159..2da49308 100644 --- a/src/main/java/org/embeddedt/modernfix/mixin/perf/faster_font_loading/LegacyUnicodeBitmapsProviderMixin.java +++ b/src/main/java/org/embeddedt/modernfix/mixin/perf/faster_font_loading/LegacyUnicodeBitmapsProviderMixin.java @@ -3,6 +3,7 @@ package org.embeddedt.modernfix.mixin.perf.faster_font_loading; import com.mojang.blaze3d.platform.NativeImage; import net.minecraft.client.gui.font.providers.LegacyUnicodeBitmapsProvider; import net.minecraft.resources.ResourceLocation; +import org.embeddedt.modernfix.annotation.ClientOnlyMixin; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -21,6 +22,7 @@ import java.util.Map; * only to do it again later. */ @Mixin(LegacyUnicodeBitmapsProvider.class) +@ClientOnlyMixin public abstract class LegacyUnicodeBitmapsProviderMixin { @Shadow protected abstract ResourceLocation getSheetLocation(int i); diff --git a/src/main/java/org/embeddedt/modernfix/mixin/perf/faster_texture_loading/TextureAtlasMixin.java b/src/main/java/org/embeddedt/modernfix/mixin/perf/faster_texture_loading/TextureAtlasMixin.java index 1e326451..4e09732e 100644 --- a/src/main/java/org/embeddedt/modernfix/mixin/perf/faster_texture_loading/TextureAtlasMixin.java +++ b/src/main/java/org/embeddedt/modernfix/mixin/perf/faster_texture_loading/TextureAtlasMixin.java @@ -13,6 +13,7 @@ import net.minecraftforge.client.ForgeHooksClient; import net.minecraftforge.fml.ModLoader; import org.apache.commons.lang3.tuple.Triple; import org.embeddedt.modernfix.ModernFix; +import org.embeddedt.modernfix.annotation.ClientOnlyMixin; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; @@ -28,6 +29,7 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentLinkedQueue; @Mixin(TextureAtlas.class) +@ClientOnlyMixin public abstract class TextureAtlasMixin { @Shadow protected abstract ResourceLocation getResourceLocation(ResourceLocation location); diff --git a/src/main/java/org/embeddedt/modernfix/mixin/perf/faster_texture_stitching/StitcherMixin.java b/src/main/java/org/embeddedt/modernfix/mixin/perf/faster_texture_stitching/StitcherMixin.java index 820383de..a88830e3 100644 --- a/src/main/java/org/embeddedt/modernfix/mixin/perf/faster_texture_stitching/StitcherMixin.java +++ b/src/main/java/org/embeddedt/modernfix/mixin/perf/faster_texture_stitching/StitcherMixin.java @@ -5,6 +5,7 @@ import it.unimi.dsi.fastutil.objects.ObjectArrayList; import net.minecraft.client.renderer.texture.Stitcher; import net.minecraftforge.fml.ModLoader; import org.embeddedt.modernfix.ModernFix; +import org.embeddedt.modernfix.annotation.ClientOnlyMixin; import org.embeddedt.modernfix.textures.StbStitcher; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; @@ -20,6 +21,7 @@ import java.util.List; import java.util.Set; @Mixin(Stitcher.class) +@ClientOnlyMixin public class StitcherMixin { @Shadow @Final private Set texturesToBeStitched; diff --git a/src/main/java/org/embeddedt/modernfix/mixin/perf/jeresources_startup/VillagerEntryMixin.java b/src/main/java/org/embeddedt/modernfix/mixin/perf/jeresources_startup/VillagerEntryMixin.java index 7b630c0e..efeb8279 100644 --- a/src/main/java/org/embeddedt/modernfix/mixin/perf/jeresources_startup/VillagerEntryMixin.java +++ b/src/main/java/org/embeddedt/modernfix/mixin/perf/jeresources_startup/VillagerEntryMixin.java @@ -4,6 +4,7 @@ import jeresources.entry.VillagerEntry; import net.minecraft.client.Minecraft; import net.minecraft.world.entity.npc.Villager; import net.minecraft.world.level.Level; +import org.embeddedt.modernfix.annotation.RequiresMod; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -13,6 +14,7 @@ import java.lang.ref.WeakReference; /* Cache the created villager instead of reconstructing it every time */ @Mixin(VillagerEntry.class) +@RequiresMod("jeresources") public class VillagerEntryMixin { private WeakReference cachedVillager = new WeakReference<>(null); diff --git a/src/main/java/org/embeddedt/modernfix/mixin/perf/kubejs/CustomIngredientMixin.java b/src/main/java/org/embeddedt/modernfix/mixin/perf/kubejs/CustomIngredientMixin.java index 1cb9f048..ab9bc2c3 100644 --- a/src/main/java/org/embeddedt/modernfix/mixin/perf/kubejs/CustomIngredientMixin.java +++ b/src/main/java/org/embeddedt/modernfix/mixin/perf/kubejs/CustomIngredientMixin.java @@ -3,6 +3,7 @@ package org.embeddedt.modernfix.mixin.perf.kubejs; import dev.latvian.kubejs.item.ItemStackJS; import dev.latvian.kubejs.item.ingredient.CustomIngredient; import net.minecraft.world.item.crafting.Ingredient; +import org.embeddedt.modernfix.annotation.RequiresMod; import org.embeddedt.modernfix.duck.ICachedIngredientJS; import org.embeddedt.modernfix.util.KubeUtil; import org.spongepowered.asm.mixin.Final; @@ -11,6 +12,7 @@ import org.spongepowered.asm.mixin.Shadow; import java.util.Set; @Mixin(CustomIngredient.class) +@RequiresMod("kubejs") public abstract class CustomIngredientMixin implements ICachedIngredientJS { @Shadow @Final private Ingredient ingredient; diff --git a/src/main/java/org/embeddedt/modernfix/mixin/perf/kubejs/IDFilterMixin.java b/src/main/java/org/embeddedt/modernfix/mixin/perf/kubejs/IDFilterMixin.java index c3a962ef..08d56f63 100644 --- a/src/main/java/org/embeddedt/modernfix/mixin/perf/kubejs/IDFilterMixin.java +++ b/src/main/java/org/embeddedt/modernfix/mixin/perf/kubejs/IDFilterMixin.java @@ -3,6 +3,7 @@ package org.embeddedt.modernfix.mixin.perf.kubejs; import dev.latvian.kubejs.recipe.RecipeJS; import dev.latvian.kubejs.recipe.filter.IDFilter; import net.minecraft.resources.ResourceLocation; +import org.embeddedt.modernfix.annotation.RequiresMod; import org.embeddedt.modernfix.util.KubeUtil; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; @@ -10,6 +11,7 @@ import org.spongepowered.asm.mixin.Overwrite; import org.spongepowered.asm.mixin.Shadow; @Mixin(IDFilter.class) +@RequiresMod("kubejs") public class IDFilterMixin { @Shadow @Final private ResourceLocation id; private RecipeJS _target; diff --git a/src/main/java/org/embeddedt/modernfix/mixin/perf/kubejs/RecipeEventJSMixin.java b/src/main/java/org/embeddedt/modernfix/mixin/perf/kubejs/RecipeEventJSMixin.java index a64f754d..093e0ddc 100644 --- a/src/main/java/org/embeddedt/modernfix/mixin/perf/kubejs/RecipeEventJSMixin.java +++ b/src/main/java/org/embeddedt/modernfix/mixin/perf/kubejs/RecipeEventJSMixin.java @@ -8,6 +8,7 @@ import dev.latvian.kubejs.recipe.filter.RecipeFilter; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.crafting.RecipeManager; import org.embeddedt.modernfix.ModernFix; +import org.embeddedt.modernfix.annotation.RequiresMod; import org.embeddedt.modernfix.util.KubeUtil; import org.embeddedt.modernfix.util.ModUtil; import org.spongepowered.asm.mixin.Final; @@ -27,6 +28,7 @@ import java.util.function.Consumer; import java.util.stream.Collectors; @Mixin(RecipeEventJS.class) +@RequiresMod("kubejs") public class RecipeEventJSMixin { @Shadow(remap = false) @Final private List originalRecipes; diff --git a/src/main/java/org/embeddedt/modernfix/mixin/perf/kubejs/RecipeJSMixin.java b/src/main/java/org/embeddedt/modernfix/mixin/perf/kubejs/RecipeJSMixin.java index e15b7b54..d257faaf 100644 --- a/src/main/java/org/embeddedt/modernfix/mixin/perf/kubejs/RecipeJSMixin.java +++ b/src/main/java/org/embeddedt/modernfix/mixin/perf/kubejs/RecipeJSMixin.java @@ -6,6 +6,7 @@ import dev.latvian.kubejs.item.ingredient.TagIngredientJS; import dev.latvian.kubejs.recipe.RecipeJS; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.crafting.Recipe; +import org.embeddedt.modernfix.annotation.RequiresMod; import org.embeddedt.modernfix.duck.ICachedIngredientJS; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @@ -14,6 +15,7 @@ import org.spongepowered.asm.mixin.injection.Redirect; import java.util.Set; @Mixin(RecipeJS.class) +@RequiresMod("kubejs") public class RecipeJSMixin { /** * @author embeddedt diff --git a/src/main/java/org/embeddedt/modernfix/mixin/perf/kubejs/TagIngredientJSMixin.java b/src/main/java/org/embeddedt/modernfix/mixin/perf/kubejs/TagIngredientJSMixin.java index ac2ecf81..164492b1 100644 --- a/src/main/java/org/embeddedt/modernfix/mixin/perf/kubejs/TagIngredientJSMixin.java +++ b/src/main/java/org/embeddedt/modernfix/mixin/perf/kubejs/TagIngredientJSMixin.java @@ -5,6 +5,7 @@ import dev.latvian.kubejs.item.ingredient.IngredientJS; import dev.latvian.kubejs.item.ingredient.TagIngredientJS; import net.minecraft.tags.Tag; import net.minecraft.world.item.Item; +import org.embeddedt.modernfix.annotation.RequiresMod; import org.embeddedt.modernfix.duck.ICachedIngredientJS; import org.embeddedt.modernfix.util.KubeUtil; import org.spongepowered.asm.mixin.Mixin; @@ -16,6 +17,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import java.util.Set; @Mixin(TagIngredientJS.class) +@RequiresMod("kubejs") public abstract class TagIngredientJSMixin implements ICachedIngredientJS { @Shadow public abstract Tag getActualTag(); diff --git a/src/main/java/org/embeddedt/modernfix/mixin/perf/kubejs/TagWrapperMixin.java b/src/main/java/org/embeddedt/modernfix/mixin/perf/kubejs/TagWrapperMixin.java index 7207d9bd..fcef520d 100644 --- a/src/main/java/org/embeddedt/modernfix/mixin/perf/kubejs/TagWrapperMixin.java +++ b/src/main/java/org/embeddedt/modernfix/mixin/perf/kubejs/TagWrapperMixin.java @@ -4,6 +4,7 @@ import dev.latvian.kubejs.server.TagEventJS; import dev.latvian.kubejs.util.UtilsJS; import me.shedaniel.architectury.registry.Registry; import net.minecraft.resources.ResourceLocation; +import org.embeddedt.modernfix.annotation.RequiresMod; import org.embeddedt.modernfix.util.KubeUtil; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @@ -18,6 +19,7 @@ import java.util.regex.Pattern; import java.util.stream.Collectors; @Mixin(TagEventJS.TagWrapper.class) +@RequiresMod("kubejs") public class TagWrapperMixin { private String currentPatternStr = null; @Inject(method = "add", at = @At(value = "INVOKE", target = "Lme/shedaniel/architectury/registry/Registry;getIds()Ljava/util/Set;", ordinal = 0), locals = LocalCapture.CAPTURE_FAILHARD, remap = false) diff --git a/src/main/java/org/embeddedt/modernfix/mixin/perf/model_optimizations/OBJLoaderMixin.java b/src/main/java/org/embeddedt/modernfix/mixin/perf/model_optimizations/OBJLoaderMixin.java index 33f700d4..6e137101 100644 --- a/src/main/java/org/embeddedt/modernfix/mixin/perf/model_optimizations/OBJLoaderMixin.java +++ b/src/main/java/org/embeddedt/modernfix/mixin/perf/model_optimizations/OBJLoaderMixin.java @@ -4,6 +4,7 @@ import net.minecraft.resources.ResourceLocation; import net.minecraftforge.client.model.obj.MaterialLibrary; import net.minecraftforge.client.model.obj.OBJLoader; import net.minecraftforge.client.model.obj.OBJModel; +import org.embeddedt.modernfix.annotation.ClientOnlyMixin; import org.objectweb.asm.Opcodes; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; @@ -16,6 +17,7 @@ import java.util.Map; import java.util.concurrent.ConcurrentHashMap; @Mixin(OBJLoader.class) +@ClientOnlyMixin public class OBJLoaderMixin { @Final @Mutable diff --git a/src/main/java/org/embeddedt/modernfix/mixin/perf/model_optimizations/SelectorMixin.java b/src/main/java/org/embeddedt/modernfix/mixin/perf/model_optimizations/SelectorMixin.java index e52d84c4..dc0761aa 100644 --- a/src/main/java/org/embeddedt/modernfix/mixin/perf/model_optimizations/SelectorMixin.java +++ b/src/main/java/org/embeddedt/modernfix/mixin/perf/model_optimizations/SelectorMixin.java @@ -4,6 +4,7 @@ import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.client.renderer.block.model.multipart.Selector; import net.minecraft.world.level.block.state.StateDefinition; +import org.embeddedt.modernfix.annotation.ClientOnlyMixin; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -13,6 +14,7 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.function.Predicate; @Mixin(Selector.class) +@ClientOnlyMixin public class SelectorMixin { private ConcurrentHashMap, Predicate> predicateCache = new ConcurrentHashMap<>(); @Inject(method = "getPredicate", at = @At("HEAD"), cancellable = true) diff --git a/src/main/java/org/embeddedt/modernfix/mixin/perf/model_optimizations/TransformationMatrixMixin.java b/src/main/java/org/embeddedt/modernfix/mixin/perf/model_optimizations/TransformationMatrixMixin.java index 286d030f..bda0834d 100644 --- a/src/main/java/org/embeddedt/modernfix/mixin/perf/model_optimizations/TransformationMatrixMixin.java +++ b/src/main/java/org/embeddedt/modernfix/mixin/perf/model_optimizations/TransformationMatrixMixin.java @@ -2,6 +2,7 @@ package org.embeddedt.modernfix.mixin.perf.model_optimizations; import com.mojang.math.Matrix4f; import com.mojang.math.Transformation; +import org.embeddedt.modernfix.annotation.ClientOnlyMixin; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Overwrite; @@ -10,6 +11,7 @@ import org.spongepowered.asm.mixin.Shadow; import java.util.Objects; @Mixin(Transformation.class) +@ClientOnlyMixin public class TransformationMatrixMixin { @Shadow @Final private Matrix4f matrix; private Integer cachedHashCode = null; diff --git a/src/main/java/org/embeddedt/modernfix/mixin/perf/patchouli_deduplicate_books/ClientBookRegistryMixin.java b/src/main/java/org/embeddedt/modernfix/mixin/perf/patchouli_deduplicate_books/ClientBookRegistryMixin.java index 3760b4e8..bbd41eb3 100644 --- a/src/main/java/org/embeddedt/modernfix/mixin/perf/patchouli_deduplicate_books/ClientBookRegistryMixin.java +++ b/src/main/java/org/embeddedt/modernfix/mixin/perf/patchouli_deduplicate_books/ClientBookRegistryMixin.java @@ -4,6 +4,8 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraftforge.fml.common.ObfuscationReflectionHelper; import org.embeddedt.modernfix.ModernFix; +import org.embeddedt.modernfix.annotation.ClientOnlyMixin; +import org.embeddedt.modernfix.annotation.RequiresMod; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -23,6 +25,8 @@ import java.lang.reflect.Field; import java.util.List; @Mixin(ClientBookRegistry.class) +@RequiresMod("patchouli") +@ClientOnlyMixin public class ClientBookRegistryMixin { @Inject(method = "reload", at = @At("RETURN"), remap = false) private void performDeduplication(CallbackInfo ci) { diff --git a/src/main/java/org/embeddedt/modernfix/mixin/perf/reuse_datapacks/MinecraftMixin.java b/src/main/java/org/embeddedt/modernfix/mixin/perf/reuse_datapacks/MinecraftMixin.java index e1c5abec..f4645d60 100644 --- a/src/main/java/org/embeddedt/modernfix/mixin/perf/reuse_datapacks/MinecraftMixin.java +++ b/src/main/java/org/embeddedt/modernfix/mixin/perf/reuse_datapacks/MinecraftMixin.java @@ -10,6 +10,7 @@ import net.minecraft.server.packs.repository.Pack; import net.minecraft.server.packs.repository.PackRepository; import net.minecraft.world.level.DataPackConfig; import org.embeddedt.modernfix.ModernFix; +import org.embeddedt.modernfix.annotation.ClientOnlyMixin; import org.embeddedt.modernfix.duck.reuse_datapacks.ICachingResourceClient; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -24,6 +25,7 @@ import java.util.concurrent.CompletableFuture; import java.util.concurrent.Executor; @Mixin(Minecraft.class) +@ClientOnlyMixin public abstract class MinecraftMixin implements ICachingResourceClient { @Shadow public abstract boolean isLocalServer(); diff --git a/src/main/java/org/embeddedt/modernfix/mixin/perf/reuse_datapacks/MinecraftServerMixin.java b/src/main/java/org/embeddedt/modernfix/mixin/perf/reuse_datapacks/MinecraftServerMixin.java index f1f4d959..3231ecf2 100644 --- a/src/main/java/org/embeddedt/modernfix/mixin/perf/reuse_datapacks/MinecraftServerMixin.java +++ b/src/main/java/org/embeddedt/modernfix/mixin/perf/reuse_datapacks/MinecraftServerMixin.java @@ -6,6 +6,7 @@ import net.minecraft.server.MinecraftServer; import net.minecraft.server.ServerResources; import net.minecraft.server.packs.repository.Pack; import net.minecraft.server.packs.repository.PackRepository; +import org.embeddedt.modernfix.annotation.ClientOnlyMixin; import org.embeddedt.modernfix.duck.reuse_datapacks.ICachingResourceClient; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; @@ -14,6 +15,7 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; @Mixin(MinecraftServer.class) +@ClientOnlyMixin public class MinecraftServerMixin { @Shadow @Final private PackRepository packRepository; diff --git a/src/main/java/org/embeddedt/modernfix/mixin/perf/skip_first_datapack_reload/MinecraftMixin.java b/src/main/java/org/embeddedt/modernfix/mixin/perf/skip_first_datapack_reload/MinecraftMixin.java index 1dd623d1..c44747f2 100644 --- a/src/main/java/org/embeddedt/modernfix/mixin/perf/skip_first_datapack_reload/MinecraftMixin.java +++ b/src/main/java/org/embeddedt/modernfix/mixin/perf/skip_first_datapack_reload/MinecraftMixin.java @@ -9,6 +9,7 @@ import net.minecraft.world.level.storage.WorldData; import net.minecraft.world.level.storage.LevelStorageSource; import org.embeddedt.modernfix.ModernFix; import org.embeddedt.modernfix.ModernFixClient; +import org.embeddedt.modernfix.annotation.ClientOnlyMixin; import org.embeddedt.modernfix.duck.ILevelSave; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; @@ -23,6 +24,7 @@ import java.util.concurrent.ExecutionException; import java.util.function.Function; @Mixin(Minecraft.class) +@ClientOnlyMixin public abstract class MinecraftMixin { @Shadow public abstract Minecraft.ServerStem makeServerStem(RegistryAccess.RegistryHolder dynamicRegistries, Function worldStorageToDatapackFunction, Function4 quadFunction, boolean vanillaOnly, LevelStorageSource.LevelStorageAccess worldStorage) throws InterruptedException, ExecutionException; diff --git a/src/main/java/org/embeddedt/modernfix/mixin/perf/thread_priorities/IntegratedServerMixin.java b/src/main/java/org/embeddedt/modernfix/mixin/perf/thread_priorities/IntegratedServerMixin.java index 810ec467..d725fb22 100644 --- a/src/main/java/org/embeddedt/modernfix/mixin/perf/thread_priorities/IntegratedServerMixin.java +++ b/src/main/java/org/embeddedt/modernfix/mixin/perf/thread_priorities/IntegratedServerMixin.java @@ -12,6 +12,7 @@ import net.minecraft.server.level.progress.ChunkProgressListenerFactory; import net.minecraft.world.level.storage.WorldData; import net.minecraft.world.level.storage.LevelStorageSource; import org.embeddedt.modernfix.ModernFix; +import org.embeddedt.modernfix.annotation.ClientOnlyMixin; import org.embeddedt.modernfix.core.config.ModernFixConfig; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @@ -19,6 +20,7 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(IntegratedServer.class) +@ClientOnlyMixin public class IntegratedServerMixin { @Inject(method = "", at = @At("RETURN")) private void adjustServerPriority(Thread pServerThread, Minecraft pMinecraft, RegistryAccess.RegistryHolder pRegistryHolder, LevelStorageSource.LevelStorageAccess pStorageSource, PackRepository pPackRepository, ServerResources pResources, WorldData pWorldData, MinecraftSessionService pSessionService, GameProfileRepository pProfileRepository, GameProfileCache pProfileCache, ChunkProgressListenerFactory pProgressListenerfactory, CallbackInfo ci) { diff --git a/src/main/java/org/embeddedt/modernfix/mixin/perf/use_integrated_resources/jepb/PiglinBarteringRecipeBuilderMixin.java b/src/main/java/org/embeddedt/modernfix/mixin/perf/use_integrated_resources/jepb/PiglinBarteringRecipeBuilderMixin.java index 8370282e..92453f26 100644 --- a/src/main/java/org/embeddedt/modernfix/mixin/perf/use_integrated_resources/jepb/PiglinBarteringRecipeBuilderMixin.java +++ b/src/main/java/org/embeddedt/modernfix/mixin/perf/use_integrated_resources/jepb/PiglinBarteringRecipeBuilderMixin.java @@ -4,11 +4,15 @@ import com.thenatekirby.jepb.plugin.PiglinBarteringRecipeBuilder; import net.minecraft.server.MinecraftServer; import net.minecraft.world.level.Level; import net.minecraftforge.fml.server.ServerLifecycleHooks; +import org.embeddedt.modernfix.annotation.ClientOnlyMixin; +import org.embeddedt.modernfix.annotation.RequiresMod; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; @Mixin(PiglinBarteringRecipeBuilder.class) +@RequiresMod("jepb") +@ClientOnlyMixin public class PiglinBarteringRecipeBuilderMixin { @Redirect(method = "getManager(Lnet/minecraft/world/level/Level;)Lnet/minecraft/world/level/storage/loot/LootTables;", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/Level;getServer()Lnet/minecraft/server/MinecraftServer;")) private static MinecraftServer useIntegrated(Level level) { diff --git a/src/main/java/org/embeddedt/modernfix/mixin/perf/use_integrated_resources/jeresources/LootTableHelperMixin.java b/src/main/java/org/embeddedt/modernfix/mixin/perf/use_integrated_resources/jeresources/LootTableHelperMixin.java index 538426ab..06a0116f 100644 --- a/src/main/java/org/embeddedt/modernfix/mixin/perf/use_integrated_resources/jeresources/LootTableHelperMixin.java +++ b/src/main/java/org/embeddedt/modernfix/mixin/perf/use_integrated_resources/jeresources/LootTableHelperMixin.java @@ -4,11 +4,15 @@ import jeresources.util.LootTableHelper; import net.minecraft.server.MinecraftServer; import net.minecraft.world.level.Level; import net.minecraftforge.fml.server.ServerLifecycleHooks; +import org.embeddedt.modernfix.annotation.ClientOnlyMixin; +import org.embeddedt.modernfix.annotation.RequiresMod; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; @Mixin(LootTableHelper.class) +@RequiresMod("jeresources") +@ClientOnlyMixin public class LootTableHelperMixin { @Redirect(method = "getManager(Lnet/minecraft/world/level/Level;)Lnet/minecraft/world/level/storage/loot/LootTables;", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/Level;getServer()Lnet/minecraft/server/MinecraftServer;")) private static MinecraftServer useIntegrated(Level level) { diff --git a/src/main/java/org/embeddedt/modernfix/mixin/safety/BlockColorsMixin.java b/src/main/java/org/embeddedt/modernfix/mixin/safety/BlockColorsMixin.java index fb36013f..5e6930a7 100644 --- a/src/main/java/org/embeddedt/modernfix/mixin/safety/BlockColorsMixin.java +++ b/src/main/java/org/embeddedt/modernfix/mixin/safety/BlockColorsMixin.java @@ -4,6 +4,7 @@ import net.minecraft.world.level.block.Block; import net.minecraft.client.Minecraft; import net.minecraft.client.color.block.BlockColors; import net.minecraft.client.color.block.BlockColor; +import org.embeddedt.modernfix.annotation.ClientOnlyMixin; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -13,6 +14,7 @@ import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; @Mixin(value = BlockColors.class, priority = 700) +@ClientOnlyMixin public class BlockColorsMixin { private Lock mapLock = new ReentrantLock(); @Inject(method = "register", at = @At("HEAD")) diff --git a/src/main/java/org/embeddedt/modernfix/mixin/safety/ItemColorsMixin.java b/src/main/java/org/embeddedt/modernfix/mixin/safety/ItemColorsMixin.java index 628fb721..cc921521 100644 --- a/src/main/java/org/embeddedt/modernfix/mixin/safety/ItemColorsMixin.java +++ b/src/main/java/org/embeddedt/modernfix/mixin/safety/ItemColorsMixin.java @@ -1,6 +1,7 @@ package org.embeddedt.modernfix.mixin.safety; import net.minecraft.client.color.item.ItemColors; +import org.embeddedt.modernfix.annotation.ClientOnlyMixin; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -10,6 +11,7 @@ import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; @Mixin(value = ItemColors.class, priority = 700) +@ClientOnlyMixin public class ItemColorsMixin { private Lock mapLock = new ReentrantLock(); @Inject(method = "register", at = @At("HEAD")) diff --git a/src/main/java/org/embeddedt/modernfix/packet/PacketHandler.java b/src/main/java/org/embeddedt/modernfix/packet/PacketHandler.java index 7471e8fa..d4feabf7 100644 --- a/src/main/java/org/embeddedt/modernfix/packet/PacketHandler.java +++ b/src/main/java/org/embeddedt/modernfix/packet/PacketHandler.java @@ -1,11 +1,16 @@ package org.embeddedt.modernfix.packet; import net.minecraft.resources.ResourceLocation; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.fml.DistExecutor; +import net.minecraftforge.fml.network.NetworkEvent; import net.minecraftforge.fml.network.NetworkRegistry; import net.minecraftforge.fml.network.simple.SimpleChannel; import org.embeddedt.modernfix.ModernFix; import org.embeddedt.modernfix.ModernFixClient; +import java.util.function.Supplier; + public class PacketHandler { private static final String PROTOCOL_VERSION = "1"; public static final SimpleChannel INSTANCE = NetworkRegistry.newSimpleChannel( @@ -17,6 +22,10 @@ public class PacketHandler { public static void register() { int id = 1; - INSTANCE.registerMessage(id++, EntityIDSyncPacket.class, EntityIDSyncPacket::serialize, EntityIDSyncPacket::deserialize, ModernFixClient::handleEntityIDSync); + INSTANCE.registerMessage(id++, EntityIDSyncPacket.class, EntityIDSyncPacket::serialize, EntityIDSyncPacket::deserialize, PacketHandler::handleSyncPacket); + } + + private static void handleSyncPacket(EntityIDSyncPacket packet, Supplier contextSupplier) { + DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> ModernFixClient.handleEntityIDSync(packet, contextSupplier)); } } diff --git a/src/main/resources/modernfix.mixins.json b/src/main/resources/modernfix.mixins.json index 1e8dca49..1cf114ed 100644 --- a/src/main/resources/modernfix.mixins.json +++ b/src/main/resources/modernfix.mixins.json @@ -6,135 +6,7 @@ "compatibilityLevel": "JAVA_8", "refmap": "modernfix.refmap.json", "mixins": [ - "core.BootstrapMixin", - "bugfix.edge_chunk_not_saved.ChunkManagerMixin", - "bugfix.starlight_emptiness.StarLightEngineMixin", - "bugfix.paper_chunk_patches.ChunkMapMixin", - "bugfix.paper_chunk_patches.ChunkHolderMixin", - "bugfix.paper_chunk_patches.SortedArraySetMixin", - "perf.dynamic_structure_manager.StructureManagerMixin", - "bugfix.tf_cme_on_load.TwilightForestModMixin", - "bugfix.refinedstorage.te_bug.ItemExternalStorageProviderMixin", - "bugfix.refinedstorage.te_bug.FluidExternalStorageProviderMixin", - "bugfix.refinedstorage.te_bug.FluidExternalStorageCacheMixin", - "bugfix.refinedstorage.te_bug.FluidExternalStorageMixin", - "bugfix.refinedstorage.te_bug.ItemExternalStorageCacheMixin", - "bugfix.refinedstorage.te_bug.ItemExternalStorageMixin", - "bugfix.remove_block_chunkloading.RemoveBlockGoalMixin", - "bugfix.chunk_deadlock.ServerChunkCacheMixin", - "bugfix.chunk_deadlock.valhesia.BlockStateBaseMixin", - "perf.dedicated_reload_executor.MinecraftServerMixin", - "perf.dynamic_dfu.DataFixersMixin", - "perf.remove_biome_temperature_cache.BiomeMixin", - "perf.resourcepacks.ModFileResourcePackMixin", - "perf.resourcepacks.VanillaPackMixin", - "perf.skip_first_datapack_reload.LevelSaveMixin", - "perf.skip_first_datapack_reload.SaveFormatAccessor", - "perf.boost_worker_count.UtilMixin", - "perf.thread_priorities.UtilMixin", - "perf.reduce_blockstate_cache_rebuilds.GameDataMixin", - "perf.reduce_blockstate_cache_rebuilds.BlockCallbacksMixin", - "perf.reduce_blockstate_cache_rebuilds.BlocksMixin", - "perf.reduce_blockstate_cache_rebuilds.BlockStateBaseMixin", - "perf.deduplicate_location.MixinResourceLocation", - "perf.compress_biome_container.MixinBiomeContainer", - "perf.nuke_empty_chunk_sections.MixinChunk", - "perf.cache_blockstate_cache_arrays.AbstractBlockStateCacheMixin", - "perf.datapack_reload_exceptions.LootTableManagerMixin", - "perf.datapack_reload_exceptions.RecipeManagerMixin", - "perf.async_locator.CommandSourceStackAccess", - "perf.async_locator.DolphinSwimToTreasureGoalMixin", - "perf.async_locator.EnderEyeItemMixin", - "perf.async_locator.ExplorationMapFunctionMixin", - "perf.async_locator.EyeOfEnderAccess", - "perf.async_locator.EyeOfEnderMixin", - "perf.async_locator.LocateCommandAccess", - "perf.async_locator.LocateCommandMixin", - "perf.async_locator.MapItemAccess", - "perf.async_locator.MerchantOfferAccess", - "perf.async_locator.TreasureMapForEmeraldsMixin", - "feature.measure_time.BootstrapMixin", - "feature.measure_time.SimpleReloadableResourceManagerMixin", - "feature.measure_time.ProfiledReloadInstanceMixin", - "feature.branding.BrandingControlMixin", - "feature.direct_stack_trace.CrashReportMixin", - "perf.kubejs.TagIngredientJSMixin", - "perf.kubejs.TagWrapperMixin", - "perf.kubejs.RecipeEventJSMixin", - "perf.kubejs.RecipeJSMixin", - "perf.kubejs.IDFilterMixin", - "perf.kubejs.CustomIngredientMixin", - "perf.nbt_memory_usage.CompoundTagMixin", - "perf.fast_registry_validation.ForgeRegistryMixin", - "perf.rewrite_registry.ForgeRegistryMixin", - "perf.rewrite_registry.ForgeRegistrySnapshotMixin", - "perf.fast_registry_validation.ResourceKeyMixin", - "perf.cache_strongholds.ChunkGeneratorMixin", - "perf.cache_upgraded_structures.StructureManagerMixin", - "perf.cache_strongholds.ServerLevelMixin", - "perf.state_definition_construct.StateDefinitionMixin", - "perf.biome_zoomer.FuzzyOffsetBiomeZoomerMixin", - "perf.compress_blockstate.BlockStateBaseMixin", - "perf.compress_blockstate.BlockBehaviourMixin", - "perf.remove_spawn_chunks.ServerChunkCacheAccessor", - "perf.remove_spawn_chunks.MinecraftServerMixin", - "perf.remove_spawn_chunks.ServerLevelMixin", - "devenv.GameDataMixin" - ], - "client": [ - "core.MinecraftMixin", - "core.SynchedEntityDataMixin", - "feature.measure_time.MinecraftMixin", - "feature.reduce_loading_screen_freezes.ModelBakeryMixin", - "perf.skip_first_datapack_reload.MinecraftMixin", - "bugfix.preserve_early_window_pos.WindowMixin", - "bugfix.concurrency.RenderTypeMixin", - "bugfix.concurrency.MinecraftMixin", - "bugfix.concurrency.StaticTagHelperMixin", - "perf.dedicated_reload_executor.MinecraftMixin", - "perf.dynamic_resources.BlockElementFaceDeserializerMixin", - "perf.dynamic_resources.BlockModelShaperMixin", - "perf.dynamic_resources.ItemModelShaperMixin", - "perf.dynamic_resources.ItemRendererMixin", - "perf.dynamic_resources.ModelBakeryMixin", - "perf.dynamic_resources.ae2.RegistrationMixin", - "perf.dynamic_resources.rs.ClientSetupMixin", - "perf.dynamic_resources.ctm.TextureMetadataHandlerMixin", - "perf.dynamic_resources.ctm.CTMPackReloadListenerMixin", - "perf.dynamic_resources.supermartijncore.ClientRegistrationHandlerMixin", - "perf.model_optimizations.OBJLoaderMixin", - "perf.model_optimizations.SelectorMixin", - "perf.model_optimizations.TransformationMatrixMixin", - "perf.model_optimizations.BooleanPropertyMixin", - "perf.model_optimizations.PropertyMixin", - "perf.patchouli_deduplicate_books.ClientBookRegistryMixin", - "perf.async_jei.InputConstantsMixin", - "perf.async_jei.IngredientListElementFactoryMixin", - "perf.async_jei.ClientLifecycleHandlerMixin", - "perf.async_jei.JeiStarterMixin", - "perf.async_jei.PluginCallerMixin", - "perf.async_jei.RecipeManagerInternalMixin", - "perf.thread_priorities.IntegratedServerMixin", - "safety.BlockColorsMixin", - "safety.ItemColorsMixin", - "perf.blast_search_trees.MinecraftMixin", - "perf.blast_search_trees.IngredientFilterInvoker", - "perf.cache_model_materials.VanillaModelMixin", - "perf.cache_model_materials.BlockModelMixin", - "perf.cache_model_materials.MultipartMixin", - "perf.faster_texture_stitching.StitcherMixin", - "perf.faster_texture_loading.TextureAtlasMixin", - "perf.faster_font_loading.LegacyUnicodeBitmapsProviderMixin", - "bugfix.packet_leak.ClientPlayNetHandlerMixin", - "bugfix.packet_leak.SCustomPayloadPlayPacketMixin", - "perf.reuse_datapacks.MinecraftMixin", - "perf.reuse_datapacks.MinecraftServerMixin", - "perf.use_integrated_resources.jeresources.LootTableHelperMixin", - "perf.use_integrated_resources.jepb.PiglinBarteringRecipeBuilderMixin", - "perf.jeresources_startup.VillagerEntryMixin", - "bugfix.mc218112.SynchedEntityDataMixin_Client", - "devenv.MinecraftMixin", - "devenv.NarratorMixin" +${mixin_classes} ], "injectors": { "defaultRequire": 1