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
This commit is contained in:
BONNe 2022-04-25 01:07:19 +03:00
parent e6e3c97f80
commit 28f1a57838
5 changed files with 315 additions and 117 deletions

View File

@ -50,7 +50,7 @@
<!-- Revision variable removes warning about dynamic version -->
<revision>${build.version}-SNAPSHOT</revision>
<!-- 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>
<sonar.organization>bentobox-world</sonar.organization>
<sonar.host.url>https://sonarcloud.io</sonar.host.url>

View File

@ -34,7 +34,9 @@ public class CaveBlock extends GameModeAddon
this.saveDefaultConfig();
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
this.playerCommand = new DefaultPlayerCommand(this)
@ -137,7 +139,7 @@ public class CaveBlock extends GameModeAddon
// Create the world if it does not exist
this.islandWorld = WorldCreator.name(worldName).
environment(World.Environment.NORMAL).
generator(this.chunkGenerator).
generator(this.chunkNormalGenerator).
createWorld();
// Set spawn rates
setSpawnRates(islandWorld);
@ -162,7 +164,7 @@ public class CaveBlock extends GameModeAddon
{
this.netherWorld = WorldCreator.name(worldName + NETHER).
type(WorldType.FLAT).
generator(this.chunkGenerator).
generator(this.chunkNetherGenerator).
environment(World.Environment.NETHER).
createWorld();
}
@ -187,7 +189,7 @@ public class CaveBlock extends GameModeAddon
{
this.endWorld = WorldCreator.name(worldName + THE_END).
type(WorldType.FLAT).
generator(this.chunkGenerator).
generator(this.chunkEndGenerator).
environment(World.Environment.THE_END).
createWorld();
}
@ -232,7 +234,18 @@ public class CaveBlock extends GameModeAddon
@Override
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;
/**
* 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
// ---------------------------------------------------------------------
@ -2196,8 +2262,8 @@ public class Settings implements WorldSettings
private int banLimit = -1;
@ConfigComment("")
@ConfigComment("This is cave.. no height... only depth. Max 256.")
@ConfigComment("Should not be less then cave height.")
@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 than cave height.")
@ConfigEntry(path = "world.world-depth", needsReset = true)
private int worldDepth = 256;
@ -2212,14 +2278,34 @@ public class Settings implements WorldSettings
private boolean newMaterialGenerator = false;
@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)
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)
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.")
@ConfigEntry(path = "world.normal.main-block", needsReset = true)
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.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.FlatBiomeProvider;
import world.bentobox.caveblock.generators.populators.MaterialPopulator;
import world.bentobox.caveblock.generators.populators.NewMaterialPopulator;
import world.bentobox.caveblock.generators.populators.*;
import java.util.ArrayList;
import java.util.List;
@ -31,6 +29,7 @@ public class ChunkGeneratorWorld extends ChunkGenerator {
private final CaveBlock addon;
private final Settings settings;
private final List<BlockPopulator> blockPopulators;
private final World.Environment environment;
private BiomeProvider biomeProvider;
private boolean isNewGenerator;
@ -40,12 +39,14 @@ public class ChunkGeneratorWorld extends ChunkGenerator {
/**
* @param addon - CaveBlock object
* @param environment - World environment
*/
public ChunkGeneratorWorld(CaveBlock addon) {
public ChunkGeneratorWorld(CaveBlock addon, World.Environment environment) {
this.addon = addon;
this.settings = addon.getSettings();
this.blockPopulators = new ArrayList<>(2);
this.environment = environment;
reload();
}
@ -53,14 +54,24 @@ public class ChunkGeneratorWorld extends ChunkGenerator {
// Section: Methods
// ---------------------------------------------------------------------
private Material getGroundCeilMaterial(World.Environment environment) {
private Material getGroundRoofMaterial(World.Environment environment) {
return switch (environment) {
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();
default -> this.settings.isNormalFloor() ? Material.BEDROCK : this.settings.getNormalMainBlock();
};
}
private Material getBaseMaterial(World.Environment environment) {
return switch (environment) {
case NETHER -> this.settings.getNetherMainBlock();
@ -70,19 +81,35 @@ public class ChunkGeneratorWorld extends ChunkGenerator {
}
@Override
public void generateBedrock(WorldInfo worldInfo, Random random, int chunkX, int chunkZ, ChunkData chunkData) {
final int minHeight = worldInfo.getMinHeight();
Material material = getGroundCeilMaterial(worldInfo.getEnvironment());
chunkData.setRegion(0, minHeight, 0, 16, minHeight + 1, 16, material);
public void generateBedrock(WorldInfo worldInfo, Random random, int chunkX, int chunkZ, ChunkData chunkData)
{
if (!this.shouldGenerateBedrock())
{
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
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());
chunkData.setRegion(0, worldHeight - 1, 0, 16, worldHeight, 16, material);
public void generateSurface(WorldInfo worldInfo, Random random, int chunkX, int chunkZ, ChunkData chunkData)
{
if (!this.shouldGenerateSurface())
{
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
public void generateNoise(WorldInfo worldInfo, Random random, int chunkX, int chunkZ, ChunkData chunkData) {
final int minHeight = worldInfo.getMinHeight();
@ -127,18 +154,22 @@ public class ChunkGeneratorWorld extends ChunkGenerator {
}
@Override
public boolean shouldGenerateSurface() {
return true;
public boolean shouldGenerateSurface()
{
// 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
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
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

@ -1,4 +1,4 @@
# CaveBlock Configuration {$version}
# CaveBlock Configuration 1.15.0-SNAPSHOT-LOCAL
caveblock:
command:
# Cave Command. What command users will run to access their cave.
@ -9,12 +9,12 @@ caveblock:
admin: cbadmin cba
# The default action for new 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.
new-player-action: create
# The default action for player command.
# 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.
default-action: go
world:
@ -81,9 +81,9 @@ world:
# The permission caveblock.ban.maxlimit.X where X is a number can also be used per player
# -1 = unlimited
ban-limit: -1
#
# This is cave.. no height... only depth. Max 256.
# Should not be less then cave height.
#
# 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 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.
world-depth: 256
# 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.
use-new-material-generator: false
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.
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.
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.
# /!\ 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
@ -116,24 +134,24 @@ world:
# 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.
blocks:
- MATERIAL:DIAMOND_ORE:1:5
- MATERIAL:GOLD_ORE:1:4
- MATERIAL:IRON_ORE:5:4
- MATERIAL:COAL_ORE:10:6
- MATERIAL:EMERALD_ORE:1:1
- MATERIAL:CLAY:10:6
- MATERIAL:DIRT:20:10
- MATERIAL:GRAVEL:40:6
- MATERIAL:GRANITE:40:10
- MATERIAL:ANDESITE:20:10
- MATERIAL:DIORITE:30:8
- ENTITY:ZOMBIE:10:1
- ENTITY:ENDERMAN:10:1
- ENTITY:SKELETON:10:1
- ENTITY:CREEPER:1:1
- ENTITY:DOLPHIN:1:1
- ENTITY:BAT:10:1
- ENTITY:CAVE_SPIDER:10:1
- MATERIAL:DIAMOND_ORE:1:5
- MATERIAL:GOLD_ORE:1:4
- MATERIAL:IRON_ORE:5:4
- MATERIAL:COAL_ORE:10:6
- MATERIAL:EMERALD_ORE:1:1
- MATERIAL:CLAY:10:6
- MATERIAL:DIRT:20:10
- MATERIAL:GRAVEL:40:6
- MATERIAL:GRANITE:40:10
- MATERIAL:ANDESITE:20:10
- MATERIAL:DIORITE:30:8
- ENTITY:ZOMBIE:10:1
- ENTITY:ENDERMAN:10:1
- ENTITY:SKELETON:10:1
- ENTITY:CREEPER:1:1
- ENTITY:DOLPHIN:1:1
- ENTITY:BAT:10:1
- ENTITY:CAVE_SPIDER:10:1
nether:
# 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.
@ -172,18 +190,19 @@ world:
# 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.
blocks:
- MATERIAL:NETHER_QUARTZ_ORE:30:5
- MATERIAL:SOUL_SAND:40:10
- MATERIAL:MAGMA_BLOCK:10:3
- MATERIAL:GLOWSTONE:20:8
- MATERIAL:NETHER_BRICKS:10:5
- MATERIAL:LAVA:10:1
- ENTITY:MAGMA_CUBE:0.5:1
- ENTITY:GHAST:0.1:1
- ENTITY:WITHER_SKELETON:0.1:1
- MATERIAL:FIRE:10:1
- MATERIAL:NETHER_QUARTZ_ORE:30:5
- MATERIAL:SOUL_SAND:40:10
- MATERIAL:MAGMA_BLOCK:10:3
- MATERIAL:GLOWSTONE:20:8
- MATERIAL:NETHER_BRICKS:10:5
- MATERIAL:LAVA:10:1
- ENTITY:MAGMA_CUBE:0.5:1
- ENTITY:GHAST:0.1:1
- ENTITY:WITHER_SKELETON:0.1:1
- MATERIAL:FIRE:10:1
# 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
end:
generate: true
@ -214,16 +233,17 @@ world:
# 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.
blocks:
- ENTITY:SHULKER:0.2:1
- MATERIAL:OBSIDIAN:1:1
- MATERIAL:CHORUS_PLANT:1:3
# This option indicates if obsidian platform in the end should be generated when player enters the end world.
- ENTITY:SHULKER:0.2:1
- MATERIAL:OBSIDIAN:1:1
- MATERIAL:CHORUS_PLANT:1:3
# This option indicates if obsidian platform in the end should be generated
# when player enters the end world.
create-obsidian-platform: false
# Mob white list - these mobs will NOT be removed when logging in or doing /cave
remove-mobs-whitelist:
- WITHER
- ENDERMAN
- ZOMBIE_VILLAGER
- ZOMBIE_VILLAGER
- WITHER
- ENDERMAN
# World flags. These are boolean settings for various flags for this world
flags:
CREEPER_DAMAGE: true
@ -232,6 +252,7 @@ world:
ISLAND_RESPAWN: true
CREEPER_GRIEFING: false
COARSE_DIRT_TILLING: true
PETS_STAY_AT_HOME: true
ENDERMAN_GRIEFING: true
CLEAN_SUPER_FLAT: false
CHEST_DAMAGE: false
@ -241,6 +262,7 @@ world:
ENDERMAN_DEATH_DROP: true
LIQUIDS_FLOWING_OUT: false
OFFLINE_REDSTONE: true
REMOVE_END_EXIT_ISLAND: true
OFFLINE_GROWTH: true
REMOVE_MOBS: true
ENDER_CHEST: false
@ -272,15 +294,15 @@ world:
END_PORTAL: 500
BREEDING: 500
HURT_VILLAGERS: 500
TURTLE_EGGS: 500
FROST_WALKER: 500
TURTLE_EGGS: 500
COLLECT_LAVA: 500
BREAK_SPAWNERS: 500
LEVER: 500
ELYTRA: 0
CAKE: 500
HURT_MONSTERS: 0
RIDING: 500
HURT_MONSTERS: 0
NAME_TAG: 500
ARMOR_STAND: 500
TRADING: 0
@ -301,17 +323,17 @@ world:
COMMAND_RANKS: 500
BEACON: 500
TRAPDOOR: 500
EXPERIENCE_BOTTLE_THROWING: 500
PRESSURE_PLATE: 0
EXPERIENCE_BOTTLE_THROWING: 500
DYE: 500
ITEM_FRAME: 500
PLACE_BLOCKS: 500
CRAFTING: 0
ENCHANTING: 0
SHEARING: 500
ENCHANTING: 0
BOAT: 500
BED: 500
SPAWN_EGGS: 500
BED: 500
MILKING: 0
DISPENSER: 500
GATE: 0
@ -322,8 +344,8 @@ world:
BREAK_BLOCKS: 500
CHORUS_FRUIT: 500
CONTAINER: 500
POTION_THROWING: 500
JUKEBOX: 500
POTION_THROWING: 500
# These are the default settings for new caves
default-cave-settings:
PVP_END: false
@ -335,33 +357,33 @@ world:
MONSTER_NATURAL_SPAWN: true
FIRE_IGNITE: true
FIRE_SPREAD: true
ANIMAL_SPAWNERS_SPAWN: true
FIRE_BURNING: true
ANIMAL_SPAWNERS_SPAWN: true
PVP_OVERWORLD: false
# These settings/flags are hidden from users
# Ops can toggle hiding in-game using SHIFT-LEFT-CLICK on flags in settings
hidden-flags: []
# Visitor banned commands - Visitors to caves cannot use these commands in this world
visitor-banned-commands:
- spawner
- spawnmob
- spawner
- spawnmob
# Falling banned commands - players cannot use these commands when falling
# if the PREVENT_TELEPORT_WHEN_FALLING world setting flag is active
falling-banned-commands:
- warp
- spawn
- warp
- spawn
cave:
# 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
# Default maximum number of coop rank members per cave
# 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.
max-coop-size: 4
# Default maximum number of trusted rank members per cave
# 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.
max-trusted-size: 4
# Default maximum number of homes a player can have. Min = 1
@ -461,10 +483,46 @@ cave:
create-missing-nether-end-caves: false
commands:
# 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: []
# 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: []
# 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: []
sethome:
nether:
@ -488,9 +546,9 @@ protection:
# Geo restrict mobs.
# Mobs that exit the cave space where they were spawned will be removed.
geo-limit-settings:
- GHAST
- BAT
- BLAZE
- GHAST
- BAT
- BLAZE
# CaveBlock blocked mobs.
# List of mobs that should not spawn in the CaveBlock.
# Added since 1.13.0.
@ -498,30 +556,30 @@ protection:
# Invincible visitors. List of damages that will not affect visitors.
# Make list blank if visitors should receive all damages
invincible-visitors:
- BLOCK_EXPLOSION
- CONTACT
- CUSTOM
- DROWNING
- ENTITY_ATTACK
- ENTITY_EXPLOSION
- FALL
- FALLING_BLOCK
- FIRE
- FIRE_TICK
- LAVA
- LIGHTNING
- MAGIC
- POISON
- PROJECTILE
- STARVATION
- SUFFOCATION
- THORNS
- WITHER
- DRAGON_BREATH
- FLY_INTO_WALL
- HOT_FLOOR
- CRAMMING
- VOID
- BLOCK_EXPLOSION
- CONTACT
- CUSTOM
- DROWNING
- ENTITY_ATTACK
- ENTITY_EXPLOSION
- FALL
- FALLING_BLOCK
- FIRE
- FIRE_TICK
- LAVA
- LIGHTNING
- MAGIC
- POISON
- PROJECTILE
- STARVATION
- SUFFOCATION
- THORNS
- WITHER
- DRAGON_BREATH
- FLY_INTO_WALL
- HOT_FLOOR
- CRAMMING
- VOID
do-not-edit-these-settings:
# These settings should not be edited
reset-epoch: 0