diff --git a/pom.xml b/pom.xml index f9c6282..6bc80bb 100644 --- a/pom.xml +++ b/pom.xml @@ -59,7 +59,7 @@ 2.0.9 1.19.3-R0.1-SNAPSHOT - 1.22.0-SNAPSHOT + 1.22.1-SNAPSHOT ${build.version}-SNAPSHOT diff --git a/src/main/java/world/bentobox/boxed/Boxed.java b/src/main/java/world/bentobox/boxed/Boxed.java index d27dd97..bb6d325 100644 --- a/src/main/java/world/bentobox/boxed/Boxed.java +++ b/src/main/java/world/bentobox/boxed/Boxed.java @@ -87,8 +87,6 @@ public class Boxed extends GameModeAddon { new AdminPlaceStructureCommand(this); } }; - - } private boolean loadSettings() { @@ -183,7 +181,7 @@ public class Boxed extends GameModeAddon { // This creates a vanilla base world with biomes AbstractBoxedChunkGenerator seedBaseGen = new BoxedSeedChunkGenerator(this, Environment.NETHER); baseWorldNether = WorldCreator - .name(SEED+NETHER+BASE) + .name(worldName + "/" + SEED+NETHER+BASE) .generator(seedBaseGen) .environment(Environment.NETHER) .seed(getSettings().getSeed()) @@ -196,7 +194,7 @@ public class Boxed extends GameModeAddon { log("Creating Boxed Biomed Nether world ..."); seedWorldNether = WorldCreator - .name(SEED+NETHER) + .name(worldName + "/" + SEED+NETHER) .generator(new BoxedSeedChunkGenerator(this, Environment.NETHER, new NetherSeedBiomeGenerator(this, seedBaseGen))) .environment(Environment.NETHER) .seed(getSettings().getSeed()) @@ -219,7 +217,7 @@ public class Boxed extends GameModeAddon { // This creates a vanilla base world with biomes AbstractBoxedChunkGenerator seedBaseGen = new BoxedSeedChunkGenerator(this, Environment.NORMAL); baseWorld = WorldCreator - .name(SEED+BASE) + .name(worldName + "/" + SEED+BASE) .generator(seedBaseGen) .environment(Environment.NORMAL) .seed(getSettings().getSeed()) @@ -232,7 +230,7 @@ public class Boxed extends GameModeAddon { log("Creating Boxed Biomed world ..."); seedWorld = WorldCreator - .name(SEED) + .name(worldName + "/" + SEED) .generator(new BoxedSeedChunkGenerator(this, Environment.NORMAL, new SeedBiomeGenerator(this, seedBaseGen))) .environment(Environment.NORMAL) .seed(getSettings().getSeed()) @@ -395,4 +393,8 @@ public class Boxed extends GameModeAddon { return boxedBlockPopulator; } + @Override + public boolean isUsesNewChunkGeneration() { + return true; + } } diff --git a/src/main/java/world/bentobox/boxed/Settings.java b/src/main/java/world/bentobox/boxed/Settings.java index 6e03707..9e0a783 100644 --- a/src/main/java/world/bentobox/boxed/Settings.java +++ b/src/main/java/world/bentobox/boxed/Settings.java @@ -76,51 +76,11 @@ public class Settings implements WorldSettings { @ConfigEntry(path = "world.generator.seed", needsReset = true) private long seed = 602103456450L; - @ConfigComment("Area seed center. This is where the areas are copied from.") - @ConfigEntry(path = "world.generator.seed-start.normal.x") - private int seedX = 0; - @ConfigEntry(path = "world.generator.seed-start.normal.z") - private int seedZ = 0; - - @ConfigComment("Nether area seed center. This is where the areas are copied from.") - @ConfigEntry(path = "world.generator.seed-start.nether.x") - private int netherSeedX = 0; - @ConfigEntry(path = "world.generator.seed-start.nether.z") - private int netherSeedZ = 0; - - @ConfigComment("End area seed center. This is where the areas are copied from.") - @ConfigEntry(path = "world.generator.seed-start.end.x") - private int endSeedX = 0; - @ConfigEntry(path = "world.generator.seed-start.end.z") - private int endSeedZ = 0; - @ConfigComment("World difficulty setting - PEACEFUL, EASY, NORMAL, HARD") @ConfigComment("Other plugins may override this setting") @ConfigEntry(path = "world.difficulty") private Difficulty difficulty = Difficulty.NORMAL; - @ConfigComment("Generate surface") - @ConfigEntry(path = "world.generator.generate-surface", needsRestart = true) - private boolean generateSurface = true; - - @ConfigComment("Generate caves") - @ConfigEntry(path = "world.generator.generate-caves", needsRestart = true) - private boolean generateCaves = true; - - @ConfigComment("Generate Decorations") - @ConfigEntry(path = "world.generator.generate-decorations", needsRestart = true) - private boolean generateDecorations = true; - - @ConfigComment("Generate mobs") - @ConfigEntry(path = "world.generator.generate-mobs", needsRestart = true) - private boolean generateMobs = true; - - @ConfigComment("Allow surface structures - villages, shipwrecks, broken portals, etc.") - @ConfigComment("These will be randomly placed, so may not be available for every player.") - @ConfigEntry(path = "world.generator.allow-structures", needsRestart = true) - private boolean allowStructures = true; - - @ConfigComment("Spawn limits. These override the limits set in bukkit.yml") @ConfigComment("If set to a negative number, the server defaults will be used") @ConfigEntry(path = "world.spawn-limits.monsters") @@ -161,21 +121,11 @@ public class Settings implements WorldSettings { @ConfigEntry(path = "world.start-z") private int islandStartZ = 0; - @ConfigComment("Area height - Lowest is 5.") - @ConfigComment("It is the y coordinate of the bedrock block in the blueprint.") - @ConfigEntry(path = "world.area-height") - private int islandHeight = 5; - @ConfigComment("Maximum number of player areas in the world. Set to -1 or 0 for unlimited.") @ConfigComment("If the number of areas is greater than this number, it will stop players from joining the world.") @ConfigEntry(path = "world.max-areas") private int maxIslands = -1; - @ConfigComment("The default game mode for this world. Players will be set to this mode when they create") - @ConfigComment("a new area for example. Options are SURVIVAL, CREATIVE, ADVENTURE, SPECTATOR") - @ConfigEntry(path = "world.default-game-mode") - private GameMode defaultGameMode = GameMode.SURVIVAL; - @ConfigComment("The maximum number of players a player can ban at any one time in this game mode.") @ConfigComment("The permission boxed.ban.maxlimit.X where X is a number can also be used per player") @ConfigComment("-1 = unlimited") @@ -191,13 +141,6 @@ public class Settings implements WorldSettings { @ConfigEntry(path = "world.nether.generate") private boolean netherGenerate = true; - @ConfigComment("Nether spawn protection radius - this is the distance around the nether spawn") - @ConfigComment("that will be public from player interaction (breaking blocks, pouring lava etc.)") - @ConfigComment("Minimum is 0 (not recommended), maximum is 100. Default is 25.") - @ConfigComment("Only applies to vanilla nether") - @ConfigEntry(path = "world.nether.spawn-radius") - private int netherSpawnRadius = 32; - @ConfigComment("This option indicates if nether portals should be linked via dimensions.") @ConfigComment("Option will simulate vanilla portal mechanics that links portals together") @ConfigComment("or creates a new portal, if there is not a portal in that dimension.") @@ -205,7 +148,7 @@ public class Settings implements WorldSettings { private boolean makeNetherPortals = false; // End - @ConfigComment("End Nether - if this is false, the end world will not be made and access to") + @ConfigComment("End World - if this is false, the end world will not be made and access to") @ConfigComment("the end will not occur. Other plugins may still enable portal usage.") @ConfigEntry(path = "world.end.generate") private boolean endGenerate = true; @@ -369,7 +312,7 @@ public class Settings implements WorldSettings { @ConfigComment("Grant these advancements") @ConfigEntry(path = "area.reset.on-leave.grant-advancements") private List onLeaveGrantAdvancements = new ArrayList<>(); - + @ConfigComment("Toggles the automatic area creation upon the player's first login on your server.") @ConfigComment("If set to true,") @ConfigComment(" * Upon connecting to your server for the first time, the player will be told that") @@ -412,13 +355,6 @@ public class Settings implements WorldSettings { @ConfigEntry(path = "area.teleport-player-to-area-when-created") private boolean teleportPlayerToIslandUponIslandCreation = true; - @ConfigComment("Create Nether or End areas if they are missing when a player goes through a portal.") - @ConfigComment("Nether and End areas are usually pasted when a player makes their area, but if they are") - @ConfigComment("missing for some reason, you can switch this on.") - @ConfigComment("Note that bedrock removal glitches can exploit this option.") - @ConfigEntry(path = "area.create-missing-nether-end-areas") - private boolean pasteMissingIslands = false; - // Commands @ConfigComment("List of commands to run when a player joins an area or creates one.") @ConfigComment("These commands are run by the console, unless otherwise stated using the [SUDO] prefix,") @@ -464,14 +400,14 @@ public class Settings implements WorldSettings { private List onRespawnCommands = new ArrayList<>(); // Sethome - @ConfigComment("Allow setting home in the nether. Only available on nether areas, not vanilla nether.") + @ConfigComment("Allow setting home in the nether.") @ConfigEntry(path = "area.sethome.nether.allow") private boolean allowSetHomeInNether = true; @ConfigEntry(path = "area.sethome.nether.require-confirmation") private boolean requireConfirmationToSetHomeInNether = true; - @ConfigComment("Allow setting home in the end. Only available on end areas, not vanilla end.") + @ConfigComment("Allow setting home in the end.") @ConfigEntry(path = "area.sethome.the-end.allow") private boolean allowSetHomeInTheEnd = true; @@ -503,7 +439,7 @@ public class Settings implements WorldSettings { @ConfigEntry(path = "protection.geo-limit-settings") private List geoLimitSettings = new ArrayList<>(); - @ConfigComment("Boxed blocked mobs.") + @ConfigComment("Blocked mobs.") @ConfigComment("List of mobs that should not spawn in Boxed.") @ConfigEntry(path = "protection.block-mobs") private List mobLimitSettings = new ArrayList<>(); @@ -596,7 +532,7 @@ public class Settings implements WorldSettings { */ @Override public int getIslandHeight() { - return islandHeight; + return 5; } /** @@ -628,7 +564,7 @@ public class Settings implements WorldSettings { */ @Override public GameMode getDefaultGameMode() { - return defaultGameMode; + return GameMode.SURVIVAL; } /** @@ -652,7 +588,7 @@ public class Settings implements WorldSettings { */ @Override public int getNetherSpawnRadius() { - return netherSpawnRadius; + return 32; } /** @@ -990,13 +926,6 @@ public class Settings implements WorldSettings { this.islandStartZ = islandStartZ; } - /** - * @param islandHeight the islandHeight to set - */ - public void setIslandHeight(int islandHeight) { - this.islandHeight = islandHeight; - } - /** * @param maxIslands the maxIslands to set */ @@ -1004,13 +933,6 @@ public class Settings implements WorldSettings { this.maxIslands = maxIslands; } - /** - * @param defaultGameMode the defaultGameMode to set - */ - public void setDefaultGameMode(GameMode defaultGameMode) { - this.defaultGameMode = defaultGameMode; - } - /** * @param netherGenerate the netherGenerate to set */ @@ -1018,13 +940,6 @@ public class Settings implements WorldSettings { this.netherGenerate = netherGenerate; } - /** - * @param netherSpawnRadius the netherSpawnRadius to set - */ - public void setNetherSpawnRadius(int netherSpawnRadius) { - this.netherSpawnRadius = netherSpawnRadius; - } - /** * @param endGenerate the endGenerate to set */ @@ -1465,14 +1380,7 @@ public class Settings implements WorldSettings { */ @Override public boolean isPasteMissingIslands() { - return pasteMissingIslands; - } - - /** - * @param pasteMissingIslands the pasteMissingIslands to set - */ - public void setPasteMissingIslands(boolean pasteMissingIslands) { - this.pasteMissingIslands = pasteMissingIslands; + return false; } /** @@ -1673,20 +1581,6 @@ public class Settings implements WorldSettings { return false; } - /** - * @return the allowStructures - */ - public boolean isAllowStructures() { - return allowStructures; - } - - /** - * @param allowStructures the allowStructures to set - */ - public void setAllowStructures(boolean allowStructures) { - this.allowStructures = allowStructures; - } - /** * @return the onJoinResetAdvancements */ @@ -1773,62 +1667,6 @@ public class Settings implements WorldSettings { this.broadcastAdvancements = broadcastAdvancements; } - /** - * @return the generateSurface - */ - public boolean isGenerateSurface() { - return generateSurface; - } - - /** - * @param generateSurface the generateSurface to set - */ - public void setGenerateSurface(boolean generateSurface) { - this.generateSurface = generateSurface; - } - - /** - * @return the generateCaves - */ - public boolean isGenerateCaves() { - return generateCaves; - } - - /** - * @param generateCaves the generateCaves to set - */ - public void setGenerateCaves(boolean generateCaves) { - this.generateCaves = generateCaves; - } - - /** - * @return the generateDecorations - */ - public boolean isGenerateDecorations() { - return generateDecorations; - } - - /** - * @param generateDecorations the generateDecorations to set - */ - public void setGenerateDecorations(boolean generateDecorations) { - this.generateDecorations = generateDecorations; - } - - /** - * @return the generateMobs - */ - public boolean isGenerateMobs() { - return generateMobs; - } - - /** - * @param generateMobs the generateMobs to set - */ - public void setGenerateMobs(boolean generateMobs) { - this.generateMobs = generateMobs; - } - /** * @return the denyVisitorAdvancements */ @@ -1847,85 +1685,42 @@ public class Settings implements WorldSettings { * @return the seedX */ public int getSeedX() { - return seedX; - } - - /** - * @param seedX the seedX to set - */ - public void setSeedX(int seedX) { - this.seedX = seedX; + return 0; } /** * @return the seedZ */ public int getSeedZ() { - return seedZ; - } - - /** - * @param seedZ the seedZ to set - */ - public void setSeedZ(int seedZ) { - this.seedZ = seedZ; + return 0; } /** * @return the netherSeedX */ public int getNetherSeedX() { - return netherSeedX; - } - - /** - * @param netherSeedX the netherSeedX to set - */ - public void setNetherSeedX(int netherSeedX) { - this.netherSeedX = netherSeedX; + return 0; } /** * @return the netherSeedZ */ public int getNetherSeedZ() { - return netherSeedZ; - } - - /** - * @param netherSeedZ the netherSeedZ to set - */ - public void setNetherSeedZ(int netherSeedZ) { - this.netherSeedZ = netherSeedZ; + return 0; } /** * @return the endSeedX */ public int getEndSeedX() { - return endSeedX; - } - - /** - * @param endSeedX the endSeedX to set - */ - public void setEndSeedX(int endSeedX) { - this.endSeedX = endSeedX; + return 0; } /** * @return the endSeedZ */ public int getEndSeedZ() { - return endSeedZ; + return 0; } - /** - * @param endSeedZ the endSeedZ to set - */ - public void setEndSeedZ(int endSeedZ) { - this.endSeedZ = endSeedZ; - } - - } diff --git a/src/main/java/world/bentobox/boxed/generators/chunks/AbstractBoxedChunkGenerator.java b/src/main/java/world/bentobox/boxed/generators/chunks/AbstractBoxedChunkGenerator.java index 8009aa9..c5d6290 100644 --- a/src/main/java/world/bentobox/boxed/generators/chunks/AbstractBoxedChunkGenerator.java +++ b/src/main/java/world/bentobox/boxed/generators/chunks/AbstractBoxedChunkGenerator.java @@ -125,7 +125,8 @@ public abstract class AbstractBoxedChunkGenerator extends ChunkGenerator { @Override public boolean shouldGenerateMobs() { - return this.addon.getSettings().isGenerateMobs(); + return true; + //return this.addon.getSettings().isGenerateMobs(); } @Override diff --git a/src/main/java/world/bentobox/boxed/listeners/NewAreaListener.java b/src/main/java/world/bentobox/boxed/listeners/NewAreaListener.java index ae11d04..a2b2473 100644 --- a/src/main/java/world/bentobox/boxed/listeners/NewAreaListener.java +++ b/src/main/java/world/bentobox/boxed/listeners/NewAreaListener.java @@ -44,6 +44,8 @@ import net.minecraft.world.level.block.entity.TileEntity; import world.bentobox.bentobox.BentoBox; import world.bentobox.bentobox.api.events.BentoBoxReadyEvent; import world.bentobox.bentobox.api.events.island.IslandCreatedEvent; +import world.bentobox.bentobox.api.events.island.IslandDeleteEvent; +import world.bentobox.bentobox.api.events.island.IslandResettedEvent; import world.bentobox.bentobox.database.objects.Island; import world.bentobox.bentobox.util.Pair; import world.bentobox.bentobox.util.Util; @@ -57,6 +59,7 @@ import world.bentobox.boxed.objects.BoxedStructureBlock; */ public class NewAreaListener implements Listener { + private static final List CARDINALS = List.of(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.EAST, BlockFace.WEST); private final Boxed addon; private File structureFile; private Queue itemsToBuild = new LinkedList<>(); @@ -103,7 +106,7 @@ public class NewAreaListener implements Listener { for (String struct : list) { Structure s = Bukkit.getStructureManager().loadStructure(NamespacedKey.fromString(struct)); if (s == null) { - BentoBox.getInstance().log("Now loading group from: " + struct); + //addon.log("Now loading group from: " + struct); } } } @@ -112,7 +115,15 @@ public class NewAreaListener implements Listener { @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) public void onIslandCreated(IslandCreatedEvent event) { - Island island = event.getIsland(); + setUpIsland(event.getIsland()); + } + + @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) + public void onIslandReset(IslandResettedEvent event) { + setUpIsland(event.getIsland()); + } + + private void setUpIsland(Island island) { // Check if this island is in this game if (!(addon.inWorld(island.getWorld()))) { return; @@ -128,6 +139,7 @@ public class NewAreaListener implements Listener { place("structure",config.getConfigurationSection(env), center, e); } } + } private void place(String string, ConfigurationSection section, Location center, Environment env) { @@ -163,7 +175,7 @@ public class NewAreaListener implements Listener { Location l = new Location(world, x, y, z); itemsToBuild.add(new Item(name, s, l, rot, mirror)); } else { - addon.logError("Structure file syntax error: " + name + " " + vector); + addon.logError("Structure file syntax error: " + vector + ": " + value); } } } @@ -204,7 +216,7 @@ public class NewAreaListener implements Listener { Block b = loc.getWorld().getBlockAt(x, y, z); if (b.getType().equals(Material.JIGSAW)) { // I would like to read the data from the block and do something with it! - processJigsaw(b); + processJigsaw(b, structureRotation); } else if (b.getType().equals(Material.STRUCTURE_BLOCK)) { processStructureBlock(b); } @@ -239,12 +251,15 @@ public class NewAreaListener implements Listener { } private static final Map BUTCHER_ANIMALS = Map.of(0, EntityType.COW, 1, EntityType.SHEEP, 2, EntityType.PIG); - private static void processJigsaw(Block b) { + private static void processJigsaw(Block b, StructureRotation structureRotation) { String data = nmsData(b); BoxedJigsawBlock bjb = gson.fromJson(data, BoxedJigsawBlock.class); - BentoBox.getInstance().logDebug("Jigsaw: " + bjb); - BlockData bd = Bukkit.createBlockData(bjb.getFinal_state()); - b.setType(bd.getMaterial()); + //BentoBox.getInstance().logDebug("Jigsaw: " + bjb); + //BentoBox.getInstance().logDebug("FinalState: " + bjb.getFinal_state()); + String finalState = correctDirection(bjb.getFinal_state(), structureRotation); + //BentoBox.getInstance().logDebug("FinalState after rotation: " + finalState); + BlockData bd = Bukkit.createBlockData(finalState); + b.setBlockData(bd); EntityType type = switch (bjb.getPool()) { case "minecraft:bastion/mobs/piglin" -> EntityType.PIGLIN; @@ -257,6 +272,7 @@ public class NewAreaListener implements Listener { case "minecraft:village/common/cows" -> EntityType.COW; case "minecraft:village/common/iron_golem" -> EntityType.IRON_GOLEM; case "minecraft:village/common/butcher_animals" -> BUTCHER_ANIMALS.get(new Random().nextInt(3)); + case "minecraft:village/common/animals" -> BUTCHER_ANIMALS.get(new Random().nextInt(3)); default -> null; }; if (bjb.getPool().contains("zombie/villagers")) { @@ -266,11 +282,70 @@ public class NewAreaListener implements Listener { } // Spawn it if (type != null && b.getWorld().spawnEntity(b.getRelative(BlockFace.UP).getLocation(), type) != null) { - BentoBox.getInstance().logDebug("Spawned a " + type + " at " + b.getRelative(BlockFace.UP).getLocation()); + //BentoBox.getInstance().logDebug("Spawned a " + type + " at " + b.getRelative(BlockFace.UP).getLocation()); } } + /** + * Corrects the direction of a block based on the structure's rotation + * @param finalState - the final block state of the block, which may include a facing: direction + * @param sr - the structure's rotation + * @return a rewritten blockstate with the updated direction, if required + */ + private static String correctDirection(String finalState, StructureRotation sr) { + if (sr.equals(StructureRotation.NONE)) { + // No change + return finalState; + } + BlockFace oldDirection = getDirection(finalState); + BlockFace newDirection = getNewDirection(oldDirection, sr); + if (newDirection.equals(BlockFace.SELF)) { + // No change - shouldn't happen, but just in case + return finalState; + } + return finalState.replace(oldDirection.name().toLowerCase(Locale.ENGLISH), newDirection.name().toLowerCase(Locale.ENGLISH)); + + } + + /** + * Adjusts the direction based on the StructureRotation + * @param oldDirection the old direction to adjust + * @param sr the structure rotation + * @return the new direction, or SELF if something weird happens + */ + private static BlockFace getNewDirection(BlockFace oldDirection, StructureRotation sr) { + if (sr.equals(StructureRotation.CLOCKWISE_180)) { + return oldDirection.getOppositeFace(); + } else if (sr.equals(StructureRotation.CLOCKWISE_90)) { + return switch(oldDirection) { + case EAST -> BlockFace.SOUTH; + case NORTH -> BlockFace.EAST; + case SOUTH -> BlockFace.WEST; + case WEST -> BlockFace.NORTH; + default -> BlockFace.SELF; + }; + } else if (sr.equals(StructureRotation.COUNTERCLOCKWISE_90)) { + return switch(oldDirection) { + case EAST -> BlockFace.NORTH; + case NORTH -> BlockFace.WEST; + case SOUTH -> BlockFace.EAST; + case WEST -> BlockFace.SOUTH; + default -> BlockFace.SELF; + }; + } + return BlockFace.SELF; + } + + /** + * Looks for north, south, east, west in the blockstate. + * @param finalState - the final block state of the block + * @return direction, if found, otherwise SELF + */ + private static BlockFace getDirection(String finalState) { + return CARDINALS.stream().filter(bf -> finalState.contains(bf.name().toLowerCase(Locale.ENGLISH))).findFirst().orElse(BlockFace.SELF); + } + private static String nmsData(Block block) { Location w = block.getLocation(); CraftWorld cw = (CraftWorld) w.getWorld(); // CraftWorld is NMS one diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index a539303..0afb1f9 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -1,4 +1,4 @@ -# Boxed Configuration 2.0.2-SNAPSHOT-LOCAL +# Boxed Configuration ${version} boxed: command: # Player Command. What command users will run to access their area. @@ -31,35 +31,6 @@ world: # World seed. # /!\ 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. seed: 602103456450 - seed-start: - normal: - # Area seed center. This is where the areas are copied from. - x: 0 - z: 0 - nether: - # Nether area seed center. This is where the areas are copied from. - x: 0 - z: 0 - end: - # End area seed center. This is where the areas are copied from. - x: 0 - z: 0 - # Generate surface - # /!\ In order to apply the changes made to this option, you must restart your server. Reloading BentoBox or the server won't work. - generate-surface: true - # Generate caves - # /!\ In order to apply the changes made to this option, you must restart your server. Reloading BentoBox or the server won't work. - generate-caves: true - # Generate Decorations - # /!\ In order to apply the changes made to this option, you must restart your server. Reloading BentoBox or the server won't work. - generate-decorations: true - # Generate mobs - # /!\ In order to apply the changes made to this option, you must restart your server. Reloading BentoBox or the server won't work. - generate-mobs: true - # Allow surface structures - villages, shipwrecks, broken portals, etc. - # These will be randomly placed, so may not be available for every player. - # /!\ In order to apply the changes made to this option, you must restart your server. Reloading BentoBox or the server won't work. - allow-structures: false # World difficulty setting - PEACEFUL, EASY, NORMAL, HARD # Other plugins may override this setting difficulty: NORMAL @@ -90,15 +61,9 @@ world: # If none of this makes sense, leave it at 0,0. start-x: 0 start-z: 0 - # Area height - Lowest is 5. - # It is the y coordinate of the bedrock block in the blueprint. - area-height: 8 # Maximum number of player areas in the world. Set to -1 or 0 for unlimited. # If the number of areas is greater than this number, it will stop players from joining the world. max-areas: -1 - # The default game mode for this world. Players will be set to this mode when they create - # a new area for example. Options are SURVIVAL, CREATIVE, ADVENTURE, SPECTATOR - default-game-mode: SURVIVAL # The maximum number of players a player can ban at any one time in this game mode. # The permission boxed.ban.maxlimit.X where X is a number can also be used per player # -1 = unlimited @@ -110,18 +75,13 @@ world: # Note that with a standard nether all players arrive at the same portal and entering a # portal will return them back to their areas. generate: true - # Nether spawn protection radius - this is the distance around the nether spawn - # that will be public from player interaction (breaking blocks, pouring lava etc.) - # Minimum is 0 (not recommended), maximum is 100. Default is 25. - # Only applies to vanilla nether - spawn-radius: 32 # 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 that dimension. # Added since 1.0.3. create-and-link-portals: true end: - # End Nether - if this is false, the end world will not be made and access to + # End World - if this is false, the end world will not be made and access to # the end will not occur. Other plugins may still enable portal usage. generate: false # Mob white list - these mobs will NOT be removed when logging in or doing /boxed @@ -168,6 +128,7 @@ world: TRADING: true EGGS: false ITEM_DROP: true + CHEST: false NOTE_BLOCK: true ENTER_EXIT_MESSAGES: true FLINT_AND_STEEL: false @@ -242,8 +203,8 @@ world: BREAK_HOPPERS: 500 FURNACE: 500 MONSTER_SPAWNERS_SPAWN: 500 - ANVIL: 500 MINECART: 500 + ANVIL: 500 FISH_SCOOPING: 500 FIRE_IGNITE: 500 END_PORTAL: 500 @@ -255,11 +216,11 @@ world: BREAK_SPAWNERS: 500 LEVER: 0 ELYTRA: 0 + RIDING: 500 CAKE: 500 HURT_MONSTERS: 0 - RIDING: 500 - NAME_TAG: 500 ARMOR_STAND: 500 + NAME_TAG: 500 TRADING: 0 EGGS: 500 ITEM_DROP: 0 @@ -267,10 +228,10 @@ world: FLINT_AND_STEEL: 500 NETHER_PORTAL: 0 LECTERN: 500 - ITEM_PICKUP: 0 CROP_TRAMPLE: 500 - BREWING: 500 + ITEM_PICKUP: 0 DROPPER: 500 + BREWING: 500 TNT_PRIMING: 500 COLLECT_WATER: 500 BUTTON: 0 @@ -278,18 +239,18 @@ 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: 500 - ANIMAL_SPAWNERS_SPAWN: 500 SHEARING: 500 + ANIMAL_SPAWNERS_SPAWN: 500 + ENCHANTING: 500 BOAT: 0 - BED: 500 SPAWN_EGGS: 500 + BED: 500 MILKING: 500 DISPENSER: 500 GATE: 0 @@ -300,8 +261,8 @@ world: MOUNT_INVENTORY: 500 CHORUS_FRUIT: 500 CONTAINER: 500 - POTION_THROWING: 500 JUKEBOX: 500 + POTION_THROWING: 500 # These are the default settings for new areas default-area-settings: PVP_END: false @@ -313,8 +274,8 @@ 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 @@ -446,11 +407,6 @@ area: # Toggles whether the player should be teleported automatically to his area when it is created. # If set to false, the player will be told his area is ready but will have to teleport to his area using the command. teleport-player-to-area-when-created: true - # Create Nether or End areas if they are missing when a player goes through a portal. - # Nether and End areas are usually pasted when a player makes their area, but if they are - # missing for some reason, you can switch this on. - # Note that bedrock removal glitches can exploit this option. - create-missing-nether-end-areas: false commands: # List of commands to run when a player joins an area or creates one. # These commands are run by the console, unless otherwise stated using the [SUDO] prefix, @@ -492,11 +448,11 @@ area: on-respawn: [] sethome: nether: - # Allow setting home in the nether. Only available on nether areas, not vanilla nether. + # Allow setting home in the nether. allow: true require-confirmation: true the-end: - # Allow setting home in the end. Only available on end areas, not vanilla end. + # Allow setting home in the end. allow: true require-confirmation: true deaths: @@ -512,7 +468,7 @@ protection: # Geo restrict mobs. # Mobs that exit the area space where they were spawned will be removed. geo-limit-settings: [] - # Boxed blocked mobs. + # Blocked mobs. # List of mobs that should not spawn in Boxed. block-mobs: [] # Invincible visitors. List of damages that will not affect visitors. diff --git a/src/main/resources/structures.yml b/src/main/resources/structures.yml index b6c3aeb..32eefc4 100644 --- a/src/main/resources/structures.yml +++ b/src/main/resources/structures.yml @@ -2,12 +2,15 @@ normal: 0,64,80: village/plains/houses/plains_masons_house_1,CLOCKWISE_90 -38,63,20: ruined_portal/portal_5 3,58,-60: shipwreck/rightsideup_backhalf - 16,67,23: village/plains/houses/plains_cartographer_1 + -17,56,0: shipwreck/rightsideup_full_degraded,CLOCKWISE_180 + 16,67,13: village/plains/houses/plains_cartographer_1 -66,63,17: igloo/top - -34,52,-35: underwater_ruin/warm_5 - 80,71,113: pillager_outpost/watchtower + -34,52,-35: underwater_ruin/warm_1 33,69,-34: village/savanna/town_centers/savanna_meeting_point_1 26,70,-41: village/savanna/houses/savanna_medium_house_2,NONE,NONE + 42,69,-21: village/savanna/houses/savanna_large_farm_2,NONE,NONE + 13,69,-37: village/savanna/houses/savanna_animal_pen_2,CLOCKWISE_180,NONE + 53,71,-23: village/savanna/houses/savanna_small_house_4,NONE,NONE 34,69,-29: village/common/iron_golem 41,69,-26: village/common/animals/cat_calico 35,69,-22: village/common/animals/cat_calico @@ -19,7 +22,13 @@ normal: 15,70,108: village/desert/houses/desert_butcher_shop_1 10,70,112: village/desert/houses/desert_temple_1,COUNTERCLOCKWISE_90 -71,63,107: igloo/top - -25,57,-30: shipwreck/rightsideup_full_degraded,CLOCKWISE_180 + 80,71,113: pillager_outpost/watchtower + 15,67,16: village/plains/villagers/unemployed,NONE,NONE + 51,76,22: ruined_portal/portal_6,NONE,NONE + -26,70,33: village/snowy/houses/snowy_library_1,CLOCKWISE_180,NONE + -31,71,30: village/plains/villagers/unemployed,CLOCKWISE_180,NONE + -3,65,84: village/plains/villagers/unemployed,CLOCKWISE_180,NONE + nether: 16,32,0: bastion/bridge/starting_pieces/entrance 62,33,-17: bastion/hoglin_stable/walls/wall_base diff --git a/src/test/java/world/bentobox/boxed/SettingsTest.java b/src/test/java/world/bentobox/boxed/SettingsTest.java index ff26151..8b07ac2 100644 --- a/src/test/java/world/bentobox/boxed/SettingsTest.java +++ b/src/test/java/world/bentobox/boxed/SettingsTest.java @@ -10,7 +10,6 @@ import java.util.Map; import java.util.Set; import org.bukkit.Difficulty; -import org.bukkit.GameMode; import org.bukkit.entity.EntityType; import org.junit.Before; import org.junit.Test; @@ -90,15 +89,6 @@ public class SettingsTest { assertEquals(123, s.getIslandStartZ()); } - /** - * Test method for {@link world.bentobox.boxed.Settings#setIslandHeight(int)}. - */ - @Test - public void testSetIslandHeight() { - s.setIslandHeight(123); - assertEquals(123, s.getIslandHeight()); - } - /** * Test method for {@link world.bentobox.boxed.Settings#setMaxIslands(int)}. */ @@ -108,15 +98,6 @@ public class SettingsTest { assertEquals(123, s.getMaxIslands()); } - /** - * Test method for {@link world.bentobox.boxed.Settings#setDefaultGameMode(org.bukkit.GameMode)}. - */ - @Test - public void testSetDefaultGameMode() { - s.setDefaultGameMode(GameMode.CREATIVE); - assertEquals(GameMode.CREATIVE, s.getDefaultGameMode()); - } - /** * Test method for {@link world.bentobox.boxed.Settings#setNetherGenerate(boolean)}. */ @@ -126,15 +107,6 @@ public class SettingsTest { assertTrue(s.isNetherGenerate()); } - /** - * Test method for {@link world.bentobox.boxed.Settings#setNetherSpawnRadius(int)}. - */ - @Test - public void testSetNetherSpawnRadius() { - s.setNetherSpawnRadius(123); - assertEquals(123, s.getNetherSpawnRadius()); - } - /** * Test method for {@link world.bentobox.boxed.Settings#setEndGenerate(boolean)}. */