Release 1.16.0 (#81)

* Fixes a 1.18 world generator bug where it generated dirt-grass layers.

Expose 3 world generator options for overworld:
- natural-surface - generates surface that is natural(-ish). Currently, it may be just grass and dirt layers.
- natural-caves - generates caves inside world.
- natural-bedrock - generates natural looking bedrock pattern.

This also fixes a bug with floor and roof config option not working properly.

Fixes https://github.com/BentoBoxWorld/Level/issues/258

* Fixes issue when ores were not generated in correct form. #77
This commit is contained in:
BONNe 2022-05-17 22:16:21 +03:00 committed by GitHub
parent e6e3c97f80
commit 0cbb775db7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 327 additions and 123 deletions

View File

@ -50,7 +50,7 @@
<!-- Revision variable removes warning about dynamic version --> <!-- Revision variable removes warning about dynamic version -->
<revision>${build.version}-SNAPSHOT</revision> <revision>${build.version}-SNAPSHOT</revision>
<!-- This allows to change between versions and snapshots. --> <!-- This allows to change between versions and snapshots. -->
<build.version>1.15.0</build.version> <build.version>1.16.0</build.version>
<build.number>-LOCAL</build.number> <build.number>-LOCAL</build.number>
<sonar.organization>bentobox-world</sonar.organization> <sonar.organization>bentobox-world</sonar.organization>
<sonar.host.url>https://sonarcloud.io</sonar.host.url> <sonar.host.url>https://sonarcloud.io</sonar.host.url>

View File

@ -34,7 +34,9 @@ public class CaveBlock extends GameModeAddon
this.saveDefaultConfig(); this.saveDefaultConfig();
this.loadSettings(); this.loadSettings();
this.chunkGenerator = new ChunkGeneratorWorld(this); this.chunkNormalGenerator = new ChunkGeneratorWorld(this, World.Environment.NORMAL);
this.chunkNetherGenerator = new ChunkGeneratorWorld(this, World.Environment.NETHER);
this.chunkEndGenerator = new ChunkGeneratorWorld(this, World.Environment.THE_END);
// Player Command // Player Command
this.playerCommand = new DefaultPlayerCommand(this) this.playerCommand = new DefaultPlayerCommand(this)
@ -137,7 +139,7 @@ public class CaveBlock extends GameModeAddon
// Create the world if it does not exist // Create the world if it does not exist
this.islandWorld = WorldCreator.name(worldName). this.islandWorld = WorldCreator.name(worldName).
environment(World.Environment.NORMAL). environment(World.Environment.NORMAL).
generator(this.chunkGenerator). generator(this.chunkNormalGenerator).
createWorld(); createWorld();
// Set spawn rates // Set spawn rates
setSpawnRates(islandWorld); setSpawnRates(islandWorld);
@ -162,7 +164,7 @@ public class CaveBlock extends GameModeAddon
{ {
this.netherWorld = WorldCreator.name(worldName + NETHER). this.netherWorld = WorldCreator.name(worldName + NETHER).
type(WorldType.FLAT). type(WorldType.FLAT).
generator(this.chunkGenerator). generator(this.chunkNetherGenerator).
environment(World.Environment.NETHER). environment(World.Environment.NETHER).
createWorld(); createWorld();
} }
@ -187,7 +189,7 @@ public class CaveBlock extends GameModeAddon
{ {
this.endWorld = WorldCreator.name(worldName + THE_END). this.endWorld = WorldCreator.name(worldName + THE_END).
type(WorldType.FLAT). type(WorldType.FLAT).
generator(this.chunkGenerator). generator(this.chunkEndGenerator).
environment(World.Environment.THE_END). environment(World.Environment.THE_END).
createWorld(); createWorld();
} }
@ -232,7 +234,18 @@ public class CaveBlock extends GameModeAddon
@Override @Override
public @NonNull ChunkGenerator getDefaultWorldGenerator(String worldName, String id) public @NonNull ChunkGenerator getDefaultWorldGenerator(String worldName, String id)
{ {
return this.chunkGenerator; if (worldName.endsWith("_nether"))
{
return this.chunkNetherGenerator;
}
else if (worldName.endsWith("_the_end"))
{
return this.chunkEndGenerator;
}
else
{
return this.chunkNormalGenerator;
}
} }
// --------------------------------------------------------------------- // ---------------------------------------------------------------------
@ -284,9 +297,19 @@ public class CaveBlock extends GameModeAddon
private Settings settings; private Settings settings;
/** /**
* This stores CaveBlock addon WorldGenerator. * This stores CaveBlock addon WorldGenerator for overworld.
*/ */
private ChunkGeneratorWorld chunkGenerator; private ChunkGeneratorWorld chunkNormalGenerator;
/**
* This stores CaveBlock addon WorldGenerator for the nether.
*/
private ChunkGeneratorWorld chunkNetherGenerator;
/**
* This stores CaveBlock addon WorldGenerator for the end.
*/
private ChunkGeneratorWorld chunkEndGenerator;
// --------------------------------------------------------------------- // ---------------------------------------------------------------------

View File

@ -2077,6 +2077,72 @@ public class Settings implements WorldSettings
} }
/**
* Is generate caves boolean.
*
* @return the boolean
*/
public boolean isGenerateCaves()
{
return generateCaves;
}
/**
* Sets generate caves.
*
* @param generateCaves the generate caves
*/
public void setGenerateCaves(boolean generateCaves)
{
this.generateCaves = generateCaves;
}
/**
* Is generate natural bedrock boolean.
*
* @return the boolean
*/
public boolean isGenerateNaturalBedrock()
{
return generateNaturalBedrock;
}
/**
* Sets generate natural bedrock.
*
* @param generateNaturalBedrock the generate natural bedrock
*/
public void setGenerateNaturalBedrock(boolean generateNaturalBedrock)
{
this.generateNaturalBedrock = generateNaturalBedrock;
}
/**
* Is generate natural surface boolean.
*
* @return the boolean
*/
public boolean isGenerateNaturalSurface()
{
return generateNaturalSurface;
}
/**
* Sets generate natural surface.
*
* @param generateNaturalSurface the generate natural surface
*/
public void setGenerateNaturalSurface(boolean generateNaturalSurface)
{
this.generateNaturalSurface = generateNaturalSurface;
}
// --------------------------------------------------------------------- // ---------------------------------------------------------------------
// Section: Variables // Section: Variables
// --------------------------------------------------------------------- // ---------------------------------------------------------------------
@ -2196,8 +2262,8 @@ public class Settings implements WorldSettings
private int banLimit = -1; private int banLimit = -1;
@ConfigComment("") @ConfigComment("")
@ConfigComment("This is cave.. no height... only depth. Max 256.") @ConfigComment("This is cave.. no height... only depth. If depth is set smaller than maximal world height, then area above will be empty.")
@ConfigComment("Should not be less then cave height.") @ConfigComment("Should not be less than cave height.")
@ConfigEntry(path = "world.world-depth", needsReset = true) @ConfigEntry(path = "world.world-depth", needsReset = true)
private int worldDepth = 256; private int worldDepth = 256;
@ -2212,14 +2278,34 @@ public class Settings implements WorldSettings
private boolean newMaterialGenerator = false; private boolean newMaterialGenerator = false;
@ConfigComment("") @ConfigComment("")
@ConfigComment("Make over world roof of bedrock, if false, it will be made from stone") @ConfigComment("Make over world roof of bedrock, if false, it will be made from stone.")
@ConfigEntry(path = "world.normal.roof", needsReset = true) @ConfigEntry(path = "world.normal.roof", needsReset = true)
private boolean normalRoof = true; private boolean normalRoof = true;
@ConfigComment("Make over world floor of bedrock, if false, it will be made from stone") @ConfigComment("")
@ConfigComment("Option allows to toggle if world generator should generate natural(-ish) looking surface with dirt and grass blocks.")
@ConfigComment("Enabling this option will ignore roof setting.")
@ConfigComment("Default value is false.")
@ConfigEntry(path = "world.normal.natural-surface", needsReset = true, experimental = true)
private boolean generateNaturalSurface = false;
@ConfigComment("")
@ConfigComment("Option allows to toggle if world generator should generate natural looking caves.")
@ConfigComment("Default value is false.")
@ConfigEntry(path = "world.normal.natural-caves", needsReset = true)
private boolean generateCaves = false;
@ConfigComment("Make over world floor of bedrock, if false, it will be made from stone.")
@ConfigEntry(path = "world.normal.floor", needsReset = true) @ConfigEntry(path = "world.normal.floor", needsReset = true)
private boolean normalFloor = true; private boolean normalFloor = true;
@ConfigComment("")
@ConfigComment("Option allows to toggle if world generator should generate natural looking bedrock block patterns.")
@ConfigComment("Enabling this option will ignore floor setting.")
@ConfigComment("Default value is false.")
@ConfigEntry(path = "world.normal.natural-bedrock", needsReset = true)
private boolean generateNaturalBedrock = false;
@ConfigComment("Main block of which world will be generated.") @ConfigComment("Main block of which world will be generated.")
@ConfigEntry(path = "world.normal.main-block", needsReset = true) @ConfigEntry(path = "world.normal.main-block", needsReset = true)
private Material normalMainBlock = Material.STONE; private Material normalMainBlock = Material.STONE;

View File

@ -6,12 +6,10 @@ import org.bukkit.generator.BiomeProvider;
import org.bukkit.generator.BlockPopulator; import org.bukkit.generator.BlockPopulator;
import org.bukkit.generator.ChunkGenerator; import org.bukkit.generator.ChunkGenerator;
import org.bukkit.generator.WorldInfo; import org.bukkit.generator.WorldInfo;
import world.bentobox.caveblock.CaveBlock; import world.bentobox.caveblock.CaveBlock;
import world.bentobox.caveblock.Settings; import world.bentobox.caveblock.Settings;
import world.bentobox.caveblock.generators.populators.EntitiesPopulator; import world.bentobox.caveblock.generators.populators.*;
import world.bentobox.caveblock.generators.populators.FlatBiomeProvider;
import world.bentobox.caveblock.generators.populators.MaterialPopulator;
import world.bentobox.caveblock.generators.populators.NewMaterialPopulator;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -31,6 +29,7 @@ public class ChunkGeneratorWorld extends ChunkGenerator {
private final CaveBlock addon; private final CaveBlock addon;
private final Settings settings; private final Settings settings;
private final List<BlockPopulator> blockPopulators; private final List<BlockPopulator> blockPopulators;
private final World.Environment environment;
private BiomeProvider biomeProvider; private BiomeProvider biomeProvider;
private boolean isNewGenerator; private boolean isNewGenerator;
@ -40,12 +39,14 @@ public class ChunkGeneratorWorld extends ChunkGenerator {
/** /**
* @param addon - CaveBlock object * @param addon - CaveBlock object
* @param environment - World environment
*/ */
public ChunkGeneratorWorld(CaveBlock addon) { public ChunkGeneratorWorld(CaveBlock addon, World.Environment environment) {
this.addon = addon; this.addon = addon;
this.settings = addon.getSettings(); this.settings = addon.getSettings();
this.blockPopulators = new ArrayList<>(2); this.blockPopulators = new ArrayList<>(2);
this.environment = environment;
reload(); reload();
} }
@ -53,14 +54,24 @@ public class ChunkGeneratorWorld extends ChunkGenerator {
// Section: Methods // Section: Methods
// --------------------------------------------------------------------- // ---------------------------------------------------------------------
private Material getGroundCeilMaterial(World.Environment environment) { private Material getGroundRoofMaterial(World.Environment environment) {
return switch (environment) { return switch (environment) {
case NETHER -> this.settings.isNetherRoof() ? Material.BEDROCK : this.settings.getNetherMainBlock(); case NETHER -> this.settings.isNetherRoof() ? Material.BEDROCK : this.settings.getNetherMainBlock();
case THE_END -> this.settings.isEndRoof() ? Material.BEDROCK : this.settings.getEndMainBlock();
default -> this.settings.isNormalRoof() ? Material.BEDROCK : this.settings.getNormalMainBlock();
};
}
private Material getGroundFloorMaterial(World.Environment environment) {
return switch (environment) {
case NETHER -> this.settings.isNetherFloor() ? Material.BEDROCK : this.settings.getNetherMainBlock();
case THE_END -> this.settings.isEndFloor() ? Material.BEDROCK : this.settings.getEndMainBlock(); case THE_END -> this.settings.isEndFloor() ? Material.BEDROCK : this.settings.getEndMainBlock();
default -> this.settings.isNormalFloor() ? Material.BEDROCK : this.settings.getNormalMainBlock(); default -> this.settings.isNormalFloor() ? Material.BEDROCK : this.settings.getNormalMainBlock();
}; };
} }
private Material getBaseMaterial(World.Environment environment) { private Material getBaseMaterial(World.Environment environment) {
return switch (environment) { return switch (environment) {
case NETHER -> this.settings.getNetherMainBlock(); case NETHER -> this.settings.getNetherMainBlock();
@ -70,19 +81,35 @@ public class ChunkGeneratorWorld extends ChunkGenerator {
} }
@Override @Override
public void generateBedrock(WorldInfo worldInfo, Random random, int chunkX, int chunkZ, ChunkData chunkData) { public void generateBedrock(WorldInfo worldInfo, Random random, int chunkX, int chunkZ, ChunkData chunkData)
final int minHeight = worldInfo.getMinHeight(); {
Material material = getGroundCeilMaterial(worldInfo.getEnvironment()); if (!this.shouldGenerateBedrock())
chunkData.setRegion(0, minHeight, 0, 16, minHeight + 1, 16, material); {
final int minHeight = worldInfo.getMinHeight();
Material material = this.getGroundFloorMaterial(worldInfo.getEnvironment());
chunkData.setRegion(0, minHeight, 0, 16, minHeight + 1, 16, material);
}
else
{
// Apparently default surface generation does not include 0 bedrock layer.
final int minHeight = worldInfo.getMinHeight();
chunkData.setRegion(0, minHeight, 0, 16, minHeight + 1, 16, Material.BEDROCK);
}
} }
@Override @Override
public void generateSurface(WorldInfo worldInfo, Random random, int chunkX, int chunkZ, ChunkData chunkData) { public void generateSurface(WorldInfo worldInfo, Random random, int chunkX, int chunkZ, ChunkData chunkData)
final int worldHeight = Math.min(worldInfo.getMaxHeight(), this.settings.getWorldDepth()); {
Material material = getGroundCeilMaterial(worldInfo.getEnvironment()); if (!this.shouldGenerateSurface())
chunkData.setRegion(0, worldHeight - 1, 0, 16, worldHeight, 16, material); {
final int worldHeight = Math.min(worldInfo.getMaxHeight(), this.settings.getWorldDepth());
Material material = this.getGroundRoofMaterial(worldInfo.getEnvironment());
chunkData.setRegion(0, worldHeight - 1, 0, 16, worldHeight, 16, material);
}
} }
@Override @Override
public void generateNoise(WorldInfo worldInfo, Random random, int chunkX, int chunkZ, ChunkData chunkData) { public void generateNoise(WorldInfo worldInfo, Random random, int chunkX, int chunkZ, ChunkData chunkData) {
final int minHeight = worldInfo.getMinHeight(); final int minHeight = worldInfo.getMinHeight();
@ -127,18 +154,22 @@ public class ChunkGeneratorWorld extends ChunkGenerator {
} }
@Override @Override
public boolean shouldGenerateSurface() { public boolean shouldGenerateSurface()
return true; {
// Surface generation should happen only in overworld. Nether and end worlds does not have surface.
return this.environment.equals(World.Environment.NORMAL) && this.settings.isGenerateNaturalSurface();
} }
@Override @Override
public boolean shouldGenerateBedrock() { public boolean shouldGenerateBedrock() {
return true; // Bedrock generation should happen only in overworld. Nether and end worlds does not have nice bedrock layers.
return this.environment.equals(World.Environment.NORMAL) && this.settings.isGenerateNaturalBedrock();
} }
@Override @Override
public boolean shouldGenerateCaves() { public boolean shouldGenerateCaves() {
return this.isNewGenerator; // Cave generation should happen only in overworld. Nether and end worlds does not have nice cave layers.
return this.environment.equals(World.Environment.NORMAL) && this.settings.isGenerateCaves();
} }
/** /**

View File

@ -22,19 +22,25 @@ public class NewMaterialPopulator extends BlockPopulator {
Map<World.Environment, List<Ore>> ores = new EnumMap<>(World.Environment.class); Map<World.Environment, List<Ore>> ores = new EnumMap<>(World.Environment.class);
// Source https://minecraft.fandom.com/wiki/Blob // Source https://minecraft.fandom.com/wiki/Blob
List<Ore> worldOres = new ArrayList<>(); List<Ore> worldOres = new ArrayList<>();
worldOres.add(new Ore(-64, 16, Material.DIAMOND_ORE, 1, 10, true)); worldOres.add(new Ore(-64, 7, Material.DEEPSLATE_DIAMOND_ORE, 1, 10, true));
worldOres.add(new Ore(-64, 64, Material.LAPIS_ORE, 1, 7, true)); worldOres.add(new Ore(7, 16, Material.DIAMOND_ORE, 1, 10, true));
worldOres.add(new Ore(-64, 30, Material.GOLD_ORE, 2, 9, true)); worldOres.add(new Ore(-64, 7, Material.DEEPSLATE_LAPIS_ORE, 1, 7, true));
worldOres.add(new Ore(7, 64, Material.LAPIS_ORE, 1, 7, true));
worldOres.add(new Ore(-64, 7, Material.DEEPSLATE_GOLD_ORE, 2, 9, true));
worldOres.add(new Ore(7, 30, Material.GOLD_ORE, 2, 9, true));
worldOres.add(new Ore(0, 16, Material.TUFF, 2, 33, false)); worldOres.add(new Ore(0, 16, Material.TUFF, 2, 33, false));
worldOres.add(new Ore(-64, 16, Material.REDSTONE_ORE, 8, 8, true)); worldOres.add(new Ore(-64, 7, Material.DEEPSLATE_REDSTONE_ORE, 8, 8, true));
worldOres.add(new Ore(7, 16, Material.REDSTONE_ORE, 8, 8, true));
worldOres.add(new Ore(0, 16, Material.GRAVEL, 8, 33, false)); worldOres.add(new Ore(0, 16, Material.GRAVEL, 8, 33, false));
worldOres.add(new Ore(0, 79, Material.GRANITE, 5, 33, false)); worldOres.add(new Ore(0, 79, Material.GRANITE, 5, 33, false));
worldOres.add(new Ore(0, 79, Material.ANDESITE, 5, 33, false)); worldOres.add(new Ore(0, 79, Material.ANDESITE, 5, 33, false));
worldOres.add(new Ore(0, 79, Material.DIORITE, 5, 33, false)); worldOres.add(new Ore(0, 79, Material.DIORITE, 5, 33, false));
worldOres.add(new Ore(32, 320, Material.EMERALD_ORE, 11, 1, true)); worldOres.add(new Ore(32, 320, Material.EMERALD_ORE, 11, 1, true));
worldOres.add(new Ore(95, 136, Material.COAL_ORE, 20, 17, false)); worldOres.add(new Ore(95, 136, Material.COAL_ORE, 20, 17, false));
worldOres.add(new Ore(0, 96, Material.COPPER_ORE, 20, 9, true)); worldOres.add(new Ore(0, 7, Material.DEEPSLATE_COPPER_ORE, 20, 9, true));
worldOres.add(new Ore(-64, 320, Material.IRON_ORE, 20, 9, true)); worldOres.add(new Ore(7, 96, Material.COPPER_ORE, 20, 9, true));
worldOres.add(new Ore(-64, 7, Material.DEEPSLATE_IRON_ORE, 20, 9, true));
worldOres.add(new Ore(7, 320, Material.IRON_ORE, 20, 9, true));
worldOres.add(new Ore(-64, 320, Material.CAVE_AIR, 8, 33, false)); worldOres.add(new Ore(-64, 320, Material.CAVE_AIR, 8, 33, false));
ores.put(World.Environment.NORMAL, worldOres); ores.put(World.Environment.NORMAL, worldOres);
List<Ore> netherOres = new ArrayList<>(); List<Ore> netherOres = new ArrayList<>();

View File

@ -1,4 +1,4 @@
# CaveBlock Configuration {$version} # CaveBlock Configuration 1.15.0-SNAPSHOT-LOCAL
caveblock: caveblock:
command: command:
# Cave Command. What command users will run to access their cave. # Cave Command. What command users will run to access their cave.
@ -9,12 +9,12 @@ caveblock:
admin: cbadmin cba admin: cbadmin cba
# The default action for new player command call. # The default action for new player command call.
# Sub-command of main player command that will be run on first player command call. # Sub-command of main player command that will be run on first player command call.
# By default, it is the sub-command 'create'. # By default it is sub-command 'create'.
# Added since 1.13.0. # Added since 1.13.0.
new-player-action: create new-player-action: create
# The default action for player command. # The default action for player command.
# Sub-command of main player command that will be run on each player command call. # Sub-command of main player command that will be run on each player command call.
# By default, it is the sub-command 'go'. # By default it is sub-command 'go'.
# Added since 1.13.0. # Added since 1.13.0.
default-action: go default-action: go
world: world:
@ -81,9 +81,9 @@ world:
# The permission caveblock.ban.maxlimit.X where X is a number can also be used per player # The permission caveblock.ban.maxlimit.X where X is a number can also be used per player
# -1 = unlimited # -1 = unlimited
ban-limit: -1 ban-limit: -1
# #
# This is cave.. no height... only depth. Max 256. # This is cave.. no height... only depth. If depth is set smaller than maximal world height, then area above will be empty.
# Should not be less then cave height. # Should not be less than cave height.
# /!\ BentoBox currently does not support changing this value mid-game. If you do need to change it, do a full reset of your databases and worlds. # /!\ BentoBox currently does not support changing this value mid-game. If you do need to change it, do a full reset of your databases and worlds.
world-depth: 256 world-depth: 256
# This indicate how many times block should be tried to generate. # This indicate how many times block should be tried to generate.
@ -95,13 +95,31 @@ world:
# /!\ BentoBox currently does not support changing this value mid-game. If you do need to change it, do a full reset of your databases and worlds. # /!\ BentoBox currently does not support changing this value mid-game. If you do need to change it, do a full reset of your databases and worlds.
use-new-material-generator: false use-new-material-generator: false
normal: normal:
# #
# Make over world roof of bedrock, if false, it will be made from stone # Make over world roof of bedrock, if false, it will be made from stone.
# /!\ BentoBox currently does not support changing this value mid-game. If you do need to change it, do a full reset of your databases and worlds. # /!\ BentoBox currently does not support changing this value mid-game. If you do need to change it, do a full reset of your databases and worlds.
roof: true roof: true
# Make over world floor of bedrock, if false, it will be made from stone #
# Option allows to toggle if world generator should generate natural(-ish) looking surface with dirt and grass blocks.
# Enabling this option will ignore roof setting.
# Default value is false.
# /!\ This feature is experimental and might not work as expected or might not work at all.
# /!\ BentoBox currently does not support changing this value mid-game. If you do need to change it, do a full reset of your databases and worlds.
natural-surface: false
#
# Option allows to toggle if world generator should generate natural looking caves.
# Default value is false.
# /!\ BentoBox currently does not support changing this value mid-game. If you do need to change it, do a full reset of your databases and worlds.
natural-caves: false
# Make over world floor of bedrock, if false, it will be made from stone.
# /!\ BentoBox currently does not support changing this value mid-game. If you do need to change it, do a full reset of your databases and worlds. # /!\ BentoBox currently does not support changing this value mid-game. If you do need to change it, do a full reset of your databases and worlds.
floor: true floor: true
#
# Option allows to toggle if world generator should generate natural looking bedrock block patterns.
# Enabling this option will ignore floor setting.
# Default value is false.
# /!\ BentoBox currently does not support changing this value mid-game. If you do need to change it, do a full reset of your databases and worlds.
natural-bedrock: false
# Main block of which world will be generated. # Main block of which world will be generated.
# /!\ BentoBox currently does not support changing this value mid-game. If you do need to change it, do a full reset of your databases and worlds. # /!\ BentoBox currently does not support changing this value mid-game. If you do need to change it, do a full reset of your databases and worlds.
main-block: STONE main-block: STONE
@ -116,24 +134,24 @@ world:
# where max amount in pack are 5 per each subchunk! # where max amount in pack are 5 per each subchunk!
# /!\ BentoBox currently does not support changing this value mid-game. If you do need to change it, do a full reset of your databases and worlds. # /!\ BentoBox currently does not support changing this value mid-game. If you do need to change it, do a full reset of your databases and worlds.
blocks: blocks:
- MATERIAL:DIAMOND_ORE:1:5 - MATERIAL:DIAMOND_ORE:1:5
- MATERIAL:GOLD_ORE:1:4 - MATERIAL:GOLD_ORE:1:4
- MATERIAL:IRON_ORE:5:4 - MATERIAL:IRON_ORE:5:4
- MATERIAL:COAL_ORE:10:6 - MATERIAL:COAL_ORE:10:6
- MATERIAL:EMERALD_ORE:1:1 - MATERIAL:EMERALD_ORE:1:1
- MATERIAL:CLAY:10:6 - MATERIAL:CLAY:10:6
- MATERIAL:DIRT:20:10 - MATERIAL:DIRT:20:10
- MATERIAL:GRAVEL:40:6 - MATERIAL:GRAVEL:40:6
- MATERIAL:GRANITE:40:10 - MATERIAL:GRANITE:40:10
- MATERIAL:ANDESITE:20:10 - MATERIAL:ANDESITE:20:10
- MATERIAL:DIORITE:30:8 - MATERIAL:DIORITE:30:8
- ENTITY:ZOMBIE:10:1 - ENTITY:ZOMBIE:10:1
- ENTITY:ENDERMAN:10:1 - ENTITY:ENDERMAN:10:1
- ENTITY:SKELETON:10:1 - ENTITY:SKELETON:10:1
- ENTITY:CREEPER:1:1 - ENTITY:CREEPER:1:1
- ENTITY:DOLPHIN:1:1 - ENTITY:DOLPHIN:1:1
- ENTITY:BAT:10:1 - ENTITY:BAT:10:1
- ENTITY:CAVE_SPIDER:10:1 - ENTITY:CAVE_SPIDER:10:1
nether: nether:
# Generate Nether - if this is false, the nether world will not be made and access to # Generate Nether - if this is false, the nether world will not be made and access to
# the nether will not occur. Other plugins may still enable portal usage. # the nether will not occur. Other plugins may still enable portal usage.
@ -172,18 +190,19 @@ world:
# where max amount in pack are 5 per each subchunk! # where max amount in pack are 5 per each subchunk!
# /!\ BentoBox currently does not support changing this value mid-game. If you do need to change it, do a full reset of your databases and worlds. # /!\ BentoBox currently does not support changing this value mid-game. If you do need to change it, do a full reset of your databases and worlds.
blocks: blocks:
- MATERIAL:NETHER_QUARTZ_ORE:30:5 - MATERIAL:NETHER_QUARTZ_ORE:30:5
- MATERIAL:SOUL_SAND:40:10 - MATERIAL:SOUL_SAND:40:10
- MATERIAL:MAGMA_BLOCK:10:3 - MATERIAL:MAGMA_BLOCK:10:3
- MATERIAL:GLOWSTONE:20:8 - MATERIAL:GLOWSTONE:20:8
- MATERIAL:NETHER_BRICKS:10:5 - MATERIAL:NETHER_BRICKS:10:5
- MATERIAL:LAVA:10:1 - MATERIAL:LAVA:10:1
- ENTITY:MAGMA_CUBE:0.5:1 - ENTITY:MAGMA_CUBE:0.5:1
- ENTITY:GHAST:0.1:1 - ENTITY:GHAST:0.1:1
- ENTITY:WITHER_SKELETON:0.1:1 - ENTITY:WITHER_SKELETON:0.1:1
- MATERIAL:FIRE:10:1 - MATERIAL:FIRE:10:1
# This option indicates if nether portals should be linked via dimensions. # This option indicates if nether portals should be linked via dimensions.
# Option will simulate vanilla portal mechanics that links portals together or creates a new portal, if there is not a portal in other dimension. # Option will simulate vanilla portal mechanics that links portals together
# or creates a new portal, if there is not a portal in that dimension.
create-and-link-portals: false create-and-link-portals: false
end: end:
generate: true generate: true
@ -214,16 +233,17 @@ world:
# where max amount in pack are 5 per each subchunk! # where max amount in pack are 5 per each subchunk!
# /!\ BentoBox currently does not support changing this value mid-game. If you do need to change it, do a full reset of your databases and worlds. # /!\ BentoBox currently does not support changing this value mid-game. If you do need to change it, do a full reset of your databases and worlds.
blocks: blocks:
- ENTITY:SHULKER:0.2:1 - ENTITY:SHULKER:0.2:1
- MATERIAL:OBSIDIAN:1:1 - MATERIAL:OBSIDIAN:1:1
- MATERIAL:CHORUS_PLANT:1:3 - MATERIAL:CHORUS_PLANT:1:3
# This option indicates if obsidian platform in the end should be generated when player enters the end world. # This option indicates if obsidian platform in the end should be generated
# when player enters the end world.
create-obsidian-platform: false create-obsidian-platform: false
# Mob white list - these mobs will NOT be removed when logging in or doing /cave # Mob white list - these mobs will NOT be removed when logging in or doing /cave
remove-mobs-whitelist: remove-mobs-whitelist:
- WITHER - ZOMBIE_VILLAGER
- ENDERMAN - WITHER
- ZOMBIE_VILLAGER - ENDERMAN
# World flags. These are boolean settings for various flags for this world # World flags. These are boolean settings for various flags for this world
flags: flags:
CREEPER_DAMAGE: true CREEPER_DAMAGE: true
@ -232,6 +252,7 @@ world:
ISLAND_RESPAWN: true ISLAND_RESPAWN: true
CREEPER_GRIEFING: false CREEPER_GRIEFING: false
COARSE_DIRT_TILLING: true COARSE_DIRT_TILLING: true
PETS_STAY_AT_HOME: true
ENDERMAN_GRIEFING: true ENDERMAN_GRIEFING: true
CLEAN_SUPER_FLAT: false CLEAN_SUPER_FLAT: false
CHEST_DAMAGE: false CHEST_DAMAGE: false
@ -241,6 +262,7 @@ world:
ENDERMAN_DEATH_DROP: true ENDERMAN_DEATH_DROP: true
LIQUIDS_FLOWING_OUT: false LIQUIDS_FLOWING_OUT: false
OFFLINE_REDSTONE: true OFFLINE_REDSTONE: true
REMOVE_END_EXIT_ISLAND: true
OFFLINE_GROWTH: true OFFLINE_GROWTH: true
REMOVE_MOBS: true REMOVE_MOBS: true
ENDER_CHEST: false ENDER_CHEST: false
@ -272,15 +294,15 @@ world:
END_PORTAL: 500 END_PORTAL: 500
BREEDING: 500 BREEDING: 500
HURT_VILLAGERS: 500 HURT_VILLAGERS: 500
TURTLE_EGGS: 500
FROST_WALKER: 500 FROST_WALKER: 500
TURTLE_EGGS: 500
COLLECT_LAVA: 500 COLLECT_LAVA: 500
BREAK_SPAWNERS: 500 BREAK_SPAWNERS: 500
LEVER: 500 LEVER: 500
ELYTRA: 0 ELYTRA: 0
CAKE: 500 CAKE: 500
HURT_MONSTERS: 0
RIDING: 500 RIDING: 500
HURT_MONSTERS: 0
NAME_TAG: 500 NAME_TAG: 500
ARMOR_STAND: 500 ARMOR_STAND: 500
TRADING: 0 TRADING: 0
@ -301,17 +323,17 @@ world:
COMMAND_RANKS: 500 COMMAND_RANKS: 500
BEACON: 500 BEACON: 500
TRAPDOOR: 500 TRAPDOOR: 500
EXPERIENCE_BOTTLE_THROWING: 500
PRESSURE_PLATE: 0 PRESSURE_PLATE: 0
EXPERIENCE_BOTTLE_THROWING: 500
DYE: 500 DYE: 500
ITEM_FRAME: 500 ITEM_FRAME: 500
PLACE_BLOCKS: 500 PLACE_BLOCKS: 500
CRAFTING: 0 CRAFTING: 0
ENCHANTING: 0
SHEARING: 500 SHEARING: 500
ENCHANTING: 0
BOAT: 500 BOAT: 500
BED: 500
SPAWN_EGGS: 500 SPAWN_EGGS: 500
BED: 500
MILKING: 0 MILKING: 0
DISPENSER: 500 DISPENSER: 500
GATE: 0 GATE: 0
@ -322,8 +344,8 @@ world:
BREAK_BLOCKS: 500 BREAK_BLOCKS: 500
CHORUS_FRUIT: 500 CHORUS_FRUIT: 500
CONTAINER: 500 CONTAINER: 500
POTION_THROWING: 500
JUKEBOX: 500 JUKEBOX: 500
POTION_THROWING: 500
# These are the default settings for new caves # These are the default settings for new caves
default-cave-settings: default-cave-settings:
PVP_END: false PVP_END: false
@ -335,33 +357,33 @@ world:
MONSTER_NATURAL_SPAWN: true MONSTER_NATURAL_SPAWN: true
FIRE_IGNITE: true FIRE_IGNITE: true
FIRE_SPREAD: true FIRE_SPREAD: true
ANIMAL_SPAWNERS_SPAWN: true
FIRE_BURNING: true FIRE_BURNING: true
ANIMAL_SPAWNERS_SPAWN: true
PVP_OVERWORLD: false PVP_OVERWORLD: false
# These settings/flags are hidden from users # These settings/flags are hidden from users
# Ops can toggle hiding in-game using SHIFT-LEFT-CLICK on flags in settings # Ops can toggle hiding in-game using SHIFT-LEFT-CLICK on flags in settings
hidden-flags: [] hidden-flags: []
# Visitor banned commands - Visitors to caves cannot use these commands in this world # Visitor banned commands - Visitors to caves cannot use these commands in this world
visitor-banned-commands: visitor-banned-commands:
- spawner - spawner
- spawnmob - spawnmob
# Falling banned commands - players cannot use these commands when falling # Falling banned commands - players cannot use these commands when falling
# if the PREVENT_TELEPORT_WHEN_FALLING world setting flag is active # if the PREVENT_TELEPORT_WHEN_FALLING world setting flag is active
falling-banned-commands: falling-banned-commands:
- warp - warp
- spawn - spawn
cave: cave:
# Default max team size # Default max team size
# Permission size cannot be less than the default below. # Permission size cannot be less than the default below.
max-team-size: 4 max-team-size: 4
# Default maximum number of coop rank members per cave # Default maximum number of coop rank members per cave
# Players can have the caveblock.coop.maxsize.<number> permission to be bigger but # Players can have the caveblock.coop.maxsize.<number> permission to be bigger but
# permission size cannot be less than the default below. # permission size cannot be less than the default below.
# Added since 1.13.0. # Added since 1.13.0.
max-coop-size: 4 max-coop-size: 4
# Default maximum number of trusted rank members per cave # Default maximum number of trusted rank members per cave
# Players can have the caveblock.trust.maxsize.<number> permission to be bigger but # Players can have the caveblock.trust.maxsize.<number> permission to be bigger but
# permission size cannot be less than the default below. # permission size cannot be less than the default below.
# Added since 1.13.0. # Added since 1.13.0.
max-trusted-size: 4 max-trusted-size: 4
# Default maximum number of homes a player can have. Min = 1 # Default maximum number of homes a player can have. Min = 1
@ -461,10 +483,46 @@ cave:
create-missing-nether-end-caves: false create-missing-nether-end-caves: false
commands: commands:
# List of commands to run when a player joins an cave or creates one. # List of commands to run when a player joins an cave or creates one.
# These commands are run by the console, unless otherwise stated using the [SUDO] prefix,
# in which case they are executed by the player.
#
# Available placeholders for the commands are the following:
# * [name]: name of the player
#
# Here are some examples of valid commands to execute:
# * '[SUDO] bbox version'
# * 'bsbadmin deaths set [player] 0'
#
# Note that player-executed commands might not work, as these commands can be run with said player being offline.
# Added since 1.8.0.
on-join: [] on-join: []
# List of commands to run when a player leaves a cave, resets his cave or gets kicked from it. # List of commands to run when a player leaves a cave, resets his cave or gets kicked from it.
# These commands are run by the console, unless otherwise stated using the [SUDO] prefix,
# in which case they are executed by the player.
#
# Available placeholders for the commands are the following:
# * [name]: name of the player
#
# Here are some examples of valid commands to execute:
# * '[SUDO] bbox version'
# * 'bsbadmin deaths set [player] 0'
#
# Note that player-executed commands might not work, as these commands can be run with said player being offline.
# Added since 1.8.0.
on-leave: [] on-leave: []
# Returns a list of commands that should be executed when the player respawns after death if Flags.ISLAND_RESPAWN is true. # List of commands that should be executed when the player respawns after death if Flags.ISLAND_RESPAWN is true.
# These commands are run by the console, unless otherwise stated using the [SUDO] prefix,
# in which case they are executed by the player.
#
# Available placeholders for the commands are the following:
# * [name]: name of the player
#
# Here are some examples of valid commands to execute:
# * '[SUDO] bbox version'
# * 'bsbadmin deaths set [player] 0'
#
# Note that player-executed commands might not work, as these commands can be run with said player being offline.
# Added since 1.14.0.
on-respawn: [] on-respawn: []
sethome: sethome:
nether: nether:
@ -488,9 +546,9 @@ protection:
# Geo restrict mobs. # Geo restrict mobs.
# Mobs that exit the cave space where they were spawned will be removed. # Mobs that exit the cave space where they were spawned will be removed.
geo-limit-settings: geo-limit-settings:
- GHAST - GHAST
- BAT - BAT
- BLAZE - BLAZE
# CaveBlock blocked mobs. # CaveBlock blocked mobs.
# List of mobs that should not spawn in the CaveBlock. # List of mobs that should not spawn in the CaveBlock.
# Added since 1.13.0. # Added since 1.13.0.
@ -498,30 +556,30 @@ protection:
# Invincible visitors. List of damages that will not affect visitors. # Invincible visitors. List of damages that will not affect visitors.
# Make list blank if visitors should receive all damages # Make list blank if visitors should receive all damages
invincible-visitors: invincible-visitors:
- BLOCK_EXPLOSION - BLOCK_EXPLOSION
- CONTACT - CONTACT
- CUSTOM - CUSTOM
- DROWNING - DROWNING
- ENTITY_ATTACK - ENTITY_ATTACK
- ENTITY_EXPLOSION - ENTITY_EXPLOSION
- FALL - FALL
- FALLING_BLOCK - FALLING_BLOCK
- FIRE - FIRE
- FIRE_TICK - FIRE_TICK
- LAVA - LAVA
- LIGHTNING - LIGHTNING
- MAGIC - MAGIC
- POISON - POISON
- PROJECTILE - PROJECTILE
- STARVATION - STARVATION
- SUFFOCATION - SUFFOCATION
- THORNS - THORNS
- WITHER - WITHER
- DRAGON_BREATH - DRAGON_BREATH
- FLY_INTO_WALL - FLY_INTO_WALL
- HOT_FLOOR - HOT_FLOOR
- CRAMMING - CRAMMING
- VOID - VOID
do-not-edit-these-settings: do-not-edit-these-settings:
# These settings should not be edited # These settings should not be edited
reset-epoch: 0 reset-epoch: 0