Uses the new 1.17.1 ChunkGenerator options
This commit is contained in:
parent
45955df990
commit
2f209fcf37
11
pom.xml
11
pom.xml
|
@ -43,14 +43,14 @@
|
|||
<properties>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
|
||||
<java.version>1.8</java.version>
|
||||
<java.version>16</java.version>
|
||||
<!-- More visible way how to change dependency versions -->
|
||||
<spigot.version>1.16.4-R0.1-SNAPSHOT</spigot.version>
|
||||
<bentobox.version>1.16.0</bentobox.version>
|
||||
<spigot.version>1.17.1-R0.1-SNAPSHOT</spigot.version>
|
||||
<bentobox.version>1.17.0</bentobox.version>
|
||||
<!-- Revision variable removes warning about dynamic version -->
|
||||
<revision>${build.version}-SNAPSHOT</revision>
|
||||
<!-- This allows to change between versions and snapshots. -->
|
||||
<build.version>1.14.5</build.version>
|
||||
<build.version>1.15.0</build.version>
|
||||
<build.number>-LOCAL</build.number>
|
||||
<sonar.organization>bentobox-world</sonar.organization>
|
||||
<sonar.host.url>https://sonarcloud.io</sonar.host.url>
|
||||
|
@ -170,8 +170,7 @@
|
|||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<version>3.7.0</version>
|
||||
<configuration>
|
||||
<source>${java.version}</source>
|
||||
<target>${java.version}</target>
|
||||
<release>${java.version}</release>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
|
|
|
@ -76,7 +76,6 @@ public class CaveBlock extends GameModeAddon
|
|||
{
|
||||
super.onReload();
|
||||
this.loadSettings();
|
||||
this.chunkGenerator.reload();
|
||||
}
|
||||
|
||||
|
||||
|
@ -137,7 +136,6 @@ public class CaveBlock extends GameModeAddon
|
|||
|
||||
// Create the world if it does not exist
|
||||
this.islandWorld = WorldCreator.name(worldName).
|
||||
type(WorldType.FLAT).
|
||||
environment(World.Environment.NORMAL).
|
||||
generator(this.chunkGenerator).
|
||||
createWorld();
|
||||
|
|
|
@ -2,18 +2,19 @@ package world.bentobox.caveblock.generators;
|
|||
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.EnumMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Random;
|
||||
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.generator.BlockPopulator;
|
||||
import org.bukkit.World.Environment;
|
||||
import org.bukkit.generator.ChunkGenerator;
|
||||
import org.bukkit.generator.WorldInfo;
|
||||
|
||||
import world.bentobox.caveblock.CaveBlock;
|
||||
import world.bentobox.caveblock.Settings;
|
||||
import world.bentobox.caveblock.generators.populators.EntitiesPopulator;
|
||||
import world.bentobox.caveblock.generators.populators.MaterialPopulator;
|
||||
|
||||
|
||||
/**
|
||||
|
@ -24,6 +25,12 @@ import world.bentobox.caveblock.generators.populators.MaterialPopulator;
|
|||
*/
|
||||
public class ChunkGeneratorWorld extends ChunkGenerator
|
||||
{
|
||||
private CaveBlock addon;
|
||||
private Settings settings;
|
||||
private Map<Environment, ChunkData> map = new EnumMap<>(Environment.class);
|
||||
private final Random r = new Random();
|
||||
private List<Ore> ores = new ArrayList<>();
|
||||
|
||||
// ---------------------------------------------------------------------
|
||||
// Section: Constructor
|
||||
// ---------------------------------------------------------------------
|
||||
|
@ -38,7 +45,18 @@ public class ChunkGeneratorWorld extends ChunkGenerator
|
|||
this.addon = addon;
|
||||
this.settings = addon.getSettings();
|
||||
|
||||
reload();
|
||||
ores.add(new Ore(0, 16, Material.TUFF,2));
|
||||
ores.add(new Ore(0, 79, Material.GRANITE,10));
|
||||
ores.add(new Ore(0, 79, Material.ANDESITE,10));
|
||||
ores.add(new Ore(0, 79, Material.DIORITE,10));
|
||||
ores.add(new Ore(95, 136, Material.COAL_ORE, 5));
|
||||
ores.add(new Ore(0, 96, Material.COPPER_ORE, 3));
|
||||
ores.add(new Ore(-64, 64, Material.LAPIS_ORE, 2));
|
||||
ores.add(new Ore(-64, 320, Material.IRON_ORE, 3));
|
||||
ores.add(new Ore(-64, 30, Material.GOLD_ORE, 3));
|
||||
ores.add(new Ore(-64, 16, Material.REDSTONE_ORE, 2));
|
||||
ores.add(new Ore(-64, 16, Material.DIAMOND_ORE, 1));
|
||||
ores.add(new Ore(32, 320, Material.EMERALD_ORE, 2));
|
||||
}
|
||||
|
||||
|
||||
|
@ -46,7 +64,42 @@ public class ChunkGeneratorWorld extends ChunkGenerator
|
|||
// Section: Methods
|
||||
// ---------------------------------------------------------------------
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
@Override
|
||||
public ChunkData generateChunkData(World world, Random random, int x, int z, BiomeGrid biome) {
|
||||
//BentoBox.getInstance().logDebug("Generate Chunk Data " + x + " " + z);
|
||||
return createChunkData(world);
|
||||
}
|
||||
@Override
|
||||
public void generateNoise(WorldInfo worldInfo, Random random, int x, int z, ChunkData chunkData) {
|
||||
//BentoBox.getInstance().logDebug("Generate Noise " + x + " " + z + " " + chunkData);
|
||||
chunkData.setRegion(0, worldInfo.getMinHeight(), 0, 16, worldInfo.getMaxHeight(), 16, Material.STONE);
|
||||
chunkData.setRegion(0, worldInfo.getMinHeight(), 0, 16, 7, 16, Material.DEEPSLATE);
|
||||
// Generate ores
|
||||
for (int y = worldInfo.getMinHeight(); y < worldInfo.getMaxHeight(); y++) {
|
||||
for (Ore o: ores) {
|
||||
if (o.minY() < y && o.maxY() > y && r.nextInt(30) < o.chance()) {
|
||||
chunkData.setBlock(r.nextInt(16), y, r.nextInt(16), o.material());
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void generateSurface(WorldInfo worldInfo, Random random, int x, int z, ChunkData chunkData) {
|
||||
//BentoBox.getInstance().logDebug("generateSurface " + x + " " + z + " " + chunkData);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void generateBedrock(WorldInfo worldInfo, Random random, int x, int z, ChunkData chunkData) {
|
||||
//BentoBox.getInstance().logDebug("generateBedrock " + x + " " + z + " " + chunkData);
|
||||
}
|
||||
@Override
|
||||
public void generateCaves(WorldInfo worldInfo, Random random, int x, int z, ChunkData chunkData) {
|
||||
//BentoBox.getInstance().logDebug("generateCaves " + x + " " + z + " " + chunkData);
|
||||
}
|
||||
/**
|
||||
* This method sets if given coordinates can be set as spawn location
|
||||
*/
|
||||
|
@ -56,196 +109,26 @@ public class ChunkGeneratorWorld extends ChunkGenerator
|
|||
return true;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* This method generates given chunk.
|
||||
* @param world World where chunk must be generated.
|
||||
* @param random Random that allows define object randomness.
|
||||
* @param chunkX Chunk X coordinate.
|
||||
* @param chunkZ Chunk Z coordinate.
|
||||
* @param biomeGrid BiomeGrid that contains biomes.
|
||||
* @return new ChunkData for given chunk.
|
||||
*/
|
||||
@Override
|
||||
public ChunkData generateChunkData(World world,
|
||||
Random random,
|
||||
int chunkX,
|
||||
int chunkZ,
|
||||
ChunkGenerator.BiomeGrid biomeGrid)
|
||||
{
|
||||
ChunkData result = this.createChunkData(world);
|
||||
|
||||
// Populate chunk with necessary information
|
||||
if (world.getEnvironment().equals(World.Environment.NETHER))
|
||||
{
|
||||
this.populateNetherChunk(world, result, biomeGrid);
|
||||
}
|
||||
else if (world.getEnvironment().equals(World.Environment.THE_END))
|
||||
{
|
||||
this.populateTheEndChunk(world, result, biomeGrid);
|
||||
}
|
||||
else
|
||||
{
|
||||
this.populateOverWorldChunk(world, result, biomeGrid);
|
||||
}
|
||||
|
||||
return result;
|
||||
public boolean shouldGenerateNoise() {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* This method populates The End world chunk data.
|
||||
* @param world world where chunks are generated.
|
||||
* @param chunkData ChunkData that must be populated.
|
||||
* @param biomeGrid BiomeGrid for this chunk.
|
||||
*/
|
||||
private void populateTheEndChunk(World world, ChunkData chunkData, BiomeGrid biomeGrid)
|
||||
{
|
||||
// because everything starts at 0 and ends at 255
|
||||
final int worldHeight = this.settings.getWorldDepth();
|
||||
|
||||
// Fill all blocks
|
||||
chunkData.setRegion(0, 1, 0,
|
||||
16, worldHeight - 1, 16,
|
||||
this.settings.getEndMainBlock());
|
||||
|
||||
// Generate ground and ceiling.
|
||||
chunkData.setRegion(0, 0, 0,
|
||||
16, 1, 16,
|
||||
this.settings.isEndFloor() ? Material.BEDROCK : this.settings.getEndMainBlock());
|
||||
chunkData.setRegion(0, worldHeight - 1, 0,
|
||||
16, worldHeight, 16,
|
||||
this.settings.isEndRoof() ? Material.BEDROCK : this.settings.getEndMainBlock());
|
||||
|
||||
// Set biome
|
||||
for (int x = 0; x < 16; x += 4)
|
||||
{
|
||||
for (int y = 0; y < world.getMaxHeight(); y += 4)
|
||||
{
|
||||
for (int z = 0; z < 16; z += 4)
|
||||
{
|
||||
biomeGrid.setBiome(x, y, z, this.settings.getDefaultTheEndBiome());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* This method populates nether world chunk data.
|
||||
* @param world world where chunks are generated.
|
||||
* @param chunkData ChunkData that must be populated.
|
||||
* @param biomeGrid BiomeGrid for this chunk.
|
||||
*/
|
||||
private void populateNetherChunk(World world, ChunkData chunkData, BiomeGrid biomeGrid)
|
||||
{
|
||||
// because everything starts at 0 and ends at 255
|
||||
final int worldHeight = this.settings.getWorldDepth();
|
||||
|
||||
// Fill all blocks
|
||||
chunkData.setRegion(0, 1, 0,
|
||||
16, worldHeight - 1, 16,
|
||||
this.settings.getNetherMainBlock());
|
||||
|
||||
// Generate ground and ceiling.
|
||||
chunkData.setRegion(0, 0, 0,
|
||||
16, 1, 16,
|
||||
this.settings.isNetherFloor() ? Material.BEDROCK : this.settings.getNetherMainBlock());
|
||||
chunkData.setRegion(0, worldHeight - 1, 0,
|
||||
16, worldHeight, 16,
|
||||
this.settings.isNetherRoof() ? Material.BEDROCK : this.settings.getNetherMainBlock());
|
||||
|
||||
// Set biome
|
||||
for (int x = 0; x < 16; x += 4)
|
||||
{
|
||||
for (int y = 0; y < world.getMaxHeight(); y += 4)
|
||||
{
|
||||
for (int z = 0; z < 16; z += 4)
|
||||
{
|
||||
biomeGrid.setBiome(x, y, z, this.settings.getDefaultNetherBiome());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* This method populates Over world chunk data.
|
||||
* @param world world where chunks are generated.
|
||||
* @param chunkData ChunkData that must be populated.
|
||||
* @param biomeGrid BiomeGrid for this chunk.
|
||||
*/
|
||||
private void populateOverWorldChunk(World world, ChunkData chunkData, BiomeGrid biomeGrid)
|
||||
{
|
||||
// because everything starts at 0 and ends at 255
|
||||
final int worldHeight = this.settings.getWorldDepth();
|
||||
|
||||
// Fill all blocks
|
||||
chunkData.setRegion(0, 1, 0,
|
||||
16, worldHeight - 1, 16,
|
||||
this.settings.getNormalMainBlock());
|
||||
|
||||
// Generate ground and ceiling.
|
||||
chunkData.setRegion(0, 0, 0,
|
||||
16, 1, 16,
|
||||
this.settings.isNormalFloor() ? Material.BEDROCK : this.settings.getNormalMainBlock());
|
||||
chunkData.setRegion(0, worldHeight - 1, 0,
|
||||
16, worldHeight, 16,
|
||||
this.settings.isNormalRoof() ? Material.BEDROCK : this.settings.getNormalMainBlock());
|
||||
|
||||
// Set biome
|
||||
for (int x = 0; x < 16; x += 4)
|
||||
{
|
||||
for (int y = 0; y < world.getMaxHeight(); y += 4)
|
||||
{
|
||||
for (int z = 0; z < 16; z += 4)
|
||||
{
|
||||
biomeGrid.setBiome(x, y, z, this.settings.getDefaultBiome());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* This method set world block populators.
|
||||
* @param world World where this must apply.
|
||||
* @return List with block populators.
|
||||
*/
|
||||
@Override
|
||||
public List<BlockPopulator> getDefaultPopulators(final World world)
|
||||
{
|
||||
return this.blockPopulators;
|
||||
public boolean shouldGenerateSurface() {
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Called when config is reloaded
|
||||
*/
|
||||
public void reload() {
|
||||
this.blockPopulators = new ArrayList<>(2);
|
||||
|
||||
this.blockPopulators.add(new MaterialPopulator(this.addon));
|
||||
this.blockPopulators.add(new EntitiesPopulator(this.addon));
|
||||
|
||||
@Override
|
||||
public boolean shouldGenerateBedrock() {
|
||||
return true;
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------
|
||||
// Section: Variables
|
||||
// ---------------------------------------------------------------------
|
||||
@Override
|
||||
public boolean shouldGenerateCaves() {
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* CaveBlock addon.
|
||||
*/
|
||||
private CaveBlock addon;
|
||||
|
||||
/**
|
||||
* Addon settings.
|
||||
*/
|
||||
private Settings settings;
|
||||
|
||||
/**
|
||||
* This list contains block populators that will be applied after chunk is generated.
|
||||
*/
|
||||
private List<BlockPopulator> blockPopulators;
|
||||
}
|
||||
|
|
|
@ -0,0 +1,7 @@
|
|||
package world.bentobox.caveblock.generators;
|
||||
|
||||
import org.bukkit.Material;
|
||||
|
||||
public record Ore (int minY, int maxY, Material material, int chance){
|
||||
|
||||
}
|
Loading…
Reference in New Issue