From 57e17df6320fa3295d1fd2287fb7f9045fc4cca8 Mon Sep 17 00:00:00 2001 From: gnembon Date: Fri, 24 May 2019 11:49:13 -0300 Subject: [PATCH] plop village --- .../java/carpet/helpers/FeatureGenerator.java | 2 +- .../GravityStructureProcessorMixin.java | 22 +++++++++++++++++++ .../carpet/mixins/StructureFeatureMixin.java | 18 ++++++--------- src/main/resources/carpet.mixins.json | 1 + 4 files changed, 31 insertions(+), 12 deletions(-) create mode 100644 src/main/java/carpet/mixins/GravityStructureProcessorMixin.java diff --git a/src/main/java/carpet/helpers/FeatureGenerator.java b/src/main/java/carpet/helpers/FeatureGenerator.java index 1087e59a..6bfd3445 100644 --- a/src/main/java/carpet/helpers/FeatureGenerator.java +++ b/src/main/java/carpet/helpers/FeatureGenerator.java @@ -61,7 +61,7 @@ public class FeatureGenerator private static Thing spawnCustomStructure(StructureFeature structure, FeatureConfig conf, Biome biome) { return (w, p) -> { - ChunkGenerator chunkgen = new OverworldChunkGenerator(w, null, new OverworldChunkGeneratorConfig()) + ChunkGenerator chunkgen = new OverworldChunkGenerator(w, w.getChunkManager().getChunkGenerator().getBiomeSource(), new OverworldChunkGeneratorConfig()) // BiomeSourceType.VANILLA_LAYERED.applyConfig((BiomeSourceType.VANILLA_LAYERED.getConfig())), ChunkGeneratorType.SURFACE.createSettings()) { @Override public C getStructureConfig(Biome biome_1, StructureFeature structureFeature_1) diff --git a/src/main/java/carpet/mixins/GravityStructureProcessorMixin.java b/src/main/java/carpet/mixins/GravityStructureProcessorMixin.java new file mode 100644 index 00000000..7303a22f --- /dev/null +++ b/src/main/java/carpet/mixins/GravityStructureProcessorMixin.java @@ -0,0 +1,22 @@ +package carpet.mixins; + +import carpet.CarpetSettings; +import net.minecraft.structure.processor.GravityStructureProcessor; +import net.minecraft.world.Heightmap; +import net.minecraft.world.ViewableWorld; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; + +@Mixin(GravityStructureProcessor.class) +public class GravityStructureProcessorMixin +{ + @Redirect(method = "process", at = @At( + value = "INVOKE", + target = "Lnet/minecraft/world/ViewableWorld;getTop(Lnet/minecraft/world/Heightmap$Type;II)I" + )) + private int getTop(ViewableWorld viewableWorld, Heightmap.Type var1, int var2, int var3) + { + return viewableWorld.getTop(CarpetSettings.skipGenerationChecks?Heightmap.Type.WORLD_SURFACE:var1, var2, var3); + } +} diff --git a/src/main/java/carpet/mixins/StructureFeatureMixin.java b/src/main/java/carpet/mixins/StructureFeatureMixin.java index 03dd7548..c6ae02ad 100644 --- a/src/main/java/carpet/mixins/StructureFeatureMixin.java +++ b/src/main/java/carpet/mixins/StructureFeatureMixin.java @@ -58,7 +58,8 @@ public abstract class StructureFeatureMixin implements StructureFeatureInterface } //generator.ge getStructurePositionToReferenceMap(this).computeIfAbsent(chId, // (x) -> new LongOpenHashSet()).add(chId); - world.getChunk(j, k, ChunkStatus.STRUCTURE_STARTS).addStructureReference(this.getName(), chId); + world.getChunk(j, k).addStructureReference(this.getName(), chId); //, ChunkStatus.STRUCTURE_STARTS + MutableIntBoundingBox box = structurestart.getBoundingBox(); structurestart.generateStructure( world, @@ -82,7 +83,7 @@ public abstract class StructureFeatureMixin implements StructureFeatureInterface if (box.intersectsXZ(k1<<4, l1<<4, (k1<<4) + 15, (l1<<4) + 15)) { //generator.getStructurePositionToReferenceMap(this).computeIfAbsent(nbchkid, (__) -> new LongOpenHashSet()).add(chId); - world.getChunk(k1, l1, ChunkStatus.STRUCTURE_STARTS).addStructureReference(this.getName(), chId); + world.getChunk(k1, l1).addStructureReference(this.getName(), chId); //, ChunkStatus.STRUCTURE_STARTS //structurestart. notifyPostProcessAt(new ChunkPos(k1, l1)); } } @@ -102,11 +103,7 @@ public abstract class StructureFeatureMixin implements StructureFeatureInterface private StructureStart forceStructureStart(IWorld worldIn, ChunkGenerator generator, Random rand, long packedChunkPos) { ChunkPos chunkpos = new ChunkPos(packedChunkPos); - StructureStart structurestart = worldIn.getChunk(chunkpos.x, chunkpos.z).getStructureStart(this.getName()); - if (structurestart != null) - { - return structurestart; // structure already exist, will skip - } + StructureStart structurestart; Chunk ichunk = worldIn.getChunk(chunkpos.x, chunkpos.z, ChunkStatus.STRUCTURE_STARTS); @@ -114,20 +111,19 @@ public abstract class StructureFeatureMixin implements StructureFeatureInterface { structurestart = ichunk.getStructureStart(this.getName()); - if (structurestart != null) + if (structurestart != null && structurestart != StructureStart.DEFAULT) { - //long2objectmap.put(packedChunkPos, structurestart); return structurestart; } } Biome biome_1 = generator.getBiomeSource().getBiome(new BlockPos(chunkpos.getStartX() + 9, 0, chunkpos.getStartZ() + 9)); StructureStart structurestart1 = getStructureStartFactory().create((StructureFeature)(Object)this, chunkpos.x, chunkpos.z, biome_1, MutableIntBoundingBox.empty(),0,generator.getSeed()); structurestart1.initialize(generator, ((ServerWorld)worldIn).getStructureManager() , chunkpos.x, chunkpos.z, biome_1); - structurestart = structurestart.hasChildren() ? structurestart : StructureStart.DEFAULT; + structurestart = structurestart1.hasChildren() ? structurestart1 : StructureStart.DEFAULT; if (structurestart.hasChildren()) { - worldIn.getChunk(chunkpos.x, chunkpos.z, ChunkStatus.STRUCTURE_STARTS).setStructureStart(this.getName(), structurestart); + worldIn.getChunk(chunkpos.x, chunkpos.z).setStructureStart(this.getName(), structurestart); } //long2objectmap.put(packedChunkPos, structurestart); diff --git a/src/main/resources/carpet.mixins.json b/src/main/resources/carpet.mixins.json index 9f9ae6c7..2d5dff2d 100644 --- a/src/main/resources/carpet.mixins.json +++ b/src/main/resources/carpet.mixins.json @@ -47,6 +47,7 @@ "IglooGeneratorPieceMixin", "FossilFeatureMixin", "BuriedTreasureGeneratorPieceMixin", + "GravityStructureProcessorMixin", "ServerChunkManagerMixin",