From d065f78c0aa35cb6c88c370648b4569cdecdb667 Mon Sep 17 00:00:00 2001 From: dfsek Date: Wed, 17 Mar 2021 21:17:15 -0700 Subject: [PATCH 01/18] mostly working 1.17-ification --- .../world/palette/holder/PaletteHolder.java | 7 +++-- .../palette/holder/PaletteHolderBuilder.java | 9 ++++-- .../interpolation/ChunkInterpolator3D.java | 6 ++-- platforms/fabric/build.gradle.kts | 8 ++--- .../dfsek/terra/fabric/TerraFabricPlugin.java | 2 +- .../mixin/StructureAccessorAccessor.java | 12 +++++++ .../terra/fabric/world/TerraBiomeSource.java | 2 +- .../world/block/state/FabricBlockState.java | 2 +- .../world/block/state/FabricMobSpawner.java | 2 +- .../fabric/world/block/state/FabricSign.java | 10 +++--- .../world/features/PopulatorFeature.java | 9 ++++-- .../FabricChunkGeneratorWrapper.java | 31 +++++++++++-------- .../fabric/world/handles/FabricWorld.java | 4 +-- .../world/FabricSeededWorldAccess.java | 6 ++-- .../handles/world/FabricWorldAccess.java | 4 +-- .../fabric/src/main/resources/fabric.mod.json | 2 +- .../src/main/resources/terra.accesswidener | 3 +- .../src/main/resources/terra.mixins.json | 1 + 18 files changed, 74 insertions(+), 46 deletions(-) create mode 100644 platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/StructureAccessorAccessor.java diff --git a/common/src/main/java/com/dfsek/terra/api/world/palette/holder/PaletteHolder.java b/common/src/main/java/com/dfsek/terra/api/world/palette/holder/PaletteHolder.java index 2b4704cac..3bf7e63a1 100644 --- a/common/src/main/java/com/dfsek/terra/api/world/palette/holder/PaletteHolder.java +++ b/common/src/main/java/com/dfsek/terra/api/world/palette/holder/PaletteHolder.java @@ -5,12 +5,15 @@ import com.dfsek.terra.api.world.palette.Palette; public class PaletteHolder { private final Palette[] palettes; + private final int offset; - protected PaletteHolder(Palette[] palettes) { + protected PaletteHolder(Palette[] palettes, int offset) { this.palettes = palettes; + this.offset = offset; } public Palette getPalette(int y) { - return palettes[y]; + int index = y + offset; + return index >= 0 ? palettes[index] : palettes[0]; } } diff --git a/common/src/main/java/com/dfsek/terra/api/world/palette/holder/PaletteHolderBuilder.java b/common/src/main/java/com/dfsek/terra/api/world/palette/holder/PaletteHolderBuilder.java index 2cc72764b..c3b00368c 100644 --- a/common/src/main/java/com/dfsek/terra/api/world/palette/holder/PaletteHolderBuilder.java +++ b/common/src/main/java/com/dfsek/terra/api/world/palette/holder/PaletteHolderBuilder.java @@ -17,7 +17,10 @@ public class PaletteHolderBuilder { @SuppressWarnings({"unchecked", "rawtypes", "RedundantSuppression"}) public PaletteHolder build() { - Palette[] palettes = new Palette[paletteMap.lastKey() + 1]; + + int min = FastMath.min(paletteMap.keySet().stream().min(Integer::compareTo).orElse(0), 0); + + Palette[] palettes = new Palette[paletteMap.lastKey() + 1 - min]; for(int y = 0; y <= FastMath.max(paletteMap.lastKey(), 255); y++) { Palette d = null; for(Map.Entry> e : paletteMap.entrySet()) { @@ -27,8 +30,8 @@ public class PaletteHolderBuilder { } } if(d == null) throw new IllegalArgumentException("No palette for Y=" + y); - palettes[y] = d; + palettes[y - min] = d; } - return new PaletteHolder(palettes); + return new PaletteHolder(palettes, -min); } } diff --git a/common/src/main/java/com/dfsek/terra/world/generation/math/interpolation/ChunkInterpolator3D.java b/common/src/main/java/com/dfsek/terra/world/generation/math/interpolation/ChunkInterpolator3D.java index 727a8e25e..9d71d8774 100644 --- a/common/src/main/java/com/dfsek/terra/world/generation/math/interpolation/ChunkInterpolator3D.java +++ b/common/src/main/java/com/dfsek/terra/world/generation/math/interpolation/ChunkInterpolator3D.java @@ -59,7 +59,7 @@ public class ChunkInterpolator3D implements ChunkInterpolator { } for(int y = 0; y < size + 1; y++) { - noiseStorage[x][z][y] = computeNoise(genMap, (x << 2) + xOrigin, y << 2, (z << 2) + zOrigin); + noiseStorage[x][z][y] = computeNoise(genMap, (x << 2) + xOrigin, (y << 2) + min, (z << 2) + zOrigin); } } } @@ -98,10 +98,10 @@ public class ChunkInterpolator3D implements ChunkInterpolator { */ @Override public double getNoise(double x, double y, double z) { - return interpGrid[reRange(((int) x) / 4, 3)][FastMath.max(FastMath.min(((int) y), max), min) / 4][reRange(((int) z) / 4, 3)].trilerp((x % 4) / 4, (y % 4) / 4, (z % 4) / 4); + return interpGrid[reRange(((int) x) / 4, 3)][(FastMath.max(FastMath.min(((int) y), max), min) - min) / 4][reRange(((int) z) / 4, 3)].trilerp((x % 4) / 4, (y % 4) / 4, (z % 4) / 4); } public double getNoise(int x, int y, int z) { - return interpGrid[x / 4][y / 4][z / 4].trilerp((double) (x % 4) / 4, (double) (y % 4) / 4, (double) (z % 4) / 4); + return interpGrid[x / 4][(y - min) / 4][z / 4].trilerp((double) (x % 4) / 4, (double) (y % 4) / 4, (double) (z % 4) / 4); } } diff --git a/platforms/fabric/build.gradle.kts b/platforms/fabric/build.gradle.kts index 2e085d24d..b66976f8e 100644 --- a/platforms/fabric/build.gradle.kts +++ b/platforms/fabric/build.gradle.kts @@ -22,11 +22,11 @@ dependencies { "shadedImplementation"("org.yaml:snakeyaml:1.27") "shadedImplementation"("com.googlecode.json-simple:json-simple:1.1.1") - "minecraft"("com.mojang:minecraft:1.16.5") - "mappings"("net.fabricmc:yarn:1.16.5+build.5:v2") - "modImplementation"("net.fabricmc:fabric-loader:0.11.2") + "minecraft"("com.mojang:minecraft:21w11a") + "mappings"("net.fabricmc:yarn:21w11a+build.3:v2") + "modImplementation"("net.fabricmc:fabric-loader:0.11.3") - "modImplementation"("net.fabricmc.fabric-api:fabric-api:0.31.0+1.16") + "modImplementation"("net.fabricmc.fabric-api:fabric-api:0.32.4+1.17") } tasks.named("shadowJar") { diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/TerraFabricPlugin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/TerraFabricPlugin.java index ea17d400f..a046b5cf7 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/TerraFabricPlugin.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/TerraFabricPlugin.java @@ -406,7 +406,7 @@ public class TerraFabricPlugin implements TerraPlugin, ModInitializer { injectTree(treeRegistry, "LARGE_OAK", ConfiguredFeatures.FANCY_OAK); injectTree(treeRegistry, "LARGE_SPRUCE", ConfiguredFeatures.PINE); injectTree(treeRegistry, "SMALL_JUNGLE", ConfiguredFeatures.JUNGLE_TREE); - injectTree(treeRegistry, "SWAMP_OAK", ConfiguredFeatures.SWAMP_TREE); + injectTree(treeRegistry, "SWAMP_OAK", ConfiguredFeatures.SWAMP_OAK); injectTree(treeRegistry, "TALL_BIRCH", ConfiguredFeatures.BIRCH_TALL); injectTree(treeRegistry, "ACACIA", ConfiguredFeatures.ACACIA); injectTree(treeRegistry, "BIRCH", ConfiguredFeatures.BIRCH); diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/StructureAccessorAccessor.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/StructureAccessorAccessor.java new file mode 100644 index 000000000..888c8cd83 --- /dev/null +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/StructureAccessorAccessor.java @@ -0,0 +1,12 @@ +package com.dfsek.terra.fabric.mixin; + +import net.minecraft.world.WorldAccess; +import net.minecraft.world.gen.StructureAccessor; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +@Mixin(StructureAccessor.class) +public interface StructureAccessorAccessor { + @Accessor + WorldAccess getWorld(); +} diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/TerraBiomeSource.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/TerraBiomeSource.java index 46b628eac..f64fc55c6 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/TerraBiomeSource.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/TerraBiomeSource.java @@ -7,8 +7,8 @@ import com.dfsek.terra.fabric.TerraFabricPlugin; import com.mojang.serialization.Codec; import com.mojang.serialization.codecs.RecordCodecBuilder; import net.minecraft.util.Identifier; +import net.minecraft.util.dynamic.RegistryLookupCodec; import net.minecraft.util.registry.Registry; -import net.minecraft.util.registry.RegistryLookupCodec; import net.minecraft.world.biome.Biome; import net.minecraft.world.biome.source.BiomeSource; import net.minecraft.world.gen.feature.StructureFeature; diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/block/state/FabricBlockState.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/block/state/FabricBlockState.java index d0dbf5bf4..2f7a68889 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/block/state/FabricBlockState.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/block/state/FabricBlockState.java @@ -67,7 +67,7 @@ public class FabricBlockState implements BlockState { @Override public boolean update(boolean applyPhysics) { - worldAccess.getChunk(blockEntity.getPos()).setBlockEntity(blockEntity.getPos(), blockEntity); + worldAccess.getChunk(blockEntity.getPos()).setBlockEntity(blockEntity); return true; } } diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/block/state/FabricMobSpawner.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/block/state/FabricMobSpawner.java index 8486e20c9..dd0012e37 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/block/state/FabricMobSpawner.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/block/state/FabricMobSpawner.java @@ -19,7 +19,7 @@ public class FabricMobSpawner extends FabricBlockState implements MobSpawner { / @Override public EntityType getSpawnedType() { - return FabricAdapter.adapt(Registry.ENTITY_TYPE.get(((MobSpawnerBlockEntity) blockEntity).getLogic().getEntityId())); + return FabricAdapter.adapt(Registry.ENTITY_TYPE.get(((MobSpawnerBlockEntity) blockEntity).getLogic().getEntityId(blockEntity.getWorld(), blockEntity.getPos()))); } @Override diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/block/state/FabricSign.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/block/state/FabricSign.java index 382e05387..367b4a511 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/block/state/FabricSign.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/block/state/FabricSign.java @@ -17,16 +17,16 @@ public class FabricSign extends FabricBlockState implements Sign { SignBlockEntity sign = (SignBlockEntity) blockEntity; return new String[] { - sign.getTextOnRow(0).asString(), - sign.getTextOnRow(1).asString(), - sign.getTextOnRow(2).asString(), - sign.getTextOnRow(3).asString() + sign.getTextOnRow(0, false).asString(), + sign.getTextOnRow(1, false).asString(), + sign.getTextOnRow(2, false).asString(), + sign.getTextOnRow(3, false).asString() }; } @Override public @NotNull String getLine(int index) throws IndexOutOfBoundsException { - return ((SignBlockEntity) blockEntity).getTextOnRow(index).asString(); + return ((SignBlockEntity) blockEntity).getTextOnRow(index, false).asString(); } @Override diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/features/PopulatorFeature.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/features/PopulatorFeature.java index fdb39fe78..7e680de95 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/features/PopulatorFeature.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/features/PopulatorFeature.java @@ -11,8 +11,7 @@ import net.minecraft.world.StructureWorldAccess; import net.minecraft.world.gen.chunk.ChunkGenerator; import net.minecraft.world.gen.feature.DefaultFeatureConfig; import net.minecraft.world.gen.feature.Feature; - -import java.util.Random; +import net.minecraft.world.gen.feature.util.FeatureContext; /** * Feature wrapper for Terra populator @@ -23,7 +22,10 @@ public class PopulatorFeature extends Feature { } @Override - public boolean generate(StructureWorldAccess world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, DefaultFeatureConfig config) { + public boolean generate(FeatureContext context) { + ChunkGenerator chunkGenerator = context.getGenerator(); + StructureWorldAccess world = context.getWorld(); + BlockPos pos = context.getOrigin(); FabricChunkGeneratorWrapper gen = (FabricChunkGeneratorWrapper) chunkGenerator; FabricChunkWorldAccess chunk = new FabricChunkWorldAccess(world, pos.getX() >> 4, pos.getZ() >> 4); FabricWorld world1 = new FabricWorld(world.toServerWorld(), new FabricChunkGenerator(chunkGenerator)); @@ -33,5 +35,6 @@ public class PopulatorFeature extends Feature { gen.getTreePopulator().populate(world1, chunk); gen.getFloraPopulator().populate(world1, chunk); return true; + } } diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/generator/FabricChunkGeneratorWrapper.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/generator/FabricChunkGeneratorWrapper.java index cb7ebe8b8..0469ab506 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/generator/FabricChunkGeneratorWrapper.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/generator/FabricChunkGeneratorWrapper.java @@ -5,6 +5,7 @@ import com.dfsek.terra.api.util.FastRandom; import com.dfsek.terra.api.world.generation.TerraChunkGenerator; import com.dfsek.terra.config.pack.ConfigPack; import com.dfsek.terra.fabric.TerraFabricPlugin; +import com.dfsek.terra.fabric.mixin.StructureAccessorAccessor; import com.dfsek.terra.fabric.world.TerraBiomeSource; import com.dfsek.terra.fabric.world.handles.world.FabricSeededWorldAccess; import com.dfsek.terra.world.generation.generators.DefaultChunkGenerator3D; @@ -20,10 +21,9 @@ import net.minecraft.block.Blocks; import net.minecraft.structure.StructureManager; import net.minecraft.util.math.ChunkPos; import net.minecraft.util.registry.DynamicRegistryManager; -import net.minecraft.world.BlockView; import net.minecraft.world.ChunkRegion; +import net.minecraft.world.HeightLimitView; import net.minecraft.world.Heightmap; -import net.minecraft.world.WorldAccess; import net.minecraft.world.biome.source.BiomeAccess; import net.minecraft.world.chunk.Chunk; import net.minecraft.world.gen.GenerationStep; @@ -32,6 +32,9 @@ import net.minecraft.world.gen.chunk.ChunkGenerator; import net.minecraft.world.gen.chunk.StructuresConfig; import net.minecraft.world.gen.chunk.VerticalBlockSample; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.Executor; + public class FabricChunkGeneratorWrapper extends ChunkGenerator implements GeneratorWrapper { private final long seed; private final DefaultChunkGenerator3D delegate; @@ -108,12 +111,6 @@ public class FabricChunkGeneratorWrapper extends ChunkGenerator implements Gener super.generateFeatures(region, accessor); } - @Override - public void populateNoise(WorldAccess world, StructureAccessor accessor, Chunk chunk) { - FabricSeededWorldAccess worldAccess = new FabricSeededWorldAccess(world, seed, this); - delegate.generateChunkData(worldAccess, new FastRandom(), chunk.getPos().x, chunk.getPos().z, new FabricChunkData(chunk)); - } - @Override public void carve(long seed, BiomeAccess access, Chunk chunk, GenerationStep.Carver carver) { // No caves @@ -125,17 +122,19 @@ public class FabricChunkGeneratorWrapper extends ChunkGenerator implements Gener } @Override - public boolean isStrongholdStartingChunk(ChunkPos chunkPos) { - return false; + public CompletableFuture populateNoise(Executor executor, StructureAccessor accessor, Chunk chunk) { + FabricSeededWorldAccess worldAccess = new FabricSeededWorldAccess(((StructureAccessorAccessor) accessor).getWorld(), seed, this); + delegate.generateChunkData(worldAccess, new FastRandom(), chunk.getPos().x, chunk.getPos().z, new FabricChunkData(chunk)); + return CompletableFuture.completedFuture(chunk); } @Override - public int getHeight(int x, int z, Heightmap.Type heightmapType) { + public int getHeight(int x, int z, Heightmap.Type heightmap, HeightLimitView world) { return 0; } @Override - public BlockView getColumnSample(int x, int z) { + public VerticalBlockSample getColumnSample(int x, int z, HeightLimitView world) { int height = 64; // TODO: implementation BlockState[] array = new BlockState[256]; for(int y = 255; y >= 0; y--) { @@ -150,9 +149,15 @@ public class FabricChunkGeneratorWrapper extends ChunkGenerator implements Gener } } - return new VerticalBlockSample(array); + return new VerticalBlockSample(world.getBottomY(), array); } + @Override + public boolean isStrongholdStartingChunk(ChunkPos chunkPos) { + return false; + } + + @Override public TerraChunkGenerator getHandle() { return delegate; diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/handles/FabricWorld.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/handles/FabricWorld.java index 097ddfcb1..54609e286 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/handles/FabricWorld.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/handles/FabricWorld.java @@ -35,7 +35,7 @@ public class FabricWorld implements World, FabricWorldHandle { @Override public int getMaxHeight() { - return delegate.world.getHeight(); + return delegate.world.getHeight() + delegate.world.getBottomY(); } @Override @@ -95,7 +95,7 @@ public class FabricWorld implements World, FabricWorldHandle { @Override public int getMinHeight() { - return 0; + return delegate.world.getBottomY(); } @Override diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/handles/world/FabricSeededWorldAccess.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/handles/world/FabricSeededWorldAccess.java index 05b1dbb1e..2adf9fe69 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/handles/world/FabricSeededWorldAccess.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/handles/world/FabricSeededWorldAccess.java @@ -34,7 +34,7 @@ public class FabricSeededWorldAccess implements World, FabricWorldHandle { @Override public int getMaxHeight() { - return handle.getWorldAccess().getDimensionHeight(); + return handle.worldAccess.getHeight() + handle.worldAccess.getBottomY(); } @Override @@ -49,7 +49,7 @@ public class FabricSeededWorldAccess implements World, FabricWorldHandle { @Override public UUID getUID() { - return UUID.randomUUID(); // TODO: implementation + return null; // TODO: implementation } @Override @@ -83,7 +83,7 @@ public class FabricSeededWorldAccess implements World, FabricWorldHandle { @Override public int getMinHeight() { - return 0; + return handle.worldAccess.getBottomY(); } @Override diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/handles/world/FabricWorldAccess.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/handles/world/FabricWorldAccess.java index 8cb464353..787ed999c 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/handles/world/FabricWorldAccess.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/handles/world/FabricWorldAccess.java @@ -33,7 +33,7 @@ public class FabricWorldAccess implements World, FabricWorldHandle { @Override public int getMaxHeight() { - return delegate.getDimensionHeight(); + return delegate.getHeight() + delegate.getBottomY(); } @Override @@ -82,7 +82,7 @@ public class FabricWorldAccess implements World, FabricWorldHandle { @Override public int getMinHeight() { - return 0; + return delegate.getBottomY(); } @Override diff --git a/platforms/fabric/src/main/resources/fabric.mod.json b/platforms/fabric/src/main/resources/fabric.mod.json index d86abc872..09b2cb8fc 100644 --- a/platforms/fabric/src/main/resources/fabric.mod.json +++ b/platforms/fabric/src/main/resources/fabric.mod.json @@ -25,7 +25,7 @@ "depends": { "fabricloader": ">=0.7.4", "fabric": "*", - "minecraft": "1.16.x" + "minecraft": "1.17.x" }, "accessWidener": "terra.accesswidener" } \ No newline at end of file diff --git a/platforms/fabric/src/main/resources/terra.accesswidener b/platforms/fabric/src/main/resources/terra.accesswidener index fcf59a730..497a498f5 100644 --- a/platforms/fabric/src/main/resources/terra.accesswidener +++ b/platforms/fabric/src/main/resources/terra.accesswidener @@ -4,7 +4,7 @@ extendable method net/minecraft/client/world/GeneratorType (Ljava/lang/St accessible field net/minecraft/server/world/ServerWorld worldProperties Lnet/minecraft/world/level/ServerWorldProperties; -accessible method net/minecraft/world/MobSpawnerLogic getEntityId ()Lnet/minecraft/util/Identifier; +accessible method net/minecraft/world/MobSpawnerLogic getEntityId (Lnet/minecraft/world/World;Lnet/minecraft/util/math/BlockPos;)Lnet/minecraft/util/Identifier; accessible field net/minecraft/state/State PROPERTY_MAP_PRINTER Ljava/util/function/Function; @@ -17,3 +17,4 @@ accessible field net/minecraft/world/biome/BiomeEffects skyColor I accessible field net/minecraft/world/biome/BiomeEffects foliageColor Ljava/util/Optional; accessible field net/minecraft/world/biome/BiomeEffects grassColor Ljava/util/Optional; accessible field net/minecraft/world/biome/BiomeEffects grassColorModifier Lnet/minecraft/world/biome/BiomeEffects$GrassColorModifier; + diff --git a/platforms/fabric/src/main/resources/terra.mixins.json b/platforms/fabric/src/main/resources/terra.mixins.json index 8537843c7..2bc4388a9 100644 --- a/platforms/fabric/src/main/resources/terra.mixins.json +++ b/platforms/fabric/src/main/resources/terra.mixins.json @@ -4,6 +4,7 @@ "package": "com.dfsek.terra.fabric.mixin", "compatibilityLevel": "JAVA_8", "mixins": [ + "StructureAccessorAccessor" ], "client": [ "GeneratorTypeAccessor" From c9f49fb06fa1b2f6813d0efa175fec7902888fe9 Mon Sep 17 00:00:00 2001 From: dfsek Date: Wed, 17 Mar 2021 21:22:04 -0700 Subject: [PATCH 02/18] fix palettes below y=0 --- .../terra/api/world/palette/holder/PaletteHolderBuilder.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/src/main/java/com/dfsek/terra/api/world/palette/holder/PaletteHolderBuilder.java b/common/src/main/java/com/dfsek/terra/api/world/palette/holder/PaletteHolderBuilder.java index c3b00368c..96c361c22 100644 --- a/common/src/main/java/com/dfsek/terra/api/world/palette/holder/PaletteHolderBuilder.java +++ b/common/src/main/java/com/dfsek/terra/api/world/palette/holder/PaletteHolderBuilder.java @@ -21,7 +21,7 @@ public class PaletteHolderBuilder { int min = FastMath.min(paletteMap.keySet().stream().min(Integer::compareTo).orElse(0), 0); Palette[] palettes = new Palette[paletteMap.lastKey() + 1 - min]; - for(int y = 0; y <= FastMath.max(paletteMap.lastKey(), 255); y++) { + for(int y = min; y <= FastMath.max(paletteMap.lastKey(), 255); y++) { Palette d = null; for(Map.Entry> e : paletteMap.entrySet()) { if(e.getKey() >= y) { From 7f33fb20eda3f3718f231644093ee1cd6e2b2323 Mon Sep 17 00:00:00 2001 From: dfsek Date: Wed, 17 Mar 2021 21:50:59 -0700 Subject: [PATCH 03/18] remove other assumptions that world bottom is y=0 --- .../buffer/items/BufferedPulledBlock.java | 2 +- .../dfsek/terra/api/world/carving/Worm.java | 5 +++-- .../world/palette/holder/PaletteHolder.java | 6 ++++- .../palette/holder/PaletteHolderBuilder.java | 3 ++- .../com/dfsek/terra/carving/CarverCache.java | 5 +++-- .../dfsek/terra/carving/CarverPalette.java | 22 ++++++++++++++----- .../terra/carving/UserDefinedCarver.java | 2 +- .../terra/world/population/CavePopulator.java | 2 +- 8 files changed, 32 insertions(+), 15 deletions(-) diff --git a/common/src/main/java/com/dfsek/terra/api/structures/structure/buffer/items/BufferedPulledBlock.java b/common/src/main/java/com/dfsek/terra/api/structures/structure/buffer/items/BufferedPulledBlock.java index 8132a53a8..e82a061d8 100644 --- a/common/src/main/java/com/dfsek/terra/api/structures/structure/buffer/items/BufferedPulledBlock.java +++ b/common/src/main/java/com/dfsek/terra/api/structures/structure/buffer/items/BufferedPulledBlock.java @@ -15,7 +15,7 @@ public class BufferedPulledBlock implements BufferedItem { @Override public void paste(Location origin) { Block pos = origin.getBlock(); - while(pos.getY() > 0) { + while(pos.getY() > origin.getWorld().getMinHeight()) { if(!pos.isEmpty()) { pos.setBlockData(data, false); break; diff --git a/common/src/main/java/com/dfsek/terra/api/world/carving/Worm.java b/common/src/main/java/com/dfsek/terra/api/world/carving/Worm.java index 71e2b0de5..737040b4f 100644 --- a/common/src/main/java/com/dfsek/terra/api/world/carving/Worm.java +++ b/common/src/main/java/com/dfsek/terra/api/world/carving/Worm.java @@ -1,6 +1,7 @@ package com.dfsek.terra.api.world.carving; import com.dfsek.terra.api.math.vector.Vector3; +import com.dfsek.terra.api.platform.world.World; import net.jafama.FastMath; import java.util.Random; @@ -85,7 +86,7 @@ public abstract class Worm { return rad[index]; } - public void carve(int chunkX, int chunkZ, BiConsumer consumer) { + public void carve(int chunkX, int chunkZ, BiConsumer consumer, World world) { int xRad = getRadius(0); int yRad = getRadius(1); int zRad = getRadius(2); @@ -97,7 +98,7 @@ public abstract class Worm { if(!(FastMath.floorDiv(origin.getBlockZ() + z, 16) == chunkZ)) continue; for(int y = -yRad - 1; y <= yRad + 1; y++) { Vector3 position = origin.clone().add(new Vector3(x, y, z)); - if(position.getY() < 0 || position.getY() > 255) continue; + if(position.getY() < world.getMinHeight() || position.getY() > 255) continue; double eq = ellipseEquation(x, y, z, xRad, yRad, zRad); if(eq <= 1 && y >= -yRad - 1 + bottomCut && y <= yRad + 1 - topCut) { diff --git a/common/src/main/java/com/dfsek/terra/api/world/palette/holder/PaletteHolder.java b/common/src/main/java/com/dfsek/terra/api/world/palette/holder/PaletteHolder.java index 3bf7e63a1..ad357e56f 100644 --- a/common/src/main/java/com/dfsek/terra/api/world/palette/holder/PaletteHolder.java +++ b/common/src/main/java/com/dfsek/terra/api/world/palette/holder/PaletteHolder.java @@ -14,6 +14,10 @@ public class PaletteHolder { public Palette getPalette(int y) { int index = y + offset; - return index >= 0 ? palettes[index] : palettes[0]; + return index >= 0 + ? index < palettes.length + ? palettes[index] + : palettes[palettes.length - 1] + : palettes[0]; } } diff --git a/common/src/main/java/com/dfsek/terra/api/world/palette/holder/PaletteHolderBuilder.java b/common/src/main/java/com/dfsek/terra/api/world/palette/holder/PaletteHolderBuilder.java index 96c361c22..d2b67335e 100644 --- a/common/src/main/java/com/dfsek/terra/api/world/palette/holder/PaletteHolderBuilder.java +++ b/common/src/main/java/com/dfsek/terra/api/world/palette/holder/PaletteHolderBuilder.java @@ -19,9 +19,10 @@ public class PaletteHolderBuilder { public PaletteHolder build() { int min = FastMath.min(paletteMap.keySet().stream().min(Integer::compareTo).orElse(0), 0); + int max = FastMath.max(paletteMap.keySet().stream().max(Integer::compareTo).orElse(255), 255); Palette[] palettes = new Palette[paletteMap.lastKey() + 1 - min]; - for(int y = min; y <= FastMath.max(paletteMap.lastKey(), 255); y++) { + for(int y = min; y <= FastMath.max(paletteMap.lastKey(), max); y++) { Palette d = null; for(Map.Entry> e : paletteMap.entrySet()) { if(e.getKey() >= y) { diff --git a/common/src/main/java/com/dfsek/terra/carving/CarverCache.java b/common/src/main/java/com/dfsek/terra/carving/CarverCache.java index 00d3427a1..096635943 100644 --- a/common/src/main/java/com/dfsek/terra/carving/CarverCache.java +++ b/common/src/main/java/com/dfsek/terra/carving/CarverCache.java @@ -15,6 +15,7 @@ import com.google.common.cache.CacheLoader; import com.google.common.cache.LoadingCache; import org.jetbrains.annotations.NotNull; +import java.util.Collections; import java.util.List; import java.util.Random; @@ -41,13 +42,13 @@ public class CarverCache { carving.step(); TerraBiome biome = provider.getBiome(carving.getRunning().toLocation(w)); if(!((UserDefinedBiome) biome).getConfig().getCarvers().containsKey(CarverCache.this.carver)) { // Stop if we enter a biome this carver is not present in - return new GlueList<>(); + return Collections.emptyList(); } points.add(carving.getPoint()); } return points; } - return new GlueList<>(); + return Collections.emptyList(); } }); } diff --git a/common/src/main/java/com/dfsek/terra/carving/CarverPalette.java b/common/src/main/java/com/dfsek/terra/carving/CarverPalette.java index a15d1710c..73e302e70 100644 --- a/common/src/main/java/com/dfsek/terra/carving/CarverPalette.java +++ b/common/src/main/java/com/dfsek/terra/carving/CarverPalette.java @@ -4,6 +4,7 @@ import com.dfsek.terra.api.platform.block.BlockData; import com.dfsek.terra.api.platform.block.BlockType; import com.dfsek.terra.api.util.collections.MaterialSet; import com.dfsek.terra.api.util.collections.ProbabilityCollection; +import net.jafama.FastMath; import java.util.Map; import java.util.TreeMap; @@ -14,6 +15,7 @@ public class CarverPalette { private final MaterialSet replace; private final TreeMap> map = new TreeMap<>(); private ProbabilityCollection[] layers; + private int offset = 0; public CarverPalette(MaterialSet replaceable, boolean blacklist) { this.blacklist = blacklist; @@ -26,7 +28,12 @@ public class CarverPalette { } public ProbabilityCollection get(int y) { - return layers[y]; + int index = y + offset; + return index >= 0 + ? index < layers.length + ? layers[index] + : layers[layers.length - 1] + : layers[0]; } public boolean canReplace(BlockType material) { @@ -37,9 +44,11 @@ public class CarverPalette { * Build the palette to an array. */ public void build() { - int size = map.lastKey() + 1; - layers = new ProbabilityCollection[size]; - for(int y = 0; y < size; y++) { + int min = FastMath.min(map.keySet().stream().min(Integer::compareTo).orElse(0), 0); + int max = FastMath.max(map.keySet().stream().max(Integer::compareTo).orElse(255), 255); + + layers = new ProbabilityCollection[map.lastKey() + 1 - min]; + for(int y = min; y <= FastMath.max(map.lastKey(), max); y++) { ProbabilityCollection d = null; for(Map.Entry> e : map.entrySet()) { if(e.getKey() >= y) { @@ -47,8 +56,9 @@ public class CarverPalette { break; } } - if(d == null) throw new IllegalArgumentException("Null collection at Y=" + y); - layers[y] = d; + if(d == null) throw new IllegalArgumentException("No palette for Y=" + y); + layers[y - min] = d; } + offset = -min; } } diff --git a/common/src/main/java/com/dfsek/terra/carving/UserDefinedCarver.java b/common/src/main/java/com/dfsek/terra/carving/UserDefinedCarver.java index 79bd897a4..3da18626a 100644 --- a/common/src/main/java/com/dfsek/terra/carving/UserDefinedCarver.java +++ b/common/src/main/java/com/dfsek/terra/carving/UserDefinedCarver.java @@ -116,7 +116,7 @@ public class UserDefinedCarver extends Carver { Vector3 origin = point.getOrigin(); if(FastMath.floorDiv(origin.getBlockX(), 16) != chunkX && FastMath.floorDiv(origin.getBlockZ(), 16) != chunkZ) // We only want to carve this chunk. return; - point.carve(chunkX, chunkZ, consumer); + point.carve(chunkX, chunkZ, consumer, w); }); } } diff --git a/common/src/main/java/com/dfsek/terra/world/population/CavePopulator.java b/common/src/main/java/com/dfsek/terra/world/population/CavePopulator.java index 15d386ca9..0dc4524fb 100644 --- a/common/src/main/java/com/dfsek/terra/world/population/CavePopulator.java +++ b/common/src/main/java/com/dfsek/terra/world/population/CavePopulator.java @@ -86,7 +86,7 @@ public class CavePopulator implements TerraBlockPopulator { Location mut = l.clone(); BlockData orig = l.getBlock().getBlockData(); do mut.subtract(0, 1, 0); - while(mut.getY() > 0 && mut.getBlock().getBlockData().matches(orig)); + while(mut.getY() > world.getMinHeight() && mut.getBlock().getBlockData().matches(orig)); try { if(template.getShift().get(entry.getValue().getBlockType()).contains(mut.getBlock().getBlockData().getBlockType())) { mut.getBlock().setBlockData(shiftStorage.computeIfAbsent(entry.getValue().getBlockType(), BlockType::getDefaultData), false); From 5182651947833320a50529cc65a853c9480088ba Mon Sep 17 00:00:00 2001 From: dfsek Date: Thu, 18 Mar 2021 17:31:36 -0700 Subject: [PATCH 04/18] multithreaded chunk gen --- .../world/generator/FabricChunkGeneratorWrapper.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/generator/FabricChunkGeneratorWrapper.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/generator/FabricChunkGeneratorWrapper.java index 0469ab506..658e8b799 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/generator/FabricChunkGeneratorWrapper.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/generator/FabricChunkGeneratorWrapper.java @@ -34,6 +34,7 @@ import net.minecraft.world.gen.chunk.VerticalBlockSample; import java.util.concurrent.CompletableFuture; import java.util.concurrent.Executor; +import java.util.concurrent.Executors; public class FabricChunkGeneratorWrapper extends ChunkGenerator implements GeneratorWrapper { private final long seed; @@ -123,9 +124,11 @@ public class FabricChunkGeneratorWrapper extends ChunkGenerator implements Gener @Override public CompletableFuture populateNoise(Executor executor, StructureAccessor accessor, Chunk chunk) { - FabricSeededWorldAccess worldAccess = new FabricSeededWorldAccess(((StructureAccessorAccessor) accessor).getWorld(), seed, this); - delegate.generateChunkData(worldAccess, new FastRandom(), chunk.getPos().x, chunk.getPos().z, new FabricChunkData(chunk)); - return CompletableFuture.completedFuture(chunk); + return CompletableFuture.supplyAsync(() -> { + FabricSeededWorldAccess worldAccess = new FabricSeededWorldAccess(((StructureAccessorAccessor) accessor).getWorld(), seed, this); + delegate.generateChunkData(worldAccess, new FastRandom(), chunk.getPos().x, chunk.getPos().z, new FabricChunkData(chunk)); + return chunk; + }, executor); } @Override From 709180de13ddd354c362e1175583c201953b3af2 Mon Sep 17 00:00:00 2001 From: dfsek Date: Sun, 21 Mar 2021 22:25:19 -0700 Subject: [PATCH 05/18] multithread structure and cave population --- .../fabric/world/features/PopulatorFeature.java | 3 --- .../generator/FabricChunkGeneratorWrapper.java | 14 +++++--------- .../terra/fabric/world/handles/FabricWorld.java | 2 +- .../fabric/world/handles/chunk/FabricChunk.java | 11 ++++++++--- .../world/handles/world/FabricWorldHandle.java | 3 ++- 5 files changed, 16 insertions(+), 17 deletions(-) diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/features/PopulatorFeature.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/features/PopulatorFeature.java index 7e680de95..886b0f99c 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/features/PopulatorFeature.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/features/PopulatorFeature.java @@ -4,7 +4,6 @@ import com.dfsek.terra.fabric.world.generator.FabricChunkGenerator; import com.dfsek.terra.fabric.world.generator.FabricChunkGeneratorWrapper; import com.dfsek.terra.fabric.world.handles.FabricWorld; import com.dfsek.terra.fabric.world.handles.chunk.FabricChunkWorldAccess; -import com.dfsek.terra.fabric.world.handles.world.FabricWorldAccess; import com.mojang.serialization.Codec; import net.minecraft.util.math.BlockPos; import net.minecraft.world.StructureWorldAccess; @@ -29,8 +28,6 @@ public class PopulatorFeature extends Feature { FabricChunkGeneratorWrapper gen = (FabricChunkGeneratorWrapper) chunkGenerator; FabricChunkWorldAccess chunk = new FabricChunkWorldAccess(world, pos.getX() >> 4, pos.getZ() >> 4); FabricWorld world1 = new FabricWorld(world.toServerWorld(), new FabricChunkGenerator(chunkGenerator)); - gen.getCavePopulator().populate(new FabricWorldAccess(world), chunk); - gen.getStructurePopulator().populate(new FabricWorldAccess(world), chunk); gen.getOrePopulator().populate(world1, chunk); gen.getTreePopulator().populate(world1, chunk); gen.getFloraPopulator().populate(world1, chunk); diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/generator/FabricChunkGeneratorWrapper.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/generator/FabricChunkGeneratorWrapper.java index 658e8b799..cb0eb1092 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/generator/FabricChunkGeneratorWrapper.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/generator/FabricChunkGeneratorWrapper.java @@ -7,6 +7,7 @@ import com.dfsek.terra.config.pack.ConfigPack; import com.dfsek.terra.fabric.TerraFabricPlugin; import com.dfsek.terra.fabric.mixin.StructureAccessorAccessor; import com.dfsek.terra.fabric.world.TerraBiomeSource; +import com.dfsek.terra.fabric.world.handles.chunk.FabricChunk; import com.dfsek.terra.fabric.world.handles.world.FabricSeededWorldAccess; import com.dfsek.terra.world.generation.generators.DefaultChunkGenerator3D; import com.dfsek.terra.world.population.CavePopulator; @@ -34,7 +35,6 @@ import net.minecraft.world.gen.chunk.VerticalBlockSample; import java.util.concurrent.CompletableFuture; import java.util.concurrent.Executor; -import java.util.concurrent.Executors; public class FabricChunkGeneratorWrapper extends ChunkGenerator implements GeneratorWrapper { private final long seed; @@ -72,14 +72,6 @@ public class FabricChunkGeneratorWrapper extends ChunkGenerator implements Gener return floraPopulator; } - public StructurePopulator getStructurePopulator() { - return structurePopulator; - } - - public CavePopulator getCavePopulator() { - return cavePopulator; - } - public FabricChunkGeneratorWrapper(TerraBiomeSource biomeSource, long seed, ConfigPack configPack) { super(biomeSource, new StructuresConfig(false)); this.pack = configPack; @@ -126,7 +118,11 @@ public class FabricChunkGeneratorWrapper extends ChunkGenerator implements Gener public CompletableFuture populateNoise(Executor executor, StructureAccessor accessor, Chunk chunk) { return CompletableFuture.supplyAsync(() -> { FabricSeededWorldAccess worldAccess = new FabricSeededWorldAccess(((StructureAccessorAccessor) accessor).getWorld(), seed, this); + com.dfsek.terra.api.platform.world.Chunk c = new FabricChunk(worldAccess, chunk); + delegate.generateChunkData(worldAccess, new FastRandom(), chunk.getPos().x, chunk.getPos().z, new FabricChunkData(chunk)); + cavePopulator.populate(worldAccess, c); + structurePopulator.populate(worldAccess, c); return chunk; }, executor); } diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/handles/FabricWorld.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/handles/FabricWorld.java index 54609e286..272cd6760 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/handles/FabricWorld.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/handles/FabricWorld.java @@ -60,7 +60,7 @@ public class FabricWorld implements World, FabricWorldHandle { @Override public Chunk getChunkAt(int x, int z) { - return new FabricChunk(delegate.world.getChunk(x, z)); + return new FabricChunk(this, delegate.world.getChunk(x, z)); } @Override diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/handles/chunk/FabricChunk.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/handles/chunk/FabricChunk.java index f9b488fdf..bc78f34c8 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/handles/chunk/FabricChunk.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/handles/chunk/FabricChunk.java @@ -4,14 +4,18 @@ import com.dfsek.terra.api.platform.block.Block; import com.dfsek.terra.api.platform.block.BlockData; import com.dfsek.terra.api.platform.world.Chunk; import com.dfsek.terra.api.platform.world.World; +import com.dfsek.terra.fabric.world.block.FabricBlock; import com.dfsek.terra.fabric.world.block.FabricBlockData; +import com.dfsek.terra.fabric.world.handles.world.FabricWorldHandle; import net.minecraft.util.math.BlockPos; import org.jetbrains.annotations.NotNull; public class FabricChunk implements Chunk { private final net.minecraft.world.chunk.Chunk chunk; + private final FabricWorldHandle worldHandle; - public FabricChunk(net.minecraft.world.chunk.Chunk chunk) { + public FabricChunk(FabricWorldHandle worldHandle, net.minecraft.world.chunk.Chunk chunk) { + this.worldHandle = worldHandle; this.chunk = chunk; } @@ -27,12 +31,13 @@ public class FabricChunk implements Chunk { @Override public World getWorld() { - return null; + return worldHandle; } @Override public Block getBlock(int x, int y, int z) { - return null; + BlockPos pos = new BlockPos(x + (chunk.getPos().x << 4), y, z + (chunk.getPos().z << 4)); + return new FabricBlock(pos, worldHandle.getWorld()); } @Override diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/handles/world/FabricWorldHandle.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/handles/world/FabricWorldHandle.java index 7565201aa..223b0c07f 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/handles/world/FabricWorldHandle.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/handles/world/FabricWorldHandle.java @@ -1,7 +1,8 @@ package com.dfsek.terra.fabric.world.handles.world; +import com.dfsek.terra.api.platform.world.World; import net.minecraft.world.WorldAccess; -public interface FabricWorldHandle { +public interface FabricWorldHandle extends World { WorldAccess getWorld(); } From cba3388cb1f8a81ee3b2124daa36bce74f8ce67d Mon Sep 17 00:00:00 2001 From: dfsek Date: Fri, 28 May 2021 14:50:24 -0700 Subject: [PATCH 06/18] resolve merge conflicts --- .../FabricChunkGeneratorWrapper.java | 39 ++++++++++++------- .../fabric/generation/PopulatorFeature.java | 5 ++- .../mixin/access/MobSpawnerLogicAccessor.java | 4 +- .../block/BlockEntityMixin.java | 4 +- .../state/MobSpawnerBlockEntityMixin.java | 13 ++++++- .../block/state/SignBlockEntityMixin.java | 10 ++--- .../chunk/ChunkRegionMixin.java | 15 +++---- .../world/ChunkRegionMixin.java | 4 +- .../world/ServerWorldMixin.java | 5 ++- .../src/main/resources/terra.mixins.json | 2 +- 10 files changed, 63 insertions(+), 38 deletions(-) diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/generation/FabricChunkGeneratorWrapper.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/generation/FabricChunkGeneratorWrapper.java index 1c9d587ed..14c51228c 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/generation/FabricChunkGeneratorWrapper.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/generation/FabricChunkGeneratorWrapper.java @@ -9,6 +9,7 @@ import com.dfsek.terra.api.world.generation.TerraChunkGenerator; import com.dfsek.terra.api.world.locate.AsyncStructureFinder; import com.dfsek.terra.config.pack.ConfigPack; import com.dfsek.terra.fabric.TerraFabricPlugin; +import com.dfsek.terra.fabric.mixin.StructureAccessorAccessor; import com.dfsek.terra.fabric.util.FabricAdapter; import com.dfsek.terra.world.TerraWorld; import com.dfsek.terra.world.generation.generators.DefaultChunkGenerator3D; @@ -25,14 +26,15 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.ChunkPos; import net.minecraft.util.registry.DynamicRegistryManager; import net.minecraft.util.registry.Registry; -import net.minecraft.world.BlockView; import net.minecraft.world.ChunkRegion; +import net.minecraft.world.HeightLimitView; import net.minecraft.world.Heightmap; import net.minecraft.world.SpawnHelper; import net.minecraft.world.WorldAccess; import net.minecraft.world.biome.Biome; import net.minecraft.world.biome.source.BiomeAccess; import net.minecraft.world.chunk.Chunk; +import net.minecraft.world.chunk.ProtoChunk; import net.minecraft.world.dimension.DimensionType; import net.minecraft.world.gen.ChunkRandom; import net.minecraft.world.gen.GenerationStep; @@ -46,6 +48,7 @@ import org.jetbrains.annotations.Nullable; import java.util.Objects; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutionException; +import java.util.concurrent.Executor; public class FabricChunkGeneratorWrapper extends ChunkGenerator implements GeneratorWrapper { private final long seed; @@ -120,11 +123,6 @@ public class FabricChunkGeneratorWrapper extends ChunkGenerator implements Gener return super.locateStructure(world, feature, center, radius, skipExistingChunks); } - @Override - public void populateNoise(WorldAccess world, StructureAccessor accessor, Chunk chunk) { - delegate.generateChunkData((World) world, new FastRandom(), chunk.getPos().x, chunk.getPos().z, (ChunkData) chunk); - } - @Override public void carve(long seed, BiomeAccess access, Chunk chunk, GenerationStep.Carver carver) { if(pack.getTemplate().vanillaCaves()) super.carve(seed, access, chunk, carver); @@ -136,6 +134,14 @@ public class FabricChunkGeneratorWrapper extends ChunkGenerator implements Gener super.setStructureStarts(dynamicRegistryManager, structureAccessor, chunk, structureManager, worldSeed); } + @Override + public CompletableFuture populateNoise(Executor executor, StructureAccessor accessor, Chunk chunk) { + return CompletableFuture.supplyAsync(() -> { + delegate.generateChunkData((World) ((StructureAccessorAccessor) accessor).getWorld(), new FastRandom(), chunk.getPos().x, chunk.getPos().z, (ChunkData) chunk); + return chunk; + }, executor); + } + @Override public boolean isStrongholdStartingChunk(ChunkPos chunkPos) { if(pack.getTemplate().vanillaStructures()) return super.isStrongholdStartingChunk(chunkPos); @@ -143,7 +149,12 @@ public class FabricChunkGeneratorWrapper extends ChunkGenerator implements Gener } @Override - public int getHeight(int x, int z, Heightmap.Type heightmapType) { + public int getHeightOnGround(int x, int z, Heightmap.Type heightmap, HeightLimitView world) { + return super.getHeightOnGround(x, z, heightmap, world); + } + + @Override + public int getHeight(int x, int z, Heightmap.Type heightmap, HeightLimitView heightmapType) { TerraWorld world = TerraFabricPlugin.getInstance().getWorld(dimensionType); Sampler sampler = world.getConfig().getSamplerCache().getChunk(FastMath.floorDiv(x, 16), FastMath.floorDiv(z, 16)); int cx = FastMath.floorMod(x, 16); @@ -157,11 +168,11 @@ public class FabricChunkGeneratorWrapper extends ChunkGenerator implements Gener } @Override - public BlockView getColumnSample(int x, int z) { + public VerticalBlockSample getColumnSample(int x, int z, HeightLimitView view) { TerraWorld world = TerraFabricPlugin.getInstance().getWorld(dimensionType); - int height = getHeight(x, z, Heightmap.Type.WORLD_SURFACE); + int height = getHeight(x, z, Heightmap.Type.WORLD_SURFACE, view); BlockState[] array = new BlockState[256]; - for(int y = 255; y >= 0; y--) { + for(int y = view.getBottomY()+view.getHeight(); y >= view.getBottomY(); y--) { if(y > height) { if(y > ((UserDefinedBiome) world.getBiomeProvider().getBiome(x, z)).getConfig().getSeaLevel()) { array[y] = Blocks.AIR.getDefaultState(); @@ -173,18 +184,18 @@ public class FabricChunkGeneratorWrapper extends ChunkGenerator implements Gener } } - return new VerticalBlockSample(array); + return new VerticalBlockSample(view.getBottomY(), array); } @Override public void populateEntities(ChunkRegion region) { if(pack.getTemplate().vanillaMobs()) { - int cx = region.getCenterChunkX(); - int cy = region.getCenterChunkZ(); + int cx = region.getCenterPos().x; + int cy = region.getCenterPos().z; Biome biome = region.getBiome((new ChunkPos(cx, cy)).getStartPos()); ChunkRandom chunkRandom = new ChunkRandom(); chunkRandom.setPopulationSeed(region.getSeed(), cx << 4, cy << 4); - SpawnHelper.populateEntities(region, biome, cx, cy, chunkRandom); + SpawnHelper.populateEntities(region, biome, region.getCenterPos(), chunkRandom); } } diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/generation/PopulatorFeature.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/generation/PopulatorFeature.java index 5b009ae1f..a5a4960ab 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/generation/PopulatorFeature.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/generation/PopulatorFeature.java @@ -8,6 +8,7 @@ import net.minecraft.world.StructureWorldAccess; import net.minecraft.world.gen.chunk.ChunkGenerator; import net.minecraft.world.gen.feature.DefaultFeatureConfig; import net.minecraft.world.gen.feature.Feature; +import net.minecraft.world.gen.feature.util.FeatureContext; import java.util.Random; @@ -20,8 +21,10 @@ public class PopulatorFeature extends Feature { } @Override - public boolean generate(StructureWorldAccess world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, DefaultFeatureConfig config) { + public boolean generate(FeatureContext context) { + ChunkGenerator chunkGenerator = context.getGenerator(); if(!(chunkGenerator instanceof FabricChunkGeneratorWrapper)) return true; + StructureWorldAccess world = context.getWorld(); FabricChunkGeneratorWrapper gen = (FabricChunkGeneratorWrapper) chunkGenerator; gen.getHandle().getPopulators().forEach(populator -> populator.populate((World) world, (Chunk) world)); return true; diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/access/MobSpawnerLogicAccessor.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/access/MobSpawnerLogicAccessor.java index 4b7eb1f4f..e1d051d08 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/access/MobSpawnerLogicAccessor.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/access/MobSpawnerLogicAccessor.java @@ -1,12 +1,14 @@ package com.dfsek.terra.fabric.mixin.access; import net.minecraft.util.Identifier; +import net.minecraft.util.math.BlockPos; import net.minecraft.world.MobSpawnerLogic; +import net.minecraft.world.World; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.gen.Invoker; @Mixin(MobSpawnerLogic.class) public interface MobSpawnerLogicAccessor { @Invoker("getEntityId") - Identifier callGetEntityId(); + Identifier callGetEntityId(World world, BlockPos blockPos); } diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/block/BlockEntityMixin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/block/BlockEntityMixin.java index 74c5ccd23..5082204d9 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/block/BlockEntityMixin.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/block/BlockEntityMixin.java @@ -9,6 +9,7 @@ import net.minecraft.block.entity.BlockEntity; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import org.jetbrains.annotations.Nullable; +import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Implements; import org.spongepowered.asm.mixin.Interface; import org.spongepowered.asm.mixin.Intrinsic; @@ -18,6 +19,7 @@ import org.spongepowered.asm.mixin.Shadow; @Mixin(BlockEntity.class) @Implements(@Interface(iface = BlockState.class, prefix = "terra$", remap = Interface.Remap.NONE)) public abstract class BlockEntityMixin { + @Final @Shadow protected BlockPos pos; @Shadow @@ -56,7 +58,7 @@ public abstract class BlockEntityMixin { } public boolean terra$update(boolean applyPhysics) { - if(hasWorld()) world.getChunk(pos).setBlockEntity(pos, (BlockEntity) (Object) this); + if(hasWorld()) world.getChunk(pos).setBlockEntity((BlockEntity) (Object) this); return true; } } diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/block/state/MobSpawnerBlockEntityMixin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/block/state/MobSpawnerBlockEntityMixin.java index 8f664787e..f678ab0a7 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/block/state/MobSpawnerBlockEntityMixin.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/block/state/MobSpawnerBlockEntityMixin.java @@ -5,9 +5,14 @@ import com.dfsek.terra.api.platform.block.state.SerialState; import com.dfsek.terra.api.platform.entity.EntityType; import com.dfsek.terra.fabric.TerraFabricPlugin; import com.dfsek.terra.fabric.mixin.access.MobSpawnerLogicAccessor; +import net.minecraft.block.BlockState; +import net.minecraft.block.entity.BlockEntity; +import net.minecraft.block.entity.BlockEntityType; import net.minecraft.block.entity.MobSpawnerBlockEntity; +import net.minecraft.util.math.BlockPos; import net.minecraft.util.registry.Registry; import net.minecraft.world.MobSpawnerLogic; +import net.minecraft.world.World; import org.jetbrains.annotations.NotNull; import org.spongepowered.asm.mixin.Implements; import org.spongepowered.asm.mixin.Interface; @@ -16,12 +21,16 @@ import org.spongepowered.asm.mixin.Shadow; @Mixin(MobSpawnerBlockEntity.class) @Implements(@Interface(iface = MobSpawner.class, prefix = "terra$", remap = Interface.Remap.NONE)) -public abstract class MobSpawnerBlockEntityMixin { +public abstract class MobSpawnerBlockEntityMixin extends BlockEntity { + private MobSpawnerBlockEntityMixin(BlockEntityType type, BlockPos pos, BlockState state) { + super(type, pos, state); + } + @Shadow public abstract MobSpawnerLogic getLogic(); public EntityType terra$getSpawnedType() { - return (EntityType) Registry.ENTITY_TYPE.get(((MobSpawnerLogicAccessor) getLogic()).callGetEntityId()); + return (EntityType) Registry.ENTITY_TYPE.get(((MobSpawnerLogicAccessor) getLogic()).callGetEntityId(world, pos)); } public void terra$setSpawnedType(@NotNull EntityType creatureType) { diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/block/state/SignBlockEntityMixin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/block/state/SignBlockEntityMixin.java index f8ab0ee3f..c9dd3f065 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/block/state/SignBlockEntityMixin.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/block/state/SignBlockEntityMixin.java @@ -20,18 +20,18 @@ public abstract class SignBlockEntityMixin { @Shadow @Final - private Text[] text; + private Text[] texts; public @NotNull String[] terra$getLines() { - String[] lines = new String[text.length]; - for(int i = 0; i < text.length; i++) { - lines[i] = text[i].asString(); + String[] lines = new String[texts.length]; + for(int i = 0; i < texts.length; i++) { + lines[i] = texts[i].asString(); } return lines; } public @NotNull String terra$getLine(int index) throws IndexOutOfBoundsException { - return text[index].asString(); + return texts[index].asString(); } public void terra$setLine(int index, @NotNull String line) throws IndexOutOfBoundsException { diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/chunk/ChunkRegionMixin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/chunk/ChunkRegionMixin.java index 7b12e34d9..7912b2f2a 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/chunk/ChunkRegionMixin.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/chunk/ChunkRegionMixin.java @@ -7,6 +7,7 @@ import com.dfsek.terra.api.platform.world.World; import com.dfsek.terra.fabric.block.FabricBlock; import com.dfsek.terra.fabric.block.FabricBlockData; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.ChunkPos; import net.minecraft.world.ChunkRegion; import org.jetbrains.annotations.NotNull; import org.spongepowered.asm.mixin.Final; @@ -20,18 +21,14 @@ import org.spongepowered.asm.mixin.Shadow; public abstract class ChunkRegionMixin { @Final @Shadow - private int centerChunkX; - - @Final - @Shadow - private int centerChunkZ; + private ChunkPos centerPos; public int terra$getX() { - return centerChunkX; + return centerPos.x; } public int terra$getZ() { - return centerChunkZ; + return centerPos.z; } public World terra$getWorld() { @@ -39,7 +36,7 @@ public abstract class ChunkRegionMixin { } public Block terra$getBlock(int x, int y, int z) { - BlockPos pos = new BlockPos(x + (centerChunkX << 4), y, z + (centerChunkZ << 4)); + BlockPos pos = new BlockPos(x + (centerPos.x << 4), y, z + (centerPos.z << 4)); return new FabricBlock(pos, (ChunkRegion) (Object) this); } @@ -48,7 +45,7 @@ public abstract class ChunkRegionMixin { } public void terra$setBlock(int x, int y, int z, @NotNull BlockData blockData) { - ((ChunkRegion) (Object) this).setBlockState(new BlockPos(x + (centerChunkX << 4), y, z + (centerChunkZ << 4)), ((FabricBlockData) blockData).getHandle(), 0); + ((ChunkRegion) (Object) this).setBlockState(new BlockPos(x + (centerPos.x << 4), y, z + (centerPos.z << 4)), ((FabricBlockData) blockData).getHandle(), 0); } // getHandle already added in world/ChunkRegionMixin. diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/world/ChunkRegionMixin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/world/ChunkRegionMixin.java index 427a7ae85..0a2b05d57 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/world/ChunkRegionMixin.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/world/ChunkRegionMixin.java @@ -34,7 +34,7 @@ public abstract class ChunkRegionMixin { private long seed; public int terra$getMaxHeight() { - return ((ChunkRegion) (Object) this).getDimensionHeight(); + return (((ChunkRegion) (Object) this).getBottomY()) + ((ChunkRegion) (Object) this).getHeight(); } @SuppressWarnings("deprecation") @@ -64,7 +64,7 @@ public abstract class ChunkRegionMixin { } public int terra$getMinHeight() { - return 0; + return ((ChunkRegion) (Object) this).getBottomY(); } @Intrinsic diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/world/ServerWorldMixin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/world/ServerWorldMixin.java index ee5b7755e..71b6de5e8 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/world/ServerWorldMixin.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/world/ServerWorldMixin.java @@ -13,6 +13,7 @@ import com.dfsek.terra.fabric.block.FabricBlock; import com.dfsek.terra.fabric.generation.FabricChunkGeneratorWrapper; import net.minecraft.server.world.ServerWorld; import net.minecraft.util.math.BlockPos; +import net.minecraft.world.ChunkRegion; import net.minecraft.world.ServerWorldAccess; import org.spongepowered.asm.mixin.Implements; import org.spongepowered.asm.mixin.Interface; @@ -27,7 +28,7 @@ public abstract class ServerWorldMixin { public abstract long getSeed(); public int terra$getMaxHeight() { - return ((ServerWorld) (Object) this).getDimensionHeight(); + return (((ServerWorld) (Object) this).getBottomY()) + ((ServerWorld) (Object) this).getHeight(); } public ChunkGenerator terra$getGenerator() { @@ -55,7 +56,7 @@ public abstract class ServerWorldMixin { } public int terra$getMinHeight() { - return 0; + return ((ServerWorld) (Object) this).getBottomY(); } @Intrinsic diff --git a/platforms/fabric/src/main/resources/terra.mixins.json b/platforms/fabric/src/main/resources/terra.mixins.json index 436c5dd9c..d71367e99 100644 --- a/platforms/fabric/src/main/resources/terra.mixins.json +++ b/platforms/fabric/src/main/resources/terra.mixins.json @@ -4,7 +4,7 @@ "package": "com.dfsek.terra.fabric.mixin", "compatibilityLevel": "JAVA_8", "mixins": [ - "StructureAccessorAccessor" + "StructureAccessorAccessor", "CommandManagerMixin", "GeneratorOptionsMixin", "ServerWorldMixin", From 16fcf09c78f69fa7e1d651c3144c0650f4d92efc Mon Sep 17 00:00:00 2001 From: dfsek Date: Fri, 28 May 2021 15:10:30 -0700 Subject: [PATCH 07/18] gradle 7 (temporarily remove Forge module) --- .../src/main/kotlin/com/dfsek/terra/CompilationConfig.kt | 4 ++-- gradle/wrapper/gradle-wrapper.properties | 2 +- platforms/fabric/build.gradle.kts | 6 +++--- .../java/com/dfsek/terra/fabric/TerraFabricPlugin.java | 2 +- .../dfsek/terra/fabric/mixin/GeneratorOptionsMixin.java | 4 ++-- .../implementations/inventory/item/ItemStackMixin.java | 4 ++-- .../inventory/meta/ItemStackMetaMixin.java | 8 ++++---- .../forge/{build.gradle.kts => build.gradle.kts.old} | 0 8 files changed, 15 insertions(+), 15 deletions(-) rename platforms/forge/{build.gradle.kts => build.gradle.kts.old} (100%) diff --git a/buildSrc/src/main/kotlin/com/dfsek/terra/CompilationConfig.kt b/buildSrc/src/main/kotlin/com/dfsek/terra/CompilationConfig.kt index 560c0c165..c48a7de3b 100644 --- a/buildSrc/src/main/kotlin/com/dfsek/terra/CompilationConfig.kt +++ b/buildSrc/src/main/kotlin/com/dfsek/terra/CompilationConfig.kt @@ -14,8 +14,8 @@ fun Project.configureCompilation() { apply(plugin = "idea") configure { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 + sourceCompatibility = JavaVersion.VERSION_16 + targetCompatibility = JavaVersion.VERSION_16 } tasks.withType { diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index a29c5e5c5..cc9cd46e9 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.8.3-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists org.gradle.jvmargs=-Xmx4096m \ No newline at end of file diff --git a/platforms/fabric/build.gradle.kts b/platforms/fabric/build.gradle.kts index 2e153b14f..6e0fe1511 100644 --- a/platforms/fabric/build.gradle.kts +++ b/platforms/fabric/build.gradle.kts @@ -7,7 +7,7 @@ import net.fabricmc.loom.task.RemapJarTask plugins { `java-library` `maven-publish` - id("fabric-loom").version("0.6-SNAPSHOT") + id("fabric-loom").version("0.8-SNAPSHOT") id("com.modrinth.minotaur").version("1.1.0") } @@ -23,8 +23,8 @@ group = "com.dfsek.terra.fabric" dependencies { "shadedApi"(project(":common")) - "minecraft"("com.mojang:minecraft:21w11a") - "mappings"("net.fabricmc:yarn:21w11a+build.3:v2") + "minecraft"("com.mojang:minecraft:1.17-pre1") + "mappings"("net.fabricmc:yarn:1.17-pre1+build.4:v2") "modImplementation"("net.fabricmc:fabric-loader:0.11.3") "modCompileOnly"("com.sk89q.worldedit:worldedit-fabric-mc1.16:7.2.0-SNAPSHOT") { diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/TerraFabricPlugin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/TerraFabricPlugin.java index 6a0a3ea00..d93e8a169 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/TerraFabricPlugin.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/TerraFabricPlugin.java @@ -264,7 +264,7 @@ public class TerraFabricPlugin implements TerraPlugin, ModInitializer { Registry.register(Registry.FEATURE, new Identifier("terra", "populator"), POPULATOR_FEATURE); - RegistryKey> floraKey = RegistryKey.of(Registry.CONFIGURED_FEATURE_WORLDGEN, new Identifier("terra", "populator")); + RegistryKey> floraKey = RegistryKey.of(Registry.CONFIGURED_FEATURE_KEY, new Identifier("terra", "populator")); Registry.register(BuiltinRegistries.CONFIGURED_FEATURE, floraKey.getValue(), POPULATOR_CONFIGURED_FEATURE); Registry.register(Registry.CHUNK_GENERATOR, new Identifier("terra:terra"), FabricChunkGeneratorWrapper.CODEC); diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/GeneratorOptionsMixin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/GeneratorOptionsMixin.java index 3eafe5469..1738ebe11 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/GeneratorOptionsMixin.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/GeneratorOptionsMixin.java @@ -48,7 +48,7 @@ public abstract class GeneratorOptionsMixin { boolean generateStructures = generate_structures == null || Boolean.parseBoolean(generate_structures); Registry dimensionTypes = dynamicRegistryManager.get(Registry.DIMENSION_TYPE_KEY); Registry biomes = dynamicRegistryManager.get(Registry.BIOME_KEY); - Registry chunkGeneratorSettings = dynamicRegistryManager.get(Registry.NOISE_SETTINGS_WORLDGEN); + Registry chunkGeneratorSettings = dynamicRegistryManager.get(Registry.CHUNK_GENERATOR_SETTINGS_KEY); SimpleRegistry dimensionOptions = DimensionType.createDefaultDimensionOptions(dimensionTypes, biomes, chunkGeneratorSettings, l); prop = prop.substring(prop.indexOf(":") + 1); @@ -57,7 +57,7 @@ public abstract class GeneratorOptionsMixin { if(pack == null) throw new IllegalArgumentException("No such pack " + prop); - cir.setReturnValue(new GeneratorOptions(l, generateStructures, false, GeneratorOptions.method_28608(dimensionTypes, dimensionOptions, new FabricChunkGeneratorWrapper(new TerraBiomeSource(biomes, l, pack), l, pack)))); + cir.setReturnValue(new GeneratorOptions(l, generateStructures, false, GeneratorOptions.getRegistryWithReplacedOverworldGenerator(dimensionTypes, dimensionOptions, new FabricChunkGeneratorWrapper(new TerraBiomeSource(biomes, l, pack), l, pack)))); } } } diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/inventory/item/ItemStackMixin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/inventory/item/ItemStackMixin.java index 2ae18cdbd..864e4724a 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/inventory/item/ItemStackMixin.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/inventory/item/ItemStackMixin.java @@ -3,7 +3,7 @@ package com.dfsek.terra.fabric.mixin.implementations.inventory.item; import com.dfsek.terra.api.platform.inventory.Item; import com.dfsek.terra.api.platform.inventory.item.ItemMeta; import net.minecraft.item.ItemStack; -import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.NbtCompound; import org.jetbrains.annotations.Nullable; import org.spongepowered.asm.mixin.Implements; import org.spongepowered.asm.mixin.Interface; @@ -27,7 +27,7 @@ public abstract class ItemStackMixin { public abstract boolean isDamageable(); @Shadow - public abstract void setTag(@Nullable CompoundTag tag); + public abstract void setTag(@Nullable NbtCompound tag); public int terra$getAmount() { return getCount(); diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/inventory/meta/ItemStackMetaMixin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/inventory/meta/ItemStackMetaMixin.java index 23950f944..5ddaca96a 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/inventory/meta/ItemStackMetaMixin.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/inventory/meta/ItemStackMetaMixin.java @@ -3,8 +3,8 @@ package com.dfsek.terra.fabric.mixin.implementations.inventory.meta; import com.dfsek.terra.api.platform.inventory.item.Enchantment; import com.dfsek.terra.api.platform.inventory.item.ItemMeta; import net.minecraft.item.ItemStack; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.nbt.ListTag; +import net.minecraft.nbt.NbtCompound; +import net.minecraft.nbt.NbtList; import net.minecraft.util.registry.Registry; import org.spongepowered.asm.mixin.Implements; import org.spongepowered.asm.mixin.Interface; @@ -23,7 +23,7 @@ public abstract class ItemStackMetaMixin { public abstract boolean hasEnchantments(); @Shadow - public abstract ListTag getEnchantments(); + public abstract NbtList getEnchantments(); @Shadow public abstract void addEnchantment(net.minecraft.enchantment.Enchantment enchantment, int level); @@ -39,7 +39,7 @@ public abstract class ItemStackMetaMixin { Map map = new HashMap<>(); getEnchantments().forEach(enchantment -> { - CompoundTag eTag = (CompoundTag) enchantment; + NbtCompound eTag = (NbtCompound) enchantment; map.put((Enchantment) Registry.ENCHANTMENT.get(eTag.getInt("id")), eTag.getInt("lvl")); }); return map; diff --git a/platforms/forge/build.gradle.kts b/platforms/forge/build.gradle.kts.old similarity index 100% rename from platforms/forge/build.gradle.kts rename to platforms/forge/build.gradle.kts.old From 3f56da3a659ad86d97bee96fee6a1c3a33c17405 Mon Sep 17 00:00:00 2001 From: dfsek Date: Fri, 28 May 2021 15:19:55 -0700 Subject: [PATCH 08/18] correct mixin compatibility level --- platforms/fabric/src/main/resources/terra.mixins.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platforms/fabric/src/main/resources/terra.mixins.json b/platforms/fabric/src/main/resources/terra.mixins.json index d71367e99..b97212194 100644 --- a/platforms/fabric/src/main/resources/terra.mixins.json +++ b/platforms/fabric/src/main/resources/terra.mixins.json @@ -2,7 +2,7 @@ "required": true, "minVersion": "0.8", "package": "com.dfsek.terra.fabric.mixin", - "compatibilityLevel": "JAVA_8", + "compatibilityLevel": "JAVA_16", "mixins": [ "StructureAccessorAccessor", "CommandManagerMixin", From 7061328cc70d98d82578201be5863011b0af238d Mon Sep 17 00:00:00 2001 From: dfsek Date: Mon, 31 May 2021 12:16:59 -0700 Subject: [PATCH 09/18] 1.17 pre2 --- platforms/fabric/build.gradle.kts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/platforms/fabric/build.gradle.kts b/platforms/fabric/build.gradle.kts index 6e0fe1511..5908c5cf1 100644 --- a/platforms/fabric/build.gradle.kts +++ b/platforms/fabric/build.gradle.kts @@ -23,8 +23,8 @@ group = "com.dfsek.terra.fabric" dependencies { "shadedApi"(project(":common")) - "minecraft"("com.mojang:minecraft:1.17-pre1") - "mappings"("net.fabricmc:yarn:1.17-pre1+build.4:v2") + "minecraft"("com.mojang:minecraft:1.17-pre2") + "mappings"("net.fabricmc:yarn:1.17-pre2+build.1:v2") "modImplementation"("net.fabricmc:fabric-loader:0.11.3") "modCompileOnly"("com.sk89q.worldedit:worldedit-fabric-mc1.16:7.2.0-SNAPSHOT") { From 86ad5b5041fd9ade05a3c2f85d433b284a444fa9 Mon Sep 17 00:00:00 2001 From: dfsek Date: Tue, 1 Jun 2021 23:25:39 -0700 Subject: [PATCH 10/18] 1.17 pre3 --- platforms/fabric/build.gradle.kts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/platforms/fabric/build.gradle.kts b/platforms/fabric/build.gradle.kts index 5908c5cf1..7c647b0e3 100644 --- a/platforms/fabric/build.gradle.kts +++ b/platforms/fabric/build.gradle.kts @@ -23,8 +23,8 @@ group = "com.dfsek.terra.fabric" dependencies { "shadedApi"(project(":common")) - "minecraft"("com.mojang:minecraft:1.17-pre2") - "mappings"("net.fabricmc:yarn:1.17-pre2+build.1:v2") + "minecraft"("com.mojang:minecraft:1.17-pre3") + "mappings"("net.fabricmc:yarn:1.17-pre3+build.1:v2") "modImplementation"("net.fabricmc:fabric-loader:0.11.3") "modCompileOnly"("com.sk89q.worldedit:worldedit-fabric-mc1.16:7.2.0-SNAPSHOT") { From a9c252f91cdf69271fc901ce297e9c3e56205f72 Mon Sep 17 00:00:00 2001 From: dfsek Date: Sat, 5 Jun 2021 00:58:05 -0700 Subject: [PATCH 11/18] 1.17 rc1 --- platforms/fabric/build.gradle.kts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/platforms/fabric/build.gradle.kts b/platforms/fabric/build.gradle.kts index 7c647b0e3..50da5f57b 100644 --- a/platforms/fabric/build.gradle.kts +++ b/platforms/fabric/build.gradle.kts @@ -23,8 +23,8 @@ group = "com.dfsek.terra.fabric" dependencies { "shadedApi"(project(":common")) - "minecraft"("com.mojang:minecraft:1.17-pre3") - "mappings"("net.fabricmc:yarn:1.17-pre3+build.1:v2") + "minecraft"("com.mojang:minecraft:1.17-rc1") + "mappings"("net.fabricmc:yarn:1.17-rc1+build.1:v2") "modImplementation"("net.fabricmc:fabric-loader:0.11.3") "modCompileOnly"("com.sk89q.worldedit:worldedit-fabric-mc1.16:7.2.0-SNAPSHOT") { From 1cee01a36c222a202954308674288c497015b686 Mon Sep 17 00:00:00 2001 From: dfsek Date: Sat, 5 Jun 2021 16:06:10 -0700 Subject: [PATCH 12/18] material override ore config options --- .../dfsek/terra/config/factories/OreFactory.java | 4 ++-- .../dfsek/terra/config/templates/OreTemplate.java | 13 +++++++++++++ .../population/items/ores/DeformedSphereOre.java | 13 +++++++------ .../terra/world/population/items/ores/Ore.java | 10 +++++++--- .../world/population/items/ores/VanillaOre.java | 11 +++++++---- 5 files changed, 36 insertions(+), 15 deletions(-) diff --git a/common/src/main/java/com/dfsek/terra/config/factories/OreFactory.java b/common/src/main/java/com/dfsek/terra/config/factories/OreFactory.java index fdbf6ea90..be6ea19d9 100644 --- a/common/src/main/java/com/dfsek/terra/config/factories/OreFactory.java +++ b/common/src/main/java/com/dfsek/terra/config/factories/OreFactory.java @@ -13,9 +13,9 @@ public class OreFactory implements ConfigFactory { BlockData m = config.getMaterial(); switch(config.getType()) { case SPHERE: - return new DeformedSphereOre(m, config.getReplaceable(), config.doPhysics(), config.getDeform(), config.getDeformFrequency(), config.getSize(), main); + return new DeformedSphereOre(m, config.getReplaceable(), config.doPhysics(), config.getDeform(), config.getDeformFrequency(), config.getSize(), main, config.getMaterialOverrides()); case VANILLA: - return new VanillaOre(m, config.getReplaceable(), config.doPhysics(), config.getSize(), main); + return new VanillaOre(m, config.getReplaceable(), config.doPhysics(), config.getSize(), main, config.getMaterialOverrides()); } return null; } diff --git a/common/src/main/java/com/dfsek/terra/config/templates/OreTemplate.java b/common/src/main/java/com/dfsek/terra/config/templates/OreTemplate.java index 7362a4c6a..90e780a85 100644 --- a/common/src/main/java/com/dfsek/terra/config/templates/OreTemplate.java +++ b/common/src/main/java/com/dfsek/terra/config/templates/OreTemplate.java @@ -5,9 +5,13 @@ import com.dfsek.tectonic.annotations.Default; import com.dfsek.tectonic.annotations.Value; import com.dfsek.terra.api.math.Range; import com.dfsek.terra.api.platform.block.BlockData; +import com.dfsek.terra.api.platform.block.BlockType; import com.dfsek.terra.api.util.collections.MaterialSet; import com.dfsek.terra.world.population.items.ores.Ore; +import java.util.HashMap; +import java.util.Map; + @SuppressWarnings({"unused", "FieldMayBeFinal"}) public class OreTemplate extends AbstractableTemplate { @Value("id") @@ -17,6 +21,11 @@ public class OreTemplate extends AbstractableTemplate { @Abstractable private BlockData material; + @Value("material-overrides") + @Default + @Abstractable + private Map materials = new HashMap<>(); + @Value("type") @Abstractable @Default @@ -76,4 +85,8 @@ public class OreTemplate extends AbstractableTemplate { public Ore.Type getType() { return oreType; } + + public Map getMaterialOverrides() { + return materials; + } } diff --git a/common/src/main/java/com/dfsek/terra/world/population/items/ores/DeformedSphereOre.java b/common/src/main/java/com/dfsek/terra/world/population/items/ores/DeformedSphereOre.java index 2b4ea13ee..509f6d71f 100644 --- a/common/src/main/java/com/dfsek/terra/world/population/items/ores/DeformedSphereOre.java +++ b/common/src/main/java/com/dfsek/terra/world/population/items/ores/DeformedSphereOre.java @@ -6,10 +6,11 @@ import com.dfsek.terra.api.math.noise.samplers.noise.simplex.OpenSimplex2Sampler import com.dfsek.terra.api.math.vector.Vector3; import com.dfsek.terra.api.platform.block.Block; import com.dfsek.terra.api.platform.block.BlockData; -import com.dfsek.terra.api.platform.handle.WorldHandle; +import com.dfsek.terra.api.platform.block.BlockType; import com.dfsek.terra.api.platform.world.Chunk; import com.dfsek.terra.api.util.collections.MaterialSet; +import java.util.Map; import java.util.Random; public class DeformedSphereOre extends Ore { @@ -17,8 +18,8 @@ public class DeformedSphereOre extends Ore { private final double deformFrequency; private final Range size; - public DeformedSphereOre(BlockData material, MaterialSet replaceable, boolean applyGravity, double deform, double deformFrequency, Range size, TerraPlugin main) { - super(material, replaceable, applyGravity, main); + public DeformedSphereOre(BlockData material, MaterialSet replaceable, boolean applyGravity, double deform, double deformFrequency, Range size, TerraPlugin main, Map materials) { + super(material, replaceable, applyGravity, main, materials); this.deform = deform; this.deformFrequency = deformFrequency; this.size = size; @@ -27,7 +28,6 @@ public class DeformedSphereOre extends Ore { @Override public void generate(Vector3 origin, Chunk c, Random r) { - WorldHandle handle = main.getWorldHandle(); OpenSimplex2Sampler ore = new OpenSimplex2Sampler(r.nextInt()); ore.setFrequency(deformFrequency); int rad = size.get(r); @@ -39,8 +39,9 @@ public class DeformedSphereOre extends Ore { continue; if(oreLoc.distance(origin) < (rad + 0.5) * ((ore.getNoise(x, y, z) + 1) * deform)) { Block b = c.getBlock(oreLoc.getBlockX(), oreLoc.getBlockY(), oreLoc.getBlockZ()); - if(getReplaceable().contains(b.getType()) && b.getLocation().getY() >= 0) - b.setBlockData(getMaterial(), isApplyGravity()); + BlockType type = b.getType(); + if(getReplaceable().contains(type) && b.getLocation().getY() >= 0) + b.setBlockData(getMaterial(type), isApplyGravity()); } } } diff --git a/common/src/main/java/com/dfsek/terra/world/population/items/ores/Ore.java b/common/src/main/java/com/dfsek/terra/world/population/items/ores/Ore.java index e7f3faedd..d52bdf4a0 100644 --- a/common/src/main/java/com/dfsek/terra/world/population/items/ores/Ore.java +++ b/common/src/main/java/com/dfsek/terra/world/population/items/ores/Ore.java @@ -3,9 +3,11 @@ package com.dfsek.terra.world.population.items.ores; import com.dfsek.terra.api.TerraPlugin; import com.dfsek.terra.api.math.vector.Vector3; import com.dfsek.terra.api.platform.block.BlockData; +import com.dfsek.terra.api.platform.block.BlockType; import com.dfsek.terra.api.platform.world.Chunk; import com.dfsek.terra.api.util.collections.MaterialSet; +import java.util.Map; import java.util.Random; public abstract class Ore { @@ -14,18 +16,20 @@ public abstract class Ore { private final MaterialSet replaceable; private final boolean applyGravity; protected TerraPlugin main; + private final Map materials; - public Ore(BlockData material, MaterialSet replaceable, boolean applyGravity, TerraPlugin main) { + public Ore(BlockData material, MaterialSet replaceable, boolean applyGravity, TerraPlugin main, Map materials) { this.material = material; this.replaceable = replaceable; this.applyGravity = applyGravity; this.main = main; + this.materials = materials; } public abstract void generate(Vector3 origin, Chunk c, Random r); - public BlockData getMaterial() { - return material; + public BlockData getMaterial(BlockType replace) { + return materials.getOrDefault(replace, material); } public MaterialSet getReplaceable() { diff --git a/common/src/main/java/com/dfsek/terra/world/population/items/ores/VanillaOre.java b/common/src/main/java/com/dfsek/terra/world/population/items/ores/VanillaOre.java index 549e1e378..0e5e5d4af 100644 --- a/common/src/main/java/com/dfsek/terra/world/population/items/ores/VanillaOre.java +++ b/common/src/main/java/com/dfsek/terra/world/population/items/ores/VanillaOre.java @@ -5,18 +5,20 @@ import com.dfsek.terra.api.math.Range; import com.dfsek.terra.api.math.vector.Vector3; import com.dfsek.terra.api.platform.block.Block; import com.dfsek.terra.api.platform.block.BlockData; +import com.dfsek.terra.api.platform.block.BlockType; import com.dfsek.terra.api.platform.world.Chunk; import com.dfsek.terra.api.util.collections.MaterialSet; import net.jafama.FastMath; +import java.util.Map; import java.util.Random; public class VanillaOre extends Ore { private final Range sizeRange; - public VanillaOre(BlockData material, MaterialSet replaceable, boolean applyGravity, Range size, TerraPlugin main) { - super(material, replaceable, applyGravity, main); + public VanillaOre(BlockData material, MaterialSet replaceable, boolean applyGravity, Range size, TerraPlugin main, Map materials) { + super(material, replaceable, applyGravity, main, materials); this.sizeRange = size; } @@ -67,8 +69,9 @@ public class VanillaOre extends Ore { double d15 = (z + 0.5D - (d3 + (d4 - d3) * iFactor)) / (d11 / 2.0D); if(x > 15 || z > 15 || y > 255 || x < 0 || z < 0 || y < 0) continue; Block block = chunk.getBlock(x, y, z); - if((d13 * d13 + d14 * d14 + d15 * d15 < 1.0D) && getReplaceable().contains(block.getType())) { - block.setBlockData(getMaterial(), isApplyGravity()); + BlockType type = block.getType(); + if((d13 * d13 + d14 * d14 + d15 * d15 < 1.0D) && getReplaceable().contains(type)) { + block.setBlockData(getMaterial(type), isApplyGravity()); } } } From db70b6c88c8486e41d9a3c41c24ff60b2ee34f27 Mon Sep 17 00:00:00 2001 From: dfsek Date: Mon, 7 Jun 2021 01:07:53 -0700 Subject: [PATCH 13/18] correct args of zero arg function --- .../api/structures/script/builders/ZeroArgFunctionBuilder.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/src/main/java/com/dfsek/terra/api/structures/script/builders/ZeroArgFunctionBuilder.java b/common/src/main/java/com/dfsek/terra/api/structures/script/builders/ZeroArgFunctionBuilder.java index 897f88726..0bc7beff1 100644 --- a/common/src/main/java/com/dfsek/terra/api/structures/script/builders/ZeroArgFunctionBuilder.java +++ b/common/src/main/java/com/dfsek/terra/api/structures/script/builders/ZeroArgFunctionBuilder.java @@ -42,7 +42,7 @@ public class ZeroArgFunctionBuilder implements FunctionBuilder> { @Override public int argNumber() { - return 1; + return 0; } @Override From 20d45a4b1eca9fad8e4a0cb092bccf9d7f65c59b Mon Sep 17 00:00:00 2001 From: dfsek Date: Mon, 7 Jun 2021 14:33:54 -0700 Subject: [PATCH 14/18] 1.17 pre-2 --- platforms/fabric/build.gradle.kts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/platforms/fabric/build.gradle.kts b/platforms/fabric/build.gradle.kts index 50da5f57b..8413851ee 100644 --- a/platforms/fabric/build.gradle.kts +++ b/platforms/fabric/build.gradle.kts @@ -23,8 +23,8 @@ group = "com.dfsek.terra.fabric" dependencies { "shadedApi"(project(":common")) - "minecraft"("com.mojang:minecraft:1.17-rc1") - "mappings"("net.fabricmc:yarn:1.17-rc1+build.1:v2") + "minecraft"("com.mojang:minecraft:1.17-rc2") + "mappings"("net.fabricmc:yarn:1.17-rc2+build.1:v2") "modImplementation"("net.fabricmc:fabric-loader:0.11.3") "modCompileOnly"("com.sk89q.worldedit:worldedit-fabric-mc1.16:7.2.0-SNAPSHOT") { From 492939b5d1ae44c1483bf20bb67e57b3188f8785 Mon Sep 17 00:00:00 2001 From: dfsek Date: Mon, 7 Jun 2021 20:30:46 -0700 Subject: [PATCH 15/18] correct max_y = 255 assumption --- .../src/main/java/com/dfsek/terra/api/world/carving/Worm.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/src/main/java/com/dfsek/terra/api/world/carving/Worm.java b/common/src/main/java/com/dfsek/terra/api/world/carving/Worm.java index 737040b4f..cfeadc836 100644 --- a/common/src/main/java/com/dfsek/terra/api/world/carving/Worm.java +++ b/common/src/main/java/com/dfsek/terra/api/world/carving/Worm.java @@ -98,7 +98,7 @@ public abstract class Worm { if(!(FastMath.floorDiv(origin.getBlockZ() + z, 16) == chunkZ)) continue; for(int y = -yRad - 1; y <= yRad + 1; y++) { Vector3 position = origin.clone().add(new Vector3(x, y, z)); - if(position.getY() < world.getMinHeight() || position.getY() > 255) continue; + if(position.getY() < world.getMinHeight() || position.getY() > world.getMaxHeight()) continue; double eq = ellipseEquation(x, y, z, xRad, yRad, zRad); if(eq <= 1 && y >= -yRad - 1 + bottomCut && y <= yRad + 1 - topCut) { From 9df379644b73346856bc391d0528efa91a85c7ac Mon Sep 17 00:00:00 2001 From: dfsek Date: Mon, 7 Jun 2021 21:13:04 -0700 Subject: [PATCH 16/18] DeformedSphereOre height corrections --- .../terra/world/population/items/ores/DeformedSphereOre.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/common/src/main/java/com/dfsek/terra/world/population/items/ores/DeformedSphereOre.java b/common/src/main/java/com/dfsek/terra/world/population/items/ores/DeformedSphereOre.java index 509f6d71f..2bc782196 100644 --- a/common/src/main/java/com/dfsek/terra/world/population/items/ores/DeformedSphereOre.java +++ b/common/src/main/java/com/dfsek/terra/world/population/items/ores/DeformedSphereOre.java @@ -35,12 +35,12 @@ public class DeformedSphereOre extends Ore { for(int y = -rad; y <= rad; y++) { for(int z = -rad; z <= rad; z++) { Vector3 oreLoc = origin.clone().add(new Vector3(x, y, z)); - if(oreLoc.getBlockX() > 15 || oreLoc.getBlockZ() > 15 || oreLoc.getBlockY() > 255 || oreLoc.getBlockX() < 0 || oreLoc.getBlockZ() < 0 || oreLoc.getBlockY() < 0) + if(oreLoc.getBlockX() > 15 || oreLoc.getBlockZ() > 15 || oreLoc.getBlockY() > c.getWorld().getMaxHeight() || oreLoc.getBlockX() < 0 || oreLoc.getBlockZ() < 0 || oreLoc.getBlockY() < c.getWorld().getMinHeight()) continue; if(oreLoc.distance(origin) < (rad + 0.5) * ((ore.getNoise(x, y, z) + 1) * deform)) { Block b = c.getBlock(oreLoc.getBlockX(), oreLoc.getBlockY(), oreLoc.getBlockZ()); BlockType type = b.getType(); - if(getReplaceable().contains(type) && b.getLocation().getY() >= 0) + if(getReplaceable().contains(type) && b.getLocation().getY() >= c.getWorld().getMinHeight()) b.setBlockData(getMaterial(type), isApplyGravity()); } } From 0068f6998236ae3dc0b624b2e584c18c57a7d983 Mon Sep 17 00:00:00 2001 From: dfsek Date: Mon, 7 Jun 2021 21:54:01 -0700 Subject: [PATCH 17/18] move chunkified populators to earlier generation stage --- .../generation/FabricChunkGeneratorWrapper.java | 11 ++++++++--- .../terra/fabric/generation/PopulatorFeature.java | 10 ++++++---- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/generation/FabricChunkGeneratorWrapper.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/generation/FabricChunkGeneratorWrapper.java index 14c51228c..be602374f 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/generation/FabricChunkGeneratorWrapper.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/generation/FabricChunkGeneratorWrapper.java @@ -5,6 +5,7 @@ import com.dfsek.terra.api.platform.world.generator.ChunkData; import com.dfsek.terra.api.platform.world.generator.GeneratorWrapper; import com.dfsek.terra.api.util.FastRandom; import com.dfsek.terra.api.world.biome.UserDefinedBiome; +import com.dfsek.terra.api.world.generation.Chunkified; import com.dfsek.terra.api.world.generation.TerraChunkGenerator; import com.dfsek.terra.api.world.locate.AsyncStructureFinder; import com.dfsek.terra.config.pack.ConfigPack; @@ -30,11 +31,9 @@ import net.minecraft.world.ChunkRegion; import net.minecraft.world.HeightLimitView; import net.minecraft.world.Heightmap; import net.minecraft.world.SpawnHelper; -import net.minecraft.world.WorldAccess; import net.minecraft.world.biome.Biome; import net.minecraft.world.biome.source.BiomeAccess; import net.minecraft.world.chunk.Chunk; -import net.minecraft.world.chunk.ProtoChunk; import net.minecraft.world.dimension.DimensionType; import net.minecraft.world.gen.ChunkRandom; import net.minecraft.world.gen.GenerationStep; @@ -137,7 +136,13 @@ public class FabricChunkGeneratorWrapper extends ChunkGenerator implements Gener @Override public CompletableFuture populateNoise(Executor executor, StructureAccessor accessor, Chunk chunk) { return CompletableFuture.supplyAsync(() -> { - delegate.generateChunkData((World) ((StructureAccessorAccessor) accessor).getWorld(), new FastRandom(), chunk.getPos().x, chunk.getPos().z, (ChunkData) chunk); + World world = (World) ((StructureAccessorAccessor) accessor).getWorld(); + delegate.generateChunkData(world, new FastRandom(), chunk.getPos().x, chunk.getPos().z, (ChunkData) chunk); + delegate.getPopulators().forEach(populator -> { + if(populator instanceof Chunkified) { + populator.populate(world, (com.dfsek.terra.api.platform.world.Chunk) world); + } + }); return chunk; }, executor); } diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/generation/PopulatorFeature.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/generation/PopulatorFeature.java index a5a4960ab..99a30d378 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/generation/PopulatorFeature.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/generation/PopulatorFeature.java @@ -2,16 +2,14 @@ package com.dfsek.terra.fabric.generation; import com.dfsek.terra.api.platform.world.Chunk; import com.dfsek.terra.api.platform.world.World; +import com.dfsek.terra.api.world.generation.Chunkified; import com.mojang.serialization.Codec; -import net.minecraft.util.math.BlockPos; import net.minecraft.world.StructureWorldAccess; import net.minecraft.world.gen.chunk.ChunkGenerator; import net.minecraft.world.gen.feature.DefaultFeatureConfig; import net.minecraft.world.gen.feature.Feature; import net.minecraft.world.gen.feature.util.FeatureContext; -import java.util.Random; - /** * Feature wrapper for Terra populator */ @@ -26,7 +24,11 @@ public class PopulatorFeature extends Feature { if(!(chunkGenerator instanceof FabricChunkGeneratorWrapper)) return true; StructureWorldAccess world = context.getWorld(); FabricChunkGeneratorWrapper gen = (FabricChunkGeneratorWrapper) chunkGenerator; - gen.getHandle().getPopulators().forEach(populator -> populator.populate((World) world, (Chunk) world)); + gen.getHandle().getPopulators().forEach(populator -> { + if(!(populator instanceof Chunkified)) { + populator.populate((World) world, (Chunk) world); + } + }); return true; } } From 6027c282ab3d96127a6b3903a558c8d13e5a3668 Mon Sep 17 00:00:00 2001 From: dfsek Date: Tue, 8 Jun 2021 10:17:39 -0700 Subject: [PATCH 18/18] 1.17 full release --- platforms/fabric/build.gradle.kts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/platforms/fabric/build.gradle.kts b/platforms/fabric/build.gradle.kts index 8413851ee..0625cd483 100644 --- a/platforms/fabric/build.gradle.kts +++ b/platforms/fabric/build.gradle.kts @@ -23,8 +23,8 @@ group = "com.dfsek.terra.fabric" dependencies { "shadedApi"(project(":common")) - "minecraft"("com.mojang:minecraft:1.17-rc2") - "mappings"("net.fabricmc:yarn:1.17-rc2+build.1:v2") + "minecraft"("com.mojang:minecraft:1.17") + "mappings"("net.fabricmc:yarn:1.17+build.1:v2") "modImplementation"("net.fabricmc:fabric-loader:0.11.3") "modCompileOnly"("com.sk89q.worldedit:worldedit-fabric-mc1.16:7.2.0-SNAPSHOT") {