diff --git a/src/main/java/com/dfsek/terra/api/generic/generator/TerraChunkGenerator.java b/src/main/java/com/dfsek/terra/api/generic/generator/TerraChunkGenerator.java index e76a54497..753b877cf 100644 --- a/src/main/java/com/dfsek/terra/api/generic/generator/TerraChunkGenerator.java +++ b/src/main/java/com/dfsek/terra/api/generic/generator/TerraChunkGenerator.java @@ -6,6 +6,7 @@ import com.dfsek.terra.api.generic.world.World; import com.dfsek.terra.config.base.ConfigPack; import org.jetbrains.annotations.NotNull; +import java.util.List; import java.util.Random; public interface TerraChunkGenerator { @@ -25,4 +26,6 @@ public interface TerraChunkGenerator { ConfigPack getConfigPack(); + List getPopulators(); + } diff --git a/src/main/java/com/dfsek/terra/api/implementations/bukkit/BukkitWorld.java b/src/main/java/com/dfsek/terra/api/implementations/bukkit/BukkitWorld.java index 9a9fd0b55..ef51bbeea 100644 --- a/src/main/java/com/dfsek/terra/api/implementations/bukkit/BukkitWorld.java +++ b/src/main/java/com/dfsek/terra/api/implementations/bukkit/BukkitWorld.java @@ -85,4 +85,16 @@ public class BukkitWorld implements World { public org.bukkit.World getHandle() { return delegate; } + + @Override + public boolean equals(Object obj) { + if(!(obj instanceof BukkitWorld)) return false; + BukkitWorld other = (BukkitWorld) obj; + return other.getHandle().equals(delegate); + } + + @Override + public int hashCode() { + return delegate.hashCode(); + } } diff --git a/src/main/java/com/dfsek/terra/api/implementations/bukkit/generator/BukkitChunkGeneratorWrapper.java b/src/main/java/com/dfsek/terra/api/implementations/bukkit/generator/BukkitChunkGeneratorWrapper.java index 0c9b846d9..a45ee4b03 100644 --- a/src/main/java/com/dfsek/terra/api/implementations/bukkit/generator/BukkitChunkGeneratorWrapper.java +++ b/src/main/java/com/dfsek/terra/api/implementations/bukkit/generator/BukkitChunkGeneratorWrapper.java @@ -4,10 +4,13 @@ import com.dfsek.terra.api.generic.generator.TerraChunkGenerator; import com.dfsek.terra.api.implementations.bukkit.BukkitBiomeGrid; import com.dfsek.terra.api.implementations.bukkit.BukkitWorld; import org.bukkit.World; +import org.bukkit.generator.BlockPopulator; import org.bukkit.generator.ChunkGenerator; import org.jetbrains.annotations.NotNull; +import java.util.List; import java.util.Random; +import java.util.stream.Collectors; public class BukkitChunkGeneratorWrapper extends ChunkGenerator { private final TerraChunkGenerator delegate; @@ -26,4 +29,34 @@ public class BukkitChunkGeneratorWrapper extends ChunkGenerator { public TerraChunkGenerator getDelegate() { return delegate; } + + @Override + public @NotNull List getDefaultPopulators(@NotNull World world) { + return delegate.getPopulators().stream().map(BukkitPopulatorWrapper::new).collect(Collectors.toList()); + } + + @Override + public boolean isParallelCapable() { + return delegate.isParallelCapable(); + } + + @Override + public boolean shouldGenerateCaves() { + return delegate.shouldGenerateCaves(); + } + + @Override + public boolean shouldGenerateDecorations() { + return delegate.shouldGenerateDecorations(); + } + + @Override + public boolean shouldGenerateMobs() { + return delegate.shouldGenerateMobs(); + } + + @Override + public boolean shouldGenerateStructures() { + return super.shouldGenerateStructures(); + } } diff --git a/src/main/java/com/dfsek/terra/api/implementations/bukkit/generator/BukkitPopulatorWrapper.java b/src/main/java/com/dfsek/terra/api/implementations/bukkit/generator/BukkitPopulatorWrapper.java new file mode 100644 index 000000000..2470dab16 --- /dev/null +++ b/src/main/java/com/dfsek/terra/api/implementations/bukkit/generator/BukkitPopulatorWrapper.java @@ -0,0 +1,24 @@ +package com.dfsek.terra.api.implementations.bukkit.generator; + +import com.dfsek.terra.api.generic.generator.TerraBlockPopulator; +import com.dfsek.terra.api.implementations.bukkit.BukkitChunk; +import com.dfsek.terra.api.implementations.bukkit.BukkitWorld; +import org.bukkit.Chunk; +import org.bukkit.World; +import org.bukkit.generator.BlockPopulator; +import org.jetbrains.annotations.NotNull; + +import java.util.Random; + +public class BukkitPopulatorWrapper extends BlockPopulator { + private final TerraBlockPopulator delegate; + + public BukkitPopulatorWrapper(TerraBlockPopulator delegate) { + this.delegate = delegate; + } + + @Override + public void populate(@NotNull World world, @NotNull Random random, @NotNull Chunk source) { + delegate.populate(new BukkitWorld(world), random, new BukkitChunk(source)); + } +} diff --git a/src/main/java/com/dfsek/terra/api/implementations/bukkit/world/block/BukkitMaterialData.java b/src/main/java/com/dfsek/terra/api/implementations/bukkit/world/block/BukkitMaterialData.java index af4717ea4..a3bd6f1b8 100644 --- a/src/main/java/com/dfsek/terra/api/implementations/bukkit/world/block/BukkitMaterialData.java +++ b/src/main/java/com/dfsek/terra/api/implementations/bukkit/world/block/BukkitMaterialData.java @@ -40,4 +40,12 @@ public class BukkitMaterialData implements MaterialData { public int hashCode() { return delegate.hashCode(); } + + @Override + public boolean equals(Object obj) { + if(!(obj instanceof BukkitMaterialData)) return false; + BukkitMaterialData other = (BukkitMaterialData) obj; + + return other.getHandle().equals(this.delegate); + } } diff --git a/src/main/java/com/dfsek/terra/generation/TerraChunkGenerator.java b/src/main/java/com/dfsek/terra/generation/TerraChunkGenerator.java index 8ef632b6f..328d12e55 100644 --- a/src/main/java/com/dfsek/terra/generation/TerraChunkGenerator.java +++ b/src/main/java/com/dfsek/terra/generation/TerraChunkGenerator.java @@ -8,25 +8,33 @@ import com.dfsek.terra.api.gaea.population.PopulationManager; import com.dfsek.terra.api.gaea.profiler.ProfileFuture; import com.dfsek.terra.api.gaea.profiler.WorldProfiler; import com.dfsek.terra.api.gaea.world.palette.Palette; +import com.dfsek.terra.api.generic.TerraPlugin; import com.dfsek.terra.api.generic.generator.ChunkGenerator; +import com.dfsek.terra.api.generic.generator.TerraBlockPopulator; import com.dfsek.terra.api.generic.world.BiomeGrid; import com.dfsek.terra.api.generic.world.Chunk; import com.dfsek.terra.api.generic.world.World; import com.dfsek.terra.api.generic.world.block.BlockData; import com.dfsek.terra.api.generic.world.vector.Vector3; -import com.dfsek.terra.api.implementations.bukkit.TerraBukkitPlugin; import com.dfsek.terra.biome.UserDefinedBiome; import com.dfsek.terra.config.base.ConfigPack; import com.dfsek.terra.config.lang.LangUtil; import com.dfsek.terra.config.templates.BiomeTemplate; import com.dfsek.terra.debug.Debug; +import com.dfsek.terra.population.CavePopulator; +import com.dfsek.terra.population.FloraPopulator; +import com.dfsek.terra.population.OrePopulator; +import com.dfsek.terra.population.StructurePopulator; +import com.dfsek.terra.population.TreePopulator; import com.dfsek.terra.util.PaletteUtil; import com.dfsek.terra.util.SlabUtil; import org.jetbrains.annotations.NotNull; import java.io.FileNotFoundException; import java.io.IOException; +import java.util.Arrays; import java.util.HashMap; +import java.util.List; import java.util.Map; import java.util.Random; import java.util.logging.Level; @@ -35,16 +43,16 @@ public class TerraChunkGenerator implements com.dfsek.terra.api.generic.generato private static final Map popMap = new HashMap<>(); private final PopulationManager popMan; private final ConfigPack configPack; - private final TerraBukkitPlugin main; + private final TerraPlugin main; private boolean needsLoad = true; - public TerraChunkGenerator(ConfigPack c, TerraBukkitPlugin main) { + public TerraChunkGenerator(ConfigPack c, TerraPlugin main) { popMan = new PopulationManager(main); this.configPack = c; this.main = main; - //popMan.attach(new OrePopulator(main)); - //popMan.attach(new TreePopulator(main)); - //popMan.attach(new FloraPopulator(main)); + popMan.attach(new OrePopulator(main)); + popMan.attach(new TreePopulator(main)); + popMan.attach(new FloraPopulator(main)); } public static synchronized void saveAll() { @@ -93,6 +101,11 @@ public class TerraChunkGenerator implements com.dfsek.terra.api.generic.generato return configPack; } + @Override + public List getPopulators() { + return Arrays.asList(new CavePopulator(main), new StructurePopulator(main), popMan); + } + @Override @SuppressWarnings({"try"}) diff --git a/src/main/java/com/dfsek/terra/population/CavePopulator.java b/src/main/java/com/dfsek/terra/population/CavePopulator.java index b923652ac..7ecbb3cb8 100644 --- a/src/main/java/com/dfsek/terra/population/CavePopulator.java +++ b/src/main/java/com/dfsek/terra/population/CavePopulator.java @@ -1,11 +1,11 @@ package com.dfsek.terra.population; +import com.dfsek.terra.api.generic.TerraPlugin; import com.dfsek.terra.api.generic.generator.TerraBlockPopulator; import com.dfsek.terra.api.generic.world.Chunk; import com.dfsek.terra.api.generic.world.World; import com.dfsek.terra.api.generic.world.block.BlockData; import com.dfsek.terra.api.generic.world.block.MaterialData; -import com.dfsek.terra.api.implementations.bukkit.TerraBukkitPlugin; import org.jetbrains.annotations.NotNull; import java.util.HashMap; @@ -13,10 +13,10 @@ import java.util.Map; import java.util.Random; public class CavePopulator implements TerraBlockPopulator { - private final TerraBukkitPlugin main; + private final TerraPlugin main; private static final Map shiftStorage = new HashMap<>(); // Persist BlockData created for shifts, to avoid re-calculating each time. - public CavePopulator(TerraBukkitPlugin main) { + public CavePopulator(TerraPlugin main) { this.main = main; } diff --git a/src/main/java/com/dfsek/terra/population/FloraPopulator.java b/src/main/java/com/dfsek/terra/population/FloraPopulator.java index 2251a3a86..75cf94cfd 100644 --- a/src/main/java/com/dfsek/terra/population/FloraPopulator.java +++ b/src/main/java/com/dfsek/terra/population/FloraPopulator.java @@ -3,11 +3,11 @@ package com.dfsek.terra.population; import com.dfsek.terra.TerraWorld; import com.dfsek.terra.api.gaea.generation.GenerationPhase; import com.dfsek.terra.api.gaea.profiler.ProfileFuture; +import com.dfsek.terra.api.generic.TerraPlugin; import com.dfsek.terra.api.generic.generator.TerraBlockPopulator; import com.dfsek.terra.api.generic.world.Chunk; import com.dfsek.terra.api.generic.world.World; import com.dfsek.terra.api.generic.world.vector.Vector2; -import com.dfsek.terra.api.implementations.bukkit.TerraBukkitPlugin; import com.dfsek.terra.biome.UserDefinedBiome; import com.dfsek.terra.biome.grid.master.TerraBiomeGrid; import com.dfsek.terra.generation.items.flora.FloraLayer; @@ -22,9 +22,9 @@ import java.util.Random; * Populates Flora and Trees */ public class FloraPopulator implements TerraBlockPopulator { - private final TerraBukkitPlugin main; + private final TerraPlugin main; - public FloraPopulator(TerraBukkitPlugin main) { + public FloraPopulator(TerraPlugin main) { this.main = main; } diff --git a/src/main/java/com/dfsek/terra/population/OrePopulator.java b/src/main/java/com/dfsek/terra/population/OrePopulator.java index a33c857d7..c2d9f9e26 100644 --- a/src/main/java/com/dfsek/terra/population/OrePopulator.java +++ b/src/main/java/com/dfsek/terra/population/OrePopulator.java @@ -6,11 +6,11 @@ import com.dfsek.terra.api.gaea.generation.GenerationPhase; import com.dfsek.terra.api.gaea.math.MathUtil; import com.dfsek.terra.api.gaea.profiler.ProfileFuture; import com.dfsek.terra.api.gaea.util.FastRandom; +import com.dfsek.terra.api.generic.TerraPlugin; import com.dfsek.terra.api.generic.generator.TerraBlockPopulator; import com.dfsek.terra.api.generic.world.Chunk; import com.dfsek.terra.api.generic.world.World; import com.dfsek.terra.api.generic.world.vector.Vector3; -import com.dfsek.terra.api.implementations.bukkit.TerraBukkitPlugin; import com.dfsek.terra.biome.UserDefinedBiome; import com.dfsek.terra.config.templates.BiomeTemplate; import org.jetbrains.annotations.NotNull; @@ -18,9 +18,9 @@ import org.jetbrains.annotations.NotNull; import java.util.Random; public class OrePopulator implements TerraBlockPopulator { - private final TerraBukkitPlugin main; + private final TerraPlugin main; - public OrePopulator(TerraBukkitPlugin main) { + public OrePopulator(TerraPlugin main) { this.main = main; } diff --git a/src/main/java/com/dfsek/terra/population/StructurePopulator.java b/src/main/java/com/dfsek/terra/population/StructurePopulator.java index faef5ace5..9533fee37 100644 --- a/src/main/java/com/dfsek/terra/population/StructurePopulator.java +++ b/src/main/java/com/dfsek/terra/population/StructurePopulator.java @@ -1,17 +1,17 @@ package com.dfsek.terra.population; +import com.dfsek.terra.api.generic.TerraPlugin; import com.dfsek.terra.api.generic.generator.TerraBlockPopulator; import com.dfsek.terra.api.generic.world.Chunk; import com.dfsek.terra.api.generic.world.World; -import com.dfsek.terra.api.implementations.bukkit.TerraBukkitPlugin; import org.jetbrains.annotations.NotNull; import java.util.Random; public class StructurePopulator implements TerraBlockPopulator { - private final TerraBukkitPlugin main; + private final TerraPlugin main; - public StructurePopulator(TerraBukkitPlugin main) { + public StructurePopulator(TerraPlugin main) { this.main = main; } diff --git a/src/main/java/com/dfsek/terra/population/TreePopulator.java b/src/main/java/com/dfsek/terra/population/TreePopulator.java index 3125338fc..565e1e409 100644 --- a/src/main/java/com/dfsek/terra/population/TreePopulator.java +++ b/src/main/java/com/dfsek/terra/population/TreePopulator.java @@ -3,11 +3,11 @@ package com.dfsek.terra.population; import com.dfsek.terra.TerraWorld; import com.dfsek.terra.api.gaea.generation.GenerationPhase; import com.dfsek.terra.api.gaea.profiler.ProfileFuture; +import com.dfsek.terra.api.generic.TerraPlugin; import com.dfsek.terra.api.generic.generator.TerraBlockPopulator; import com.dfsek.terra.api.generic.world.Chunk; import com.dfsek.terra.api.generic.world.World; import com.dfsek.terra.api.generic.world.vector.Vector2; -import com.dfsek.terra.api.implementations.bukkit.TerraBukkitPlugin; import com.dfsek.terra.biome.UserDefinedBiome; import com.dfsek.terra.biome.grid.master.TerraBiomeGrid; import com.dfsek.terra.generation.items.tree.TreeLayer; @@ -18,9 +18,9 @@ import java.util.Random; public class TreePopulator implements TerraBlockPopulator { - private final TerraBukkitPlugin main; + private final TerraPlugin main; - public TreePopulator(TerraBukkitPlugin main) { + public TreePopulator(TerraPlugin main) { this.main = main; }