diff --git a/build.gradle.kts b/build.gradle.kts index 511cc90..72ded2b 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -13,7 +13,6 @@ minecraft_fp { mixin { pkg = "mixin.mixins" - pluginClass = "mixin.plugin.MixinPlugin" } core { @@ -64,7 +63,7 @@ repositories { dependencies { // region Our deps - implementationSplit("com.falsepattern:falsepatternlib-mc1.7.10:1.8.1") + implementationSplit("com.falsepattern:falsepatternlib-mc1.7.10:1.9.0") compileOnly("it.unimi.dsi:fastutil:8.5.16") implementationSplit("com.falsepattern:chunkapi-mc1.7.10:0.6.4") // endregion diff --git a/src/main/java/com/falsepattern/endlessids/asm/EndlessIDsCore.java b/src/main/java/com/falsepattern/endlessids/asm/EndlessIDsCore.java index 78b1618..5691ace 100644 --- a/src/main/java/com/falsepattern/endlessids/asm/EndlessIDsCore.java +++ b/src/main/java/com/falsepattern/endlessids/asm/EndlessIDsCore.java @@ -24,7 +24,9 @@ package com.falsepattern.endlessids.asm; import com.falsepattern.endlessids.Tags; import com.falsepattern.endlessids.config.GeneralConfig; -import com.falsepattern.endlessids.util.ConfigFixUtil; +import com.falsepattern.endlessids.mixin.plugin.Mixin; +import com.gtnewhorizon.gtnhmixins.IEarlyMixinLoader; +import com.gtnewhorizon.gtnhmixins.builders.IMixins; import lombok.SneakyThrows; import lombok.val; @@ -33,7 +35,7 @@ import net.minecraft.launchwrapper.LaunchClassLoader; import cpw.mods.fml.relauncher.FMLInjectionData; import cpw.mods.fml.relauncher.IFMLLoadingPlugin; -import java.io.IOException; +import java.util.List; import java.util.Map; import java.util.Set; @@ -46,7 +48,7 @@ import static cpw.mods.fml.relauncher.IFMLLoadingPlugin.TransformerExclusions; @Name(Tags.MODID + "_core") @TransformerExclusions({"com.falsepattern.endlessids.asm", "com.falsepattern.endlessids.config.GeneralConfig"}) @DependsOn("falsepatternlib") -public class EndlessIDsCore implements IFMLLoadingPlugin { +public class EndlessIDsCore implements IFMLLoadingPlugin, IEarlyMixinLoader { public static boolean deobfuscated; static { if (GeneralConfig.extendBlockItem) { @@ -125,4 +127,14 @@ public class EndlessIDsCore implements IFMLLoadingPlugin { public String getAccessTransformerClass() { return null; } + + @Override + public String getMixinConfig() { + return "mixins.endlessids.early.json"; + } + + @Override + public List getMixins(Set loadedCoreMods) { + return IMixins.getEarlyMixins(Mixin.class, loadedCoreMods); + } } diff --git a/src/main/java/com/falsepattern/endlessids/mixin/plugin/MixinPlugin.java b/src/main/java/com/falsepattern/endlessids/mixin/plugin/LateMixins.java similarity index 58% rename from src/main/java/com/falsepattern/endlessids/mixin/plugin/MixinPlugin.java rename to src/main/java/com/falsepattern/endlessids/mixin/plugin/LateMixins.java index 57adcea..0f8838e 100644 --- a/src/main/java/com/falsepattern/endlessids/mixin/plugin/MixinPlugin.java +++ b/src/main/java/com/falsepattern/endlessids/mixin/plugin/LateMixins.java @@ -4,7 +4,7 @@ * Copyright (C) 2022-2025 FalsePattern, The MEGA Team * All Rights Reserved * - * The above copyright notice, this permission notice and the words "MEGA" + * The above copyright notice, this permission notice and the word "MEGA" * shall be included in all copies or substantial portions of the Software. * * This program is free software: you can redistribute it and/or modify @@ -22,31 +22,24 @@ package com.falsepattern.endlessids.mixin.plugin; -import com.falsepattern.endlessids.Tags; -import com.falsepattern.lib.mixin.IMixin; -import com.falsepattern.lib.mixin.IMixinPlugin; -import com.falsepattern.lib.mixin.ITargetedMod; -import lombok.Getter; -import org.apache.logging.log4j.Logger; +import com.gtnewhorizon.gtnhmixins.ILateMixinLoader; +import com.gtnewhorizon.gtnhmixins.LateMixin; +import com.gtnewhorizon.gtnhmixins.builders.IMixins; +import org.jetbrains.annotations.NotNull; -public class MixinPlugin implements IMixinPlugin { - public static final Logger LOG = IMixinPlugin.createLogger(Tags.MODNAME); - - @Getter - private final Logger logger = LOG; +import java.util.Collections; +import java.util.List; +import java.util.Set; +@LateMixin +public class LateMixins implements ILateMixinLoader { @Override - public IMixin[] getMixinEnumValues() { - return Mixin.values(); + public String getMixinConfig() { + return "mixins.endlessids.late.json"; } @Override - public ITargetedMod[] getTargetedModEnumValues() { - return TargetedMod.values(); - } - - @Override - public boolean useNewFindJar() { - return true; + public @NotNull List getMixins(Set loadedMods) { + return IMixins.getLateMixins(Mixin.class, loadedMods); } } diff --git a/src/main/java/com/falsepattern/endlessids/mixin/plugin/Mixin.java b/src/main/java/com/falsepattern/endlessids/mixin/plugin/Mixin.java index be5e2af..febf937 100644 --- a/src/main/java/com/falsepattern/endlessids/mixin/plugin/Mixin.java +++ b/src/main/java/com/falsepattern/endlessids/mixin/plugin/Mixin.java @@ -4,7 +4,7 @@ * Copyright (C) 2022-2025 FalsePattern, The MEGA Team * All Rights Reserved * - * The above copyright notice, this permission notice and the words "MEGA" + * The above copyright notice, this permission notice and the word "MEGA" * shall be included in all copies or substantial portions of the Software. * * This program is free software: you can redistribute it and/or modify @@ -22,417 +22,584 @@ package com.falsepattern.endlessids.mixin.plugin; +import com.falsepattern.endlessids.Tags; import com.falsepattern.endlessids.config.GeneralConfig; -import com.falsepattern.lib.mixin.IMixin; -import com.falsepattern.lib.mixin.ITargetedMod; +import com.falsepattern.lib.mixin.v2.MixinHelper; +import com.falsepattern.lib.mixin.v2.SidedMixins; +import com.falsepattern.lib.mixin.v2.TaggedMod; +import com.gtnewhorizon.gtnhmixins.builders.IMixins; +import com.gtnewhorizon.gtnhmixins.builders.MixinBuilder; import lombok.Getter; -import lombok.val; +import lombok.RequiredArgsConstructor; +import org.intellij.lang.annotations.Language; -import java.util.List; -import java.util.function.Predicate; +import java.util.function.BooleanSupplier; import java.util.function.Supplier; -import static com.falsepattern.endlessids.mixin.plugin.TargetedMod.ABYSSALCRAFT; -import static com.falsepattern.endlessids.mixin.plugin.TargetedMod.AM2; -import static com.falsepattern.endlessids.mixin.plugin.TargetedMod.ANTIIDCONFLICT; -import static com.falsepattern.endlessids.mixin.plugin.TargetedMod.ANTIQUEATLAS; -import static com.falsepattern.endlessids.mixin.plugin.TargetedMod.ATG; -import static com.falsepattern.endlessids.mixin.plugin.TargetedMod.BIOMETWEAKER; -import static com.falsepattern.endlessids.mixin.plugin.TargetedMod.BIOMEWAND; -import static com.falsepattern.endlessids.mixin.plugin.TargetedMod.BLOCKPHYSICS; -import static com.falsepattern.endlessids.mixin.plugin.TargetedMod.BOP; -import static com.falsepattern.endlessids.mixin.plugin.TargetedMod.BUILDCRAFT; -import static com.falsepattern.endlessids.mixin.plugin.TargetedMod.CLIMATECONTROL; -import static com.falsepattern.endlessids.mixin.plugin.TargetedMod.COFHLIB; -import static com.falsepattern.endlessids.mixin.plugin.TargetedMod.COMPACTMACHINES; -import static com.falsepattern.endlessids.mixin.plugin.TargetedMod.DARKWORLD; -import static com.falsepattern.endlessids.mixin.plugin.TargetedMod.DIMDOORS; -import static com.falsepattern.endlessids.mixin.plugin.TargetedMod.DRAGONAPI; -import static com.falsepattern.endlessids.mixin.plugin.TargetedMod.EB; -import static com.falsepattern.endlessids.mixin.plugin.TargetedMod.ENDERLICIOUS; -import static com.falsepattern.endlessids.mixin.plugin.TargetedMod.EREBUS; -import static com.falsepattern.endlessids.mixin.plugin.TargetedMod.EXTENDEDPLANETS; -import static com.falsepattern.endlessids.mixin.plugin.TargetedMod.EXTRAPLANETS; -import static com.falsepattern.endlessids.mixin.plugin.TargetedMod.EXTRAUTILITIES; -import static com.falsepattern.endlessids.mixin.plugin.TargetedMod.FACTORIZATION; -import static com.falsepattern.endlessids.mixin.plugin.TargetedMod.FASTCRAFT; -import static com.falsepattern.endlessids.mixin.plugin.TargetedMod.FUTUREPACK; -import static com.falsepattern.endlessids.mixin.plugin.TargetedMod.GADOMANCY; -import static com.falsepattern.endlessids.mixin.plugin.TargetedMod.GALACTICRAFTCORE; -import static com.falsepattern.endlessids.mixin.plugin.TargetedMod.GALAXYSPACE; -import static com.falsepattern.endlessids.mixin.plugin.TargetedMod.HBM_NTM; -import static com.falsepattern.endlessids.mixin.plugin.TargetedMod.HIGHLANDS; -import static com.falsepattern.endlessids.mixin.plugin.TargetedMod.ICG; -import static com.falsepattern.endlessids.mixin.plugin.TargetedMod.IR3; -import static com.falsepattern.endlessids.mixin.plugin.TargetedMod.JAS; -import static com.falsepattern.endlessids.mixin.plugin.TargetedMod.LOTR; -import static com.falsepattern.endlessids.mixin.plugin.TargetedMod.MATTERMEGADRIVE; -import static com.falsepattern.endlessids.mixin.plugin.TargetedMod.MATTEROVERDRIVE; -import static com.falsepattern.endlessids.mixin.plugin.TargetedMod.MFQM; -import static com.falsepattern.endlessids.mixin.plugin.TargetedMod.MYSTCRAFT; -import static com.falsepattern.endlessids.mixin.plugin.TargetedMod.NATURESCOMPASS; -import static com.falsepattern.endlessids.mixin.plugin.TargetedMod.NETHERLICIOUS; -import static com.falsepattern.endlessids.mixin.plugin.TargetedMod.NOMADICTENTS; -import static com.falsepattern.endlessids.mixin.plugin.TargetedMod.OWG; -import static com.falsepattern.endlessids.mixin.plugin.TargetedMod.RANDOMTHINGS; -import static com.falsepattern.endlessids.mixin.plugin.TargetedMod.RESTRUCTURED; -import static com.falsepattern.endlessids.mixin.plugin.TargetedMod.RTG; -import static com.falsepattern.endlessids.mixin.plugin.TargetedMod.RUINS; -import static com.falsepattern.endlessids.mixin.plugin.TargetedMod.RWG; -import static com.falsepattern.endlessids.mixin.plugin.TargetedMod.TARDIS; -import static com.falsepattern.endlessids.mixin.plugin.TargetedMod.THAUMCRAFT; -import static com.falsepattern.endlessids.mixin.plugin.TargetedMod.THUTCORE; -import static com.falsepattern.endlessids.mixin.plugin.TargetedMod.TMOR; -import static com.falsepattern.endlessids.mixin.plugin.TargetedMod.TROPICRAFT; -import static com.falsepattern.endlessids.mixin.plugin.TargetedMod.TWILIGHTFOREST; -import static com.falsepattern.endlessids.mixin.plugin.TargetedMod.UBC; -import static com.falsepattern.endlessids.mixin.plugin.TargetedMod.WITCHERY; -import static com.falsepattern.endlessids.mixin.plugin.TargetedMod.WORLDEDIT; -import static com.falsepattern.lib.mixin.IMixin.PredicateHelpers.avoid; -import static com.falsepattern.lib.mixin.IMixin.PredicateHelpers.condition; -import static com.falsepattern.lib.mixin.IMixin.PredicateHelpers.require; - -public class Mixin { - private Mixin() { - } - - public enum Common implements IMixin { - //region antiidconflict - antiidconflict_AntiIdConflictBaseMixin(require(ANTIIDCONFLICT)), - antiidconflict_BiomeGenBasePlaceholderMixin(require(ANTIIDCONFLICT)), - antiidconflict_BiomesManagerMixin(require(ANTIIDCONFLICT)), - antiidconflict_DimensionsManagerMixin(require(ANTIIDCONFLICT)), - antiidconflict_EnchantementsManagerMixin(require(ANTIIDCONFLICT)), - antiidconflict_EntitiesManagerMixin(require(ANTIIDCONFLICT)), - antiidconflict_PotionsManagerMixin(require(ANTIIDCONFLICT)), - //endregion - - //region biome - biome_vanilla_BiomeDictionaryMixin(EXT_BIOME), - biome_vanilla_BiomeGenBaseMixin(EXT_BIOME), - biome_vanilla_BiomeGenBasePlaceholderMixin( - all(EXT_BIOME, () -> GeneralConfig.biomeConflictAvoidancePlaceholders)), - biome_vanilla_ChunkMixin(EXT_BIOME), - biome_vanilla_GenLayerRiverMixMixin(EXT_BIOME, avoid(DRAGONAPI)), - biome_vanilla_GenLayerVoronoiZoomMixin(EXT_BIOME), - - biome_abyssalcraft_AbyssalCraftMixin(EXT_BIOME, require(ABYSSALCRAFT)), - - biome_antiqueatlas_BiomeDetectorBaseMixin(EXT_BIOME, require(ANTIQUEATLAS)), - biome_antiqueatlas_BiomeDetectorNetherMixin(EXT_BIOME, require(ANTIQUEATLAS)), - - biome_atg_ATGBiomeConfigMixin(EXT_BIOME, require(ATG)), - biome_atg_ATGBiomeManagerMixin(EXT_BIOME, require(ATG)), - biome_atg_ATGWorldGenRocksMixin(EXT_BIOME, require(ATG)), - - biome_biometweaker_BiomeEventHandlerMixin(EXT_BIOME, require(BIOMETWEAKER)), - - biome_biomewand_BiomeWandItemMixin(EXT_BIOME, require(BIOMEWAND)), - - biome_bop_BOPBiomeManagerMixin(EXT_BIOME, require(BOP)), - biome_bop_BOPBiomesMixin(EXT_BIOME, require(BOP)), - - biome_buildcraft_BuildcraftEnergyMixin(EXT_BIOME, require(BUILDCRAFT)), - - biome_climatecontrol_api_BiomeSettingsMixin(EXT_BIOME, require(CLIMATECONTROL)), - biome_climatecontrol_api_ClimateControlRulesMixin(EXT_BIOME, require(CLIMATECONTROL)), - biome_climatecontrol_customGenLayer_ConfirmBiomeMixin(EXT_BIOME, require(CLIMATECONTROL)), - biome_climatecontrol_customGenLayer_GenLayerBiomeByClimateMixin(EXT_BIOME, require(CLIMATECONTROL)), - biome_climatecontrol_customGenLayer_GenLayerBiomeByTaggedClimateMixin(EXT_BIOME, require(CLIMATECONTROL)), - biome_climatecontrol_customGenLayer_GenLayerDefineClimateMixin(EXT_BIOME, require(CLIMATECONTROL)), - biome_climatecontrol_customGenLayer_GenLayerLowlandRiverMixMixin(EXT_BIOME, require(CLIMATECONTROL)), - biome_climatecontrol_customGenLayer_GenLayerSmoothCoastMixin(EXT_BIOME, require(CLIMATECONTROL)), - biome_climatecontrol_customGenLayer_GenLayerSubBiomeMixin(EXT_BIOME, require(CLIMATECONTROL)), - biome_climatecontrol_generator_AbstractWorldGeneratorMixin(EXT_BIOME, require(CLIMATECONTROL)), - biome_climatecontrol_generator_BiomeSwapperMixin(EXT_BIOME, require(CLIMATECONTROL)), - biome_climatecontrol_generator_SubBiomeChooserMixin(EXT_BIOME, require(CLIMATECONTROL)), - biome_climatecontrol_genLayerPack_GenLayerHillsMixin(EXT_BIOME, require(CLIMATECONTROL)), - biome_climatecontrol_genLayerPack_GenLayerPackMixin(EXT_BIOME, require(CLIMATECONTROL)), - biome_climatecontrol_genLayerPack_GenLayerSmoothMixin(EXT_BIOME, require(CLIMATECONTROL)), - biome_climatecontrol_genLayerPack_GenLayerVoronoiZoomMixin(EXT_BIOME, require(CLIMATECONTROL)), - biome_climatecontrol_genLayerPack_GenLayerZoomMixin(EXT_BIOME, require(CLIMATECONTROL)), - - biome_compactmachines_CubeToolsMixin(EXT_BIOME, require(COMPACTMACHINES)), - - biome_darkworld_ModBiomesMixin(EXT_BIOME, require(DARKWORLD)), - - biome_dimdoors_DDBiomeGenBaseMixin(EXT_BIOME, require(DIMDOORS)), - - biome_dragonapi_vanilla_GenLayerRiverMixMixin(EXT_BIOME, require(DRAGONAPI)), - biome_dragonapi_GenLayerRiverEventMixin(EXT_BIOME, require(DRAGONAPI)), - biome_dragonapi_IDTypeMixin(EXT_BIOME, require(DRAGONAPI)), - biome_dragonapi_ReikaChunkHelperMixin(EXT_BIOME, require(DRAGONAPI)), - biome_dragonapi_ReikaWorldHelperMixin(EXT_BIOME, require(DRAGONAPI)), - - biome_eb_BiomeIDsMixin(EXT_BIOME, require(EB)), - biome_eb_GenLayerArchipelagoEdgeMixin(EXT_BIOME, require(EB)), - biome_eb_GenLayerEBHillsMixin(EXT_BIOME, require(EB)), - biome_eb_GenLayerEBRiverMixMixin(EXT_BIOME, require(EB)), - biome_eb_GenLayerEBVoronoiZoomMixin(EXT_BIOME, require(EB)), +import static com.falsepattern.endlessids.mixin.plugin.TargetMod.AbyssalCraft; +import static com.falsepattern.endlessids.mixin.plugin.TargetMod.AdvancedRocketry; +import static com.falsepattern.endlessids.mixin.plugin.TargetMod.AlternateTerrainGeneration; +import static com.falsepattern.endlessids.mixin.plugin.TargetMod.AntiIDConflict; +import static com.falsepattern.endlessids.mixin.plugin.TargetMod.AntiqueAtlas; +import static com.falsepattern.endlessids.mixin.plugin.TargetMod.ArsMagica2; +import static com.falsepattern.endlessids.mixin.plugin.TargetMod.BiomeTweaker; +import static com.falsepattern.endlessids.mixin.plugin.TargetMod.BiomeWand; +import static com.falsepattern.endlessids.mixin.plugin.TargetMod.BiomesOPlenty; +import static com.falsepattern.endlessids.mixin.plugin.TargetMod.BlockPhysics; +import static com.falsepattern.endlessids.mixin.plugin.TargetMod.BuildCraft; +import static com.falsepattern.endlessids.mixin.plugin.TargetMod.ClimateControl; +import static com.falsepattern.endlessids.mixin.plugin.TargetMod.CoFHLib; +import static com.falsepattern.endlessids.mixin.plugin.TargetMod.CompactMachines; +import static com.falsepattern.endlessids.mixin.plugin.TargetMod.DarkWorld; +import static com.falsepattern.endlessids.mixin.plugin.TargetMod.DimDoors; +import static com.falsepattern.endlessids.mixin.plugin.TargetMod.DragonAPI; +import static com.falsepattern.endlessids.mixin.plugin.TargetMod.Enderlicious; +import static com.falsepattern.endlessids.mixin.plugin.TargetMod.EnhancedBiomes; +import static com.falsepattern.endlessids.mixin.plugin.TargetMod.Erebus; +import static com.falsepattern.endlessids.mixin.plugin.TargetMod.ExtendedPlanets; +import static com.falsepattern.endlessids.mixin.plugin.TargetMod.ExtraPlanets; +import static com.falsepattern.endlessids.mixin.plugin.TargetMod.ExtraUtilities; +import static com.falsepattern.endlessids.mixin.plugin.TargetMod.Factorization; +import static com.falsepattern.endlessids.mixin.plugin.TargetMod.FastCraft; +import static com.falsepattern.endlessids.mixin.plugin.TargetMod.Futurepack; +import static com.falsepattern.endlessids.mixin.plugin.TargetMod.Gadomancy; +import static com.falsepattern.endlessids.mixin.plugin.TargetMod.GalactiCraftCore; +import static com.falsepattern.endlessids.mixin.plugin.TargetMod.GalaxySpace; +import static com.falsepattern.endlessids.mixin.plugin.TargetMod.Highlands; +import static com.falsepattern.endlessids.mixin.plugin.TargetMod.ImmersiveCavegen; +import static com.falsepattern.endlessids.mixin.plugin.TargetMod.IndustrialRevolutionByRedstone; +import static com.falsepattern.endlessids.mixin.plugin.TargetMod.JustAnotherSpawner; +import static com.falsepattern.endlessids.mixin.plugin.TargetMod.LordOfTheRings; +import static com.falsepattern.endlessids.mixin.plugin.TargetMod.MatterOverdrive; +import static com.falsepattern.endlessids.mixin.plugin.TargetMod.MoreFunQuicksand; +import static com.falsepattern.endlessids.mixin.plugin.TargetMod.Mystcraft; +import static com.falsepattern.endlessids.mixin.plugin.TargetMod.NaturesCompass; +import static com.falsepattern.endlessids.mixin.plugin.TargetMod.Netherlicious; +import static com.falsepattern.endlessids.mixin.plugin.TargetMod.NomadicTents; +import static com.falsepattern.endlessids.mixin.plugin.TargetMod.NuclearTech; +import static com.falsepattern.endlessids.mixin.plugin.TargetMod.OldWorldGen; +import static com.falsepattern.endlessids.mixin.plugin.TargetMod.RandomThings; +import static com.falsepattern.endlessids.mixin.plugin.TargetMod.RealisticTerrainGeneration; +import static com.falsepattern.endlessids.mixin.plugin.TargetMod.RealisticWorldGen; +import static com.falsepattern.endlessids.mixin.plugin.TargetMod.Restructured; +import static com.falsepattern.endlessids.mixin.plugin.TargetMod.Ruins; +import static com.falsepattern.endlessids.mixin.plugin.TargetMod.Tardis; +import static com.falsepattern.endlessids.mixin.plugin.TargetMod.Thaumcraft; +import static com.falsepattern.endlessids.mixin.plugin.TargetMod.TheMistsOfRioV; +import static com.falsepattern.endlessids.mixin.plugin.TargetMod.ThutCore; +import static com.falsepattern.endlessids.mixin.plugin.TargetMod.Tropicraft; +import static com.falsepattern.endlessids.mixin.plugin.TargetMod.TwilightForest; +import static com.falsepattern.endlessids.mixin.plugin.TargetMod.UndergroundBiomes; +import static com.falsepattern.endlessids.mixin.plugin.TargetMod.Witchery; +import static com.falsepattern.endlessids.mixin.plugin.TargetMod.WorldEdit; +import static com.falsepattern.lib.mixin.v2.MixinHelper.avoid; +import static com.falsepattern.lib.mixin.v2.MixinHelper.builder; +import static com.falsepattern.lib.mixin.v2.MixinHelper.require; + +@SuppressWarnings("UnstableApiUsage") +@RequiredArgsConstructor +public enum Mixin implements IMixins { + // @formatter:off + AntiIDConflict_Compat(Phase.EARLY, + require(AntiIDConflict), + common("antiidconflict.AntiIdConflictBaseMixin", + "antiidconflict.BiomeGenBasePlaceholderMixin", + "antiidconflict.BiomesManagerMixin", + "antiidconflict.DimensionsManagerMixin", + "antiidconflict.EnchantementsManagerMixin", + "antiidconflict.EntitiesManagerMixin", + "antiidconflict.PotionsManagerMixin")), + + // region Biome + + Biome_Vanilla(Phase.EARLY, + Ext.Biome, + common("biome.vanilla.BiomeDictionaryMixin", + "biome.vanilla.BiomeGenBaseMixin", + "biome.vanilla.ChunkMixin", + "biome.vanilla.GenLayerRiverMixMixin", + "biome.vanilla.GenLayerVoronoiZoomMixin")), + + Biome_Vanilla_Placeholders(Phase.EARLY, + () -> GeneralConfig.extendBiome && GeneralConfig.biomeConflictAvoidancePlaceholders, + common("biome.vanilla.BiomeGenBasePlaceholderMixin")), + + Biome_AbyssalCraft(Phase.LATE, + Ext.Biome, + require(AbyssalCraft), + common("biome.abyssalcraft.AbyssalCraftMixin")), + + Biome_AdvancedRocketry(Phase.EARLY, + Ext.Biome, + require(AdvancedRocketry), + common("biome.arocketry.AdvancedRocketryMixin", + "biome.arocketry.ChunkProviderSpaceMixin")), + + Biome_AntiqueAtlas(Phase.LATE, + Ext.Biome, + require(AntiqueAtlas), + common("biome.antiqueatlas.BiomeDetectorBaseMixin", + "biome.antiqueatlas.BiomeDetectorNetherMixin")), + + Biome_AlternateTerrainGeneration(Phase.LATE, + Ext.Biome, + require(AlternateTerrainGeneration), + common("biome.atg.ATGBiomeConfigMixin", + "biome.atg.ATGBiomeManagerMixin", + "biome.atg.ATGWorldGenRocksMixin")), + + Biome_BiomeTweaker(Phase.EARLY, + Ext.Biome, + require(BiomeTweaker), + common("biome.biometweaker.BiomeEventHandlerMixin")), + + Biome_BiomeWand(Phase.EARLY, + Ext.Biome, + require(BiomeWand), + common("biome.biomewand.BiomeWandItemMixin"), + client("biome.biomewand.BiomeWandItemMixin")), + + Biome_BiomesOPlenty(Phase.LATE, + Ext.Biome, + require(BiomesOPlenty), + common("biome.bop.BOPBiomeManagerMixin", + "biome.bop.BOPBiomesMixin")), + + Biome_BuildCraft(Phase.LATE, + Ext.Biome, + require(BuildCraft), + common("biome.buildcraft.BuildcraftEnergyMixin")), + + Biome_ClimateControl(Phase.LATE, + Ext.Biome, + require(ClimateControl), + common("biome.climatecontrol.api.BiomeSettingsMixin", + "biome.climatecontrol.api.ClimateControlRulesMixin", + "biome.climatecontrol.customGenLayer.ConfirmBiomeMixin", + "biome.climatecontrol.customGenLayer.GenLayerBiomeByClimateMixin", + "biome.climatecontrol.customGenLayer.GenLayerBiomeByTaggedClimateMixin", + "biome.climatecontrol.customGenLayer.GenLayerDefineClimateMixin", + "biome.climatecontrol.customGenLayer.GenLayerLowlandRiverMixMixin", + "biome.climatecontrol.customGenLayer.GenLayerSmoothCoastMixin", + "biome.climatecontrol.customGenLayer.GenLayerSubBiomeMixin", + "biome.climatecontrol.generator.AbstractWorldGeneratorMixin", + "biome.climatecontrol.generator.BiomeSwapperMixin", + "biome.climatecontrol.generator.SubBiomeChooserMixin", + "biome.climatecontrol.genLayerPack.GenLayerHillsMixin", + "biome.climatecontrol.genLayerPack.GenLayerPackMixin", + "biome.climatecontrol.genLayerPack.GenLayerSmoothMixin", + "biome.climatecontrol.genLayerPack.GenLayerVoronoiZoomMixin", + "biome.climatecontrol.genLayerPack.GenLayerZoomMixin")), + + Biome_CompactMachines(Phase.LATE, + Ext.Biome, + require(CompactMachines), + common("biome.compactmachines.CubeToolsMixin")), + + Biome_DarkWorld(Phase.LATE, + Ext.Biome, + require(DarkWorld), + common("biome.darkworld.ModBiomesMixin")), + + Biome_DimDoors(Phase.LATE, + Ext.Biome, + require(DimDoors), + common("biome.dimdoors.DDBiomeGenBaseMixin")), + + Biome_DragonAPI(Phase.EARLY, + Ext.Biome, + require(DragonAPI), + common("biome.dragonapi.vanilla.GenLayerRiverMixMixin", + "biome.dragonapi.GenLayerRiverEventMixin", + "biome.dragonapi.IDTypeMixin", + "biome.dragonapi.ReikaChunkHelperMixin", + "biome.dragonapi.ReikaWorldHelperMixin")), + + Biome_EnhancedBiomes(Phase.LATE, + Ext.Biome, + require(EnhancedBiomes), + common("biome.eb.BiomeIDsMixin", + "biome.eb.GenLayerArchipelagoEdgeMixin", + "biome.eb.GenLayerEBHillsMixin", + "biome.eb.GenLayerEBRiverMixMixin", + "biome.eb.GenLayerEBVoronoiZoomMixin")), + + Biome_Enderlicious(Phase.LATE, + Ext.Biome, + require(Enderlicious), + common("biome.enderlicious.BiomeConfigurationMixin", + "biome.enderlicious.EndChunkProviderMixin")), + + Biome_Erebus(Phase.LATE, + Ext.Biome, + require(Erebus), + common("biome.erebus.ModBiomesMixin")), + + Biome_ExtendedPlanets(Phase.LATE, + Ext.Biome, + require(ExtendedPlanets), + common("biome.extendedplanets.ChunkProviderOceanMixin")), + + Biome_ExtraPlanets(Phase.LATE, + Ext.Biome, + require(ExtraPlanets), + common("biome.extraplanets.ConfigMixin")), + + Biome_ExtraUtilities(Phase.LATE, + Ext.Biome, + require(ExtraUtilities), + common("biome.extrautilities.ChunkProviderEndOfTimeMixin")), + + Biome_Factorization(Phase.EARLY, + Ext.Biome, + require(Factorization), + common("biome.factorization.HammerChunkProviderMixin")), + + Biome_Futurepack(Phase.LATE, + Ext.Biome, + require(Futurepack), + common("biome.futurepack.BiomeGenSpaceMixin")), + + Biome_Gadomancy(Phase.EARLY, + Ext.Biome, + require(Gadomancy), + common("biome.gadomancy.ChunkProviderTCOuterMixin")), + + Biome_GalactiCraft(Phase.LATE, + Ext.Biome, + require(GalactiCraftCore), + common("biome.galacticraft.ChunkProviderOrbitMixin", + "biome.galacticraft.ConfigManagerCoreMixin")), + + Biome_GalaxySpace(Phase.EARLY, + Ext.Biome, + require(GalaxySpace), + common("biome.galaxyspace.ChunkProviderKuiperMixin", + "biome.galaxyspace.ChunkProviderMarsSSMixin", + "biome.galaxyspace.ChunkProviderSpaceLakesMixin", + "biome.galaxyspace.ChunkProviderVenusSSMixin")), + + Biome_Highlands(Phase.LATE, + Ext.Biome, + require(Highlands), + common("biome.highlands.ConfigMixin")), + + Biome_ImmersiveCavegen(Phase.LATE, + Ext.Biome, + require(ImmersiveCavegen), + common("biome.icg.MysteriumPatchesFixesCaveMixin")), + + Biome_IndustrialRevolutionByRedstone(Phase.LATE, + Ext.Biome, + require(IndustrialRevolutionByRedstone), + common("biome.ir3.IR2Mixin")), + + Biome_JustAnotherSpawner(Phase.LATE, + Ext.Biome, + require(JustAnotherSpawner), + common("biome.jas.LegacyCreatureTypeMixin", + "biome.jas.ModernCreatureTypeMixin")), + + Biome_LordOfTheRings(Phase.EARLY, + Ext.Biome, + require(LordOfTheRings), + common("biome.lotr.LOTRBiomeVariantStorageMixin", + "biome.lotr.LOTRChunkProviderMixin", + "biome.lotr.LOTRChunkProviderUtumnoMixin", + "biome.lotr.LOTRDimensionMixin", + "biome.lotr.LOTRPacketBiomeVariantsWatchHandlerMixin", + "biome.lotr.LOTRWorldChunkManagerMixin", + "biome.lotr.LOTRWorldProviderMixin")), + + Biome_Mystcraft(Phase.LATE, + Ext.Biome, + require(Mystcraft), + common("biome.mystcraft.BiomeReplacerMixin")), + + Biome_NaturesCompass(Phase.LATE, + Ext.Biome, + require(NaturesCompass), + common("biome.naturescompass.BiomeUtilsMixin")), + + Biome_Netherlicious(Phase.LATE, + Ext.Biome, + require(Netherlicious), + common("biome.netherlicious.BiomeConfigurationMixin")), + + Biome_NomadicTents(Phase.LATE, + Ext.Biome, + require(NomadicTents), + common("biome.nomadictents.TentChunkProviderMixin")), + + Biome_OldWorldGen(Phase.LATE, + Ext.Biome, + require(OldWorldGen), + common("biome.owg.ChunkGeneratorBetaMixin")), + + Biome_RandomThings(Phase.EARLY, + Ext.Biome, + require(RandomThings), + common("biome.randomthings.ItemBiomePainterMixin", + "biome.randomthings.MessagePaintBiomeMixin")), + + Biome_RealisticTerrainGeneration(Phase.LATE, + Ext.Biome, + require(RealisticTerrainGeneration), + common("biome.rtg.ChunkProviderRTGMixin", + "biome.rtg.LandscapeGeneratorMixin", + "biome.rtg.WorldChunkManagerRTGMixin")), + + Biome_RealisticWorldGen(Phase.LATE, + Ext.Biome, + require(RealisticWorldGen), + common("biome.rwg.RealisticBiomeBaseMixin", + "biome.rwg.ChunkGeneratorRealisticMixin", + "biome.rwg.VillageMaterialsMixin")), + + Biome_Restructured(Phase.LATE, + Ext.Biome, + require(Restructured), + common("biome.restructured.BiomeHelperMixin")), + + Biome_Ruins(Phase.LATE, + Ext.Biome, + require(Ruins), + common("biome.ruins.FileHandlerMixin", + "biome.ruins.LoaderThreadMixin", + "biome.ruins.RuinGeneratorMixin")), + + Biome_Tardis(Phase.LATE, + Ext.Biome, + require(Tardis), + common("biome.tardismod.TardisChunkProviderMixin")), + + Biome_Thaumcraft(Phase.LATE, + Ext.Biome, + require(Thaumcraft), + common("biome.thaumcraft.UtilsMixin")), + + Biome_TheMistsOfRioV(Phase.LATE, + Ext.Biome, + require(TheMistsOfRioV), + common("biome.tmor.ChunkProviderSanctuatiteMixin")), + + Biome_ThutCore(Phase.LATE, + Ext.Biome, + require(ThutCore), + common("biome.thut.Vector3Mixin")), + + Biome_Tropicraft(Phase.LATE, + Ext.Biome, + require(Tropicraft), + common("biome.tropicraft.GenLayerTropiVoronoiZoomMixin")), + + Biome_TwilightForest(Phase.LATE, + Ext.Biome, + require(TwilightForest), + common("biome.twilightforest.TFBiomeBaseMixin")), + + Biome_Witchery(Phase.LATE, + Ext.Biome, + require(Witchery), + common("biome.witchery.BrewActionBiomeChangeMixin", + "biome.witchery.WorldChunkManagerMirrorMixin")), + + Biome_WorldEdit(Phase.LATE, + Ext.Biome, + require(WorldEdit), + common("biome.worldedit.ForgeWorldMixin")), + + // endregion Biome + + // region BlockItem + + BlockItem_Vanilla(Phase.EARLY, + Ext.BlockItem, + common("blockitem.vanilla.BlockFireMixin", + "blockitem.vanilla.BlockMixin", + "blockitem.vanilla.ExtendedBlockStorageMixin", + "blockitem.vanilla.ItemInWorldManagerMixin", + "blockitem.vanilla.ItemStackMixin", + "blockitem.vanilla.PacketBufferMixin", + "blockitem.vanilla.S22PacketMultiBlockChangeMixin", + "blockitem.vanilla.S24PacketBlockActionMixin", + "blockitem.vanilla.StatListMixin", + "blockitem.vanilla.WorldMixin"), + client("blockitem.vanilla.NetHandlerPlayClientMixin", + "blockitem.vanilla.PlayerControllerMPMixin", + "blockitem.vanilla.RenderGlobalMixin")), + + BlockItem_BlockPhysics(Phase.EARLY, + Ext.BlockItem, + require(BlockPhysics), + common("blockitem.blockphysics.DefinitionMapsMixin")), + + BlockItem_CoFHLib(Phase.LATE, + Ext.BlockItem, + require(CoFHLib), + common("blockitem.cofhlib.BlockHelperMixin")), + + BlockItem_DragonAPI(Phase.EARLY, + Ext.BlockItem, + require(DragonAPI), + common("blockitem.dragonapi.BlockPropertiesMixin", + "blockitem.dragonapi.IDTypeMixin")), + + BlockItem_FastCraft(Phase.EARLY, + Ext.BlockItem, + require(FastCraft), + client("blockitem.fastcraft.EntityRendererMixin")), + + BlockItem_NuclearTech(Phase.LATE, + Ext.BlockItem, + require(NuclearTech), + common("blockitem.ntm.ChunkRadiationHandlerPRISMMixin", + "blockitem.ntm.ChunkRadiationHandlerPRISMSubChunkMixin")), + + BlockItem_MatterOverdrive(Phase.LATE, + Ext.BlockItem, + require(MatterOverdrive), + common("blockitem.matteroverdrive.InventoryMixin", + "blockitem.matteroverdrive.ItemPatternMixin")), + + BlockItem_MoreFunQuicksand(Phase.LATE, + Ext.BlockItem, + require(MoreFunQuicksand), + common("blockitem.mfqm.MFQMMixin")), + + BlockItem_UndergroundBiomes(Phase.LATE, + Ext.BlockItem, + require(UndergroundBiomes), + common("blockitem.ubc.BiomeUndergroundDecoratorMixin", + "blockitem.ubc.OreUBifierMixin")), + + BlockItem_WorldEdit(Phase.LATE, + Ext.BlockItem, + require(WorldEdit), + common("blockitem.worldedit.BaseBlockMixin")), + + // endregion BlockItem + + // region DataWatcher + + DataWatcher_Vanilla(Phase.EARLY, + Ext.DataWatcher, + common("datawatcher.vanilla.DataWatcherMixin")), + + DataWatcher_MoreFunQuicksand(Phase.LATE, + Ext.DataWatcher, + common("datawatcher.mfqm.MFQMDataWatcherMixin")), + + // endregion DataWatcher + + // region Enchantment + + Enchantment_Vanilla(Phase.EARLY, + Ext.Enchantment, + common("enchantment.vanilla.EnchantmentMixin")), + + // endregion Enchantment + + // region Entity + + Entity_Vanilla(Phase.EARLY, + Ext.Entity, + common("entity.vanilla.EntityListMixin", + "entity.vanilla.EntityRegistryMixin", + "entity.vanilla.S0FPacketSpawnMobMixin")), + + // endregion Entity + + // region Potion + + Potion_Vanilla(Phase.EARLY, + Ext.Potion, + common("potion.vanilla.PotionEffectMixin", + "potion.vanilla.PotionMixin")), + + Potion_Vanilla_NoArsMagica2(Phase.EARLY, + Ext.Potion, + avoid(ArsMagica2), + common("potion.vanilla.network.S1DPacketEntityEffectMixin", + "potion.vanilla.network.S1EPacketRemoveEntityEffectMixin"), + client("potion.vanilla.NetHandlerPlayClientMixin")), + + Potion_Thaumcraft(Phase.LATE, + Ext.Potion, + require(Thaumcraft), + common("potion.thaumcraft.ConfigMixin")), - biome_enderlicious_BiomeConfigurationMixin(EXT_BIOME, require(ENDERLICIOUS)), - biome_enderlicious_EndChunkProviderMixin(EXT_BIOME, require(ENDERLICIOUS)), + // endregion Potion - biome_erebus_ModBiomesMixin(EXT_BIOME, require(EREBUS)), + // region Redstone - biome_extendedplanets_ChunkProviderOceanMixin(EXT_BIOME, require(EXTENDEDPLANETS)), + Redstone_Vanilla(Phase.EARLY, + () -> GeneralConfig.extendBlockItem && GeneralConfig.extendRedstone, + common("redstone.BlockCompressedPoweredMixin", + "redstone.BlockRedstoneDiodeMixin", + "redstone.BlockRedstoneTorchMixin", + "redstone.WorldMixin"), + client("redstone.BlockRedstoneWireMixin", + "redstone.RenderBlocksMixin")), - biome_extraplanets_ConfigMixin(EXT_BIOME, require(EXTRAPLANETS)), + // endregion Redstone - biome_extrautilities_ChunkProviderEndOfTimeMixin(EXT_BIOME, require(EXTRAUTILITIES)), - - biome_factorization_HammerChunkProviderMixin(EXT_BIOME, require(FACTORIZATION)), - - biome_futurepack_BiomeGenSpaceMixin(EXT_BIOME, require(FUTUREPACK)), - - biome_gadomancy_ChunkProviderTCOuterMixin(EXT_BIOME, require(GADOMANCY)), - - biome_galacticraft_ConfigManagerCoreMixin(EXT_BIOME, require(GALACTICRAFTCORE)), - - biome_galaxyspace_ChunkProviderKuiperMixin(EXT_BIOME, require(GALAXYSPACE)), - biome_galaxyspace_ChunkProviderMarsSSMixin(EXT_BIOME, require(GALAXYSPACE)), - biome_galaxyspace_ChunkProviderSpaceLakesMixin(EXT_BIOME, require(GALAXYSPACE)), - biome_galaxyspace_ChunkProviderVenusSSMixin(EXT_BIOME, require(GALAXYSPACE)), - - biome_highlands_ConfigMixin(EXT_BIOME, require(HIGHLANDS)), - - biome_icg_MysteriumPatchesFixesCaveMixin(EXT_BIOME, require(ICG)), - - biome_ir3_IR2Mixin(EXT_BIOME, require(IR3)), - - biome_jas_LegacyCreatureTypeMixin(EXT_BIOME, require(JAS)), - biome_jas_ModernCreatureTypeMixin(EXT_BIOME, require(JAS)), - - biome_lotr_LOTRBiomeVariantStorageMixin(EXT_BIOME, require(LOTR)), - biome_lotr_LOTRChunkProviderMixin(EXT_BIOME, require(LOTR)), - biome_lotr_LOTRChunkProviderUtumnoMixin(EXT_BIOME, require(LOTR)), - biome_lotr_LOTRDimensionMixin(EXT_BIOME, require(LOTR)), - biome_lotr_LOTRPacketBiomeVariantsWatchHandlerMixin(EXT_BIOME, require(LOTR)), - biome_lotr_LOTRWorldChunkManagerMixin(EXT_BIOME, require(LOTR)), - biome_lotr_LOTRWorldProviderMixin(EXT_BIOME, require(LOTR)), - - biome_mystcraft_BiomeReplacerMixin(EXT_BIOME, require(MYSTCRAFT)), - - biome_naturescompass_BiomeUtilsMixin(EXT_BIOME, require(NATURESCOMPASS)), - - biome_netherlicious_BiomeConfigurationMixin(EXT_BIOME, require(NETHERLICIOUS)), - - biome_nomadictents_TentChunkProviderMixin(EXT_BIOME, require(NOMADICTENTS)), - - biome_owg_ChunkGeneratorBetaMixin(EXT_BIOME, require(OWG)), - - biome_randomthings_ItemBiomePainterMixin(EXT_BIOME, require(RANDOMTHINGS)), - biome_randomthings_MessagePaintBiomeMixin(EXT_BIOME, require(RANDOMTHINGS)), - - biome_restructured_BiomeHelperMixin(EXT_BIOME, require(RESTRUCTURED)), - biome_rtg_ChunkProviderRTGMixin(EXT_BIOME, require(RTG)), - biome_rtg_LandscapeGeneratorMixin(EXT_BIOME, require(RTG)), - biome_rtg_WorldChunkManagerRTGMixin(EXT_BIOME, require(RTG)), - - biome_ruins_FileHandlerMixin(EXT_BIOME, require(RUINS)), - biome_ruins_LoaderThreadMixin(EXT_BIOME, require(RUINS)), - biome_ruins_RuinGeneratorMixin(EXT_BIOME, require(RUINS)), - - biome_rwg_ChunkGeneratorRealisticMixin(EXT_BIOME, require(RWG)), - biome_rwg_RealisticBiomeBaseMixin(EXT_BIOME, require(RWG)), - biome_rwg_VillageMaterialsMixin(EXT_BIOME, require(RWG)), - - biome_tardismod_TardisChunkProviderMixin(EXT_BIOME, require(TARDIS)), - - biome_thaumcraft_UtilsMixin(EXT_BIOME, require(THAUMCRAFT)), - - biome_thut_Vector3Mixin(EXT_BIOME, require(THUTCORE)), - - biome_tmor_ChunkProviderSanctuatiteMixin(EXT_BIOME, require(TMOR)), - - biome_tropicraft_GenLayerTropiVoronoiZoomMixin(EXT_BIOME, require(TROPICRAFT)), - - biome_twilightforest_TFBiomeBaseMixin(EXT_BIOME, require(TWILIGHTFOREST)), - - biome_witchery_WorldChunkManagerMirrorMixin(EXT_BIOME, require(WITCHERY)), - biome_witchery_BrewActionBiomeChangeMixin(EXT_BIOME, require(WITCHERY)), - - biome_worldedit_ForgeWorldMixin(EXT_BIOME, require(WORLDEDIT)), - //endregion - - //region blockitem - blockitem_vanilla_BlockFireMixin(EXT_BLOCK_ITEM), - blockitem_vanilla_BlockMixin(EXT_BLOCK_ITEM), - blockitem_vanilla_ExtendedBlockStorageMixin(EXT_BLOCK_ITEM), - blockitem_vanilla_ItemInWorldManagerMixin(EXT_BLOCK_ITEM), - blockitem_vanilla_ItemStackMixin(EXT_BLOCK_ITEM), - blockitem_vanilla_PacketBufferMixin(EXT_BLOCK_ITEM), - blockitem_vanilla_S22PacketMultiBlockChangeMixin(EXT_BLOCK_ITEM), - blockitem_vanilla_S24PacketBlockActionMixin(EXT_BLOCK_ITEM), - blockitem_vanilla_StatListMixin(EXT_BLOCK_ITEM), - blockitem_vanilla_WorldMixin(EXT_BLOCK_ITEM), - - blockitem_blockphysics_DefinitionMapsMixin(EXT_BLOCK_ITEM, require(BLOCKPHYSICS)), - - blockitem_cofhlib_BlockHelperMixin(EXT_BLOCK_ITEM, require(COFHLIB)), - - blockitem_dragonapi_BlockPropertiesMixin(EXT_BLOCK_ITEM, require(DRAGONAPI)), - blockitem_dragonapi_IDTypeMixin(EXT_BLOCK_ITEM, require(DRAGONAPI)), - - blockitem_ntm_ChunkRadiationHandlerPRISMMixin(EXT_BLOCK_ITEM, require(HBM_NTM)), - blockitem_ntm_ChunkRadiationHandlerPRISMSubChunkMixin(EXT_BLOCK_ITEM, require(HBM_NTM)), - - blockitem_matteroverdrive_InventoryMixin(EXT_BLOCK_ITEM, require(MATTEROVERDRIVE).or(require(MATTERMEGADRIVE))), - blockitem_matteroverdrive_ItemPatternMixin(EXT_BLOCK_ITEM, - require(MATTEROVERDRIVE).or(require(MATTERMEGADRIVE))), - - blockitem_mfqm_MFQMMixin(EXT_BLOCK_ITEM, require(MFQM)), - - blockitem_worldedit_BaseBlockMixin(EXT_BLOCK_ITEM, require(WORLDEDIT)), - - blockitem_ubc_OreUBifierMixin(EXT_BLOCK_ITEM, require(UBC)), - blockitem_ubc_BiomeUndergroundDecoratorMixin(EXT_BLOCK_ITEM, require(UBC)), - //endregion - - //region datawatcher - datawatcher_vanilla_DataWatcherMixin(EXT_DATA_WATCHER), - - datawatcher_mfqm_MFQMDataWatcherMixin(EXT_DATA_WATCHER, require(MFQM)), - //endregion - - //region enchantment - enchantment_vanilla_EnchantmentMixin(EXT_ENCHANTMENT), - //endregion - - //region entity - entity_vanilla_EntityListMixin(EXT_ENTITY), - entity_vanilla_EntityRegistryMixin(EXT_ENTITY), - entity_vanilla_S0FPacketSpawnMobMixin(EXT_ENTITY), - //endregion - - //region potion - potion_vanilla_PotionEffectMixin(EXT_POTION), - potion_vanilla_PotionMixin(EXT_POTION), - potion_vanilla_network_S1DPacketEntityEffectMixin(EXT_POTION, avoid(AM2)), - potion_vanilla_network_S1EPacketRemoveEntityEffectMixin(EXT_POTION, avoid(AM2)), - - potion_thaumcraft_ConfigMixin(EXT_POTION, require(THAUMCRAFT)), - //endregion - - //region redstone - redstone_BlockCompressedPoweredMixin(all(EXT_BLOCK_ITEM, EXT_REDSTONE)), - redstone_BlockRedstoneDiodeMixin(all(EXT_BLOCK_ITEM, EXT_REDSTONE)), - redstone_BlockRedstoneTorchMixin(all(EXT_BLOCK_ITEM, EXT_REDSTONE)), - redstone_WorldMixin(all(EXT_BLOCK_ITEM, EXT_REDSTONE)), - //endregion - ; - - //region boilerplate - @Getter - private final Predicate> filter; - @Getter - private final String mixin; - - Common(Predicate> predicate) { - filter = predicate; - mixin = buildMixin(name()); - } - - Common(Supplier condition) { - filter = buildPredicate(condition); - mixin = buildMixin(name()); - } - - Common(Supplier condition, Predicate> predicate) { - filter = buildPredicate(condition).and(predicate); - mixin = buildMixin(name()); - } - - @Override - public Side getSide() { - return Side.COMMON; - } - //endregion - } - - public enum Client implements IMixin { - //region biome - biome_biomewand_BiomeWandItemMixin(EXT_BIOME, require(BIOMEWAND)), - //endregion - - //region blockitem - blockitem_vanilla_NetHandlerPlayClientMixin(EXT_BLOCK_ITEM), - blockitem_vanilla_PlayerControllerMPMixin(EXT_BLOCK_ITEM), - blockitem_vanilla_RenderGlobalMixin(EXT_BLOCK_ITEM), - - blockitem_fastcraft_EntityRendererMixin(EXT_BLOCK_ITEM, require(FASTCRAFT)), - //endregion - - //region potion - potion_vanilla_NetHandlerPlayClientMixin(EXT_POTION, avoid(AM2)), - //endregion - - //region redstone - redstone_BlockRedstoneWireMixin(all(EXT_BLOCK_ITEM, EXT_REDSTONE)), - redstone_RenderBlocksMixin(all(EXT_BLOCK_ITEM, EXT_REDSTONE)), - //endregion - ; - - //region boilerplate - @Getter - private final Predicate> filter; - @Getter - private final String mixin; - - Client(Supplier condition) { - filter = buildPredicate(condition); - mixin = buildMixin(name()); - } - - Client(Supplier condition, Predicate> predicate) { - filter = buildPredicate(condition).and(predicate); - mixin = buildMixin(name()); - } - - @Override - public Side getSide() { - return Side.CLIENT; - } - //endregion - } - - public static IMixin[] values() { - val common = Common.values(); - val client = Client.values(); - val result = new IMixin[common.length + client.length]; - System.arraycopy(common, 0, result, 0, common.length); - System.arraycopy(client, 0, result, common.length, client.length); - return result; - } + // @formatter:on //region boilerplate - private static Predicate> buildPredicate(Supplier condition) { - return condition(condition); + ; + @Getter + private final MixinBuilder builder; + + Mixin(Phase phase, SidedMixins... mixins) { + this(builder(mixins).setPhase(phase)); } - private static String buildMixin(String name) { - return name.replace('_', '.'); + Mixin(Phase phase, BooleanSupplier cond, SidedMixins... mixins) { + this(builder(cond, mixins).setPhase(phase)); } - private static final Supplier EXT_BIOME = () -> GeneralConfig.extendBiome; - private static final Supplier EXT_BLOCK_ITEM = () -> GeneralConfig.extendBlockItem; - private static final Supplier EXT_DATA_WATCHER = () -> GeneralConfig.extendDataWatcher; - private static final Supplier EXT_ENCHANTMENT = () -> GeneralConfig.extendEnchantment; - private static final Supplier EXT_POTION = () -> GeneralConfig.extendPotion; - private static final Supplier EXT_ENTITY = () -> GeneralConfig.extendEntity; - private static final Supplier EXT_REDSTONE = () -> GeneralConfig.extendRedstone; + Mixin(Phase phase, TaggedMod mod, SidedMixins... mixins) { + this(builder(mod, mixins).setPhase(phase)); + } - @SafeVarargs - private static Supplier all(Supplier... conds) { - return () -> { - for (Supplier cond : conds) { - if (!cond.get()) { - return false; - } - } - return true; - }; + Mixin(Phase phase, TaggedMod[] mods, SidedMixins... mixins) { + this(builder(mods, mixins).setPhase(phase)); + } + + Mixin(Phase phase, BooleanSupplier cond, TaggedMod mod, SidedMixins... mixins) { + this(builder(cond, mod, mixins).setPhase(phase)); + } + + Mixin(Phase phase, BooleanSupplier cond, TaggedMod[] mods, SidedMixins... mixins) { + this(builder(cond, mods, mixins).setPhase(phase)); + } + + private static SidedMixins common(@Language(value = "JAVA", + prefix = "import " + Tags.GROUPNAME + ".mixin.mixins.common.", + suffix = ";") String... mixins) { + return MixinHelper.common(mixins); + } + + private static SidedMixins client(@Language(value = "JAVA", + prefix = "import " + Tags.GROUPNAME + ".mixin.mixins.client.", + suffix = ";") String... mixins) { + return MixinHelper.client(mixins); + } + + private static SidedMixins server(@Language(value = "JAVA", + prefix = "import " + Tags.GROUPNAME + ".mixin.mixins.server.", + suffix = ";") String... mixins) { + return MixinHelper.server(mixins); } //endregion -} + private static class Ext { + public static final BooleanSupplier Biome = () -> GeneralConfig.extendBiome; + public static final BooleanSupplier BlockItem = () -> GeneralConfig.extendBlockItem; + public static final BooleanSupplier DataWatcher = () -> GeneralConfig.extendDataWatcher; + public static final BooleanSupplier Enchantment = () -> GeneralConfig.extendEnchantment; + public static final BooleanSupplier Potion = () -> GeneralConfig.extendPotion; + public static final BooleanSupplier Entity = () -> GeneralConfig.extendEntity; + } +} diff --git a/src/main/java/com/falsepattern/endlessids/mixin/plugin/TargetMod.java b/src/main/java/com/falsepattern/endlessids/mixin/plugin/TargetMod.java new file mode 100644 index 0000000..806dce7 --- /dev/null +++ b/src/main/java/com/falsepattern/endlessids/mixin/plugin/TargetMod.java @@ -0,0 +1,115 @@ +/* + * EndlessIDs + * + * Copyright (C) 2022-2025 FalsePattern, The MEGA Team + * All Rights Reserved + * + * The above copyright notice, this permission notice and the word "MEGA" + * shall be included in all copies or substantial portions of the Software. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, only version 3 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + */ + +package com.falsepattern.endlessids.mixin.plugin; + +import com.gtnewhorizon.gtnhmixins.builders.ITargetMod; +import com.gtnewhorizon.gtnhmixins.builders.TargetModBuilder; +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import org.intellij.lang.annotations.Language; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.function.Consumer; + +@RequiredArgsConstructor +public enum TargetMod implements ITargetMod { + //coremods + AdvancedRocketry("zmaster587.advancedRocketry.AdvancedRocketry"), + ArsMagica2("am2.AMCore"), + AntiIDConflict("code.elix_x.coremods.antiidconflict.AntiIdConflictCore"), + BlockPhysics("com.bloodnbonesgaming.blockphysics.BlockPhysics"), + BiomeTweaker("me.superckl.biometweaker.BiomeTweaker"), + DragonAPI("Reika.DragonAPI.DragonAPICore"), + Factorization("factorization.coremod.LoadingPlugin"), + FastCraft("fastcraft.Tweaker"), + Gadomancy("makeo.gadomancy.common.Gadomancy"), + GalaxySpace("galaxyspace.GalaxySpace"), + LordOfTheRings("lotr.common.LOTRMod"), + RandomThings("lumien.randomthings.RandomThings"), + //regular mods + AbyssalCraft("com.shinoow.abyssalcraft.AbyssalCraft"), + AlternateTerrainGeneration("ttftcuts.atg.ATG"), + AntiqueAtlas("hunternif.mc.atlas.AntiqueAtlasMod"), + BiomesOPlenty("biomesoplenty.BiomesOPlenty"), + BiomeWand("com.spacechase0.minecraft.biomewand.BiomeWandMod"), + BuildCraft("buildcraft.BuildCraftCore"), + ClimateControl("climateControl.ClimateControl"), + CoFHLib("cofh.lib.CoFHLibProps"), + CompactMachines("org.dave.CompactMachines.CompactMachines"), + DarkWorld("matthbo.mods.darkworld.DarkWorld"), + DimDoors("StevenDimDoors.mod_pocketDim.mod_pocketDim"), + Enderlicious("DelirusCrux.Enderlicious.Enderlicious"), + EnhancedBiomes("enhancedbiomes.EnhancedBiomesMod"), + Erebus("erebus.Erebus"), + ExtendedPlanets("ExtendedPlanets.EPMain"), + ExtraPlanets("com.mjr.extraplanets.ExtraPlanets"), + ExtraUtilities("com.rwtema.extrautils.ExtraUtilsMod"), + Futurepack("futurepack.common.FPMain"), + GalactiCraftCore("micdoodle8.mods.galacticraft.core.GalacticraftCore"), + Highlands("highlands.Highlands"), + ImmersiveCavegen("net.tclproject.immersivecavegen.ImmersiveCavegen"), + IndustrialRevolutionByRedstone("jp.plusplus.ir2.IR2"), + JustAnotherSpawner("jas.common.JustAnotherSpawner"), + MatterOverdrive("matteroverdrive.MatterOverdrive"), + MoreFunQuicksand("MoreFunQuicksandMod.main.MFQM"), + Mystcraft("com.xcompwiz.mystcraft.Mystcraft"), + NaturesCompass("com.chaosthedude.naturescompass.NaturesCompass"), + Netherlicious("DelirusCrux.Netherlicious.Netherlicious"), + NomadicTents("com.yurtmod.main.NomadicTents"), + NuclearTech("com.hbm.main.MainRegistry"), + OldWorldGen("owg.OWG"), + Ruins("atomicstryker.ruins.common.RuinsMod"), + RealisticTerrainGeneration("rtg.RTG"), + RealisticWorldGen("rwg.RWG"), + Restructured("org.blockartistry.mod.Restructured.Restructured"), + Tardis("tardis.TardisMod"), + Thaumcraft("thaumcraft.common.Thaumcraft"), + TheMistsOfRioV("sheenrox82.RioV.src.base.TheMistsOfRioV"), + ThutCore("thut.api.ThutCore"), + Tropicraft("net.tropicraft.Tropicraft"), + TwilightForest("twilightforest.TwilightForestMod"), + UndergroundBiomes("exterminatorJeff.undergroundBiomes.common.UndergroundBiomes"), + Witchery("com.emoniph.witchery.Witchery"), + WorldEdit("com.sk89q.worldedit.forge.ForgeWorldEdit"), + + ; + @Getter + private final TargetModBuilder builder; + + TargetMod(@Language(value = "JAVA", + prefix = "import ", + suffix = ";") @NotNull String className) { + this(className, null); + } + + TargetMod(@Language(value = "JAVA", + prefix = "import ", + suffix = ";") @NotNull String className, @Nullable Consumer cfg) { + builder = new TargetModBuilder(); + builder.setTargetClass(className); + if (cfg != null) { + cfg.accept(builder); + } + } +} diff --git a/src/main/java/com/falsepattern/endlessids/mixin/plugin/TargetedMod.java b/src/main/java/com/falsepattern/endlessids/mixin/plugin/TargetedMod.java deleted file mode 100644 index 0ef3342..0000000 --- a/src/main/java/com/falsepattern/endlessids/mixin/plugin/TargetedMod.java +++ /dev/null @@ -1,106 +0,0 @@ -/* - * EndlessIDs - * - * Copyright (C) 2022-2025 FalsePattern, The MEGA Team - * All Rights Reserved - * - * The above copyright notice, this permission notice and the words "MEGA" - * shall be included in all copies or substantial portions of the Software. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, only version 3 of the License. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see . - */ - -package com.falsepattern.endlessids.mixin.plugin; - -import com.falsepattern.lib.mixin.ITargetedMod; -import lombok.Getter; -import lombok.RequiredArgsConstructor; - -import java.util.function.Predicate; - -import static com.falsepattern.lib.mixin.ITargetedMod.PredicateHelpers.contains; - -@RequiredArgsConstructor -public enum TargetedMod implements ITargetedMod { - ABYSSALCRAFT("AbyssalCraft", false, contains("abyssalcraft-")), - AROCKETRY("Advanced Rocketry", false, contains("advancedrocketry-")), - ATG("Alternate Terrain Generation", false, contains("atg")), - AM2("Ars Magica 2", false, contains("am2").or(contains("arsmagica2"))), - ANTIQUEATLAS("Antique Atlas", false, contains("antiqueatlas")), - ANTIIDCONFLICT("Anti ID Conflict", false, contains("antiidconflict")), - BLOCKPHYSICS("Block Physics", false, contains("blockphysics-")), - BOP("Biomes O' Plenty", false, contains("biomesoplenty-")), - BIOMETWEAKER("Biome Tweaker", false, contains("biometweaker-")), - BIOMEWAND("Biome Wand", false, contains("biome-wand")), - BUILDCRAFT("BuildCraft", false, contains("buildcraft-").and(contains("compat").negate())), - CLIMATECONTROL("Climate Control", false, contains("climatecontrol-")), - COFHLIB("CoFH Lib", false, contains("cofhlib-")), - COMPACTMACHINES("Compact Machines", false, contains("compactmachines-")), - DARKWORLD("Dark World", false, contains("darkworld-")), - DIMDOORS("Dimensional Doors", false, contains("dimensionaldoors-").or(contains("dimdoors-"))), - DRAGONAPI("DragonAPI", false, contains("dragonapi")), - EB("Enhanced Biomes", false, contains("Enhanced Biomes").or(contains("enhancedbiomes"))), - ENDERLICIOUS("Enderlicious", false, contains("enderlicious-")), - EREBUS("The Erebus", false, contains("theerebus")), - EXTENDEDPLANETS("Extended Planets", false, contains("extendedplanets-")), - EXTRAPLANETS("Extra Planets", false, contains("extraplanets-")), - EXTRAUTILITIES("Extra Utilities", false, contains("extrautilities-")), - FACTORIZATION("Factorization", false, contains("factorization-")), - FASTCRAFT("Fastcraft", false, contains("fastcraft-")), - FUTUREPACK("Futurepack", false, contains("futurepack")), - GADOMANCY("Gadomancy", false, contains("gadomancy-")), - GALACTICRAFTCORE("GalactiCraftCore", false, contains("galacticraftcore")), - GALAXYSPACE("GalaxySpace", false, contains("galaxyspace-")), - HBM_NTM("Hbm's Nuclear Tech Mod", false, contains("hbm-ntm")), - HIGHLANDS("Highlands", false, contains("highlands")), - ICG("Immersive Cavegen", false, contains("immersivecavegen")), - IR3("Industrial Revolution by Redstone Rebooted", false, contains("industrialrevolutionbyredstonerebooted-")), - JAS("Just Another Spawner", false, contains("justanotherspawner-")), - LOTR("LOTR Mod", false, contains("lotrmod")), - MATTEROVERDRIVE("Matter Overdrive", false, contains("matteroverdrive-")), - MATTERMEGADRIVE("Matter Megadrive", false, contains("mattermegadrive-")), - MYSTCRAFT("Mystcraft", false, contains("mystcraft-")), - MFQM("More Fun Quicksand Mod", false, contains("morefunquicksandmod-")), - NATURESCOMPASS("Nature's Compass", false, contains("naturescompass")), - NETHERLICIOUS("Netherlicious", false, contains("netherlicious-")), - NOMADICTENTS("Nomadic Tents", false, contains("nomadictents")), - OWG("Nostalgic world generation", false, contains("owg-").or(contains("nostalgiagenerator-"))), - RANDOMTHINGS("Random Things", false, contains("randomthings-")), - RUINS("Ruins", false, contains("ruins-")), - RESTRUCTURED("Restructured", false, contains("restructured-")), - RTG("Realistic Terrain Generation", false, contains("rtg-")), - RWG("Realistic World Gen", false, contains("rwg-")), - TARDIS("TARDIS Mod", false, contains("tardismod-")), - THAUMCRAFT("Thaumcraft", false, contains("thaumcraft")), - THUTCORE("ThutCore", false, contains("thutcore-").or(contains("thutmods-"))), - TMOR("The Mists Of RioV", false, contains("the mists of riov-").or(contains("the-mists-of-riov-"))), - TROPICRAFT("Tropicraft", false, contains("tropicraft-")), - TWILIGHTFOREST("Twilight Forest", false, contains("twilightforest")), - UBC("Underground Biomes Constructs", false, contains("undergroundbiomesconstructs-").or(contains("undergroundbiomes-"))), - WITCHERY("Witchery", false, contains("witchery-")), - WORLDEDIT("WorldEdit", false, contains("worldedit-")), - ; - - @Getter - private final String modName; - @Getter - private final boolean loadInDevelopment; - @Getter - private final Predicate condition; - - - @Override - public String toString() { - return modName; - } -} diff --git a/src/main/resources/mixins.endlessids.json b/src/main/resources/mixins.endlessids.early.json similarity index 75% rename from src/main/resources/mixins.endlessids.json rename to src/main/resources/mixins.endlessids.early.json index fc2a388..0de9a4f 100644 --- a/src/main/resources/mixins.endlessids.json +++ b/src/main/resources/mixins.endlessids.early.json @@ -2,7 +2,6 @@ "required": true, "minVersion": "0.8.5", "package": "com.falsepattern.endlessids.mixin.mixins", - "plugin": "com.falsepattern.endlessids.mixin.plugin.MixinPlugin", "refmap": "mixins.endlessids.refmap.json", "target": "@env(DEFAULT)", "compatibilityLevel": "JAVA_8" diff --git a/src/main/resources/mixins.endlessids.late.json b/src/main/resources/mixins.endlessids.late.json new file mode 100644 index 0000000..0de9a4f --- /dev/null +++ b/src/main/resources/mixins.endlessids.late.json @@ -0,0 +1,9 @@ +{ + "required": true, + "minVersion": "0.8.5", + "package": "com.falsepattern.endlessids.mixin.mixins", + "refmap": "mixins.endlessids.refmap.json", + "target": "@env(DEFAULT)", + "compatibilityLevel": "JAVA_8" +} +