diff --git a/src/main/java/carpet/mixins/FlatChunkGeneratorMixin.java b/src/main/java/carpet/mixins/FlatChunkGeneratorMixin.java new file mode 100644 index 00000000..b4fdef36 --- /dev/null +++ b/src/main/java/carpet/mixins/FlatChunkGeneratorMixin.java @@ -0,0 +1,58 @@ +package carpet.mixins; + +import carpet.settings.CarpetSettings; +import net.minecraft.entity.EntityCategory; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IWorld; +import net.minecraft.world.biome.Biome; +import net.minecraft.world.biome.source.BiomeSource; +import net.minecraft.world.gen.chunk.ChunkGenerator; +import net.minecraft.world.gen.chunk.FlatChunkGenerator; +import net.minecraft.world.gen.chunk.FlatChunkGeneratorConfig; +import net.minecraft.world.gen.feature.Feature; +import org.spongepowered.asm.mixin.Mixin; + +import java.util.List; + +@Mixin(FlatChunkGenerator.class) +public abstract class FlatChunkGeneratorMixin extends ChunkGenerator +{ + public FlatChunkGeneratorMixin(IWorld iWorld, BiomeSource biome, FlatChunkGeneratorConfig chunkGeneratorConfig) + { + super(iWorld, biome, chunkGeneratorConfig); + } + + @Override + public List getEntitySpawnList(EntityCategory category, BlockPos pos) + { + if (CarpetSettings.flatWorldStructureSpawning) + { + if (Feature.SWAMP_HUT.method_14029(this.world, pos)) + { + if (category == EntityCategory.MONSTER) + { + return Feature.SWAMP_HUT.getMonsterSpawns(); + } + + if (category == EntityCategory.CREATURE) + { + return Feature.SWAMP_HUT.getCreatureSpawns(); + } + } + else if (category == EntityCategory.MONSTER) + { + if (Feature.PILLAGER_OUTPOST.isApproximatelyInsideStructure(this.world, pos)) + { + return Feature.PILLAGER_OUTPOST.getMonsterSpawns(); + } + + if (Feature.OCEAN_MONUMENT.isApproximatelyInsideStructure(this.world, pos)) + { + return Feature.OCEAN_MONUMENT.getMonsterSpawns(); + } + } + } + + return super.getEntitySpawnList(category, pos); + } +} diff --git a/src/main/java/carpet/settings/CarpetSettings.java b/src/main/java/carpet/settings/CarpetSettings.java index 2fff5bb4..f707a39d 100644 --- a/src/main/java/carpet/settings/CarpetSettings.java +++ b/src/main/java/carpet/settings/CarpetSettings.java @@ -445,4 +445,10 @@ public class CarpetSettings category = BUGFIX ) public static boolean horseWanderingFix = false; + + @Rule( + desc = "Allows structure mobs to spawn in flat worlds", + category = {EXPERIMENTAL, CREATIVE} + ) + public static boolean flatWorldStructureSpawning = false; } diff --git a/src/main/resources/carpet.mixins.json b/src/main/resources/carpet.mixins.json index 6d0fc634..901905a0 100644 --- a/src/main/resources/carpet.mixins.json +++ b/src/main/resources/carpet.mixins.json @@ -67,6 +67,7 @@ "PlayerEntity_parrotMixin", "SaplingBlockMixin", "EntityMixin", + "FlatChunkGeneratorMixin", "GuardianEntityMixin", "DesertPyramidFeatureMixin",