From 080a6d98f9e88dfae711fa7d90f44c3da98192d4 Mon Sep 17 00:00:00 2001 From: dfsek Date: Mon, 28 Sep 2020 02:16:49 -0700 Subject: [PATCH] Implement basic structure gen --- src/main/java/com/dfsek/terra/TerraProfiler.java | 1 + .../dfsek/terra/generation/TerraChunkGenerator.java | 7 ++++++- .../dfsek/terra/population/StructurePopulator.java | 13 +++++++++++-- .../com/dfsek/terra/structure/GaeaStructure.java | 2 +- 4 files changed, 19 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/dfsek/terra/TerraProfiler.java b/src/main/java/com/dfsek/terra/TerraProfiler.java index 2c5ad2d69..babf6df8c 100644 --- a/src/main/java/com/dfsek/terra/TerraProfiler.java +++ b/src/main/java/com/dfsek/terra/TerraProfiler.java @@ -19,6 +19,7 @@ public class TerraProfiler extends WorldProfiler { .addMeasurement(new Measurement(1500000, DataType.PERIOD_MILLISECONDS), "OreTime") .addMeasurement(new Measurement(1500000, DataType.PERIOD_MILLISECONDS), "CaveTime") .addMeasurement(new Measurement(1500000, DataType.PERIOD_MILLISECONDS), "StructureTime") + .addMeasurement(new Measurement(1500000, DataType.PERIOD_MILLISECONDS), "StructurePasteTime") .addMeasurement(new Measurement(1500000, DataType.PERIOD_MILLISECONDS), "CaveBlockUpdate"); profilerMap.put(w, this); } diff --git a/src/main/java/com/dfsek/terra/generation/TerraChunkGenerator.java b/src/main/java/com/dfsek/terra/generation/TerraChunkGenerator.java index 1d855ccf8..b609fbdee 100644 --- a/src/main/java/com/dfsek/terra/generation/TerraChunkGenerator.java +++ b/src/main/java/com/dfsek/terra/generation/TerraChunkGenerator.java @@ -118,7 +118,12 @@ public class TerraChunkGenerator extends GaeaChunkGenerator { @Override public @NotNull List getDefaultPopulators(@NotNull World world) { - return Arrays.asList(new CavePopulator(), popMan); + try { + return Arrays.asList(new CavePopulator(), new StructurePopulator(), popMan); + } catch(IOException e) { + e.printStackTrace(); + throw new IllegalArgumentException(); + } } @Override diff --git a/src/main/java/com/dfsek/terra/population/StructurePopulator.java b/src/main/java/com/dfsek/terra/population/StructurePopulator.java index e737696c0..49160d71b 100644 --- a/src/main/java/com/dfsek/terra/population/StructurePopulator.java +++ b/src/main/java/com/dfsek/terra/population/StructurePopulator.java @@ -22,7 +22,7 @@ import java.util.Set; public class StructurePopulator extends BlockPopulator { StructureSpawn spawnTest = new StructureSpawn(250, 250); GaeaStructure struc = GaeaStructure.load(new File(Terra.getInstance().getDataFolder() + File.separator + "export" + File.separator + "structures", "demo2.tstructure")); - double horizontal = struc.getStructureInfo().getMaxHorizontal()/16D + 1D; + double horizontal = struc.getStructureInfo().getMaxHorizontal(); public StructurePopulator() throws IOException { } @@ -30,7 +30,16 @@ public class StructurePopulator extends BlockPopulator { @Override public void populate(@NotNull World world, @NotNull Random random, @NotNull Chunk chunk) { try(ProfileFuture ignored = TerraProfiler.fromWorld(world).measure("StructureTime")) { - + int cx = (chunk.getX() << 4); + int cz = (chunk.getZ() << 4); + Location spawn = spawnTest.getNearestSpawn(cx+ 8, cz + 8, world.getSeed()).toLocation(world); + spawn.setY(72); + if(Math.abs((cx+8)-spawn.getBlockX()) <= horizontal && Math.abs((cz+8)-spawn.getBlockZ()) <= horizontal) { + try(ProfileFuture ignore = TerraProfiler.fromWorld(world).measure("StructurePasteTime")) { + struc.paste(spawn, chunk); + } + Bukkit.getLogger().info("Pasted at " + spawn); + } } } } diff --git a/src/main/java/com/dfsek/terra/structure/GaeaStructure.java b/src/main/java/com/dfsek/terra/structure/GaeaStructure.java index 8bcba2a80..17c10f49e 100644 --- a/src/main/java/com/dfsek/terra/structure/GaeaStructure.java +++ b/src/main/java/com/dfsek/terra/structure/GaeaStructure.java @@ -96,7 +96,7 @@ public class GaeaStructure implements Serializable { private void pasteBlock(StructureContainedBlock block, Location origin) { BlockData data = block.getBlockData(); Block worldBlock = origin.clone().add(block.getX()-structureInfo.getCenterX(), block.getY(), block.getZ()-structureInfo.getCenterZ()).getBlock(); - if(!data.getMaterial().equals(Material.STRUCTURE_VOID)) worldBlock.setBlockData(data); + if(!data.getMaterial().equals(Material.STRUCTURE_VOID)) worldBlock.setBlockData(data, false); if(block.getState() != null) { block.getState().getState(worldBlock.getState()).update(); }