diff --git a/bclib.gradle b/bclib.gradle index 2d2f480a..393fcadd 100644 --- a/bclib.gradle +++ b/bclib.gradle @@ -26,6 +26,29 @@ repositories { loom { accessWidenerPath = file("src/main/resources/bclib.accesswidener") + runs { + // This adds a new gradle task that runs the datagen API: "gradlew runDatagenClient" + datagenClient { + inherit client + name "Data Generation" + vmArg "-Dfabric-api.datagen" + vmArg "-Dfabric-api.datagen.output-dir=${file("src/main/generated")}" + vmArg "-Dfabric-api.datagen.strict-validation" + + runDir "build/datagen" + } + } +} + +// Add the datagenned files into the jar. +sourceSets { + main { + resources { + srcDirs += [ + 'src/main/generated' + ] + } + } } dependencies { diff --git a/src/main/java/org/betterx/bclib/api/v2/levelgen/biomes/BCLBiomeRegistry.java b/src/main/java/org/betterx/bclib/api/v2/levelgen/biomes/BCLBiomeRegistry.java index 4f88b811..549e80b0 100644 --- a/src/main/java/org/betterx/bclib/api/v2/levelgen/biomes/BCLBiomeRegistry.java +++ b/src/main/java/org/betterx/bclib/api/v2/levelgen/biomes/BCLBiomeRegistry.java @@ -10,6 +10,7 @@ import net.minecraft.core.Holder; import net.minecraft.core.MappedRegistry; import net.minecraft.core.Registry; import net.minecraft.core.RegistryAccess; +import net.minecraft.data.BuiltinRegistries; import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; import net.minecraft.util.KeyDispatchDataCodec; @@ -87,40 +88,37 @@ public class BCLBiomeRegistry { @ApiStatus.Internal public static Holder bootstrap(Registry registry) { - //TODO:1.19.3 Registry is frozen at this point -// BuiltinRegistries.register(registry, BiomeAPI.SMALL_END_ISLANDS.getBCLBiomeKey(), BiomeAPI.SMALL_END_ISLANDS); -// BuiltinRegistries.register(registry, BiomeAPI.END_BARRENS.getBCLBiomeKey(), BiomeAPI.END_BARRENS); -// BuiltinRegistries.register(registry, BiomeAPI.END_HIGHLANDS.getBCLBiomeKey(), BiomeAPI.END_HIGHLANDS); -// BuiltinRegistries.register(registry, BiomeAPI.END_MIDLANDS.getBCLBiomeKey(), BiomeAPI.END_MIDLANDS); -// BuiltinRegistries.register(registry, BiomeAPI.THE_END.getBCLBiomeKey(), BiomeAPI.THE_END); -// BuiltinRegistries.register( -// registry, -// BiomeAPI.BASALT_DELTAS_BIOME.getBCLBiomeKey(), -// BiomeAPI.BASALT_DELTAS_BIOME -// ); -// BuiltinRegistries.register( -// registry, -// BiomeAPI.SOUL_SAND_VALLEY_BIOME.getBCLBiomeKey(), -// BiomeAPI.SOUL_SAND_VALLEY_BIOME -// ); -// BuiltinRegistries.register( -// registry, -// BiomeAPI.WARPED_FOREST_BIOME.getBCLBiomeKey(), -// BiomeAPI.WARPED_FOREST_BIOME -// ); -// BuiltinRegistries.register( -// registry, -// BiomeAPI.CRIMSON_FOREST_BIOME.getBCLBiomeKey(), -// BiomeAPI.CRIMSON_FOREST_BIOME -// ); -// BuiltinRegistries.register( -// registry, -// BiomeAPI.NETHER_WASTES_BIOME.getBCLBiomeKey(), -// BiomeAPI.NETHER_WASTES_BIOME -// ); -// return BuiltinRegistries.register(registry, EMPTY_BIOME.getBCLBiomeKey(), EMPTY_BIOME); - - return Holder.direct(EMPTY_BIOME); + BuiltinRegistries.register(registry, BiomeAPI.SMALL_END_ISLANDS.getBCLBiomeKey(), BiomeAPI.SMALL_END_ISLANDS); + BuiltinRegistries.register(registry, BiomeAPI.END_BARRENS.getBCLBiomeKey(), BiomeAPI.END_BARRENS); + BuiltinRegistries.register(registry, BiomeAPI.END_HIGHLANDS.getBCLBiomeKey(), BiomeAPI.END_HIGHLANDS); + BuiltinRegistries.register(registry, BiomeAPI.END_MIDLANDS.getBCLBiomeKey(), BiomeAPI.END_MIDLANDS); + BuiltinRegistries.register(registry, BiomeAPI.THE_END.getBCLBiomeKey(), BiomeAPI.THE_END); + BuiltinRegistries.register( + registry, + BiomeAPI.BASALT_DELTAS_BIOME.getBCLBiomeKey(), + BiomeAPI.BASALT_DELTAS_BIOME + ); + BuiltinRegistries.register( + registry, + BiomeAPI.SOUL_SAND_VALLEY_BIOME.getBCLBiomeKey(), + BiomeAPI.SOUL_SAND_VALLEY_BIOME + ); + BuiltinRegistries.register( + registry, + BiomeAPI.WARPED_FOREST_BIOME.getBCLBiomeKey(), + BiomeAPI.WARPED_FOREST_BIOME + ); + BuiltinRegistries.register( + registry, + BiomeAPI.CRIMSON_FOREST_BIOME.getBCLBiomeKey(), + BiomeAPI.CRIMSON_FOREST_BIOME + ); + BuiltinRegistries.register( + registry, + BiomeAPI.NETHER_WASTES_BIOME.getBCLBiomeKey(), + BiomeAPI.NETHER_WASTES_BIOME + ); + return BuiltinRegistries.register(registry, EMPTY_BIOME.getBCLBiomeKey(), EMPTY_BIOME); } public static BCLBiome get(ResourceLocation loc) { diff --git a/src/main/java/org/betterx/bclib/mixin/common/BuiltinRegistriesMixin.java b/src/main/java/org/betterx/bclib/mixin/common/BuiltinRegistriesMixin.java index 3baa46c9..b5733252 100644 --- a/src/main/java/org/betterx/bclib/mixin/common/BuiltinRegistriesMixin.java +++ b/src/main/java/org/betterx/bclib/mixin/common/BuiltinRegistriesMixin.java @@ -1,6 +1,9 @@ package org.betterx.bclib.mixin.common; +import org.betterx.bclib.api.v2.levelgen.biomes.BCLBiomeRegistry; + import com.mojang.serialization.Lifecycle; +import net.minecraft.core.MappedRegistry; import net.minecraft.core.Registry; import net.minecraft.core.WritableRegistry; import net.minecraft.data.BuiltinRegistries; @@ -27,12 +30,11 @@ public abstract class BuiltinRegistriesMixin { //this needs to be added BEFORE the WORLD_PRESET-Registry. Otherwise decoding will fail! @Inject(method = "", at = @At(value = "INVOKE", target = "Lnet/minecraft/data/BuiltinRegistries;registerSimple(Lnet/minecraft/resources/ResourceKey;Lnet/minecraft/data/BuiltinRegistries$RegistryBootstrap;)Lnet/minecraft/core/Registry;", ordinal = 0)) private static void bcl_registerBuiltin(CallbackInfo ci) { - //TODO: 1.19.3 reenable -// BCLBiomeRegistry.BUILTIN_BCL_BIOMES = internalRegister( -// BCLBiomeRegistry.BCL_BIOMES_REGISTRY, -// (MappedRegistry) BCLBiomeRegistry.BUILTIN_BCL_BIOMES, -// BCLBiomeRegistry::bootstrap, -// Lifecycle.stable() -// ); + BCLBiomeRegistry.BUILTIN_BCL_BIOMES = internalRegister( + BCLBiomeRegistry.BCL_BIOMES_REGISTRY, + (MappedRegistry) BCLBiomeRegistry.BUILTIN_BCL_BIOMES, + BCLBiomeRegistry::bootstrap, + Lifecycle.stable() + ); } } diff --git a/src/main/java/org/betterx/bclib/registry/PresetsRegistryClient.java b/src/main/java/org/betterx/bclib/registry/PresetsRegistryClient.java index 7abdce3d..be28feb3 100644 --- a/src/main/java/org/betterx/bclib/registry/PresetsRegistryClient.java +++ b/src/main/java/org/betterx/bclib/registry/PresetsRegistryClient.java @@ -1,14 +1,16 @@ package org.betterx.bclib.registry; +import org.betterx.bclib.client.gui.screens.WorldSetupScreen; +import org.betterx.worlds.together.worldPreset.client.WorldPresetsClient; + import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; @Environment(EnvType.CLIENT) public class PresetsRegistryClient { public static void onLoad() { - //TODO:1.19.3 Disabled for now -// WorldPresetsClient.registerCustomizeUI(PresetsRegistry.BCL_WORLD, (createWorldScreen, worldCreationContext) -> { -// return new WorldSetupScreen(createWorldScreen, worldCreationContext); -// }); + WorldPresetsClient.registerCustomizeUI(PresetsRegistry.BCL_WORLD, (createWorldScreen, worldCreationContext) -> { + return new WorldSetupScreen(createWorldScreen, worldCreationContext); + }); } } diff --git a/src/main/java/org/betterx/worlds/together/WorldsTogetherDatagen.java b/src/main/java/org/betterx/worlds/together/WorldsTogetherDatagen.java new file mode 100644 index 00000000..2a0f2185 --- /dev/null +++ b/src/main/java/org/betterx/worlds/together/WorldsTogetherDatagen.java @@ -0,0 +1,121 @@ +package org.betterx.worlds.together; + +import org.betterx.bclib.api.v2.levelgen.biomes.BCLBiome; +import org.betterx.bclib.api.v2.levelgen.biomes.BCLBiomeRegistry; +import org.betterx.worlds.together.surfaceRules.AssignedSurfaceRule; +import org.betterx.worlds.together.surfaceRules.SurfaceRuleRegistry; + +import com.mojang.serialization.DynamicOps; +import com.mojang.serialization.Encoder; +import com.mojang.serialization.JsonOps; +import net.minecraft.core.Registry; +import net.minecraft.core.RegistryAccess; +import net.minecraft.data.BuiltinRegistries; +import net.minecraft.data.CachedOutput; +import net.minecraft.data.DataProvider; +import net.minecraft.data.PackOutput; +import net.minecraft.resources.RegistryDataLoader; +import net.minecraft.resources.RegistryOps; +import net.minecraft.resources.ResourceKey; + +import net.fabricmc.fabric.api.datagen.v1.DataGeneratorEntrypoint; +import net.fabricmc.fabric.api.datagen.v1.FabricDataGenerator; +import net.fabricmc.fabric.api.datagen.v1.provider.FabricBuiltinRegistriesProvider; + +import com.google.gson.JsonElement; + +import java.io.IOException; +import java.nio.file.Path; +import java.util.List; +import java.util.Map; +import java.util.Optional; + +public class WorldsTogetherDatagen implements DataGeneratorEntrypoint { + + + @Override + public void onInitializeDataGenerator(FabricDataGenerator fabricDataGenerator) { + fabricDataGenerator.addProvider(FabricBuiltinRegistriesProvider.forCurrentMod() + .apply(fabricDataGenerator)); + fabricDataGenerator.addProvider(CustomRegistriesDataProvider::new); + } + + public static class CustomRegistriesDataProvider implements DataProvider { + public static final List> REGISTRIES = List.of( + new RegistryDataLoader.RegistryData<>(BCLBiomeRegistry.BCL_BIOMES_REGISTRY, BCLBiome.CODEC), + new RegistryDataLoader.RegistryData<>( + SurfaceRuleRegistry.SURFACE_RULES_REGISTRY, + AssignedSurfaceRule.CODEC + ) + ); + + + private final PackOutput output; + + public CustomRegistriesDataProvider(FabricDataGenerator generator) { + this.output = generator.getVanillaPackOutput(); + } + + @Override + public void run(CachedOutput cachedOutput) { + RegistryAccess.Frozen registryAccess = BuiltinRegistries.createAccess(); + RegistryOps dynamicOps = RegistryOps.create(JsonOps.INSTANCE, registryAccess); + REGISTRIES.forEach(registryData -> this.dumpRegistryCap( + cachedOutput, + registryAccess, + dynamicOps, + (RegistryDataLoader.RegistryData) registryData + )); + } + + private void dumpRegistryCap( + CachedOutput cachedOutput, + RegistryAccess registryAccess, + DynamicOps dynamicOps, + RegistryDataLoader.RegistryData registryData + ) { + ResourceKey> resourceKey = registryData.key(); + Registry registry = registryAccess.registryOrThrow(resourceKey); + PackOutput.PathProvider pathProvider = this.output.createPathProvider( + PackOutput.Target.DATA_PACK, + resourceKey.location().getPath() + ); + for (Map.Entry, T> entry : registry.entrySet()) { + dumpValue( + pathProvider.json(entry.getKey().location()), + cachedOutput, + dynamicOps, + registryData.elementCodec(), + entry.getValue() + ); + } + } + + private static void dumpValue( + Path path, + CachedOutput cachedOutput, + DynamicOps dynamicOps, + Encoder encoder, + E object + ) { + try { + Optional optional = encoder.encodeStart(dynamicOps, object) + .resultOrPartial(string -> WorldsTogether.LOGGER.error( + "Couldn't serialize element {}: {}", + path, + string + )); + if (optional.isPresent()) { + DataProvider.saveStable(cachedOutput, optional.get(), path); + } + } catch (IOException iOException) { + WorldsTogether.LOGGER.error("Couldn't save element {}", path, iOException); + } + } + + @Override + public String getName() { + return "BCL Registries"; + } + } +} \ No newline at end of file diff --git a/src/main/java/org/betterx/worlds/together/mixin/common/MainDataMixin.java b/src/main/java/org/betterx/worlds/together/mixin/common/MainDataMixin.java new file mode 100644 index 00000000..c95201b3 --- /dev/null +++ b/src/main/java/org/betterx/worlds/together/mixin/common/MainDataMixin.java @@ -0,0 +1,26 @@ +package org.betterx.worlds.together.mixin.common; + +import net.minecraft.data.Main; + +import org.spongepowered.asm.mixin.Mixin; + +@Mixin(Main.class) +public class MainDataMixin { +// @Inject(method = "createStandardGenerator", at = @At("RETURN")) +// private static void wt_createStandardGenerator( +// Path path, +// Collection collection, +// boolean isClient, +// boolean isServer, +// boolean isDev, +// boolean reports, +// boolean validate, +// WorldVersion worldVersion, +// boolean alwaysGenerate, +// CallbackInfoReturnable cir +// ) { +// DataGenerator dataGenerator = cir.getReturnValue(); +// dataGenerator.addProvider(isServer, new SurfaceRulesDatapackGenerator(dataGenerator.getVanillaPackOutput())); +// cir.setReturnValue(dataGenerator); +// } +} diff --git a/src/main/java/org/betterx/worlds/together/mixin/common/RegistryAccessMixin.java b/src/main/java/org/betterx/worlds/together/mixin/common/RegistryAccessMixin.java index 30fe4893..ab58f4b4 100644 --- a/src/main/java/org/betterx/worlds/together/mixin/common/RegistryAccessMixin.java +++ b/src/main/java/org/betterx/worlds/together/mixin/common/RegistryAccessMixin.java @@ -1,12 +1,38 @@ package org.betterx.worlds.together.mixin.common; -import net.minecraft.core.RegistryAccess; +import org.betterx.worlds.together.surfaceRules.AssignedSurfaceRule; +import org.betterx.worlds.together.surfaceRules.SurfaceRuleRegistry; + +import net.minecraft.resources.RegistryDataLoader; import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Mutable; +import org.spongepowered.asm.mixin.gen.Accessor; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -@Mixin(RegistryAccess.class) -public interface RegistryAccessMixin { +import java.util.ArrayList; +import java.util.List; +@Mixin(RegistryDataLoader.class) +public abstract class RegistryAccessMixin { + @Accessor("WORLDGEN_REGISTRIES") + @Mutable + static void wt_set_WORLDGEN_REGISTRIES(List> list) { + //SHADOWED + } + + @Inject(method = "", at = @At("TAIL")) + private static void wt_init(CallbackInfo ci) { + List> enhanced = new ArrayList(RegistryDataLoader.WORLDGEN_REGISTRIES.size() + 1); + enhanced.addAll(RegistryDataLoader.WORLDGEN_REGISTRIES); + enhanced.add(new RegistryDataLoader.RegistryData<>( + SurfaceRuleRegistry.SURFACE_RULES_REGISTRY, + AssignedSurfaceRule.CODEC + )); + wt_set_WORLDGEN_REGISTRIES(enhanced); + } //TODO: 1.19.3 This will probably be a new kind of DataProvider. // @ModifyArg(method = "", at = @At(value = "INVOKE", target = "Lnet/minecraft/Util;make(Ljava/util/function/Supplier;)Ljava/lang/Object;")) // private static Supplier>, RegistryAccess.RegistryData>> together_addRegistry( diff --git a/src/main/java/org/betterx/worlds/together/mixin/common/WorldPresetsBootstrapMixin.java b/src/main/java/org/betterx/worlds/together/mixin/common/WorldPresetsBootstrapMixin.java index 2b8a7384..8b657ae2 100644 --- a/src/main/java/org/betterx/worlds/together/mixin/common/WorldPresetsBootstrapMixin.java +++ b/src/main/java/org/betterx/worlds/together/mixin/common/WorldPresetsBootstrapMixin.java @@ -1,9 +1,13 @@ package org.betterx.worlds.together.mixin.common; +import org.betterx.worlds.together.levelgen.WorldGenUtil; +import org.betterx.worlds.together.worldPreset.WorldPresets; + import net.minecraft.core.Holder; import net.minecraft.core.Registry; import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.dimension.DimensionType; +import net.minecraft.world.level.dimension.LevelStem; import net.minecraft.world.level.levelgen.NoiseGeneratorSettings; import net.minecraft.world.level.levelgen.presets.WorldPreset; import net.minecraft.world.level.levelgen.structure.StructureSet; @@ -12,6 +16,8 @@ import net.minecraft.world.level.levelgen.synth.NormalNoise; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.ModifyArg; @Mixin(net.minecraft.world.level.levelgen.presets.WorldPresets.Bootstrap.class) public abstract class WorldPresetsBootstrapMixin { @@ -43,26 +49,26 @@ public abstract class WorldPresetsBootstrapMixin { //see WorldPresets.register //TODO: 1.19.3 -// @ModifyArg(method = "run", at = @At(value = "INVOKE", ordinal = 0, target = "Lnet/minecraft/world/level/levelgen/presets/WorldPresets$Bootstrap;registerCustomOverworldPreset(Lnet/minecraft/resources/ResourceKey;Lnet/minecraft/world/level/dimension/LevelStem;)Lnet/minecraft/core/Holder;")) -// private LevelStem bcl_getOverworldStem(LevelStem overworldStem) { -// WorldGenUtil.Context netherContext = new WorldGenUtil.Context( -// this.biomes, -// this.netherDimensionType, -// this.structureSets, -// this.noises, -// this.netherNoiseSettings -// ); -// WorldGenUtil.Context endContext = new WorldGenUtil.Context( -// this.biomes, -// this.endDimensionType, -// this.structureSets, -// this.noises, -// this.endNoiseSettings -// ); -// -// WorldPresets.bootstrapPresets(presets, overworldStem, netherContext, endContext); -// -// return overworldStem; -// } + @ModifyArg(method = "run", at = @At(value = "INVOKE", ordinal = 0, target = "Lnet/minecraft/world/level/levelgen/presets/WorldPresets$Bootstrap;registerCustomOverworldPreset(Lnet/minecraft/resources/ResourceKey;Lnet/minecraft/world/level/dimension/LevelStem;)Lnet/minecraft/core/Holder;")) + private LevelStem bcl_getOverworldStem(LevelStem overworldStem) { + WorldGenUtil.Context netherContext = new WorldGenUtil.Context( + this.biomes, + this.netherDimensionType, + this.structureSets, + this.noises, + this.netherNoiseSettings + ); + WorldGenUtil.Context endContext = new WorldGenUtil.Context( + this.biomes, + this.endDimensionType, + this.structureSets, + this.noises, + this.endNoiseSettings + ); + + WorldPresets.bootstrapPresets(presets, overworldStem, netherContext, endContext); + + return overworldStem; + } } diff --git a/src/main/java/org/betterx/worlds/together/util/Logger.java b/src/main/java/org/betterx/worlds/together/util/Logger.java index 8600e677..42f10457 100644 --- a/src/main/java/org/betterx/worlds/together/util/Logger.java +++ b/src/main/java/org/betterx/worlds/together/util/Logger.java @@ -56,6 +56,14 @@ public final class Logger { LOGGER.error(modPref + message, obj, ex); } + public void error(String message, Object o1, Object o2, Exception ex) { + LOGGER.error(modPref + message, o1, o2, ex); + } + + public void error(String message, Object o1, Object o2) { + LOGGER.error(modPref + message, o1, o2); + } + public void error(String message, Exception ex) { LOGGER.error(modPref + message, ex); } diff --git a/src/main/java/org/betterx/worlds/together/world/event/WorldBootstrap.java b/src/main/java/org/betterx/worlds/together/world/event/WorldBootstrap.java index 7617af9f..0b6c0866 100644 --- a/src/main/java/org/betterx/worlds/together/world/event/WorldBootstrap.java +++ b/src/main/java/org/betterx/worlds/together/world/event/WorldBootstrap.java @@ -16,7 +16,6 @@ import net.minecraft.client.gui.screens.worldselection.WorldGenSettingsComponent import net.minecraft.core.Holder; import net.minecraft.core.Registry; import net.minecraft.core.RegistryAccess; -import net.minecraft.data.BuiltinRegistries; import net.minecraft.nbt.Tag; import net.minecraft.resources.RegistryOps; import net.minecraft.resources.ResourceKey; @@ -44,7 +43,8 @@ public class WorldBootstrap { public static RegistryAccess getLastRegistryAccessOrElseBuiltin() { //TODO: 1.19.3 ther no longer is a general builtin ACCESS - if (LAST_REGISTRY_ACCESS == null) return BuiltinRegistries.createAccess(); +// if (LAST_REGISTRY_ACCESS == null) +// return BuiltinRegistries.; return LAST_REGISTRY_ACCESS; } diff --git a/src/main/java/org/betterx/worlds/together/worldPreset/WorldPresets.java b/src/main/java/org/betterx/worlds/together/worldPreset/WorldPresets.java index 93823d4f..75ff1aaf 100644 --- a/src/main/java/org/betterx/worlds/together/worldPreset/WorldPresets.java +++ b/src/main/java/org/betterx/worlds/together/worldPreset/WorldPresets.java @@ -31,8 +31,7 @@ public class WorldPresets { private static ResourceKey DEFAULT = net.minecraft.world.level.levelgen.presets.WorldPresets.NORMAL; public static Holder get(RegistryAccess access, ResourceKey key) { - //TODO: 1.19.3 there is no longer a builtin registry acccess - return ((access != null) ? access : BuiltinRegistries.createAccess()) + return access .registryOrThrow(Registry.WORLD_PRESET_REGISTRY) .getHolderOrThrow(key); } @@ -90,8 +89,7 @@ public class WorldPresets { for (Map.Entry, PresetBuilder> e : BUILDERS.entrySet()) { TogetherWorldPreset preset = e.getValue().create(overworldStem, netherContext, endContext); - //TODO: 1.19.3 already frozen - //BuiltinRegistries.register(presets, e.getKey(), preset); + BuiltinRegistries.register(presets, e.getKey(), preset); } BUILDERS = null; } diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 3fe45458..37945e1e 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -35,6 +35,9 @@ ], "emi": [ "org.betterx.bclib.integration.emi.EMIPlugin" + ], + "fabric-datagen": [ + "org.betterx.worlds.together.WorldsTogetherDatagen" ] }, "accessWidener": "bclib.accesswidener", diff --git a/src/main/resources/together.mixins.common.json b/src/main/resources/together.mixins.common.json index 70a2dc6f..dcadbb66 100644 --- a/src/main/resources/together.mixins.common.json +++ b/src/main/resources/together.mixins.common.json @@ -8,6 +8,7 @@ "BuiltinRegistriesMixin", "DedicatedServerPropertiesMixin", "DiggerItemAccessor", + "MainDataMixin", "MainMixin", "MinecraftServerMixin", "MinecraftServerMixinLate",