From f72a80be5496a65638ca615bc3e5d54b70101bdb Mon Sep 17 00:00:00 2001 From: Sollace Date: Sat, 16 Feb 2019 21:30:44 +0200 Subject: [PATCH] Add moar structures --- .../com/minelittlepony/unicopia/Unicopia.java | 4 ++ .../unicopia/structure/CloudDungeon.java | 9 +++- .../unicopia/structure/GroundDungeon.java | 36 +++++++++++++ .../unicopia/world/StructuresGen.java | 51 ++++++++++++++++++ .../minelittlepony/unicopia/world/UWorld.java | 9 ++-- .../unicopia/structures/cloud/house_small.nbt | Bin 0 -> 4521 bytes .../structures/cloud/temple_small.nbt | Bin 5792 -> 5350 bytes .../structures/ground/temple_with_book.nbt | Bin 0 -> 1213 bytes .../unicopia/structures/ground/tower.nbt | Bin 0 -> 2326 bytes 9 files changed, 104 insertions(+), 5 deletions(-) create mode 100644 src/main/java/com/minelittlepony/unicopia/structure/GroundDungeon.java create mode 100644 src/main/java/com/minelittlepony/unicopia/world/StructuresGen.java create mode 100644 src/main/resources/assets/unicopia/structures/cloud/house_small.nbt create mode 100644 src/main/resources/assets/unicopia/structures/ground/temple_with_book.nbt create mode 100644 src/main/resources/assets/unicopia/structures/ground/tower.nbt diff --git a/src/main/java/com/minelittlepony/unicopia/Unicopia.java b/src/main/java/com/minelittlepony/unicopia/Unicopia.java index 28e57d8b..c94aacfb 100644 --- a/src/main/java/com/minelittlepony/unicopia/Unicopia.java +++ b/src/main/java/com/minelittlepony/unicopia/Unicopia.java @@ -66,8 +66,10 @@ import com.minelittlepony.unicopia.player.PlayerSpeciesList; import com.minelittlepony.unicopia.power.PowersRegistry; import com.minelittlepony.unicopia.spell.SpellRegistry; import com.minelittlepony.unicopia.structure.CloudDungeon; +import com.minelittlepony.unicopia.structure.GroundDungeon; import com.minelittlepony.unicopia.util.crafting.CraftingManager; import com.minelittlepony.unicopia.world.CloudGen; +import com.minelittlepony.unicopia.world.StructuresGen; import com.minelittlepony.unicopia.world.UWorld; @Mod( @@ -145,7 +147,9 @@ public class Unicopia implements IGuiHandler { UItems.fixRecipes(); MapGenStructureIO.registerStructure(CloudGen.Start.class, "unicopia:clouds"); + MapGenStructureIO.registerStructure(StructuresGen.Start.class, "unicopia:ruins"); MapGenStructureIO.registerStructureComponent(CloudDungeon.class, "unicopia:cloud_dungeon"); + MapGenStructureIO.registerStructureComponent(GroundDungeon.class, "unicopia:ground_dungeon"); } public static CraftingManager getCraftingManager() { diff --git a/src/main/java/com/minelittlepony/unicopia/structure/CloudDungeon.java b/src/main/java/com/minelittlepony/unicopia/structure/CloudDungeon.java index 6513bac4..055ee101 100644 --- a/src/main/java/com/minelittlepony/unicopia/structure/CloudDungeon.java +++ b/src/main/java/com/minelittlepony/unicopia/structure/CloudDungeon.java @@ -13,7 +13,8 @@ import net.minecraft.world.gen.structure.template.TemplateManager; public class CloudDungeon extends TemplateBasedFeature { - private static final ResourceLocation STRUCTURE = new ResourceLocation(Unicopia.MODID, "cloud/temple_small"); + private static final ResourceLocation TEMPLE = new ResourceLocation(Unicopia.MODID, "cloud/temple_small"); + private static final ResourceLocation HOUSE = new ResourceLocation(Unicopia.MODID, "cloud/house_small"); public CloudDungeon() { } @@ -25,7 +26,11 @@ public class CloudDungeon extends TemplateBasedFeature { @Override public boolean addComponentParts(World world, BlockPos startPos, TemplateManager templates, PlacementSettings placement) { - applyTemplate(world, startPos, templates, placement, STRUCTURE); + if (world.rand.nextBoolean()) { + applyTemplate(world, startPos, templates, placement, TEMPLE); + } else { + applyTemplate(world, startPos, templates, placement, HOUSE); + } return true; } diff --git a/src/main/java/com/minelittlepony/unicopia/structure/GroundDungeon.java b/src/main/java/com/minelittlepony/unicopia/structure/GroundDungeon.java new file mode 100644 index 00000000..009de569 --- /dev/null +++ b/src/main/java/com/minelittlepony/unicopia/structure/GroundDungeon.java @@ -0,0 +1,36 @@ +package com.minelittlepony.unicopia.structure; + +import java.util.Random; + +import com.minelittlepony.unicopia.Unicopia; + +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.gen.structure.template.PlacementSettings; +import net.minecraft.world.gen.structure.template.TemplateManager; + +public class GroundDungeon extends TemplateBasedFeature { + + private static final ResourceLocation TOWER = new ResourceLocation(Unicopia.MODID, "ground/tower"); + private static final ResourceLocation TEMPLE_1 = new ResourceLocation(Unicopia.MODID, "ground/temple_with_book"); + + public GroundDungeon() { + } + + public GroundDungeon(Random rand, int x, int z) { + super(rand, x, 0, z, 7, 5, 8); + } + + @Override + public boolean addComponentParts(World world, BlockPos startPos, TemplateManager templates, PlacementSettings placement) { + + if (world.rand.nextBoolean()) { + applyTemplate(world, startPos, templates, placement, TOWER); + } else { + applyTemplate(world, startPos, templates, placement, TEMPLE_1); + } + + return true; + } +} diff --git a/src/main/java/com/minelittlepony/unicopia/world/StructuresGen.java b/src/main/java/com/minelittlepony/unicopia/world/StructuresGen.java new file mode 100644 index 00000000..5c89f07c --- /dev/null +++ b/src/main/java/com/minelittlepony/unicopia/world/StructuresGen.java @@ -0,0 +1,51 @@ +package com.minelittlepony.unicopia.world; + +import java.util.Random; + +import com.minelittlepony.unicopia.structure.AbstractFeature; +import com.minelittlepony.unicopia.structure.GroundDungeon; + +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.biome.Biome; +import net.minecraft.world.gen.structure.MapGenScatteredFeature; +import net.minecraft.world.gen.structure.StructureBoundingBox; +import net.minecraft.world.gen.structure.StructureStart; + +public class StructuresGen extends MapGenScatteredFeature { + + @Override + public String getStructureName() { + return "unicopia:ruins"; + } + + @Override + public boolean isSwampHut(BlockPos pos) { + return false; + } + + @Override + protected StructureStart getStructureStart(int chunkX, int chunkZ) { + return new Start(world, rand, chunkX, chunkZ); + } + + public static class Start extends AbstractFeature.Start { + public Start() { + + } + + public Start(World world, Random rand, int x, int z) { + super(world, rand, x, z); + } + + @Override + protected void addComponents(World world, Random rand, int x, int z, Biome biome) { + components.add(new GroundDungeon(rand, x * 16, z * 16)); + } + + @Override + public void generateStructure(World world, Random rand, StructureBoundingBox bounds) { + super.generateStructure(world, rand, bounds); + } + } +} diff --git a/src/main/java/com/minelittlepony/unicopia/world/UWorld.java b/src/main/java/com/minelittlepony/unicopia/world/UWorld.java index a6707ef8..5db933ea 100644 --- a/src/main/java/com/minelittlepony/unicopia/world/UWorld.java +++ b/src/main/java/com/minelittlepony/unicopia/world/UWorld.java @@ -43,7 +43,8 @@ public class UWorld implements IWorldGenerator { } } - private CloudGen cloudStructureGen = new CloudGen(); + private CloudGen cloudsGen = new CloudGen(); + private StructuresGen structuresGen = new StructuresGen(); public void init() { GameRegistry.registerWorldGenerator(this, 1); @@ -54,7 +55,8 @@ public class UWorld implements IWorldGenerator { if (world.getWorldInfo().isMapFeaturesEnabled()) { ChunkPos pos = new ChunkPos(chunkX, chunkZ); - cloudStructureGen.generateStructure(world, world.rand, pos); + cloudsGen.generateStructure(world, world.rand, pos); + structuresGen.generateStructure(world, world.rand, pos); } } } @@ -65,7 +67,8 @@ public class UWorld implements IWorldGenerator { if (world.getWorldInfo().isMapFeaturesEnabled()) { ChunkPrimer primer = new ChunkPrimer(); - cloudStructureGen.generate(world, chunkX, chunkZ, primer); + cloudsGen.generate(world, chunkX, chunkZ, primer); + structuresGen.generate(world, chunkX, chunkZ, primer); } } } diff --git a/src/main/resources/assets/unicopia/structures/cloud/house_small.nbt b/src/main/resources/assets/unicopia/structures/cloud/house_small.nbt new file mode 100644 index 0000000000000000000000000000000000000000..c5ca685b46682ca62bb80dba00a599ba9e1d6bf7 GIT binary patch literal 4521 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 EZ$14;i~s-t diff --git a/src/main/resources/assets/unicopia/structures/ground/temple_with_book.nbt b/src/main/resources/assets/unicopia/structures/ground/temple_with_book.nbt new file mode 100644 index 0000000000000000000000000000000000000000..5efbe6c843dd712f8bd9a6ce5554ef406a748c22 GIT binary patch literal 1213 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 literal 0 HcmV?d00001