From f8bcba4d3a0a2814dd53ba3315e762215c433603 Mon Sep 17 00:00:00 2001 From: Frank Date: Tue, 25 Oct 2022 17:19:22 +0200 Subject: [PATCH] Compiling version (some features are currently disabled and need a rewrite) --- gradle.properties | 4 +- .../java/org/betterx/bclib/BCLibPatch.java | 3 +- .../api/v2/generator/BCLBiomeSource.java | 10 +- .../api/v2/generator/BCLChunkGenerator.java | 10 +- .../bclib/api/v2/levelgen/LevelGenEvents.java | 5 +- .../bclib/api/v2/levelgen/LevelGenUtil.java | 20 +- .../v2/levelgen/biomes/BCLBiomeRegistry.java | 2 +- .../v2/levelgen/structures/StructureNBT.java | 4 +- .../levelgen/structures/StructureWorld.java | 8 +- .../betterx/bclib/blocks/BaseButtonBlock.java | 10 +- .../betterx/bclib/blocks/BaseDoorBlock.java | 3 +- .../betterx/bclib/blocks/BaseGateBlock.java | 3 +- .../bclib/blocks/BasePressurePlateBlock.java | 6 +- .../bclib/blocks/BaseTrapdoorBlock.java | 3 +- .../bclib/blocks/BaseWeightedPlateBlock.java | 10 +- .../client/gui/screens/WorldSetupScreen.java | 6 +- .../client/models/CustomModelBakery.java | 87 ++++---- .../bclib/client/models/OBJBlockModel.java | 9 +- .../bclib/interfaces/NumericProvider.java | 3 +- .../bclib/items/boat/BoatTypeOverride.java | 8 +- .../bclib/mixin/client/ModelBakeryMixin.java | 4 +- .../bclib/mixin/client/TextureAtlasMixin.java | 187 ++++++++---------- .../mixin/common/RegistryAccessMixin.java | 63 +++--- .../bclib/recipes/BlastFurnaceRecipe.java | 10 +- .../betterx/bclib/recipes/CookingRecipe.java | 8 + .../betterx/bclib/recipes/FurnaceRecipe.java | 11 ++ .../org/betterx/bclib/recipes/GridRecipe.java | 11 +- .../betterx/bclib/registry/BaseRegistry.java | 3 +- .../betterx/bclib/util/StructureHelper.java | 4 +- .../chunkgenerator/ChunkGeneratorUtils.java | 2 +- .../EnforceableChunkGenerator.java | 6 +- .../together/levelgen/WorldGenUtil.java | 154 +++++++-------- .../mixin/client/CreateWorldScreenMixin.java | 41 ++-- .../mixin/client/WorldOpenFlowsMixin.java | 16 +- .../together/mixin/common/MainMixin.java | 14 +- .../mixin/common/MinecraftServerMixin.java | 5 +- .../common/MinecraftServerMixinLate.java | 5 +- .../mixin/common/PrimaryLevelDataMixin.java | 99 ++++------ .../mixin/common/RegistryAccessMixin.java | 61 +++--- .../mixin/common/WorldGenPropertiesMixin.java | 2 +- .../surfaceRules/SurfaceRuleUtil.java | 2 +- .../event/AdaptWorldPresetSettingEvent.java | 6 +- .../event/OnAdaptWorldPresetSettings.java | 4 +- .../together/world/event/WorldBootstrap.java | 35 ++-- .../worldPreset/TogetherWorldPreset.java | 13 +- .../together/worldPreset/WorldPresets.java | 3 +- src/main/resources/bclib.accesswidener | 3 +- src/main/resources/fabric.mod.json | 8 +- 48 files changed, 488 insertions(+), 506 deletions(-) diff --git a/gradle.properties b/gradle.properties index 3181870a..f95469d4 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,7 +1,7 @@ # Done to increase the memory available to gradle. org.gradle.jvmargs=-Xmx8G #Modrinth -modrinth_versions=["1.19", "1.19.1", "1.19.2"] +modrinth_versions=["22w42a"] release_channel=release #`release`, `beta` or `alpha` #Loom loom_version=1.0-SNAPSHOT @@ -9,7 +9,7 @@ loom_version=1.0-SNAPSHOT # check these on https://fabricmc.net/versions.html minecraft_version=22w42a loader_version=0.14.10 -fabric_version=0.60.0+1.19.2 +fabric_version=0.65.0+1.19.3 # Mod Properties mod_version=2.1.3 maven_group=org.betterx.bclib diff --git a/src/main/java/org/betterx/bclib/BCLibPatch.java b/src/main/java/org/betterx/bclib/BCLibPatch.java index 3f211530..14b853ed 100644 --- a/src/main/java/org/betterx/bclib/BCLibPatch.java +++ b/src/main/java/org/betterx/bclib/BCLibPatch.java @@ -8,6 +8,7 @@ import org.betterx.bclib.api.v2.levelgen.LevelGenUtil; import org.betterx.bclib.config.Configs; import net.minecraft.core.RegistryAccess; +import net.minecraft.data.BuiltinRegistries; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.NbtOps; import net.minecraft.nbt.Tag; @@ -42,7 +43,7 @@ final class BiomeSourcePatch extends ForcedLevelPatch { final CompoundTag worldGenSettings = root.getCompound("Data").getCompound("WorldGenSettings"); final CompoundTag dimensions = worldGenSettings.getCompound("dimensions"); - final RegistryAccess registryAccess = RegistryAccess.builtinCopy(); + final RegistryAccess registryAccess = BuiltinRegistries.createAccess(); final RegistryOps registryOps = RegistryOps.create(NbtOps.INSTANCE, registryAccess); diff --git a/src/main/java/org/betterx/bclib/api/v2/generator/BCLBiomeSource.java b/src/main/java/org/betterx/bclib/api/v2/generator/BCLBiomeSource.java index 305e0cd5..32a4bc45 100644 --- a/src/main/java/org/betterx/bclib/api/v2/generator/BCLBiomeSource.java +++ b/src/main/java/org/betterx/bclib/api/v2/generator/BCLBiomeSource.java @@ -28,7 +28,10 @@ public abstract class BCLBiomeSource extends BiomeSource implements BiomeSourceW protected long currentSeed; protected int maxHeight; - private static List> preInit(Registry biomeRegistry, List> biomes) { + private static List> preInit( + Registry biomeRegistry, + List> biomes + ) { biomes = biomes.stream().sorted(Comparator.comparing(holder -> holder.unwrapKey() .get() .location() @@ -108,8 +111,9 @@ public abstract class BCLBiomeSource extends BiomeSource implements BiomeSourceW return biomeRegistry.stream() .filter(biome -> biomeRegistry.getResourceKey(biome).isPresent()) - .map(biome -> biomeRegistry.getOrCreateHolderOrThrow(biomeRegistry.getResourceKey(biome) - .get())) + .map(biome -> (Holder) biomeRegistry.getOrCreateHolderOrThrow( + biomeRegistry.getResourceKey(biome).get()) + ) .filter(biome -> { ResourceLocation location = biome.unwrapKey().orElseThrow().location(); final String strLocation = location.toString(); diff --git a/src/main/java/org/betterx/bclib/api/v2/generator/BCLChunkGenerator.java b/src/main/java/org/betterx/bclib/api/v2/generator/BCLChunkGenerator.java index 39114b70..4604764e 100644 --- a/src/main/java/org/betterx/bclib/api/v2/generator/BCLChunkGenerator.java +++ b/src/main/java/org/betterx/bclib/api/v2/generator/BCLChunkGenerator.java @@ -30,7 +30,7 @@ import net.minecraft.world.level.dimension.LevelStem; import net.minecraft.world.level.levelgen.NoiseBasedChunkGenerator; import net.minecraft.world.level.levelgen.NoiseGeneratorSettings; import net.minecraft.world.level.levelgen.RandomState; -import net.minecraft.world.level.levelgen.WorldGenSettings; +import net.minecraft.world.level.levelgen.WorldDimensions; import net.minecraft.world.level.levelgen.structure.StructureSet; import net.minecraft.world.level.levelgen.synth.NormalNoise; @@ -55,7 +55,7 @@ public class BCLChunkGenerator extends NoiseBasedChunkGenerator implements Resto RecordCodecBuilder> settingsCodec = NoiseGeneratorSettings.CODEC .fieldOf("settings") - .forGetter((BCLChunkGenerator generator) -> generator.settings); + .forGetter((BCLChunkGenerator generator) -> generator.generatorSettings()); return NoiseBasedChunkGenerator @@ -157,12 +157,12 @@ public class BCLChunkGenerator extends NoiseBasedChunkGenerator implements Resto } @Override - public WorldGenSettings enforceGeneratorInWorldGenSettings( + public WorldDimensions enforceGeneratorInWorldGenSettings( RegistryAccess access, ResourceKey dimensionKey, ResourceKey dimensionTypeKey, ChunkGenerator loadedChunkGenerator, - WorldGenSettings settings + WorldDimensions worldDims ) { BCLib.LOGGER.info("Enforcing Correct Generator for " + dimensionKey.location().toString() + "."); @@ -195,7 +195,7 @@ public class BCLChunkGenerator extends NoiseBasedChunkGenerator implements Resto dimensionKey, dimensionTypeKey, access, - settings, + worldDims, referenceGenerator ); diff --git a/src/main/java/org/betterx/bclib/api/v2/levelgen/LevelGenEvents.java b/src/main/java/org/betterx/bclib/api/v2/levelgen/LevelGenEvents.java index 1028f9d6..87db033b 100644 --- a/src/main/java/org/betterx/bclib/api/v2/levelgen/LevelGenEvents.java +++ b/src/main/java/org/betterx/bclib/api/v2/levelgen/LevelGenEvents.java @@ -21,6 +21,7 @@ import net.minecraft.resources.ResourceLocation; import net.minecraft.tags.TagLoader; import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.dimension.LevelStem; +import net.minecraft.world.level.levelgen.WorldDimensions; import net.minecraft.world.level.levelgen.WorldGenSettings; import net.minecraft.world.level.levelgen.presets.WorldPreset; import net.minecraft.world.level.storage.LevelStorageSource; @@ -71,9 +72,9 @@ public class LevelGenEvents { private static Optional> adaptWorldPresetSettings( Optional> currentPreset, - WorldGenSettings worldGenSettings + WorldDimensions worldDims ) { - LevelStem endStem = worldGenSettings.dimensions().get(LevelStem.END); + LevelStem endStem = worldDims.dimensions().get(LevelStem.END); //We probably loaded a Datapack for the End if (!(endStem.generator().getBiomeSource() instanceof BCLibEndBiomeSource)) { diff --git a/src/main/java/org/betterx/bclib/api/v2/levelgen/LevelGenUtil.java b/src/main/java/org/betterx/bclib/api/v2/levelgen/LevelGenUtil.java index a9b97dda..eec6f366 100644 --- a/src/main/java/org/betterx/bclib/api/v2/levelgen/LevelGenUtil.java +++ b/src/main/java/org/betterx/bclib/api/v2/levelgen/LevelGenUtil.java @@ -22,7 +22,7 @@ import net.minecraft.resources.ResourceKey; import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.dimension.DimensionType; import net.minecraft.world.level.dimension.LevelStem; -import net.minecraft.world.level.levelgen.WorldGenSettings; +import net.minecraft.world.level.levelgen.WorldDimensions; import net.minecraft.world.level.levelgen.presets.WorldPreset; import net.minecraft.world.level.levelgen.presets.WorldPresets; @@ -64,11 +64,11 @@ public class LevelGenUtil { } - public static WorldGenSettings replaceGenerator( + public static WorldDimensions replaceGenerator( ResourceKey dimensionKey, ResourceKey dimensionTypeKey, RegistryAccess registryAccess, - WorldGenSettings worldGenSettings, + WorldDimensions worldDimensions, ChunkGenerator generator ) { Registry dimensionTypeRegistry = registryAccess.registryOrThrow(Registry.DIMENSION_TYPE_REGISTRY); @@ -76,15 +76,10 @@ public class LevelGenUtil { dimensionKey, dimensionTypeKey, dimensionTypeRegistry, - worldGenSettings.dimensions(), + worldDimensions.dimensions(), generator ); - return new WorldGenSettings( - worldGenSettings.seed(), - worldGenSettings.generateStructures(), - worldGenSettings.generateBonusChest(), - newDimensions - ); + return new WorldDimensions(newDimensions); } public static Registry withDimension( @@ -98,7 +93,7 @@ public class LevelGenUtil { LevelStem levelStem = inputDimensions.get(dimensionKey); Holder dimensionType = levelStem == null ? dimensionTypeRegistry.getOrCreateHolderOrThrow(dimensionTypeKey) - : levelStem.typeHolder(); + : levelStem.type(); return withDimension(dimensionKey, inputDimensions, new LevelStem(dimensionType, generator)); } @@ -109,8 +104,7 @@ public class LevelGenUtil { ) { MappedRegistry writableRegistry = new MappedRegistry<>( Registry.LEVEL_STEM_REGISTRY, - Lifecycle.experimental(), - null + Lifecycle.experimental() ); writableRegistry.register( dimensionKey, 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 ae926be0..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 @@ -33,7 +33,7 @@ public class BCLBiomeRegistry { ); public static Registry BUILTIN_BCL_BIOMES = new MappedRegistry<>( BCL_BIOMES_REGISTRY, - Lifecycle.stable(), null + Lifecycle.stable() ); /** diff --git a/src/main/java/org/betterx/bclib/api/v2/levelgen/structures/StructureNBT.java b/src/main/java/org/betterx/bclib/api/v2/levelgen/structures/StructureNBT.java index 92837a7c..dd60af7d 100644 --- a/src/main/java/org/betterx/bclib/api/v2/levelgen/structures/StructureNBT.java +++ b/src/main/java/org/betterx/bclib/api/v2/levelgen/structures/StructureNBT.java @@ -4,6 +4,8 @@ import org.betterx.bclib.BCLib; import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; +import net.minecraft.core.HolderLookup; +import net.minecraft.core.Registry; import net.minecraft.core.Vec3i; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.NbtIo; @@ -102,7 +104,7 @@ public class StructureNBT { CompoundTag nbttagcompound = NbtIo.readCompressed(stream); StructureTemplate template = new StructureTemplate(); - template.load(nbttagcompound); + template.load(HolderLookup.forRegistry(Registry.BLOCK), nbttagcompound); return template; } diff --git a/src/main/java/org/betterx/bclib/api/v2/levelgen/structures/StructureWorld.java b/src/main/java/org/betterx/bclib/api/v2/levelgen/structures/StructureWorld.java index 002b37d8..573857b3 100644 --- a/src/main/java/org/betterx/bclib/api/v2/levelgen/structures/StructureWorld.java +++ b/src/main/java/org/betterx/bclib/api/v2/levelgen/structures/StructureWorld.java @@ -1,6 +1,8 @@ package org.betterx.bclib.api.v2.levelgen.structures; import net.minecraft.core.BlockPos; +import net.minecraft.core.HolderLookup; +import net.minecraft.core.Registry; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.ListTag; import net.minecraft.nbt.NbtUtils; @@ -117,7 +119,11 @@ public class StructureWorld { ListTag map2 = tag.getList("states", 10); BlockState[] states = new BlockState[map2.size()]; for (int i = 0; i < states.length; i++) { - states[i] = NbtUtils.readBlockState((CompoundTag) map2.get(i)); + states[i] = NbtUtils.readBlockState( + //TODO: 1.19.3 This appears to be used on a level registry, not the global one? + HolderLookup.forRegistry(Registry.BLOCK), + (CompoundTag) map2.get(i) + ); } map.forEach((element) -> { diff --git a/src/main/java/org/betterx/bclib/blocks/BaseButtonBlock.java b/src/main/java/org/betterx/bclib/blocks/BaseButtonBlock.java index 5c50bb4a..86a98de6 100644 --- a/src/main/java/org/betterx/bclib/blocks/BaseButtonBlock.java +++ b/src/main/java/org/betterx/bclib/blocks/BaseButtonBlock.java @@ -10,6 +10,7 @@ import net.minecraft.client.resources.model.BlockModelRotation; import net.minecraft.client.resources.model.UnbakedModel; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; +import net.minecraft.sounds.SoundEvents; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.ButtonBlock; @@ -30,7 +31,14 @@ public abstract class BaseButtonBlock extends ButtonBlock implements BlockModelP private final Block parent; protected BaseButtonBlock(Block parent, Properties properties, boolean sensitive) { - super(sensitive, properties.noCollission()); + this(parent, properties, 30, sensitive); + } + + protected BaseButtonBlock(Block parent, Properties properties, int ticksToStayPressed, boolean sensitive) { + super( + properties.noCollission(), ticksToStayPressed, sensitive, + SoundEvents.STONE_BUTTON_CLICK_OFF, SoundEvents.STONE_BUTTON_CLICK_ON + ); this.parent = parent; } diff --git a/src/main/java/org/betterx/bclib/blocks/BaseDoorBlock.java b/src/main/java/org/betterx/bclib/blocks/BaseDoorBlock.java index ce346b18..cc9131df 100644 --- a/src/main/java/org/betterx/bclib/blocks/BaseDoorBlock.java +++ b/src/main/java/org/betterx/bclib/blocks/BaseDoorBlock.java @@ -13,6 +13,7 @@ import net.minecraft.client.resources.model.BlockModelRotation; import net.minecraft.client.resources.model.UnbakedModel; import net.minecraft.core.Direction; import net.minecraft.resources.ResourceLocation; +import net.minecraft.sounds.SoundEvents; import net.minecraft.tags.BlockTags; import net.minecraft.tags.ItemTags; import net.minecraft.tags.TagKey; @@ -42,7 +43,7 @@ public class BaseDoorBlock extends DoorBlock implements RenderLayerProvider, Blo } public BaseDoorBlock(BlockBehaviour.Properties properties) { - super(properties); + super(properties, SoundEvents.WOODEN_DOOR_CLOSE, SoundEvents.WOODEN_DOOR_OPEN); } @Override diff --git a/src/main/java/org/betterx/bclib/blocks/BaseGateBlock.java b/src/main/java/org/betterx/bclib/blocks/BaseGateBlock.java index 2ad552c0..16a2ff34 100644 --- a/src/main/java/org/betterx/bclib/blocks/BaseGateBlock.java +++ b/src/main/java/org/betterx/bclib/blocks/BaseGateBlock.java @@ -9,6 +9,7 @@ import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.client.resources.model.UnbakedModel; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; +import net.minecraft.sounds.SoundEvents; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.FenceGateBlock; @@ -28,7 +29,7 @@ public class BaseGateBlock extends FenceGateBlock implements BlockModelProvider private final Block parent; public BaseGateBlock(Block source) { - super(Properties.copy(source).noOcclusion()); + super(Properties.copy(source).noOcclusion(), SoundEvents.FENCE_GATE_CLOSE, SoundEvents.FENCE_GATE_OPEN); this.parent = source; } diff --git a/src/main/java/org/betterx/bclib/blocks/BasePressurePlateBlock.java b/src/main/java/org/betterx/bclib/blocks/BasePressurePlateBlock.java index 8f851e52..f39aaee5 100644 --- a/src/main/java/org/betterx/bclib/blocks/BasePressurePlateBlock.java +++ b/src/main/java/org/betterx/bclib/blocks/BasePressurePlateBlock.java @@ -9,6 +9,7 @@ import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.client.resources.model.UnbakedModel; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; +import net.minecraft.sounds.SoundEvents; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.PressurePlateBlock; @@ -28,7 +29,10 @@ public class BasePressurePlateBlock extends PressurePlateBlock implements BlockM private final Block parent; public BasePressurePlateBlock(Sensitivity rule, Block source) { - super(rule, Properties.copy(source).noCollission().noOcclusion().strength(0.5F)); + super( + rule, Properties.copy(source).noCollission().noOcclusion().strength(0.5F), + SoundEvents.WOODEN_PRESSURE_PLATE_CLICK_OFF, SoundEvents.WOODEN_PRESSURE_PLATE_CLICK_ON + ); this.parent = source; } diff --git a/src/main/java/org/betterx/bclib/blocks/BaseTrapdoorBlock.java b/src/main/java/org/betterx/bclib/blocks/BaseTrapdoorBlock.java index a105cc81..e7729cfd 100644 --- a/src/main/java/org/betterx/bclib/blocks/BaseTrapdoorBlock.java +++ b/src/main/java/org/betterx/bclib/blocks/BaseTrapdoorBlock.java @@ -11,6 +11,7 @@ import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.client.resources.model.BlockModelRotation; import net.minecraft.client.resources.model.UnbakedModel; import net.minecraft.resources.ResourceLocation; +import net.minecraft.sounds.SoundEvents; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.TrapDoorBlock; @@ -31,7 +32,7 @@ public class BaseTrapdoorBlock extends TrapDoorBlock implements RenderLayerProvi } public BaseTrapdoorBlock(BlockBehaviour.Properties properties) { - super(properties); + super(properties, SoundEvents.WOODEN_TRAPDOOR_CLOSE, SoundEvents.WOODEN_TRAPDOOR_OPEN); } @Override diff --git a/src/main/java/org/betterx/bclib/blocks/BaseWeightedPlateBlock.java b/src/main/java/org/betterx/bclib/blocks/BaseWeightedPlateBlock.java index 3bc48542..fd910ef6 100644 --- a/src/main/java/org/betterx/bclib/blocks/BaseWeightedPlateBlock.java +++ b/src/main/java/org/betterx/bclib/blocks/BaseWeightedPlateBlock.java @@ -9,6 +9,7 @@ import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.client.resources.model.UnbakedModel; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; +import net.minecraft.sounds.SoundEvents; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.WeightedPressurePlateBlock; @@ -31,10 +32,11 @@ public class BaseWeightedPlateBlock extends WeightedPressurePlateBlock implement super( 15, Properties.copy(source) - .noCollission() - .noOcclusion() - .requiresCorrectToolForDrops() - .strength(0.5F) + .noCollission() + .noOcclusion() + .requiresCorrectToolForDrops() + .strength(0.5F), + SoundEvents.METAL_PRESSURE_PLATE_CLICK_OFF, SoundEvents.METAL_PRESSURE_PLATE_CLICK_ON ); this.parent = source; } diff --git a/src/main/java/org/betterx/bclib/client/gui/screens/WorldSetupScreen.java b/src/main/java/org/betterx/bclib/client/gui/screens/WorldSetupScreen.java index 2af0c7f7..1d27fa28 100644 --- a/src/main/java/org/betterx/bclib/client/gui/screens/WorldSetupScreen.java +++ b/src/main/java/org/betterx/bclib/client/gui/screens/WorldSetupScreen.java @@ -255,7 +255,7 @@ public class WorldSetupScreen extends LayoutScreen { createWorldScreen .worldGenSettingsComponent .settings() - .worldGenSettings() + .selectedDimensions() .dimensions() ) ))); @@ -269,11 +269,11 @@ public class WorldSetupScreen extends LayoutScreen { ChunkGenerator chunkGenerator ) { createWorldScreen.worldGenSettingsComponent.updateSettings( - (registryAccess, worldGenSettings) -> LevelGenUtil.replaceGenerator( + (registryAccess, worldDimensions) -> LevelGenUtil.replaceGenerator( dimensionKey, dimensionTypeKey, registryAccess, - worldGenSettings, + worldDimensions, chunkGenerator ) ); diff --git a/src/main/java/org/betterx/bclib/client/models/CustomModelBakery.java b/src/main/java/org/betterx/bclib/client/models/CustomModelBakery.java index f820c5f8..f86b2fef 100644 --- a/src/main/java/org/betterx/bclib/client/models/CustomModelBakery.java +++ b/src/main/java/org/betterx/bclib/client/models/CustomModelBakery.java @@ -1,16 +1,12 @@ package org.betterx.bclib.client.models; -import org.betterx.bclib.api.v2.ModIntegrationAPI; -import org.betterx.bclib.client.render.EmissiveTextureInfo; import org.betterx.bclib.interfaces.BlockModelProvider; import org.betterx.bclib.interfaces.ItemModelProvider; import org.betterx.bclib.models.RecordItemModelProvider; -import com.mojang.datafixers.util.Pair; import net.minecraft.client.renderer.block.BlockModelShaper; import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.client.renderer.block.model.multipart.MultiPart; -import net.minecraft.client.resources.model.Material; import net.minecraft.client.resources.model.ModelResourceLocation; import net.minecraft.client.resources.model.UnbakedModel; import net.minecraft.core.Registry; @@ -21,12 +17,8 @@ import net.minecraft.world.level.block.state.BlockState; import com.google.common.collect.ImmutableList; import com.google.common.collect.Maps; -import com.google.common.collect.Sets; -import java.util.Collection; -import java.util.HashMap; import java.util.Map; -import java.util.Set; public class CustomModelBakery { private final Map models = Maps.newConcurrentMap(); @@ -114,43 +106,44 @@ public class CustomModelBakery { BlockModel model = provider.getItemModel(modelLocation); models.put(modelLocation, model); } - - public static void loadEmissiveModels(Map unbakedCache) { - if (!ModIntegrationAPI.hasCanvas()) { - return; - } - - Map cacheCopy = new HashMap<>(unbakedCache); - Set> strings = Sets.newConcurrentHashSet(); - Registry.BLOCK.keySet().forEach(blockID -> { - Block block = Registry.BLOCK.get(blockID); - ImmutableList states = block.getStateDefinition().getPossibleStates(); - boolean addBlock = false; - - for (BlockState state : states) { - ResourceLocation stateID = BlockModelShaper.stateToModelLocation(blockID, state); - UnbakedModel model = cacheCopy.get(stateID); - if (model == null) { - continue; - } - Collection materials = model.getMaterials(cacheCopy::get, strings); - if (materials == null) { - continue; - } - for (Material material : materials) { - if (EmissiveTextureInfo.isEmissiveTexture(material.texture())) { - addBlock = true; - break; - } - } - if (addBlock) { - break; - } - } - - if (addBlock) { - EmissiveTextureInfo.addBlock(blockID); - } - }); - } + + //TODO: 1.19.3 Handled differently now +// public static void loadEmissiveModels(Map unbakedCache) { +// if (!ModIntegrationAPI.hasCanvas()) { +// return; +// } +// +// Map cacheCopy = new HashMap<>(unbakedCache); +// Set> strings = Sets.newConcurrentHashSet(); +// Registry.BLOCK.keySet().forEach(blockID -> { +// Block block = Registry.BLOCK.get(blockID); +// ImmutableList states = block.getStateDefinition().getPossibleStates(); +// boolean addBlock = false; +// +// for (BlockState state : states) { +// ResourceLocation stateID = BlockModelShaper.stateToModelLocation(blockID, state); +// UnbakedModel model = cacheCopy.get(stateID); +// if (model == null) { +// continue; +// } +// Collection materials = model.getMaterials(cacheCopy::get, strings); +// if (materials == null) { +// continue; +// } +// for (Material material : materials) { +// if (EmissiveTextureInfo.isEmissiveTexture(material.texture())) { +// addBlock = true; +// break; +// } +// } +// if (addBlock) { +// break; +// } +// } +// +// if (addBlock) { +// EmissiveTextureInfo.addBlock(blockID); +// } +// }); +// } } diff --git a/src/main/java/org/betterx/bclib/client/models/OBJBlockModel.java b/src/main/java/org/betterx/bclib/client/models/OBJBlockModel.java index 40e5b60a..f0695629 100644 --- a/src/main/java/org/betterx/bclib/client/models/OBJBlockModel.java +++ b/src/main/java/org/betterx/bclib/client/models/OBJBlockModel.java @@ -4,7 +4,6 @@ import org.betterx.bclib.BCLib; import org.betterx.bclib.util.BlocksHelper; import org.betterx.bclib.util.MHelper; -import com.mojang.datafixers.util.Pair; import com.mojang.math.Vector3f; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.block.model.BakedQuad; @@ -86,17 +85,13 @@ public class OBJBlockModel implements UnbakedModel, BakedModel { } @Override - public Collection getMaterials( - Function function, - Set> set - ) { - return materials; + public void resolveParents(Function function) { } @Nullable @Override public BakedModel bake( - ModelBakery modelBakery, + ModelBaker modelBakery, Function textureGetter, ModelState modelState, ResourceLocation resourceLocation diff --git a/src/main/java/org/betterx/bclib/interfaces/NumericProvider.java b/src/main/java/org/betterx/bclib/interfaces/NumericProvider.java index fb141b51..1f5da299 100644 --- a/src/main/java/org/betterx/bclib/interfaces/NumericProvider.java +++ b/src/main/java/org/betterx/bclib/interfaces/NumericProvider.java @@ -16,8 +16,7 @@ public interface NumericProvider { BCLib.makeID("worldgen/numeric_provider")); Registry> NUMERIC_PROVIDER = new MappedRegistry<>( NUMERIC_PROVIDER_REGISTRY, - Lifecycle.experimental(), - null + Lifecycle.experimental() ); Codec CODEC = NUMERIC_PROVIDER.byNameCodec() .dispatch(NumericProvider::pcodec, Function.identity()); diff --git a/src/main/java/org/betterx/bclib/items/boat/BoatTypeOverride.java b/src/main/java/org/betterx/bclib/items/boat/BoatTypeOverride.java index de59ed99..6cbe3b09 100644 --- a/src/main/java/org/betterx/bclib/items/boat/BoatTypeOverride.java +++ b/src/main/java/org/betterx/bclib/items/boat/BoatTypeOverride.java @@ -3,11 +3,11 @@ package org.betterx.bclib.items.boat; import org.betterx.bclib.BCLib; import net.minecraft.client.model.BoatModel; +import net.minecraft.client.model.ChestBoatModel; import net.minecraft.client.model.geom.ModelLayerLocation; import net.minecraft.client.renderer.entity.EntityRendererProvider; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.BoatItem; -import net.minecraft.world.item.CreativeModeTab; import net.minecraft.world.item.Item; import net.minecraft.world.level.block.Block; @@ -64,8 +64,8 @@ public final class BoatTypeOverride { public void createBoatModels(EntityRendererProvider.Context context) { if (boatModel == null) { - boatModel = new BoatModel(context.bakeLayer(boatModelName), false); - chestBoatModel = new BoatModel(context.bakeLayer(chestBoatModelName), true); + boatModel = new BoatModel(context.bakeLayer(boatModelName)); + chestBoatModel = new ChestBoatModel(context.bakeLayer(chestBoatModelName)); } } @@ -115,7 +115,7 @@ public final class BoatTypeOverride { } public BoatItem createItem(boolean hasChest) { - return createItem(hasChest, new Item.Properties().stacksTo(1).tab(CreativeModeTab.TAB_TRANSPORTATION)); + return createItem(hasChest, new Item.Properties().stacksTo(1)); } public BoatItem createItem(boolean hasChest, Item.Properties itemSettings) { diff --git a/src/main/java/org/betterx/bclib/mixin/client/ModelBakeryMixin.java b/src/main/java/org/betterx/bclib/mixin/client/ModelBakeryMixin.java index 4d0ae211..15269756 100644 --- a/src/main/java/org/betterx/bclib/mixin/client/ModelBakeryMixin.java +++ b/src/main/java/org/betterx/bclib/mixin/client/ModelBakeryMixin.java @@ -1,7 +1,6 @@ package org.betterx.bclib.mixin.client; import org.betterx.bclib.api.v2.ModIntegrationAPI; -import org.betterx.bclib.client.models.CustomModelBakery; import net.minecraft.client.color.block.BlockColors; import net.minecraft.client.resources.model.ModelBakery; @@ -35,7 +34,8 @@ public abstract class ModelBakeryMixin { ) { //CustomModelBakery.setModelsLoaded(false); if (ModIntegrationAPI.hasCanvas()) { - CustomModelBakery.loadEmissiveModels(unbakedCache); + //TODO:1.19.3 this needs to change + //CustomModelBakery.loadEmissiveModels(unbakedCache); } } } diff --git a/src/main/java/org/betterx/bclib/mixin/client/TextureAtlasMixin.java b/src/main/java/org/betterx/bclib/mixin/client/TextureAtlasMixin.java index 3ef912b8..abe45df0 100644 --- a/src/main/java/org/betterx/bclib/mixin/client/TextureAtlasMixin.java +++ b/src/main/java/org/betterx/bclib/mixin/client/TextureAtlasMixin.java @@ -1,114 +1,97 @@ package org.betterx.bclib.mixin.client; -import org.betterx.bclib.BCLib; -import org.betterx.bclib.client.render.EmissiveTextureInfo; - -import com.mojang.blaze3d.platform.NativeImage; import net.minecraft.client.renderer.texture.TextureAtlas; -import net.minecraft.client.renderer.texture.TextureAtlasSprite; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.server.packs.resources.Resource; -import net.minecraft.server.packs.resources.ResourceManager; - -import net.fabricmc.fabric.impl.client.texture.FabricSprite; -import net.fabricmc.loader.api.FabricLoader; 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; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - -import java.io.IOException; -import java.util.Optional; @Mixin(TextureAtlas.class) public class TextureAtlasMixin { private static final int EMISSIVE_ALPHA = 254 << 24; private boolean bclib_modifyAtlas; - @Inject(method = "*", at = @At("TAIL")) - private void bclib_onAtlasInit(ResourceLocation resourceLocation, CallbackInfo info) { - boolean hasOptifine = FabricLoader.getInstance().isModLoaded("optifabric"); - bclib_modifyAtlas = !hasOptifine && resourceLocation.toString().equals("minecraft:textures/atlas/blocks.png"); - if (bclib_modifyAtlas) { - EmissiveTextureInfo.clear(); - } - } - - @Inject(method = "load(Lnet/minecraft/server/packs/resources/ResourceManager;Lnet/minecraft/client/renderer/texture/TextureAtlasSprite$Info;IIIII)Lnet/minecraft/client/renderer/texture/TextureAtlasSprite;", at = @At("HEAD"), cancellable = true) - private void bclib_loadSprite( - ResourceManager resourceManager, - TextureAtlasSprite.Info spriteInfo, - int atlasWidth, - int atlasHeight, - int maxLevel, - int posX, - int posY, - CallbackInfoReturnable info - ) { - if (!bclib_modifyAtlas) { - return; - } - - ResourceLocation location = spriteInfo.name(); - if (!location.getPath().startsWith("block")) { - return; - } - - ResourceLocation emissiveLocation = new ResourceLocation( - location.getNamespace(), - "textures/" + location.getPath() + "_e.png" - ); - Optional emissiveRes = resourceManager.getResource(emissiveLocation); - if (emissiveRes.isPresent()) { - NativeImage sprite = null; - NativeImage emission = null; - try { - ResourceLocation spriteLocation = new ResourceLocation( - location.getNamespace(), - "textures/" + location.getPath() + ".png" - ); - Resource resource = resourceManager.getResource(spriteLocation).orElse(null); - sprite = NativeImage.read(resource.open()); - - resource = emissiveRes.get(); - emission = NativeImage.read(resource.open()); - } catch (IOException e) { - BCLib.LOGGER.warning(e.getMessage()); - } - if (sprite != null && emission != null) { - int width = Math.min(sprite.getWidth(), emission.getWidth()); - int height = Math.min(sprite.getHeight(), emission.getHeight()); - for (int x = 0; x < width; x++) { - for (int y = 0; y < height; y++) { - int argb = emission.getPixelRGBA(x, y); - int alpha = (argb >> 24) & 255; - if (alpha > 127) { - int r = (argb >> 16) & 255; - int g = (argb >> 8) & 255; - int b = argb & 255; - if (r > 0 || g > 0 || b > 0) { - argb = (argb & 0x00FFFFFF) | EMISSIVE_ALPHA; - sprite.setPixelRGBA(x, y, argb); - } - } - } - } - TextureAtlas self = (TextureAtlas) (Object) this; - FabricSprite result = new FabricSprite( - self, - spriteInfo, - maxLevel, - atlasWidth, - atlasHeight, - posX, - posY, - sprite - ); - EmissiveTextureInfo.addTexture(location); - info.setReturnValue(result); - } - } - } + //TODO: 1.19.3 How were FabricSprites replaced? +// @Inject(method = "*", at = @At("TAIL")) +// private void bclib_onAtlasInit(ResourceLocation resourceLocation, CallbackInfo info) { +// boolean hasOptifine = FabricLoader.getInstance().isModLoaded("optifabric"); +// bclib_modifyAtlas = !hasOptifine && resourceLocation.toString().equals("minecraft:textures/atlas/blocks.png"); +// if (bclib_modifyAtlas) { +// EmissiveTextureInfo.clear(); +// } +// } +// +// @Inject(method = "load(Lnet/minecraft/server/packs/resources/ResourceManager;Lnet/minecraft/client/renderer/texture/TextureAtlasSprite$Info;IIIII)Lnet/minecraft/client/renderer/texture/TextureAtlasSprite;", at = @At("HEAD"), cancellable = true) +// private void bclib_loadSprite( +// ResourceManager resourceManager, +// TextureAtlasSprite.Info spriteInfo, +// int atlasWidth, +// int atlasHeight, +// int maxLevel, +// int posX, +// int posY, +// CallbackInfoReturnable info +// ) { +// if (!bclib_modifyAtlas) { +// return; +// } +// +// ResourceLocation location = spriteInfo.name(); +// if (!location.getPath().startsWith("block")) { +// return; +// } +// +// ResourceLocation emissiveLocation = new ResourceLocation( +// location.getNamespace(), +// "textures/" + location.getPath() + "_e.png" +// ); +// Optional emissiveRes = resourceManager.getResource(emissiveLocation); +// if (emissiveRes.isPresent()) { +// NativeImage sprite = null; +// NativeImage emission = null; +// try { +// ResourceLocation spriteLocation = new ResourceLocation( +// location.getNamespace(), +// "textures/" + location.getPath() + ".png" +// ); +// Resource resource = resourceManager.getResource(spriteLocation).orElse(null); +// sprite = NativeImage.read(resource.open()); +// +// resource = emissiveRes.get(); +// emission = NativeImage.read(resource.open()); +// } catch (IOException e) { +// BCLib.LOGGER.warning(e.getMessage()); +// } +// if (sprite != null && emission != null) { +// int width = Math.min(sprite.getWidth(), emission.getWidth()); +// int height = Math.min(sprite.getHeight(), emission.getHeight()); +// for (int x = 0; x < width; x++) { +// for (int y = 0; y < height; y++) { +// int argb = emission.getPixelRGBA(x, y); +// int alpha = (argb >> 24) & 255; +// if (alpha > 127) { +// int r = (argb >> 16) & 255; +// int g = (argb >> 8) & 255; +// int b = argb & 255; +// if (r > 0 || g > 0 || b > 0) { +// argb = (argb & 0x00FFFFFF) | EMISSIVE_ALPHA; +// sprite.setPixelRGBA(x, y, argb); +// } +// } +// } +// } +// TextureAtlas self = (TextureAtlas) (Object) this; +// FabricSprite result = new FabricSprite( +// self, +// spriteInfo, +// maxLevel, +// atlasWidth, +// atlasHeight, +// posX, +// posY, +// sprite +// ); +// EmissiveTextureInfo.addTexture(location); +// info.setReturnValue(result); +// } +// } +// } } diff --git a/src/main/java/org/betterx/bclib/mixin/common/RegistryAccessMixin.java b/src/main/java/org/betterx/bclib/mixin/common/RegistryAccessMixin.java index 79b6478e..0fd78ea3 100644 --- a/src/main/java/org/betterx/bclib/mixin/common/RegistryAccessMixin.java +++ b/src/main/java/org/betterx/bclib/mixin/common/RegistryAccessMixin.java @@ -1,48 +1,35 @@ package org.betterx.bclib.mixin.common; -import org.betterx.bclib.api.v2.levelgen.biomes.BCLBiomeRegistry; -import org.betterx.bclib.api.v2.levelgen.biomes.BiomeData; - -import com.mojang.serialization.Codec; -import net.minecraft.core.Registry; import net.minecraft.core.RegistryAccess; -import net.minecraft.resources.ResourceKey; -import com.google.common.collect.ImmutableMap; 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; - -import java.util.Map; -import java.util.function.Supplier; @Mixin(RegistryAccess.class) public interface RegistryAccessMixin { - - @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( - Supplier>, RegistryAccess.RegistryData>> supplier - ) { - return () -> { - ImmutableMap.Builder>, RegistryAccess.RegistryData> builder = ImmutableMap.builder(); - //Make sure this gets added before WORLD_PRESETS - put(builder, BCLBiomeRegistry.BCL_BIOMES_REGISTRY, BiomeData.CODEC); - - Map>, RegistryAccess.RegistryData> res = supplier.get(); - builder.putAll(res); - - return builder.build(); - }; - } - - @Shadow - static void put( - ImmutableMap.Builder>, RegistryAccess.RegistryData> builder, - ResourceKey> resourceKey, - Codec codec - ) { - throw new RuntimeException("Shadowed Call"); - } + //TODO: 1.19.3 Will probably be a new custom data provider now +// @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( +// Supplier>, RegistryAccess.RegistryData>> supplier +// ) { +// return () -> { +// ImmutableMap.Builder>, RegistryAccess.RegistryData> builder = ImmutableMap.builder(); +// //Make sure this gets added before WORLD_PRESETS +// put(builder, BCLBiomeRegistry.BCL_BIOMES_REGISTRY, BiomeData.CODEC); +// +// Map>, RegistryAccess.RegistryData> res = supplier.get(); +// builder.putAll(res); +// +// return builder.build(); +// }; +// } +// +// @Shadow +// static void put( +// ImmutableMap.Builder>, RegistryAccess.RegistryData> builder, +// ResourceKey> resourceKey, +// Codec codec +// ) { +// throw new RuntimeException("Shadowed Call"); +// } } diff --git a/src/main/java/org/betterx/bclib/recipes/BlastFurnaceRecipe.java b/src/main/java/org/betterx/bclib/recipes/BlastFurnaceRecipe.java index 373f015c..f9b5a742 100644 --- a/src/main/java/org/betterx/bclib/recipes/BlastFurnaceRecipe.java +++ b/src/main/java/org/betterx/bclib/recipes/BlastFurnaceRecipe.java @@ -24,6 +24,14 @@ public class BlastFurnaceRecipe extends CookingRecipe> extends AbstractSimpleRecipe { protected float experience; protected int cookingTime; + protected CookingBookCategory bookCategory; CookingRecipe(ResourceLocation id, RecipeType type, ItemLike output) { this(id, type, type.toString(), output); @@ -20,6 +22,7 @@ public abstract class CookingRecipe { public Item.Properties makeItemSettings() { Item.Properties properties = new Item.Properties(); - return properties.tab(creativeTab); + //TODO: 1.19.3 Creative mode tabs are handled differently now + return properties;//.tab(creativeTab); } private void registerInternal() { diff --git a/src/main/java/org/betterx/bclib/util/StructureHelper.java b/src/main/java/org/betterx/bclib/util/StructureHelper.java index d0ac7019..eca53bf9 100644 --- a/src/main/java/org/betterx/bclib/util/StructureHelper.java +++ b/src/main/java/org/betterx/bclib/util/StructureHelper.java @@ -1,6 +1,8 @@ package org.betterx.bclib.util; import net.minecraft.core.BlockPos; +import net.minecraft.core.HolderLookup; +import net.minecraft.core.Registry; import net.minecraft.core.Vec3i; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.NbtIo; @@ -67,7 +69,7 @@ public class StructureHelper { CompoundTag nbttagcompound = NbtIo.readCompressed(stream); StructureTemplate template = new StructureTemplate(); - template.load(nbttagcompound); + template.load(HolderLookup.forRegistry(Registry.BLOCK), nbttagcompound); return template; } diff --git a/src/main/java/org/betterx/worlds/together/chunkgenerator/ChunkGeneratorUtils.java b/src/main/java/org/betterx/worlds/together/chunkgenerator/ChunkGeneratorUtils.java index b85f3127..38788644 100644 --- a/src/main/java/org/betterx/worlds/together/chunkgenerator/ChunkGeneratorUtils.java +++ b/src/main/java/org/betterx/worlds/together/chunkgenerator/ChunkGeneratorUtils.java @@ -6,7 +6,7 @@ import net.minecraft.world.level.levelgen.WorldGenSettings; public class ChunkGeneratorUtils { public static void restoreOriginalBiomeSourceInAllDimension(WorldGenSettings settings) { - for (var entry : settings.dimensions().entrySet()) { + for (var entry : settings.dimensions().dimensions().entrySet()) { ResourceKey key = entry.getKey(); LevelStem stem = entry.getValue(); diff --git a/src/main/java/org/betterx/worlds/together/chunkgenerator/EnforceableChunkGenerator.java b/src/main/java/org/betterx/worlds/together/chunkgenerator/EnforceableChunkGenerator.java index 00f68e8b..53cfa366 100644 --- a/src/main/java/org/betterx/worlds/together/chunkgenerator/EnforceableChunkGenerator.java +++ b/src/main/java/org/betterx/worlds/together/chunkgenerator/EnforceableChunkGenerator.java @@ -10,15 +10,15 @@ import net.minecraft.world.level.biome.BiomeSource; import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.dimension.DimensionType; import net.minecraft.world.level.dimension.LevelStem; -import net.minecraft.world.level.levelgen.WorldGenSettings; +import net.minecraft.world.level.levelgen.WorldDimensions; public interface EnforceableChunkGenerator { - WorldGenSettings enforceGeneratorInWorldGenSettings( + WorldDimensions enforceGeneratorInWorldGenSettings( RegistryAccess access, ResourceKey dimensionKey, ResourceKey dimensionTypeKey, ChunkGenerator loadedChunkGenerator, - WorldGenSettings settings + WorldDimensions worldDims ); default boolean togetherShouldRepair(ChunkGenerator chunkGenerator) { diff --git a/src/main/java/org/betterx/worlds/together/levelgen/WorldGenUtil.java b/src/main/java/org/betterx/worlds/together/levelgen/WorldGenUtil.java index b10d7118..359654cf 100644 --- a/src/main/java/org/betterx/worlds/together/levelgen/WorldGenUtil.java +++ b/src/main/java/org/betterx/worlds/together/levelgen/WorldGenUtil.java @@ -12,17 +12,12 @@ import org.betterx.worlds.together.world.event.WorldBootstrap; import org.betterx.worlds.together.worldPreset.TogetherWorldPreset; import org.betterx.worlds.together.worldPreset.WorldPresets; -import com.mojang.datafixers.util.Pair; -import com.mojang.serialization.JsonOps; -import net.minecraft.Util; import net.minecraft.core.Holder; import net.minecraft.core.Registry; import net.minecraft.core.RegistryAccess; import net.minecraft.nbt.CompoundTag; -import net.minecraft.resources.RegistryOps; import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; -import net.minecraft.server.packs.resources.ResourceManager; import net.minecraft.util.RandomSource; import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.chunk.ChunkGenerator; @@ -30,14 +25,11 @@ import net.minecraft.world.level.dimension.DimensionType; import net.minecraft.world.level.dimension.LevelStem; import net.minecraft.world.level.levelgen.NoiseBasedChunkGenerator; import net.minecraft.world.level.levelgen.NoiseGeneratorSettings; -import net.minecraft.world.level.levelgen.WorldGenSettings; +import net.minecraft.world.level.levelgen.WorldDimensions; import net.minecraft.world.level.levelgen.presets.WorldPreset; import net.minecraft.world.level.levelgen.structure.StructureSet; import net.minecraft.world.level.levelgen.synth.NormalNoise; -import com.google.common.collect.ImmutableMap; -import com.google.gson.JsonElement; - import java.util.HashMap; import java.util.Map; import org.jetbrains.annotations.ApiStatus; @@ -46,18 +38,18 @@ public class WorldGenUtil { public static final String TAG_PRESET = "preset"; public static final String TAG_GENERATOR = "generator"; - public static WorldGenSettings createWorldFromPreset( + public static WorldDimensions createWorldFromPreset( ResourceKey preset, RegistryAccess registryAccess, long seed, boolean generateStructures, boolean generateBonusChest ) { - WorldGenSettings settings = registryAccess + WorldDimensions settings = registryAccess .registryOrThrow(Registry.WORLD_PRESET_REGISTRY) .getHolderOrThrow(preset) .value() - .createWorldGenSettings(seed, generateStructures, generateBonusChest); + .createWorldDimensions(); for (LevelStem stem : settings.dimensions()) { if (stem.generator().getBiomeSource() instanceof BiomeSourceWithSeed bcl) { @@ -73,7 +65,7 @@ public class WorldGenUtil { return settings; } - public static WorldGenSettings createDefaultWorldFromPreset( + public static WorldDimensions createDefaultWorldFromPreset( RegistryAccess registryAccess, long seed, boolean generateStructures, @@ -89,28 +81,30 @@ public class WorldGenUtil { } @ApiStatus.Internal - public static Pair defaultWorldDataSupplier( - RegistryOps loaderOps, - RegistryAccess.Frozen frozen - ) { - WorldGenSettings defaultGen = createDefaultWorldFromPreset(frozen); - RegistryOps registryOps = RegistryOps.create(JsonOps.INSTANCE, frozen); - WorldGenSettings worldGenSettings = WorldGenSettings.CODEC - .encodeStart(registryOps, defaultGen) - .flatMap(json -> WorldGenSettings.CODEC.parse( - loaderOps, - json - )) - .getOrThrow( - false, - Util.prefix( - "Error parsing worldgen settings after loading data packs: ", - WorldsTogether.LOGGER::error - ) - ); -// WorldGenSettings worldGenSettings = createDefaultWorldFromPreset(frozen); - return Pair.of(worldGenSettings, frozen); - } + //TODO: 1.19.3 Disabled for now +// public static Pair defaultWorldDataSupplier( +// RegistryOps loaderOps, +// RegistryAccess.Frozen frozen +// ) { +// WorldDimensions defaultGen = createDefaultWorldFromPreset(frozen); +// RegistryOps registryOps = RegistryOps.create(JsonOps.INSTANCE, frozen); +// +// WorldDimensions worldGenSettings = WorldDimensions.CODEC +// .codec().parse(registryOps, defaultGen) +// .flatMap(json -> WorldDimensions.CODEC.codec().parse( +// loaderOps, +// json +// )) +// .getOrThrow( +// false, +// Util.prefix( +// "Error parsing worldgen settings after loading data packs: ", +// WorldsTogether.LOGGER::error +// ) +// ); +//// WorldGenSettings worldGenSettings = createDefaultWorldFromPreset(frozen); +// return Pair.of(worldGenSettings, frozen); +// } private static final Map, Map, LevelStem>> WORLD_PRESET_MAP = new HashMap<>(); @@ -136,52 +130,52 @@ public class WorldGenUtil { WORLD_PRESET_MAP.clear(); } - public static void preloadWorldPresets(ResourceManager resourceManager, RegistryAccess.Writable writable) { - clearPreloadedWorldPresets(); - Registry registry = writable.registryOrThrow(Registry.WORLD_PRESET_REGISTRY); - //for (ResourceKey key : registry.registryKeySet()) - ResourceKey key = net.minecraft.world.level.levelgen.presets.WorldPresets.NORMAL; - { - RegistryOps loaderOps = RegistryOps.createAndLoad( - JsonOps.INSTANCE, writable, resourceManager - ); - Holder in = registry.getHolderOrThrow(key); - if (in.unwrapKey().isPresent()) { - RegistryOps registryOps = RegistryOps.create(JsonOps.INSTANCE, writable); - WorldGenSettings settings = WorldGenUtil.createWorldFromPreset( - in.unwrapKey().orElseThrow(), - writable, - RandomSource.create().nextLong(), - true, - false - ); - WorldGenSettings worldGenSettings = WorldGenSettings.CODEC - .encodeStart(registryOps, settings) - .flatMap(json -> WorldGenSettings.CODEC.parse( - loaderOps, - json - )) - .getOrThrow( - false, - Util.prefix( - "Error parsing world preset settings after loading data packs: ", - WorldsTogether.LOGGER::error - ) - ); - ImmutableMap.Builder, LevelStem> map = ImmutableMap.builder(); - for (Map.Entry, LevelStem> entry : worldGenSettings.dimensions().entrySet()) { - map.put(entry.getKey(), entry.getValue()); - } - WORLD_PRESET_MAP.put(key, map.build()); - } - } - } +// public static void preloadWorldPresets(ResourceManager resourceManager, RegistryAccess.Writable writable) { +// clearPreloadedWorldPresets(); +// Registry registry = writable.registryOrThrow(Registry.WORLD_PRESET_REGISTRY); +// //for (ResourceKey key : registry.registryKeySet()) +// ResourceKey key = net.minecraft.world.level.levelgen.presets.WorldPresets.NORMAL; +// { +// RegistryOps loaderOps = RegistryOps.createAndLoad( +// JsonOps.INSTANCE, writable, resourceManager +// ); +// Holder in = registry.getHolderOrThrow(key); +// if (in.unwrapKey().isPresent()) { +// RegistryOps registryOps = RegistryOps.create(JsonOps.INSTANCE, writable); +// WorldGenSettings settings = WorldGenUtil.createWorldFromPreset( +// in.unwrapKey().orElseThrow(), +// writable, +// RandomSource.create().nextLong(), +// true, +// false +// ); +// WorldGenSettings worldGenSettings = WorldGenSettings.CODEC +// .encodeStart(registryOps, settings) +// .flatMap(json -> WorldGenSettings.CODEC.parse( +// loaderOps, +// json +// )) +// .getOrThrow( +// false, +// Util.prefix( +// "Error parsing world preset settings after loading data packs: ", +// WorldsTogether.LOGGER::error +// ) +// ); +// ImmutableMap.Builder, LevelStem> map = ImmutableMap.builder(); +// for (Map.Entry, LevelStem> entry : worldGenSettings.dimensions().entrySet()) { +// map.put(entry.getKey(), entry.getValue()); +// } +// WORLD_PRESET_MAP.put(key, map.build()); +// } +// } +// } - public static WorldGenSettings createDefaultWorldFromPreset(RegistryAccess registryAccess, long seed) { + public static WorldDimensions createDefaultWorldFromPreset(RegistryAccess registryAccess, long seed) { return createDefaultWorldFromPreset(registryAccess, seed, true, false); } - public static WorldGenSettings createDefaultWorldFromPreset(RegistryAccess registryAccess) { + public static WorldDimensions createDefaultWorldFromPreset(RegistryAccess registryAccess) { return createDefaultWorldFromPreset(registryAccess, RandomSource.create().nextLong()); } @@ -233,9 +227,9 @@ public class WorldGenUtil { @SuppressWarnings("unchecked") @ApiStatus.Internal - public static WorldGenSettings repairBiomeSourceInAllDimensions( + public static WorldDimensions repairBiomeSourceInAllDimensions( RegistryAccess registryAccess, - WorldGenSettings settings + WorldDimensions settings ) { var dimensions = TogetherWorldPreset.loadWorldDimensions(); for (var entry : settings.dimensions().entrySet()) { @@ -271,7 +265,7 @@ public class WorldGenUtil { settings = enforcer.enforceGeneratorInWorldGenSettings( registryAccess, key, - loadedStem.typeHolder().unwrapKey().orElseThrow(), + loadedStem.type().unwrapKey().orElseThrow(), loadedChunkGenerator, settings ); diff --git a/src/main/java/org/betterx/worlds/together/mixin/client/CreateWorldScreenMixin.java b/src/main/java/org/betterx/worlds/together/mixin/client/CreateWorldScreenMixin.java index e7b6d495..ead1ca1b 100644 --- a/src/main/java/org/betterx/worlds/together/mixin/client/CreateWorldScreenMixin.java +++ b/src/main/java/org/betterx/worlds/together/mixin/client/CreateWorldScreenMixin.java @@ -1,15 +1,11 @@ package org.betterx.worlds.together.mixin.client; -import org.betterx.worlds.together.levelgen.WorldGenUtil; import org.betterx.worlds.together.world.event.WorldBootstrap; import org.betterx.worlds.together.worldPreset.WorldPresets; -import com.mojang.serialization.JsonOps; import net.minecraft.client.gui.screens.Screen; import net.minecraft.client.gui.screens.worldselection.CreateWorldScreen; import net.minecraft.client.gui.screens.worldselection.WorldGenSettingsComponent; -import net.minecraft.core.RegistryAccess; -import net.minecraft.resources.RegistryOps; import net.minecraft.resources.ResourceKey; import net.minecraft.server.WorldLoader; import net.minecraft.world.level.DataPackConfig; @@ -17,7 +13,6 @@ import net.minecraft.world.level.levelgen.WorldGenSettings; import net.minecraft.world.level.levelgen.presets.WorldPreset; import net.minecraft.world.level.storage.LevelStorageSource; -import com.google.gson.JsonElement; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -65,23 +60,25 @@ public class CreateWorldScreenMixin { //Make sure the WorldGenSettings used to populate the create screen match the default WorldPreset @ModifyArg(method = "openFresh", at = @At(value = "INVOKE", target = "Lnet/minecraft/server/WorldLoader;load(Lnet/minecraft/server/WorldLoader$InitConfig;Lnet/minecraft/server/WorldLoader$WorldDataSupplier;Lnet/minecraft/server/WorldLoader$ResultFactory;Ljava/util/concurrent/Executor;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletableFuture;")) private static WorldLoader.WorldDataSupplier wt_NewDefaultSettings(WorldLoader.WorldDataSupplier worldDataSupplier) { - return (resourceManager, dataPackConfig) -> { -// Pair res = worldDataSupplier.get(resourceManager, dataPackConfig); -// WorldGenSettings defaultGen = net.minecraft.world.level.levelgen.presets.WorldPresets.createNormalWorldFromPreset(frozen); -// WorldBootstrap.InGUI.setDefaultCreateWorldSettings(defaultGen); - RegistryAccess.Writable writable = RegistryAccess.builtinCopy(); - - - WorldGenUtil.preloadWorldPresets(resourceManager, writable); - RegistryOps registryOps = RegistryOps.createAndLoad( - JsonOps.INSTANCE, writable, resourceManager - ); - RegistryAccess.Frozen frozen = writable.freeze(); - WorldBootstrap.InGUI.registryReady(frozen); - - - return WorldGenUtil.defaultWorldDataSupplier(registryOps, frozen); - }; + return worldDataSupplier; + //TODO: 1.19.3 New DataProviders might handle this edge case automatically? +// return (resourceManager, dataPackConfig) -> { +//// Pair res = worldDataSupplier.get(resourceManager, dataPackConfig); +//// WorldGenSettings defaultGen = net.minecraft.world.level.levelgen.presets.WorldPresets.createNormalWorldFromPreset(frozen); +//// WorldBootstrap.InGUI.setDefaultCreateWorldSettings(defaultGen); +// RegistryAccess.Writable writable = RegistryAccess.builtinCopy(); +// +// +// WorldGenUtil.preloadWorldPresets(resourceManager, writable); +// RegistryOps registryOps = RegistryOps.createAndLoad( +// JsonOps.INSTANCE, writable, resourceManager +// ); +// RegistryAccess.Frozen frozen = writable.freeze(); +// WorldBootstrap.InGUI.registryReady(frozen); +// +// +// return WorldGenUtil.defaultWorldDataSupplier(registryOps, frozen); +// }; } //this is called when a new world is first created diff --git a/src/main/java/org/betterx/worlds/together/mixin/client/WorldOpenFlowsMixin.java b/src/main/java/org/betterx/worlds/together/mixin/client/WorldOpenFlowsMixin.java index 8319df0c..94eb128c 100644 --- a/src/main/java/org/betterx/worlds/together/mixin/client/WorldOpenFlowsMixin.java +++ b/src/main/java/org/betterx/worlds/together/mixin/client/WorldOpenFlowsMixin.java @@ -5,10 +5,13 @@ import org.betterx.worlds.together.world.event.WorldBootstrap; import net.minecraft.client.gui.screens.Screen; import net.minecraft.client.gui.screens.worldselection.WorldOpenFlows; +import net.minecraft.core.LayeredRegistryAccess; import net.minecraft.core.RegistryAccess; +import net.minecraft.server.RegistryLayer; import net.minecraft.server.ReloadableServerResources; import net.minecraft.world.level.LevelSettings; -import net.minecraft.world.level.levelgen.WorldGenSettings; +import net.minecraft.world.level.levelgen.WorldDimensions; +import net.minecraft.world.level.levelgen.WorldOptions; import net.minecraft.world.level.storage.LevelStorageSource; import net.minecraft.world.level.storage.WorldData; @@ -19,7 +22,7 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import java.util.Optional; +import java.util.function.Function; @Mixin(WorldOpenFlows.class) public abstract class WorldOpenFlowsMixin { @@ -56,18 +59,19 @@ public abstract class WorldOpenFlowsMixin { public void wt_createFreshLevel( String levelID, LevelSettings levelSettings, - RegistryAccess registryAccess, - WorldGenSettings worldGenSettings, + WorldOptions worldOptions, + Function function, CallbackInfo ci ) { - WorldBootstrap.InFreshLevel.setupNewWorld(levelID, worldGenSettings, this.levelSource, Optional.empty()); + //TODO: 1.19.3 no mor dimensions at this stage... + //WorldBootstrap.InFreshLevel.setupNewWorld(levelID, worldGenSettings, this.levelSource, Optional.empty()); } @Inject(method = "createLevelFromExistingSettings", at = @At("HEAD")) public void wt_createLevelFromExistingSettings( LevelStorageSource.LevelStorageAccess levelStorageAccess, ReloadableServerResources reloadableServerResources, - RegistryAccess.Frozen frozen, + LayeredRegistryAccess layeredRegistryAccess, WorldData worldData, CallbackInfo ci ) { diff --git a/src/main/java/org/betterx/worlds/together/mixin/common/MainMixin.java b/src/main/java/org/betterx/worlds/together/mixin/common/MainMixin.java index 1e9087f5..f364aba0 100644 --- a/src/main/java/org/betterx/worlds/together/mixin/common/MainMixin.java +++ b/src/main/java/org/betterx/worlds/together/mixin/common/MainMixin.java @@ -6,7 +6,6 @@ import com.mojang.serialization.DynamicOps; import net.minecraft.nbt.Tag; import net.minecraft.resources.RegistryOps; import net.minecraft.server.Main; -import net.minecraft.world.level.levelgen.WorldGenSettings; import net.minecraft.world.level.storage.LevelStorageSource; import org.spongepowered.asm.mixin.Mixin; @@ -23,7 +22,7 @@ abstract public class MainMixin { } - @ModifyArg(method = "method_43613", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/storage/LevelStorageSource$LevelStorageAccess;getDataTag(Lcom/mojang/serialization/DynamicOps;Lnet/minecraft/world/level/DataPackConfig;Lcom/mojang/serialization/Lifecycle;)Lnet/minecraft/world/level/storage/WorldData;")) + @ModifyArg(method = "method_43613", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/storage/LevelStorageSource$LevelStorageAccess;getDataTag(Lcom/mojang/serialization/DynamicOps;Lnet/minecraft/world/level/WorldDataConfiguration;Lnet/minecraft/core/Registry;Lcom/mojang/serialization/Lifecycle;)Lcom/mojang/datafixers/util/Pair;")) private static DynamicOps bcl_onCreate(DynamicOps dynamicOps) { if (dynamicOps instanceof RegistryOps regOps) { WorldBootstrap.DedicatedServer.registryReady(regOps); @@ -31,9 +30,10 @@ abstract public class MainMixin { return dynamicOps; } - @ModifyArg(method = "method_43613", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/storage/PrimaryLevelData;(Lnet/minecraft/world/level/LevelSettings;Lnet/minecraft/world/level/levelgen/WorldGenSettings;Lcom/mojang/serialization/Lifecycle;)V")) - private static WorldGenSettings bcl_onCreateLevelData(WorldGenSettings worldGenSettings) { - WorldBootstrap.DedicatedServer.applyDatapackChangesOnNewWorld(worldGenSettings); - return worldGenSettings; - } + //TODO: 1.19.3 this may be obsolete, as datapacks are handled differently now +// @ModifyArg(method = "method_43613", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/storage/PrimaryLevelData;(Lnet/minecraft/world/level/LevelSettings;Lnet/minecraft/world/level/levelgen/WorldOptions;Lnet/minecraft/world/level/storage/PrimaryLevelData$SpecialWorldProperty;Lcom/mojang/serialization/Lifecycle;)V")) +// private static WorldGenSettings bcl_onCreateLevelData(WorldGenSettings worldGenSettings) { +// WorldBootstrap.DedicatedServer.applyDatapackChangesOnNewWorld(worldGenSettings); +// return worldGenSettings; +// } } diff --git a/src/main/java/org/betterx/worlds/together/mixin/common/MinecraftServerMixin.java b/src/main/java/org/betterx/worlds/together/mixin/common/MinecraftServerMixin.java index 047628a9..438ae130 100644 --- a/src/main/java/org/betterx/worlds/together/mixin/common/MinecraftServerMixin.java +++ b/src/main/java/org/betterx/worlds/together/mixin/common/MinecraftServerMixin.java @@ -1,7 +1,5 @@ package org.betterx.worlds.together.mixin.common; -import org.betterx.worlds.together.world.event.WorldBootstrap; - import net.minecraft.core.RegistryAccess; import net.minecraft.server.MinecraftServer; import net.minecraft.server.level.progress.ChunkProgressListener; @@ -29,7 +27,8 @@ public class MinecraftServerMixin { @Inject(method = "createLevels", at = @At(value = "HEAD")) private void together_addSurfaceRules(ChunkProgressListener worldGenerationProgressListener, CallbackInfo ci) { - WorldBootstrap.finalizeWorldGenSettings(this.worldData.worldGenSettings()); + //TODO: 1.19.3 Dimensions are handled differently now + //WorldBootstrap.finalizeWorldGenSettings(this.worldData.worldGenSettings()); } } diff --git a/src/main/java/org/betterx/worlds/together/mixin/common/MinecraftServerMixinLate.java b/src/main/java/org/betterx/worlds/together/mixin/common/MinecraftServerMixinLate.java index 04114378..a01f0a8d 100644 --- a/src/main/java/org/betterx/worlds/together/mixin/common/MinecraftServerMixinLate.java +++ b/src/main/java/org/betterx/worlds/together/mixin/common/MinecraftServerMixinLate.java @@ -1,7 +1,5 @@ package org.betterx.worlds.together.mixin.common; -import org.betterx.worlds.together.chunkgenerator.ChunkGeneratorUtils; - import com.mojang.datafixers.DataFixer; import net.minecraft.server.MinecraftServer; import net.minecraft.server.Services; @@ -31,6 +29,7 @@ public class MinecraftServerMixinLate { ChunkProgressListenerFactory chunkProgressListenerFactory, CallbackInfo ci ) { - ChunkGeneratorUtils.restoreOriginalBiomeSourceInAllDimension(worldStem.worldData().worldGenSettings()); + //TODO: 1.19.3 Dimensions are handled differently now + //ChunkGeneratorUtils.restoreOriginalBiomeSourceInAllDimension(worldStem.worldData().worldGenSettings()); } } diff --git a/src/main/java/org/betterx/worlds/together/mixin/common/PrimaryLevelDataMixin.java b/src/main/java/org/betterx/worlds/together/mixin/common/PrimaryLevelDataMixin.java index 00b58840..e9ce0822 100644 --- a/src/main/java/org/betterx/worlds/together/mixin/common/PrimaryLevelDataMixin.java +++ b/src/main/java/org/betterx/worlds/together/mixin/common/PrimaryLevelDataMixin.java @@ -1,69 +1,50 @@ package org.betterx.worlds.together.mixin.common; -import org.betterx.worlds.together.world.event.WorldBootstrap; - -import com.mojang.datafixers.DataFixer; -import com.mojang.serialization.Dynamic; -import com.mojang.serialization.Lifecycle; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.nbt.Tag; -import net.minecraft.resources.RegistryOps; -import net.minecraft.world.level.LevelSettings; -import net.minecraft.world.level.levelgen.WorldGenSettings; -import net.minecraft.world.level.storage.LevelVersion; import net.minecraft.world.level.storage.PrimaryLevelData; -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.Inject; -import org.spongepowered.asm.mixin.injection.ModifyArg; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - -import java.util.Optional; -import org.jetbrains.annotations.Nullable; @Mixin(PrimaryLevelData.class) public class PrimaryLevelDataMixin { - @Shadow - @Final - private WorldGenSettings worldGenSettings; - private static final ThreadLocal>> bcl_lastRegistryAccess = ThreadLocal.withInitial( - () -> Optional.empty()); - - //This is the way a created (new) world is initializing the PrimaryLevelData - @ModifyArg(method = "(Lnet/minecraft/world/level/LevelSettings;Lnet/minecraft/world/level/levelgen/WorldGenSettings;Lcom/mojang/serialization/Lifecycle;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/storage/PrimaryLevelData;(Lcom/mojang/datafixers/DataFixer;ILnet/minecraft/nbt/CompoundTag;ZIIIFJJIIIZIZZZLnet/minecraft/world/level/border/WorldBorder$Settings;IILjava/util/UUID;Ljava/util/Set;Lnet/minecraft/world/level/timers/TimerQueue;Lnet/minecraft/nbt/CompoundTag;Lnet/minecraft/nbt/CompoundTag;Lnet/minecraft/world/level/LevelSettings;Lnet/minecraft/world/level/levelgen/WorldGenSettings;Lcom/mojang/serialization/Lifecycle;)V")) - private static WorldGenSettings bcl_fixOtherSettings(WorldGenSettings worldGenSettings) { - return WorldBootstrap.enforceInNewWorld(worldGenSettings); - } - - @Inject(method = "parse", at = @At("HEAD")) - private static void bcl_parse( - Dynamic dynamic, - DataFixer dataFixer, - int i, - @Nullable CompoundTag compoundTag, - LevelSettings levelSettings, - LevelVersion levelVersion, - WorldGenSettings worldGenSettings, - Lifecycle lifecycle, - CallbackInfoReturnable cir - ) { - if (dynamic.getOps() instanceof RegistryOps regOps) { - bcl_lastRegistryAccess.set(Optional.of(regOps)); - } - } - - - //This is the way a loaded (existing) world is initializing the PrimaryLevelData - @ModifyArg(method = "parse", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/storage/PrimaryLevelData;(Lcom/mojang/datafixers/DataFixer;ILnet/minecraft/nbt/CompoundTag;ZIIIFJJIIIZIZZZLnet/minecraft/world/level/border/WorldBorder$Settings;IILjava/util/UUID;Ljava/util/Set;Lnet/minecraft/world/level/timers/TimerQueue;Lnet/minecraft/nbt/CompoundTag;Lnet/minecraft/nbt/CompoundTag;Lnet/minecraft/world/level/LevelSettings;Lnet/minecraft/world/level/levelgen/WorldGenSettings;Lcom/mojang/serialization/Lifecycle;)V")) - private static WorldGenSettings bcl_fixSettings(WorldGenSettings settings) { - Optional> registryOps = bcl_lastRegistryAccess.get(); - WorldBootstrap.InGUI.registryReadyOnLoadedWorld(registryOps); - settings = WorldBootstrap.enforceInLoadedWorld(registryOps, settings); - bcl_lastRegistryAccess.set(Optional.empty()); - return settings; - } + //TODO: 1.19.3 This was changed completley +// @Shadow +// @Final +// private WorldGenSettings worldGenSettings; +// private static final ThreadLocal>> bcl_lastRegistryAccess = ThreadLocal.withInitial( +// () -> Optional.empty()); +// +// //This is the way a created (new) world is initializing the PrimaryLevelData +// @ModifyArg(method = "(Lnet/minecraft/world/level/LevelSettings;Lnet/minecraft/world/level/levelgen/WorldGenSettings;Lcom/mojang/serialization/Lifecycle;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/storage/PrimaryLevelData;(Lcom/mojang/datafixers/DataFixer;ILnet/minecraft/nbt/CompoundTag;ZIIIFJJIIIZIZZZLnet/minecraft/world/level/border/WorldBorder$Settings;IILjava/util/UUID;Ljava/util/Set;Lnet/minecraft/world/level/timers/TimerQueue;Lnet/minecraft/nbt/CompoundTag;Lnet/minecraft/nbt/CompoundTag;Lnet/minecraft/world/level/LevelSettings;Lnet/minecraft/world/level/levelgen/WorldGenSettings;Lcom/mojang/serialization/Lifecycle;)V")) +// private static WorldGenSettings bcl_fixOtherSettings(WorldGenSettings worldGenSettings) { +// return WorldBootstrap.enforceInNewWorld(worldGenSettings); +// } +// +// @Inject(method = "parse", at = @At("HEAD")) +// private static void bcl_parse( +// Dynamic dynamic, +// DataFixer dataFixer, +// int i, +// @Nullable CompoundTag compoundTag, +// LevelSettings levelSettings, +// LevelVersion levelVersion, +// WorldGenSettings worldGenSettings, +// Lifecycle lifecycle, +// CallbackInfoReturnable cir +// ) { +// if (dynamic.getOps() instanceof RegistryOps regOps) { +// bcl_lastRegistryAccess.set(Optional.of(regOps)); +// } +// } +// +// +// //This is the way a loaded (existing) world is initializing the PrimaryLevelData +// @ModifyArg(method = "parse", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/storage/PrimaryLevelData;(Lcom/mojang/datafixers/DataFixer;ILnet/minecraft/nbt/CompoundTag;ZIIIFJJIIIZIZZZLnet/minecraft/world/level/border/WorldBorder$Settings;IILjava/util/UUID;Ljava/util/Set;Lnet/minecraft/world/level/timers/TimerQueue;Lnet/minecraft/nbt/CompoundTag;Lnet/minecraft/nbt/CompoundTag;Lnet/minecraft/world/level/LevelSettings;Lnet/minecraft/world/level/levelgen/WorldGenSettings;Lcom/mojang/serialization/Lifecycle;)V")) +// private static WorldGenSettings bcl_fixSettings(WorldGenSettings settings) { +// Optional> registryOps = bcl_lastRegistryAccess.get(); +// WorldBootstrap.InGUI.registryReadyOnLoadedWorld(registryOps); +// settings = WorldBootstrap.enforceInLoadedWorld(registryOps, settings); +// bcl_lastRegistryAccess.set(Optional.empty()); +// return settings; +// } } 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 dc8dc9c2..30fe4893 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,48 +1,35 @@ package org.betterx.worlds.together.mixin.common; -import org.betterx.worlds.together.surfaceRules.AssignedSurfaceRule; -import org.betterx.worlds.together.surfaceRules.SurfaceRuleRegistry; - -import com.mojang.serialization.Codec; -import net.minecraft.client.Minecraft; -import net.minecraft.core.Registry; import net.minecraft.core.RegistryAccess; -import net.minecraft.resources.ResourceKey; -import com.google.common.collect.ImmutableMap; 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; - -import java.util.Map; -import java.util.function.Supplier; @Mixin(RegistryAccess.class) public interface RegistryAccessMixin { - @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( - Supplier>, RegistryAccess.RegistryData>> supplier - ) { - - return () -> { - Map>, RegistryAccess.RegistryData> res = supplier.get(); - ImmutableMap.Builder>, RegistryAccess.RegistryData> builder = ImmutableMap.builder(); - - builder.putAll(res); - put(builder, SurfaceRuleRegistry.SURFACE_RULES_REGISTRY, AssignedSurfaceRule.CODEC); - return builder.build(); - }; - } - - @Shadow - static void put( - ImmutableMap.Builder>, RegistryAccess.RegistryData> builder, - ResourceKey> resourceKey, - Codec codec - ) { - throw new RuntimeException("Shadowed Call"); - } + //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( +// Supplier>, RegistryAccess.RegistryData>> supplier +// ) { +// +// return () -> { +// Map>, RegistryAccess.RegistryData> res = supplier.get(); +// ImmutableMap.Builder>, RegistryAccess.RegistryData> builder = ImmutableMap.builder(); +// +// builder.putAll(res); +// put(builder, SurfaceRuleRegistry.SURFACE_RULES_REGISTRY, AssignedSurfaceRule.CODEC); +// return builder.build(); +// }; +// } +// +// @Shadow +// static void put( +// ImmutableMap.Builder>, RegistryAccess.RegistryData> builder, +// ResourceKey> resourceKey, +// Codec codec +// ) { +// throw new RuntimeException("Shadowed Call"); +// } } diff --git a/src/main/java/org/betterx/worlds/together/mixin/common/WorldGenPropertiesMixin.java b/src/main/java/org/betterx/worlds/together/mixin/common/WorldGenPropertiesMixin.java index 99ae7a09..cc1af635 100644 --- a/src/main/java/org/betterx/worlds/together/mixin/common/WorldGenPropertiesMixin.java +++ b/src/main/java/org/betterx/worlds/together/mixin/common/WorldGenPropertiesMixin.java @@ -10,7 +10,7 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.ModifyArg; -@Mixin(DedicatedServerProperties.WorldGenProperties.class) +@Mixin(DedicatedServerProperties.WorldDimensionData.class) public class WorldGenPropertiesMixin { // @ModifyArg(method = "create", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/levelgen/presets/WorldPreset;createWorldGenSettings(JZZ)Lnet/minecraft/world/level/levelgen/WorldGenSettings;")) // public long wt_getSeed(long seed) { diff --git a/src/main/java/org/betterx/worlds/together/surfaceRules/SurfaceRuleUtil.java b/src/main/java/org/betterx/worlds/together/surfaceRules/SurfaceRuleUtil.java index 2002bd12..b95455fa 100644 --- a/src/main/java/org/betterx/worlds/together/surfaceRules/SurfaceRuleUtil.java +++ b/src/main/java/org/betterx/worlds/together/surfaceRules/SurfaceRuleUtil.java @@ -84,7 +84,7 @@ public class SurfaceRuleUtil { } public static void injectSurfaceRulesToAllDimensions(WorldGenSettings settings) { - for (var entry : settings.dimensions().entrySet()) { + for (var entry : settings.dimensions().dimensions().entrySet()) { ResourceKey key = entry.getKey(); LevelStem stem = entry.getValue(); diff --git a/src/main/java/org/betterx/worlds/together/world/event/AdaptWorldPresetSettingEvent.java b/src/main/java/org/betterx/worlds/together/world/event/AdaptWorldPresetSettingEvent.java index 06ff376f..8ba5bf68 100644 --- a/src/main/java/org/betterx/worlds/together/world/event/AdaptWorldPresetSettingEvent.java +++ b/src/main/java/org/betterx/worlds/together/world/event/AdaptWorldPresetSettingEvent.java @@ -1,15 +1,15 @@ package org.betterx.worlds.together.world.event; import net.minecraft.core.Holder; -import net.minecraft.world.level.levelgen.WorldGenSettings; +import net.minecraft.world.level.levelgen.WorldDimensions; import net.minecraft.world.level.levelgen.presets.WorldPreset; import java.util.Optional; public class AdaptWorldPresetSettingEvent extends EventImpl { - public Optional> emit(Optional> start, WorldGenSettings settings) { + public Optional> emit(Optional> start, WorldDimensions worldDims) { for (OnAdaptWorldPresetSettings a : handlers) { - start = a.adapt(start, settings); + start = a.adapt(start, worldDims); } return start; } diff --git a/src/main/java/org/betterx/worlds/together/world/event/OnAdaptWorldPresetSettings.java b/src/main/java/org/betterx/worlds/together/world/event/OnAdaptWorldPresetSettings.java index f333dd90..277f4057 100644 --- a/src/main/java/org/betterx/worlds/together/world/event/OnAdaptWorldPresetSettings.java +++ b/src/main/java/org/betterx/worlds/together/world/event/OnAdaptWorldPresetSettings.java @@ -1,7 +1,7 @@ package org.betterx.worlds.together.world.event; import net.minecraft.core.Holder; -import net.minecraft.world.level.levelgen.WorldGenSettings; +import net.minecraft.world.level.levelgen.WorldDimensions; import net.minecraft.world.level.levelgen.presets.WorldPreset; import java.util.Optional; @@ -10,6 +10,6 @@ import java.util.Optional; public interface OnAdaptWorldPresetSettings { Optional> adapt( Optional> currentPreset, - WorldGenSettings worldGenSettings + WorldDimensions worldDims ); } 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 6f95717f..7617af9f 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 @@ -22,6 +22,7 @@ import net.minecraft.resources.RegistryOps; import net.minecraft.resources.ResourceKey; import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.dimension.LevelStem; +import net.minecraft.world.level.levelgen.WorldDimensions; import net.minecraft.world.level.levelgen.WorldGenSettings; import net.minecraft.world.level.levelgen.presets.WorldPreset; import net.minecraft.world.level.storage.LevelResource; @@ -42,7 +43,8 @@ public class WorldBootstrap { } public static RegistryAccess getLastRegistryAccessOrElseBuiltin() { - if (LAST_REGISTRY_ACCESS == null) return BuiltinRegistries.ACCESS; + //TODO: 1.19.3 ther no longer is a general builtin ACCESS + if (LAST_REGISTRY_ACCESS == null) return BuiltinRegistries.createAccess(); return LAST_REGISTRY_ACCESS; } @@ -92,10 +94,10 @@ public class WorldBootstrap { if (currentPreset.isPresent() && LAST_REGISTRY_ACCESS != null) { var presetKey = currentPreset.get().unwrapKey(); if (presetKey.isPresent()) { - Optional> newPreset = LAST_REGISTRY_ACCESS + Optional> newPreset = LAST_REGISTRY_ACCESS .registryOrThrow(Registry.WORLD_PRESET_REGISTRY) .getHolder(presetKey.get()); - if (newPreset.isPresent()) currentPreset = newPreset; + if (newPreset.isPresent()) currentPreset = (Optional>) (Optional) newPreset; } } return currentPreset; @@ -131,15 +133,15 @@ public class WorldBootstrap { } //Needs to get called after setupWorld - public static void applyDatapackChangesOnNewWorld(WorldGenSettings worldGenSettings) { + public static void applyDatapackChangesOnNewWorld(WorldDimensions worldDims) { Optional> currentPreset = Optional.of(Helpers.defaultServerPreset()); - currentPreset = WorldEventsImpl.ADAPT_WORLD_PRESET.emit(currentPreset, worldGenSettings); + currentPreset = WorldEventsImpl.ADAPT_WORLD_PRESET.emit(currentPreset, worldDims); if (currentPreset.map(Holder::value).orElse(null) instanceof WorldPresetAccessor acc) { TogetherWorldPreset.writeWorldPresetSettings(acc.bcl_getDimensions()); } else { WorldsTogether.LOGGER.error("Failed writing together File"); - TogetherWorldPreset.writeWorldPresetSettings(worldGenSettings.dimensions()); + TogetherWorldPreset.writeWorldPresetSettings(worldDims.dimensions()); } WorldEventsImpl.ON_WORLD_LOAD.emit(OnWorldLoad::onLoad); } @@ -171,7 +173,8 @@ public class WorldBootstrap { Optional> newPreset = setupNewWorldCommon( levelStorageAccess.get(), currentPreset, - worldGenSettingsComponent.settings().worldGenSettings() + //TODO: 1.19.13 see if this is the correct Dimensions list + worldGenSettingsComponent.settings().selectedDimensions() ); if (newPreset != currentPreset) { acc.bcl_setPreset(newPreset); @@ -188,7 +191,7 @@ public class WorldBootstrap { static Optional> setupNewWorldCommon( LevelStorageSource.LevelStorageAccess levelStorageAccess, Optional> currentPreset, - WorldGenSettings worldGenSettings + WorldDimensions worldDims ) { Helpers.initializeWorldConfig(levelStorageAccess, true); @@ -208,13 +211,13 @@ public class WorldBootstrap { true )); - currentPreset = WorldEventsImpl.ADAPT_WORLD_PRESET.emit(currentPreset, worldGenSettings); + currentPreset = WorldEventsImpl.ADAPT_WORLD_PRESET.emit(currentPreset, worldDims); if (currentPreset.map(Holder::value).orElse(null) instanceof WorldPresetAccessor acc) { TogetherWorldPreset.writeWorldPresetSettings(acc.bcl_getDimensions()); } else { WorldsTogether.LOGGER.error("Failed writing together File"); - TogetherWorldPreset.writeWorldPresetSettings(worldGenSettings.dimensions()); + TogetherWorldPreset.writeWorldPresetSettings(worldDims.dimensions()); } //LifeCycleAPI._runBeforeLevelLoad(); @@ -281,13 +284,13 @@ public class WorldBootstrap { public static class InFreshLevel { public static void setupNewWorld( String levelID, - WorldGenSettings worldGenSettings, + WorldDimensions worldDims, LevelStorageSource levelSource, Optional> worldPreset ) { try { var levelStorageAccess = levelSource.createAccess(levelID); - InGUI.setupNewWorldCommon(levelStorageAccess, worldPreset, worldGenSettings); + InGUI.setupNewWorldCommon(levelStorageAccess, worldPreset, worldDims); levelStorageAccess.close(); } catch (Exception e) { WorldsTogether.LOGGER.error("Failed to initialize data in world", e); @@ -297,7 +300,7 @@ public class WorldBootstrap { public static void finalizeWorldGenSettings(WorldGenSettings worldGenSettings) { String output = "World Dimensions: "; - for (var entry : worldGenSettings.dimensions().entrySet()) { + for (var entry : worldGenSettings.dimensions().dimensions().entrySet()) { WorldEventsImpl.ON_FINALIZE_LEVEL_STEM.emit(e -> e.now( worldGenSettings, entry.getKey(), @@ -320,13 +323,13 @@ public class WorldBootstrap { WorldEventsImpl.ON_FINALIZED_WORLD_LOAD.emit(e -> e.done(worldGenSettings)); } - public static WorldGenSettings enforceInNewWorld(WorldGenSettings worldGenSettings) { + public static WorldDimensions enforceInNewWorld(WorldDimensions worldGenSettings) { return WorldGenUtil.repairBiomeSourceInAllDimensions(LAST_REGISTRY_ACCESS, worldGenSettings); } - public static WorldGenSettings enforceInLoadedWorld( + public static WorldDimensions enforceInLoadedWorld( Optional> registryOps, - WorldGenSettings worldGenSettings + WorldDimensions worldGenSettings ) { if (registryOps.orElse(null) instanceof RegistryOpsAccessor acc) { return WorldGenUtil.repairBiomeSourceInAllDimensions(acc.bcl_getRegistryAccess(), worldGenSettings); diff --git a/src/main/java/org/betterx/worlds/together/worldPreset/TogetherWorldPreset.java b/src/main/java/org/betterx/worlds/together/worldPreset/TogetherWorldPreset.java index 2ea951e7..b6b74506 100644 --- a/src/main/java/org/betterx/worlds/together/worldPreset/TogetherWorldPreset.java +++ b/src/main/java/org/betterx/worlds/together/worldPreset/TogetherWorldPreset.java @@ -13,7 +13,6 @@ import com.mojang.serialization.Dynamic; import com.mojang.serialization.codecs.RecordCodecBuilder; import net.minecraft.core.Registry; import net.minecraft.core.RegistryAccess; -import net.minecraft.data.BuiltinRegistries; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.NbtOps; import net.minecraft.nbt.Tag; @@ -108,11 +107,13 @@ public class TogetherWorldPreset extends WorldPreset { try { final RegistryAccess registryAccess = WorldBootstrap.getLastRegistryAccessOrElseBuiltin(); boolean globalRegistry = false; - if (registryAccess == BuiltinRegistries.ACCESS) { + //TODO: 1.19.3 there is no longer a builtin registry acccess + /*if (registryAccess == BuiltinRegistries.ACCESS) { if (Configs.MAIN_CONFIG.verboseLogging()) BCLib.LOGGER.info("Loading from builtin Registry"); globalRegistry = true; - } else { + } else */ + { if (Configs.MAIN_CONFIG.verboseLogging()) BCLib.LOGGER.info("Loading from datapack Registry"); } @@ -145,11 +146,7 @@ public class TogetherWorldPreset extends WorldPreset { return preset .get() .value() - .createWorldGenSettings( - 0, - true, - true - ) + .createWorldDimensions() .dimensions(); } 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 a77273f7..c75edbe8 100644 --- a/src/main/java/org/betterx/worlds/together/worldPreset/WorldPresets.java +++ b/src/main/java/org/betterx/worlds/together/worldPreset/WorldPresets.java @@ -31,7 +31,8 @@ public class WorldPresets { private static ResourceKey DEFAULT = net.minecraft.world.level.levelgen.presets.WorldPresets.NORMAL; public static Holder get(RegistryAccess access, ResourceKey key) { - return ((access != null) ? access : BuiltinRegistries.ACCESS) + //TODO: 1.19.3 there is no longer a builtin registry acccess + return ((access != null) ? access : BuiltinRegistries.createAccess()) .registryOrThrow(Registry.WORLD_PRESET_REGISTRY) .getHolderOrThrow(key); } diff --git a/src/main/resources/bclib.accesswidener b/src/main/resources/bclib.accesswidener index a9751021..3edfe56a 100644 --- a/src/main/resources/bclib.accesswidener +++ b/src/main/resources/bclib.accesswidener @@ -13,9 +13,10 @@ extendable class net/minecraft/world/level/levelgen/NoiseBasedChunkGenerator accessible class net/minecraft/data/BuiltinRegistries$RegistryBootstrap accessible class net/minecraft/core/Registry$RegistryBootstrap accessible class net/minecraft/world/level/levelgen/SurfaceRules$SequenceRuleSource +accessible class net/minecraft/server/dedicated/DedicatedServerProperties$WorldDimensionData #Methods -accessible method net/minecraft/client/gui/screens/worldselection/WorldGenSettingsComponent updateSettings (Lnet/minecraft/client/gui/screens/worldselection/WorldCreationContext$Updater;)V +accessible method net/minecraft/client/gui/screens/worldselection/WorldGenSettingsComponent updateSettings (Lnet/minecraft/client/gui/screens/worldselection/WorldCreationContext$DimensionsUpdater;)V accessible method net/minecraft/world/level/storage/loot/LootPool ([Lnet/minecraft/world/level/storage/loot/entries/LootPoolEntryContainer;[Lnet/minecraft/world/level/storage/loot/predicates/LootItemCondition;[Lnet/minecraft/world/level/storage/loot/functions/LootItemFunction;Lnet/minecraft/world/level/storage/loot/providers/number/NumberProvider;Lnet/minecraft/world/level/storage/loot/providers/number/NumberProvider;)V accessible method net/minecraft/world/entity/ai/village/poi/PoiTypes register (Lnet/minecraft/core/Registry;Lnet/minecraft/resources/ResourceKey;Ljava/util/Set;II)Lnet/minecraft/world/entity/ai/village/poi/PoiType; accessible method net/minecraft/world/level/levelgen/SurfaceRules$SequenceRuleSource (Ljava/util/List;)V diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 136543ef..3fe45458 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -46,12 +46,10 @@ "bclib.mixins.client.json" ], "depends": { - "fabricloader": ">=0.14.8", - "fabric": ">=0.58.0", + "fabricloader": ">=0.14.10", + "fabric": ">=0.65.0", "minecraft": [ - "1.19", - "1.19.1", - "1.19.2" + "1.19.3-alpha.22.42.a" ] }, "custom": {