diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 6d8a454..0bc21e0 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -11,22 +11,22 @@ jobs: name: Build runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 with: fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis - - name: Set up JDK 17 - uses: actions/setup-java@v2 + - name: Set up JDK 21 + uses: actions/setup-java@v3 with: distribution: 'adopt' - java-version: 17 + java-version: 21 - name: Cache SonarCloud packages - uses: actions/cache@v2 + uses: actions/cache@v3 with: path: ~/.sonar/cache key: ${{ runner.os }}-sonar restore-keys: ${{ runner.os }}-sonar - name: Cache Maven packages - uses: actions/cache@v2 + uses: actions/cache@v3 with: path: ~/.m2 key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }} diff --git a/PULL_REQUEST_TEMPLATE.md b/PULL_REQUEST_TEMPLATE.md deleted file mode 100644 index 4483cd8..0000000 --- a/PULL_REQUEST_TEMPLATE.md +++ /dev/null @@ -1,5 +0,0 @@ -Thanks for submitting a pull request. Do not use this form for bug reports! -Your submission must meet the minimum requirements of a contribution, i.e., add code, refactor code or fix code. -It takes time and effort to review submissions, so please do not waste our time. -Note: formating/spacing-only submissions will be rejected! -For submissions, we want you to use spaces, not tabs (4 spaces) - thank you. diff --git a/README.md b/README.md index ae7ac29..22189bc 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,22 @@ # SkyGrid -Game Mode Add-on for BentoBox the provides a SkyGrid experience +Welcome to the SkyGrid for Minecraft! This game introduces a unique and challenging gameplay experience where you find yourself navigating a grid of floating blocks high in the sky. Your goal is to survive, gather resources, and conquer the SkyGrid! + +This is a Game Mode Add-on that uses the BentoBox library plugin. + + + +## Features + +- **Challenging Gameplay**: SkyGrid presents a challenging environment where you must carefully navigate from block to block to avoid falling. +- **Randomized Grid**: Each player will have a unique grid layout - a fresh and unpredictable experience every time. +- **Limited Resources**: Resources are scarce, so you must strategize and prioritize what to gather and when to use them. +- **Mobs and Dangers**: The SkyGrid is not empty. Beware of hostile mobs and other dangers that lurk in the grid! +- **Multiplayer Support**: Enjoy the SkyGrid mini game with your friends; form a team or coop. ## Installation +To play the SkyGrid mini game, follow these steps: + 1. Place the addon jar in the addons folder of the BentoBox plugin 2. Restart the server 3. The addon will create worlds and a data folder and inside the folder will be a config.yml @@ -10,4 +24,33 @@ Game Mode Add-on for BentoBox the provides a SkyGrid experience 5. Edit the config.yml how you want. 6. Delete any worlds that were created by default. 7. Restart the server +9. Launch the game and type /sg to enjoy the SkyGrid! + +## How to Play + +The objective of the SkyGrid mini game is to survive and complete various challenges in the grid (install the Challenges addon to enable this). Here are some essential gameplay tips: + +- **Avoid Falling**: Falling off the grid means certain death. Always be cautious when moving from block to block. +- **Gather Resources**: Break blocks to collect resources such as wood, stone, and ores. Use these resources wisely to craft tools and equipment. +- **Complete Challenges**: The SkyGrid mini game may have specific challenges to complete. Pay attention to your objectives and try to achieve them. +- **Interact with Mobs**: Hostile mobs roam the grid. You can fight them for valuable loot or choose to avoid them altogether. There are also mob spawners that can be used to farm mobs. +- **Use Your Skills**: Utilize your Minecraft skills to their fullest. Building, crafting, and combat will all play a significant role in your survival. + +## Contributing + +Contributions to the SkyGrid GitHub project are welcome! If you have ideas, bug fixes, or new features to propose, follow these steps: + +1. Fork the repository on GitHub. +2. Create a new branch with a descriptive name for your changes. +3. Make your modifications and additions. +4. Test your changes to ensure they work as intended. +5. Commit your changes and push them to your forked repository. +6. Submit a pull request to the main repository, explaining the purpose and details of your changes. + +## License + +The SkyGrid mini game is released under the [Eclipse Public License 2.0]([LICENSE](https://github.com/BentoBoxWorld/SkyGrid/blob/develop/LICENSE)). Feel free to modify and distribute the game, but remember to credit the original authors. + +## Contact +If you have any questions, suggestions, bug reports, or feedback regarding the SkyGrid mini game, you can file them on [GitHub](https://github.com/BentoBoxWorld/SkyGrid/issues). We would love to hear from you! diff --git a/pom.xml b/pom.xml index 039c470..a86217f 100644 --- a/pom.xml +++ b/pom.xml @@ -54,18 +54,18 @@ UTF-8 UTF-8 - 17 + 21 - 2.0.2 + 2.0.9 - 1.19.4-R0.1-SNAPSHOT - 1.23.0 + 1.21-R0.1-SNAPSHOT + 2.4.1-SNAPSHOT ${build.version}-SNAPSHOT -LOCAL - 1.19.0 + 2.1.0 BentoBoxWorld_SkyGrid bentobox-world @@ -113,6 +113,14 @@ + + + + apache.snapshots + https://repository.apache.org/snapshots/ + + + @@ -145,7 +153,7 @@ org.mockito mockito-core - 3.0.0 + 3.11.1 test @@ -219,17 +227,17 @@ org.apache.maven.plugins maven-resources-plugin - 3.1.0 + 3.2.0 - schem + blu org.apache.maven.plugins maven-compiler-plugin - 3.7.0 + 3.8.1 ${java.version} @@ -237,27 +245,56 @@ org.apache.maven.plugins maven-surefire-plugin - 2.22.0 + 3.0.0-M5 + + + ${argLine} + --add-opens java.base/java.lang=ALL-UNNAMED + --add-opens java.base/java.math=ALL-UNNAMED + --add-opens java.base/java.io=ALL-UNNAMED + --add-opens java.base/java.util=ALL-UNNAMED + --add-opens + java.base/java.util.stream=ALL-UNNAMED + --add-opens java.base/java.text=ALL-UNNAMED + --add-opens + java.base/java.util.regex=ALL-UNNAMED + --add-opens + java.base/java.nio.channels.spi=ALL-UNNAMED + --add-opens java.base/sun.nio.ch=ALL-UNNAMED + --add-opens java.base/java.net=ALL-UNNAMED + --add-opens + java.base/java.util.concurrent=ALL-UNNAMED + --add-opens java.base/sun.nio.fs=ALL-UNNAMED + --add-opens java.base/sun.nio.cs=ALL-UNNAMED + --add-opens java.base/java.nio.file=ALL-UNNAMED + --add-opens + java.base/java.nio.charset=ALL-UNNAMED + --add-opens + java.base/java.lang.reflect=ALL-UNNAMED + --add-opens + java.logging/java.util.logging=ALL-UNNAMED + --add-opens java.base/java.lang.ref=ALL-UNNAMED + --add-opens java.base/java.util.jar=ALL-UNNAMED + --add-opens java.base/java.util.zip=ALL-UNNAMED + + org.apache.maven.plugins maven-jar-plugin - 3.1.0 + 3.2.0 - + org.apache.maven.plugins maven-javadoc-plugin 3.3.0 false -Xdoclint:none - - ${java.home}/bin/javadoc attach-javadocs - install jar @@ -267,7 +304,7 @@ org.apache.maven.plugins maven-source-plugin - 3.0.1 + 3.2.1 attach-sources @@ -280,23 +317,25 @@ org.apache.maven.plugins maven-install-plugin - 2.5.2 + 3.0.0-M1 org.apache.maven.plugins maven-deploy-plugin - 2.8.2 + 3.0.0-M1 org.jacoco jacoco-maven-plugin - 0.8.3 + 0.8.10 true **/*Names* + + org/bukkit/Material* diff --git a/src/main/java/world/bentobox/skygrid/Settings.java b/src/main/java/world/bentobox/skygrid/Settings.java index b46c5ba..3808aaf 100644 --- a/src/main/java/world/bentobox/skygrid/Settings.java +++ b/src/main/java/world/bentobox/skygrid/Settings.java @@ -65,13 +65,15 @@ public class Settings implements WorldSettings { @ConfigComment("The End chest fill setting") @ConfigEntry(path = "world.chest-fill.end") private int chestFillEnd = 5; - @ConfigComment("Chest items will be taken randomly from this list. All items have an equal chance.") + @ConfigComment("Chest items will be taken randomly from this list according to the relative probabilities given") + @ConfigComment("Format: Material : Probability") + @ConfigComment("Material values can be found at https://hub.spigotmc.org/javadocs/spigot/org/bukkit/Material.html") @ConfigEntry(path = "world.chest-items.overworld") - private List chestItemsOverworld = new ArrayList<>(); + private Map chestItemsOverworld = new EnumMap<>(Material.class); @ConfigEntry(path = "world.chest-items.nether") - private List chestItemsNether = new ArrayList<>(); + private Map chestItemsNether = new EnumMap<>(Material.class); @ConfigEntry(path = "world.chest-items.end") - private List chestItemsEnd = new ArrayList<>(); + private Map chestItemsEnd = new EnumMap<>(Material.class); /* Blocks */ @ConfigComment("World block types. If the material cannot be placed, bedrock will be used.") @@ -145,10 +147,10 @@ public class Settings implements WorldSettings { @ConfigEntry(path = "world.skygrid-height") private int islandHeight = 128; - @ConfigComment("Spawn height") - @ConfigComment("Height where players will spawn. Can be less than the grid height") - @ConfigEntry(path = "world.spawn-height") - private int spawnHeight = 128; + @ConfigComment("End Frame height") + @ConfigComment("This is the height where end frames will generate.") + @ConfigEntry(path = "world.end-frame-height", since = "1.20.0") + private int endFrameHeight = 3; @ConfigComment("Space around new players in blocks (will be rounded up to nearest 16 blocks)") @ConfigEntry(path = "world.space-around-players") @@ -213,15 +215,20 @@ public class Settings implements WorldSettings { @ConfigComment("Default maximum number of coop rank members per area") @ConfigComment("Players can have the skygrid.coop.maxsize. permission to be bigger but") @ConfigComment("permission size cannot be less than the default below. ") - @ConfigEntry(path = "island.max-coop-size", since = "1.13.0") + @ConfigEntry(path = "area.max-coop-size", since = "1.13.0") private int maxCoopSize = 4; @ConfigComment("Default maximum number of trusted rank members per area") @ConfigComment("Players can have the skygrid.trust.maxsize. permission to be bigger but") @ConfigComment("permission size cannot be less than the default below. ") - @ConfigEntry(path = "island.max-trusted-size", since = "1.13.0") + @ConfigEntry(path = "area.max-trusted-size", since = "1.13.0") private int maxTrustSize = 4; + @ConfigComment("Default maximum number of homes a player can have. Min = 1") + @ConfigComment("Accessed via /sg sethome or /sg go ") + @ConfigEntry(path = "area.max-homes") + private int maxHomes = 5; + // Reset @ConfigComment("How many resets a player is allowed (override with /sgadmin clearresets )") @ConfigComment("Value of -1 means unlimited, 0 means hardcore - no resets.") @@ -577,7 +584,7 @@ public void setIslandStartZ(int islandStartZ) { @Override public int getIslandHeight() { if (islandHeight > 255) islandHeight = 255; - else if (islandHeight < 0) islandHeight = 0; + else if (islandHeight < -64) islandHeight = -64; return islandHeight; } @@ -586,24 +593,10 @@ public int getIslandHeight() { */ public void setIslandHeight(int islandHeight) { if (islandHeight > 255) islandHeight = 255; - else if (islandHeight < 0) islandHeight = 0; + else if (islandHeight < -64) islandHeight = -64; this.islandHeight = islandHeight; } - /** - * @return the spawnHeight - */ - public int getSpawnHeight() { - return spawnHeight; - } - - /** - * @param spawnHeight the spawnHeight to set - */ - public void setSpawnHeight(int spawnHeight) { - this.spawnHeight = spawnHeight; - } - /** * @return the islandDistance */ @@ -1174,7 +1167,7 @@ public int getIslandZOffset() { @Override public int getMaxHomes() { - return 0; + return maxHomes; } @Override @@ -1214,7 +1207,7 @@ public boolean isNetherIslands() { @Override public boolean isUseOwnGenerator() { - return true; + return false; } @Override @@ -1297,42 +1290,42 @@ public void setChestFillEnd(int chestFillEnd) { /** * @return the chestItemsOverworld */ - public List getChestItemsOverworld() { + public Map getChestItemsOverworld() { return chestItemsOverworld; } /** * @param chestItemsOverworld the chestItemsOverworld to set */ - public void setChestItemsOverworld(List chestItemsOverworld) { + public void setChestItemsOverworld(Map chestItemsOverworld) { this.chestItemsOverworld = chestItemsOverworld; } /** * @return the chestItemsNether */ - public List getChestItemsNether() { + public Map getChestItemsNether() { return chestItemsNether; } /** * @param chestItemsNether the chestItemsNether to set */ - public void setChestItemsNether(List chestItemsNether) { + public void setChestItemsNether(Map chestItemsNether) { this.chestItemsNether = chestItemsNether; } /** * @return the chestItemsEnd */ - public List getChestItemsEnd() { + public Map getChestItemsEnd() { return chestItemsEnd; } /** * @param chestItemsEnd the chestItemsEnd to set */ - public void setChestItemsEnd(List chestItemsEnd) { + public void setChestItemsEnd(Map chestItemsEnd) { this.chestItemsEnd = chestItemsEnd; } @@ -1628,4 +1621,25 @@ public boolean isCheckForBlocks() { return false; } + + /** + * @param maxHomes the maxHomes to set + */ + public void setMaxHomes(int maxHomes) { + this.maxHomes = maxHomes; + } + + /** + * @return the endFrameHeight + */ + public int getEndFrameHeight() { + return endFrameHeight; + } + + /** + * @param endFrameHeight the endFrameHeight to set + */ + public void setEndFrameHeight(int endFrameHeight) { + this.endFrameHeight = endFrameHeight; + } } diff --git a/src/main/java/world/bentobox/skygrid/SkyGrid.java b/src/main/java/world/bentobox/skygrid/SkyGrid.java index 3c15765..44a2af6 100644 --- a/src/main/java/world/bentobox/skygrid/SkyGrid.java +++ b/src/main/java/world/bentobox/skygrid/SkyGrid.java @@ -2,6 +2,7 @@ import org.bukkit.World; import org.bukkit.WorldCreator; +import org.bukkit.generator.BiomeProvider; import org.bukkit.generator.ChunkGenerator; import org.eclipse.jdt.annotation.NonNull; @@ -12,6 +13,7 @@ import world.bentobox.bentobox.api.configuration.WorldSettings; import world.bentobox.bentobox.api.flags.Flag.Type; import world.bentobox.bentobox.lists.Flags; +import world.bentobox.skygrid.generators.SkyGridBiomeProvider; import world.bentobox.skygrid.generators.SkyGridGen; import world.bentobox.skygrid.generators.WorldStyles; @@ -88,22 +90,26 @@ public void createWorlds() { if (getServer().getWorld(worldName) == null) { getLogger().info("Creating SkyGrid world ..."); } + BiomeProvider bp = new SkyGridBiomeProvider(); // Create the world if it does not exist - islandWorld = WorldCreator.name(worldName).environment(World.Environment.NORMAL).generator(gen).createWorld(); + islandWorld = WorldCreator.name(worldName).environment(World.Environment.NORMAL).generator(gen) + .biomeProvider(bp).createWorld(); // Make the nether if it does not exist if (settings.isNetherGenerate()) { if (getServer().getWorld(worldName + NETHER) == null) { log("Creating SkyGrid's Nether..."); } - netherWorld = WorldCreator.name(worldName + NETHER).generator(gen).environment(World.Environment.NETHER).createWorld(); + netherWorld = WorldCreator.name(worldName + NETHER).generator(gen).environment(World.Environment.NETHER) + .biomeProvider(bp).createWorld(); } // Make the end if it does not exist if (settings.isEndGenerate()) { if (getServer().getWorld(worldName + THE_END) == null) { log("Creating SkyGrid's End World..."); } - endWorld = WorldCreator.name(worldName + THE_END).generator(gen).environment(World.Environment.THE_END).createWorld(); + endWorld = WorldCreator.name(worldName + THE_END).generator(gen).environment(World.Environment.THE_END) + .biomeProvider(bp).createWorld(); } } @@ -128,4 +134,9 @@ public void saveWorldSettings() { } } + + @Override + public boolean isUsesNewChunkGeneration() { + return true; + } } diff --git a/src/main/java/world/bentobox/skygrid/generators/SkyGridBiomeProvider.java b/src/main/java/world/bentobox/skygrid/generators/SkyGridBiomeProvider.java new file mode 100644 index 0000000..9315696 --- /dev/null +++ b/src/main/java/world/bentobox/skygrid/generators/SkyGridBiomeProvider.java @@ -0,0 +1,77 @@ +package world.bentobox.skygrid.generators; + +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Objects; +import java.util.Random; +import java.util.concurrent.ConcurrentHashMap; + +import org.bukkit.World; +import org.bukkit.World.Environment; +import org.bukkit.block.Biome; +import org.bukkit.generator.BiomeProvider; +import org.bukkit.generator.WorldInfo; +import org.bukkit.util.noise.PerlinOctaveGenerator; + +/** + * @author tastybento + */ +public class SkyGridBiomeProvider extends BiomeProvider { + + private static final Random RAND = new Random(); + private final Map temperatureGenMap = new ConcurrentHashMap<>(); + private final Map rainfallGenMap = new ConcurrentHashMap<>(); + + + @Override + public Biome getBiome(WorldInfo worldInfo, int realX, int y, int realZ) { + + // Handle caves + if (worldInfo.getEnvironment() == Environment.NORMAL && y < 0) { + return caveBiome(y); + } + + // Make and cache the PerlinOctaveGenerator for the environment + PerlinOctaveGenerator temperatureGen = temperatureGenMap.computeIfAbsent(worldInfo.getEnvironment(), wf -> { + PerlinOctaveGenerator tg = new PerlinOctaveGenerator(worldInfo.getSeed(), 16); + tg.setScale(1.0 / 100.0); + return tg; + }); + PerlinOctaveGenerator rainfallGen = rainfallGenMap.computeIfAbsent(worldInfo.getEnvironment(), wf -> { + PerlinOctaveGenerator rg = new PerlinOctaveGenerator(worldInfo.getSeed() + 1, 15); + rg.setScale(1.0 / 100.0); + return rg; + }); + + //We get the 3 closest biome's to the temperature and rainfall at this block + Map biomes = SkyGridBiomes.getBiomes(worldInfo.getEnvironment(), + Math.abs(temperatureGen.noise(realX, realZ, 0.5, 0.5) * 100.0), + Math.abs(rainfallGen.noise(realX, realZ, 0.5, 0.5) * 100.0)); + + double maxNoiz = 0.0; + SkyGridBiomes maxBiome = null; + + for (Entry biome : biomes.entrySet()) { + if (biome.getValue() >= maxNoiz) { + maxNoiz = biome.getValue(); + maxBiome = biome.getKey(); + } + } + return Objects.requireNonNull(maxBiome).biome; + } + + private Biome caveBiome(int y) { + if (y < -52) { + return Biome.DEEP_DARK; + } + return RAND.nextBoolean() ? Biome.LUSH_CAVES : Biome.DRIPSTONE_CAVES; + } + + @Override + public List getBiomes(WorldInfo worldInfo) { + return Arrays.stream(SkyGridBiomes.values()).map(SkyGridBiomes::getBiome).toList(); + } + +} diff --git a/src/main/java/world/bentobox/skygrid/generators/Biomes.java b/src/main/java/world/bentobox/skygrid/generators/SkyGridBiomes.java similarity index 76% rename from src/main/java/world/bentobox/skygrid/generators/Biomes.java rename to src/main/java/world/bentobox/skygrid/generators/SkyGridBiomes.java index 4fa641c..fb716f9 100644 --- a/src/main/java/world/bentobox/skygrid/generators/Biomes.java +++ b/src/main/java/world/bentobox/skygrid/generators/SkyGridBiomes.java @@ -17,21 +17,28 @@ * is a tundra, but it is also much closer to a desert than a rain forest. * */ -public enum Biomes { +public enum SkyGridBiomes { //We store the biome, the temperature and rainfall for each biome. - SNOWY_PLAINS(Environment.NORMAL, Biome.SNOWY_PLAINS, 0, 100), - SNOWY_TAIGA(Environment.NORMAL, Biome.SNOWY_TAIGA, 0, 100), - FROZEN_RIVER(Environment.NORMAL, Biome.FROZEN_RIVER, 0, 10), - SNOWY_BEACH(Environment.NORMAL, Biome.SNOWY_BEACH, 0, 100), - STONY_PEAKS(Environment.NORMAL, Biome.STONY_PEAKS, 20, 60), + PLAINS(Environment.NORMAL, Biome.PLAINS, 40, 30), DESERT(Environment.NORMAL, Biome.DESERT, 60, 4), + BADLANDS(Environment.NORMAL, Biome.BADLANDS, 90, 1), FOREST(Environment.NORMAL, Biome.FOREST, 50, 60), - PLAINS(Environment.NORMAL, Biome.PLAINS, 40, 30), + FLOWER_FOREST(Environment.NORMAL, Biome.FLOWER_FOREST, 50, 60), + BIRCH_FOREST(Environment.NORMAL, Biome.BIRCH_FOREST, 50, 59), + CHERRY_GROVE(Environment.NORMAL, Biome.CHERRY_GROVE, 45, 35), SWAMP(Environment.NORMAL, Biome.SWAMP, 40, 70), JUNGLE(Environment.NORMAL, Biome.JUNGLE, 60, 50), + BAMBOO_JUNGLE(Environment.NORMAL, Biome.BAMBOO_JUNGLE, 60, 49), SAVANNA(Environment.NORMAL, Biome.SAVANNA, 40, 10), TAIGA(Environment.NORMAL, Biome.TAIGA, 30, 5), + MUSHROOM_FIELDS(Environment.NORMAL, Biome.MUSHROOM_FIELDS, 50, 50), + SNOWY_PLAINS(Environment.NORMAL, Biome.SNOWY_PLAINS, 0, 100), + SNOWY_TAIGA(Environment.NORMAL, Biome.SNOWY_TAIGA, 0, 15), + FROZEN_RIVER(Environment.NORMAL, Biome.FROZEN_RIVER, 10, 10), + SNOWY_BEACH(Environment.NORMAL, Biome.SNOWY_BEACH, 10, 100), + STONY_PEAKS(Environment.NORMAL, Biome.STONY_PEAKS, 20, 60), + // Nether NETHER_WASTES(Environment.NETHER, Biome.NETHER_WASTES, 40, 30), SOUL_SAND_VALLEY(Environment.NETHER, Biome.SOUL_SAND_VALLEY, 40, 70), @@ -50,7 +57,7 @@ public enum Biomes { public final double optimumTemperature; public final double optimumRainfall; - Biomes(Environment env, Biome biome, double temp, double rain) { + SkyGridBiomes(Environment env, Biome biome, double temp, double rain) { this.env = env; this.biome = biome; this.optimumTemperature = temp; @@ -65,18 +72,19 @@ public enum Biomes { * @param rain - rain * @return Map of 3 biomes */ - public static Map getBiomes(Environment env, double temp, double rain) { + public static Map getBiomes(Environment env, double temp, double rain) { // We tell it the capacity we need to avoid expensive dynamic lengthening - Map biomes = new EnumMap<>(Biomes.class); + Map biomes = new EnumMap<>(SkyGridBiomes.class); - Biomes closestBiome = null; - Biomes secondClosestBiome = null; - Biomes thirdClosestBiome = null; + SkyGridBiomes closestBiome = null; + SkyGridBiomes secondClosestBiome = null; + SkyGridBiomes thirdClosestBiome = null; double closestDist = 10000000; double secondClosestDist = 10000000; double thirdClosestDist = 10000000; - for (Biomes biome : Biomes.values()) { + for (SkyGridBiomes biome : SkyGridBiomes.values()) { + // Only cover biomes for this environment, e.g., Nether if (!env.equals(biome.env)) continue; // To avoid having to do an expensive square root per biome per block, // we just compare the square distances, and take the square root at the @@ -107,8 +115,15 @@ else if (dist <= thirdClosestDist) { return biomes; } - private static double getSquaredDistance(Biomes biome, double temp, double rain) { + private static double getSquaredDistance(SkyGridBiomes biome, double temp, double rain) { return Math.abs((biome.optimumTemperature-temp)*(biome.optimumTemperature-temp) + (biome.optimumRainfall-rain)*(biome.optimumRainfall-rain)); } + /** + * @return the biome + */ + public Biome getBiome() { + return biome; + } + } \ No newline at end of file diff --git a/src/main/java/world/bentobox/skygrid/generators/SkyGridChunks.java b/src/main/java/world/bentobox/skygrid/generators/SkyGridChunks.java index b596158..a4d8135 100644 --- a/src/main/java/world/bentobox/skygrid/generators/SkyGridChunks.java +++ b/src/main/java/world/bentobox/skygrid/generators/SkyGridChunks.java @@ -9,6 +9,8 @@ import org.bukkit.block.data.Bisected; import org.bukkit.block.data.BlockData; +import com.google.common.base.Enums; + import world.bentobox.skygrid.SkyGrid; /** @@ -21,7 +23,8 @@ public class SkyGridChunks { // Blocks that need to be placed on dirt private static final List NEEDS_DIRT = List.of(Material.ACACIA_SAPLING, Material.ALLIUM, Material.AZURE_BLUET, Material.BEETROOTS, Material.BIRCH_SAPLING, Material.BLUE_ORCHID, Material.BROWN_MUSHROOM, Material.DANDELION, - Material.DARK_OAK_SAPLING, Material.DEAD_BUSH, Material.FERN, Material.GRASS, Material.JUNGLE_SAPLING, + Material.DARK_OAK_SAPLING, Material.DEAD_BUSH, Material.FERN, + Enums.getIfPresent(Material.class, "GRASS").or(Material.SHORT_GRASS), Material.JUNGLE_SAPLING, Material.LARGE_FERN, Material.LILAC, Material.OAK_SAPLING, Material.ORANGE_TULIP, Material.OXEYE_DAISY, Material.PEONY, Material.PINK_TULIP, Material.POPPY, Material.RED_MUSHROOM, Material.RED_TULIP, Material.ROSE_BUSH, Material.SPRUCE_SAPLING, Material.SUGAR_CANE, Material.SUNFLOWER, Material.TALL_GRASS, @@ -54,12 +57,35 @@ public SkyGridChunks(SkyGrid addon) { addon.log("Done making chunks"); } + public Material getBlock(Environment env) { + BlockProbability prob = addon.getWorldStyles().get(env).getProb(); + return prob.getBlock(random, false, false); + /* + // Get a random block and feed in the last block (true if cactus or cane) + Material blockMat = prob.getBlock(random, y == 0, false); + // If blockMat is not "a block" then cannot be generated + if (!blockMat.isAir() && !blockMat.isBlock()) { + blockMat = Material.STONE; + } + // Convert to deep + if (y < 0) { + if (blockMat == Material.STONE) { + blockMat = Material.DEEPSLATE; + + } else if (blockMat == Material.COBBLESTONE) { + blockMat = Material.COBBLED_DEEPSLATE; + } else { + blockMat = Enums.getIfPresent(Material.class, "DEEPSLATE_" + blockMat.name()).or(blockMat); + } + } + return new SkyGridBlock(x, y, z, blockMat);*/ + } private List getChunk(BlockProbability prob) { List result = new ArrayList<>(); for (int x = 1; x < 16; x += 4) { for (int z = 1; z < 16; z += 4) { - for (int y = 0; y <= addon.getSettings().getIslandHeight(); y += 4) { + for (int y = -64; y <= addon.getSettings().getIslandHeight(); y += 4) { setBlock(prob, x, y, z, result); } } @@ -88,6 +114,15 @@ private void setBlock(BlockProbability prob, int x, int y, int z, List blockMat = Material.DEEPSLATE; + case COBBLESTONE -> blockMat = Material.COBBLED_DEEPSLATE; + default -> blockMat = Enums.getIfPresent(Material.class, "DEEPSLATE_" + blockMat.name()).or(blockMat); + } + } + // Check if the block needs dirt if (NEEDS_DIRT.contains(blockMat)) { // Add dirt @@ -108,7 +143,7 @@ private void setBlock(BlockProbability prob, int x, int y, int z, List { + case CACTUS, DEAD_BUSH -> { result.add(new SkyGridBlock(x, y, z, Material.SAND)); result.add(new SkyGridBlock(x, y - 1, z, Material.SANDSTONE)); result.add(new SkyGridBlock(x, y + 1, z, blockMat)); diff --git a/src/main/java/world/bentobox/skygrid/generators/SkyGridGen.java b/src/main/java/world/bentobox/skygrid/generators/SkyGridGen.java index 7a58b0a..ba063d1 100644 --- a/src/main/java/world/bentobox/skygrid/generators/SkyGridGen.java +++ b/src/main/java/world/bentobox/skygrid/generators/SkyGridGen.java @@ -1,11 +1,12 @@ package world.bentobox.skygrid.generators; -import java.util.Collections; +import java.util.ArrayList; import java.util.List; import java.util.Random; import org.bukkit.Location; import org.bukkit.Material; +import org.bukkit.Tag; import org.bukkit.World; import org.bukkit.generator.BlockPopulator; import org.bukkit.generator.ChunkGenerator; @@ -18,27 +19,82 @@ public class SkyGridGen extends ChunkGenerator { private final SkyGrid addon; private final BlockPopulator populator; - private final SkyGridChunks preMade; /** * @param addon - addon */ public SkyGridGen(SkyGrid addon) { + super(); this.addon = addon; this.populator = new SkyGridPop(addon); - preMade = new SkyGridChunks(addon); } @Override - public void generateNoise(WorldInfo worldInfo, Random r, int x, int z, ChunkData result) { - result.setRegion(0, worldInfo.getMinHeight(), 0, 16, worldInfo.getMaxHeight(), 16, Material.AIR); - preMade.getSkyGridChunk(worldInfo.getEnvironment()).forEach(b -> result.setBlock(b.getX(), b.getY(), b.getZ(), b.getBd())); + public void generateNoise(WorldInfo worldInfo, Random r, int chunkX, int chunkZ, ChunkData result) { + Random rand = new Random(worldInfo.getSeed()); + // Cut off anything higher than island height + result.setRegion(0, Math.min(addon.getSettings().getIslandHeight() + 1, worldInfo.getMaxHeight() - 1), 0, 16, + worldInfo.getMaxHeight(), 16, + Material.AIR); + for (int x = 0; x < 16; x++) { + for (int z = 0; z < 16; z++) { + for (int y = addon.getSettings().getIslandHeight(); y >= worldInfo.getMinHeight(); y--) { + // Check if the block is not the 4th block + if ((Math.floorMod(x, 4) != 0) || (Math.floorMod(z, 4) != 0) || (Math.floorMod(y, 4) != 0)) { + result.setBlock(x, y, z, Material.AIR); + } else { + Material m = result.getBlockData(x, y, z).getMaterial(); + if (m == Material.AIR || m == Material.WATER) { + Material nextBlock = addon.getWorldStyles().get(worldInfo.getEnvironment()).getProb() + .getBlock(rand, y == worldInfo.getMinHeight(), true); + // Check for plants, etc. below this y + checkPlants(nextBlock, x, y, z, result); + } + } + } + } + } } + + private boolean checkPlants(Material nextBlock, int x, int y, int z, ChunkData result) { + if (Tag.SAPLINGS.isTagged(nextBlock) || Tag.FLOWERS.isTagged(nextBlock) + || Tag.ITEMS_VILLAGER_PLANTABLE_SEEDS.isTagged(nextBlock)) { + result.setBlock(x, y, z, Material.DIRT); + result.setBlock(x, y + 1, z, nextBlock); + } else { + switch (nextBlock) { + case CACTUS, DEAD_BUSH -> { + result.setBlock(x, y, z, Material.SANDSTONE); + result.setBlock(x, y, z, Material.SAND); + result.setBlock(x, y + 2, z, nextBlock); + } + case NETHER_WART -> { + result.setBlock(x, y, z, Material.SOUL_SAND); + result.setBlock(x, y + 1, z, nextBlock); + } + case END_ROD, CHORUS_PLANT -> { + result.setBlock(x, y, z, Material.END_STONE); + result.setBlock(x, y + 1, z, nextBlock); + } + + default -> { + result.setBlock(x, y, z, nextBlock); + return false; + } + } + } + return true; + } + + @Override public List getDefaultPopulators(World world) { - return Collections.singletonList(populator); + List list = new ArrayList<>(); + list.addAll(super.getDefaultPopulators(world)); + list.add(populator); + return list; } @Override @@ -46,5 +102,57 @@ public Location getFixedSpawnLocation(World world, Random random) { return new Location(world, 0, addon.getSettings().getIslandHeight() + 2D, 0); } + @Override + public boolean shouldGenerateNoise() { + return true; + } + + /** + * Gets if the server should generate Vanilla surface. + * @return true if the server should generate Vanilla surface + */ + @Override + public boolean shouldGenerateSurface() { + return true; + } + + /** + * Gets if the server should generate Vanilla caves. + * @return true if the server should generate Vanilla caves + */ + @Override + public boolean shouldGenerateCaves() { + return true; + } + + /** + * Gets if the server should generate Vanilla decorations after this + * ChunkGenerator. + * @return true if the server should generate Vanilla decorations + */ + @Override + public boolean shouldGenerateDecorations() { + return true; + } + + /** + * Gets if the server should generate Vanilla mobs after this + * ChunkGenerator. + * @return true if the server should generate Vanilla mobs + */ + @Override + public boolean shouldGenerateMobs() { + return true; + } + + /** + * Gets if the server should generate Vanilla structures after this + * ChunkGenerator. + * @return true if the server should generate Vanilla structures + */ + @Override + public boolean shouldGenerateStructures() { + return true; + } } \ No newline at end of file diff --git a/src/main/java/world/bentobox/skygrid/generators/SkyGridPop.java b/src/main/java/world/bentobox/skygrid/generators/SkyGridPop.java index 137b6ba..8a6cba7 100644 --- a/src/main/java/world/bentobox/skygrid/generators/SkyGridPop.java +++ b/src/main/java/world/bentobox/skygrid/generators/SkyGridPop.java @@ -1,38 +1,47 @@ package world.bentobox.skygrid.generators; -import java.util.List; +import java.util.HashMap; +import java.util.Map; +import java.util.Map.Entry; import java.util.NavigableMap; -import java.util.Objects; import java.util.Random; +import java.util.TreeMap; +import java.util.UUID; -import org.bukkit.Chunk; +import org.bukkit.Bukkit; +import org.bukkit.Location; import org.bukkit.Material; +import org.bukkit.Tag; import org.bukkit.World; import org.bukkit.World.Environment; import org.bukkit.block.Biome; -import org.bukkit.block.Block; import org.bukkit.block.BlockFace; import org.bukkit.block.Chest; import org.bukkit.block.CreatureSpawner; import org.bukkit.block.data.type.EndPortalFrame; -import org.bukkit.block.data.type.Sapling; import org.bukkit.entity.EntityType; import org.bukkit.generator.BlockPopulator; +import org.bukkit.generator.LimitedRegion; +import org.bukkit.generator.WorldInfo; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; +import org.bukkit.util.Vector; import world.bentobox.skygrid.SkyGrid; public class SkyGridPop extends BlockPopulator { private static final RandomSeries slt = new RandomSeries(27); - private final int size; + private final int islandHeight; private final SkyGrid addon; - private final List chestItemsWorld; - private final List chestItemsNether; - private final List chestItemsEnd; - private Random random; - private Chunk chunk; + private final NavigableMap chestItemsWorld = new TreeMap<>(); + private final NavigableMap chestItemsNether = new TreeMap<>(); + private final NavigableMap chestItemsEnd = new TreeMap<>(); + private int worldTotal; + private int netherTotal; + private int endTotal; + private Map rand = new HashMap<>(); + private Random random = new Random(); private static final Material[] SAPLING_TYPE = { Material.ACACIA_SAPLING, @@ -47,51 +56,79 @@ public class SkyGridPop extends BlockPopulator { public SkyGridPop(SkyGrid addon) { this.addon = addon; - this.size = addon.getSettings().getIslandHeight(); + this.islandHeight = addon.getSettings().getIslandHeight(); // Load the chest items - chestItemsWorld = addon.getSettings().getChestItemsOverworld().stream().map(Material::matchMaterial).filter(Objects::nonNull).toList(); - chestItemsNether = addon.getSettings().getChestItemsNether().stream().map(Material::matchMaterial).filter(Objects::nonNull).toList(); - chestItemsEnd = addon.getSettings().getChestItemsEnd().stream().map(Material::matchMaterial).filter(Objects::nonNull).toList(); + for (Entry en : addon.getSettings().getChestItemsOverworld().entrySet()) { + if (en.getKey().isItem()) { + worldTotal += en.getValue(); + chestItemsWorld.put(worldTotal, en.getKey()); + } else { + addon.logWarning(en.getKey() + " is not an item so cannot go in a chest."); + } + } + for (Entry en : addon.getSettings().getChestItemsNether().entrySet()) { + if (en.getKey().isItem()) { + netherTotal += en.getValue(); + chestItemsNether.put(netherTotal, en.getKey()); + } else { + addon.logWarning(en.getKey() + " is not an item so cannot go in a chest."); + } + } + for (Entry en : addon.getSettings().getChestItemsEnd().entrySet()) { + if (en.getKey().isItem()) { + endTotal += en.getValue(); + chestItemsEnd.put(endTotal, en.getKey()); + } else { + addon.logWarning(en.getKey() + " is not an item so cannot go in a chest."); + } + } addon.log(LOADED + chestItemsWorld.size() + " chest items for world"); addon.log(LOADED + chestItemsNether.size() + " chest items for nether world"); addon.log(LOADED + chestItemsEnd.size() + " chest items for end world"); } - @Override - @Deprecated - public void populate(World world, Random random, Chunk chunk) { - this.random = random; - this.chunk = chunk; - for (int x = 1; x < 16; x += 4) { - for (int z = 1; z < 16; z +=4) { - for (int y = 0; y <= size; y += 4) { - alterBlocks(chunk.getBlock(x, y, z)); + private Location getLoc(World world, int x, int y, int z, int chunkX, int chunkZ) { + Vector v = new Vector(x, y, z); + return v.add(new Vector(chunkX << 4, 0, chunkZ << 4)).toLocation(world); + } + + public void populate(WorldInfo worldInfo, Random random, int chunkX, int chunkZ, LimitedRegion region) { + random = rand.computeIfAbsent(worldInfo.getUID(), (b) -> new Random(worldInfo.getSeed())); + World world = Bukkit.getWorld(worldInfo.getUID()); + for (int x = 0; x < 16; x += 4) { + for (int z = 0; z < 16; z += 4) { + for (int y = worldInfo.getMinHeight(); y <= islandHeight; y += 4) { + Location loc = getLoc(world, x, y, z, chunkX, chunkZ); + alterBlocks(region, loc, worldInfo.getEnvironment()); } } } // Do an end portal check - if (addon.getSettings().isEndGenerate() && world.getEnvironment().equals(Environment.NORMAL) + if (addon.getSettings().isEndGenerate() && worldInfo.getEnvironment().equals(Environment.NORMAL) && random.nextDouble() < addon.getSettings().getEndFrameProb()) { - makeEndPortal(); + makeEndPortal(region, chunkX, chunkZ); } + } - private void alterBlocks(Block b) { + private void alterBlocks(LimitedRegion region, Location loc, Environment environment) { // Alter blocks - switch (b.getType()) { + Material m = region.getBlockData(loc).getMaterial(); + + switch (m) { case CHEST: - setChest(b); + setChest(region, loc, environment); break; case SPAWNER: - setSpawner(b); + setSpawner(region, loc, environment); break; case DIRT: - if (b.getRelative(BlockFace.UP).getBlockData() instanceof Sapling) { - if (b.getBiome().equals(Biome.DESERT)) { - b.setType(Material.SAND, false); + if (Tag.SAPLINGS.isTagged(m)) { + if (region.getBiome(loc).equals(Biome.DESERT)) { + region.setType(loc, Material.SAND); } else { - setSaplingType(b.getRelative(BlockFace.UP)); + setSaplingType(region, loc); } } break; @@ -101,21 +138,21 @@ private void alterBlocks(Block b) { } - private void makeEndPortal() { + private void makeEndPortal(LimitedRegion region, int chunkX, int chunkZ) { for (int xx = 1; xx< 6; xx++) { for (int zz = 1; zz < 6; zz++) { if (xx == zz || (xx==1 && zz==5) || (xx==5 && zz==1) || (xx>1 && xx<5 && zz>1 && zz<5)) { continue; } - setFrame(xx, zz, chunk.getBlock(xx, 0, zz)); + setFrame(region, xx + (chunkX << 4), addon.getSettings().getEndFrameHeight(), zz + (chunkZ << 4)); } } } - private void setFrame(int xx, int zz, Block frame) { - frame.setType(Material.END_PORTAL_FRAME, false); + private void setFrame(LimitedRegion region, int xx, int yy, int zz) { + region.setType(xx, yy, zz, Material.END_PORTAL_FRAME); // Cast to end frame - EndPortalFrame endFrame = (EndPortalFrame)frame.getBlockData(); + EndPortalFrame endFrame = (EndPortalFrame) region.getBlockData(xx, yy, zz); // Add the odd eye of ender endFrame.setEye(random.nextDouble() < 0.8); @@ -132,42 +169,31 @@ private void setFrame(int xx, int zz, Block frame) { // Face West endFrame.setFacing(BlockFace.WEST); } - frame.setBlockData(endFrame, false); + region.setBlockData(xx, yy, zz, endFrame); } - private void setSaplingType(Block b) { - // Set sapling type - switch (b.getBiome()) { - case JUNGLE: - b.setType(Material.JUNGLE_SAPLING, false); - break; - case PLAINS: - if (random.nextBoolean()) { - b.setType(Material.BIRCH_SAPLING, false); // Birch - } - // else Oak - break; - case TAIGA: - b.setType(Material.SPRUCE_SAPLING, false); - break; - case SWAMP: - break; - case DESERT: - b.setType(Material.DEAD_BUSH, false); - break; - case SAVANNA: - b.setType(Material.ACACIA_SAPLING, false); // Acacia - break; - case FOREST: - default: - b.setType(SAPLING_TYPE[random.nextInt(6)], false); - } - + private void setSaplingType(LimitedRegion region, Location loc) { + // Set sapling type if there is one specific to this biome + Material sapling = switch (region.getBiome(loc)) { + case JUNGLE -> Material.JUNGLE_SAPLING; + case PLAINS -> random.nextBoolean() ? Material.BIRCH_SAPLING : Material.OAK_SAPLING; + case TAIGA -> Material.SPRUCE_SAPLING; + case SWAMP -> Material.MANGROVE_PROPAGULE; + case DESERT -> Material.DEAD_BUSH; + case BADLANDS -> Material.DEAD_BUSH; + case CHERRY_GROVE -> Material.CHERRY_SAPLING; + case BAMBOO_JUNGLE -> Material.BAMBOO; + case SAVANNA -> Material.ACACIA_SAPLING; // Acacia + case BIRCH_FOREST -> Material.BIRCH_SAPLING; + case MUSHROOM_FIELDS -> random.nextBoolean() ? Material.RED_MUSHROOM : Material.BROWN_MUSHROOM; + default -> SAPLING_TYPE[random.nextInt(6)]; + }; + region.setType(loc.add(new Vector(0, 1, 0)), sapling); } - private void setSpawner(Block b) { - CreatureSpawner spawner = (CreatureSpawner) b.getState(); - NavigableMap spawns = addon.getWorldStyles().get(b.getWorld().getEnvironment()).getSpawns(); + private void setSpawner(LimitedRegion region, Location loc, Environment environment) { + CreatureSpawner spawner = (CreatureSpawner) region.getBlockState(loc); + NavigableMap spawns = addon.getWorldStyles().get(environment).getSpawns(); int randKey = random.nextInt(spawns.lastKey()); EntityType type = spawns.ceilingEntry(randKey).getValue(); spawner.setDelay(120); @@ -175,30 +201,30 @@ private void setSpawner(Block b) { spawner.update(true, false); } - private void setChest(Block b) { - Chest chest = (Chest) b.getState(); + private void setChest(LimitedRegion region, Location loc, Environment environment) { + Chest chest = (Chest) region.getBlockState(loc); Inventory inv = chest.getBlockInventory(); slt.reset(); - switch (b.getWorld().getEnvironment()) { - case NETHER: - for (int i = 0; !chestItemsNether.isEmpty() && i < addon.getSettings().getChestFillNether() && i < 27; i ++) { - ItemStack item = new ItemStack(this.chestItemsNether.get(random.nextInt(chestItemsNether.size()))); - inv.setItem(slt.next(), item); - } - break; - case THE_END: - for (int i = 0; !chestItemsNether.isEmpty() && i < addon.getSettings().getChestFillEnd() && i < 27; i ++) { - ItemStack item = new ItemStack(this.chestItemsEnd.get(random.nextInt(chestItemsEnd.size()))); - inv.setItem(slt.next(), item); + switch (environment) { + case NETHER -> fillChest(inv, chestItemsNether, addon.getSettings().getChestFillNether(), netherTotal); + case THE_END -> fillChest(inv, chestItemsEnd, addon.getSettings().getChestFillEnd(), endTotal); + default -> fillChest(inv, chestItemsWorld, addon.getSettings().getChestFill(), worldTotal); + } + } + + private void fillChest(Inventory inv, NavigableMap probMap, int chestFill, + int total) { + for (int i = 0; !probMap.isEmpty() && i < chestFill && i < 27; i ++) { + Material temp = probMap.get(random.nextInt(total)); + if (temp == null) { + temp = probMap.ceilingEntry(random.nextInt(total)).getValue(); } - break; - default: - for (int i = 0; !chestItemsNether.isEmpty() && i < addon.getSettings().getChestFill() && i < 27; i ++) { - ItemStack item = new ItemStack(this.chestItemsWorld.get(random.nextInt(chestItemsWorld.size()))); - inv.setItem(slt.next(), item); + if (temp == null) { + temp = probMap.firstEntry().getValue(); } - break; + inv.setItem(slt.next(), new ItemStack(temp)); } + } } \ No newline at end of file diff --git a/src/main/java/world/bentobox/skygrid/generators/WorldStyles.java b/src/main/java/world/bentobox/skygrid/generators/WorldStyles.java index 9520b9b..f6d3a80 100644 --- a/src/main/java/world/bentobox/skygrid/generators/WorldStyles.java +++ b/src/main/java/world/bentobox/skygrid/generators/WorldStyles.java @@ -11,8 +11,6 @@ import org.bukkit.World.Environment; import org.bukkit.entity.EntityType; -import com.google.common.base.Enums; - import world.bentobox.skygrid.SkyGrid; @@ -126,48 +124,63 @@ private BlockProbability endWorldProbabilities() { private TreeMap normalSpawns() { TreeMap s = new TreeMap<>(); List types = new ArrayList<>(); - types.add(EntityType.CREEPER); - types.add(EntityType.SKELETON); - types.add(EntityType.SPIDER); - types.add(EntityType.CAVE_SPIDER); - types.add(EntityType.ZOMBIE); - types.add(EntityType.SLIME); - types.add(EntityType.PIG); - types.add(EntityType.SHEEP); - types.add(EntityType.COW); - types.add(EntityType.CHICKEN); - types.add(EntityType.SQUID); - types.add(EntityType.WOLF); - types.add(EntityType.ENDERMAN); - types.add(EntityType.SILVERFISH); - types.add(EntityType.VILLAGER); - types.add(EntityType.RABBIT); - types.add(EntityType.GUARDIAN); - types.add(EntityType.HORSE); - types.add(EntityType.WITCH); - types.add(EntityType.LLAMA); - types.add(EntityType.POLAR_BEAR); - types.add(EntityType.HUSK); - types.add(EntityType.MULE); - types.add(EntityType.MUSHROOM_COW); - types.add(EntityType.OCELOT); - types.add(EntityType.VINDICATOR); - types.add(EntityType.ZOMBIE_HORSE); - types.add(EntityType.ZOMBIE_VILLAGER); + //Arrays.stream(EntityType.values()).filter(EntityType::can) + types.add(EntityType.ALLAY); + types.add(EntityType.ARMADILLO); + types.add(EntityType.AXOLOTL); types.add(EntityType.BEE); + types.add(EntityType.BOGGED); + types.add(EntityType.CAMEL); types.add(EntityType.CAT); + types.add(EntityType.CAVE_SPIDER); + types.add(EntityType.CHICKEN); types.add(EntityType.COD); + types.add(EntityType.COW); + types.add(EntityType.CREEPER); types.add(EntityType.DOLPHIN); types.add(EntityType.DONKEY); types.add(EntityType.DROWNED); types.add(EntityType.ELDER_GUARDIAN); + types.add(EntityType.ENDERMAN); types.add(EntityType.FOX); + types.add(EntityType.FROG); + types.add(EntityType.GLOW_SQUID); + types.add(EntityType.GOAT); + types.add(EntityType.GUARDIAN); + types.add(EntityType.HORSE); types.add(EntityType.HUSK); + types.add(EntityType.ILLUSIONER); + types.add(EntityType.IRON_GOLEM); + types.add(EntityType.LLAMA); + types.add(EntityType.MOOSHROOM); + types.add(EntityType.MULE); + types.add(EntityType.OCELOT); types.add(EntityType.PANDA); + types.add(EntityType.PARROT); + types.add(EntityType.PIG); types.add(EntityType.PILLAGER); + types.add(EntityType.POLAR_BEAR); + types.add(EntityType.PUFFERFISH); + types.add(EntityType.RABBIT); types.add(EntityType.RAVAGER); + types.add(EntityType.SALMON); + types.add(EntityType.SHEEP); + types.add(EntityType.SILVERFISH); + types.add(EntityType.SKELETON); + types.add(EntityType.SLIME); + types.add(EntityType.SNIFFER); + types.add(EntityType.SPIDER); + types.add(EntityType.SQUID); + types.add(EntityType.STRAY); types.add(EntityType.TURTLE); types.add(EntityType.VEX); + types.add(EntityType.VILLAGER); + types.add(EntityType.VINDICATOR); + types.add(EntityType.WITCH); + types.add(EntityType.WOLF); + types.add(EntityType.ZOMBIE); + types.add(EntityType.ZOMBIE_HORSE); + types.add(EntityType.ZOMBIE_VILLAGER); int step = 10000 / types.size(); int i = step; @@ -185,19 +198,19 @@ private TreeMap normalSpawns() { private TreeMap netherSpawns() { TreeMap s = new TreeMap<>(); // Keys should increment and cannot be the same! - s.put(25, EntityType.BLAZE); - s.put(50, EntityType.MAGMA_CUBE); - s.put(75, EntityType.SKELETON); - s.put(100, EntityType.WITHER_SKELETON); - s.put(150, EntityType.SKELETON_HORSE); - s.put(175, EntityType.ENDERMAN); - if (Enums.getIfPresent(EntityType.class, "ZOMBIFIED_PIGLIN").isPresent()) { - s.put(300, EntityType.ZOMBIFIED_PIGLIN); - s.put(350, EntityType.STRIDER); - s.put(475, EntityType.PIGLIN); - s.put(600, EntityType.ZOGLIN); - s.put(725, EntityType.HOGLIN); - } + s.put(25, EntityType.BLAZE); + s.put(50, EntityType.MAGMA_CUBE); + s.put(75, EntityType.SKELETON); + s.put(100, EntityType.WITHER_SKELETON); + s.put(150, EntityType.SKELETON_HORSE); + s.put(175, EntityType.ENDERMAN); + s.put(300, EntityType.ZOMBIFIED_PIGLIN); + s.put(350, EntityType.STRIDER); + s.put(475, EntityType.PIGLIN); + s.put(600, EntityType.ZOGLIN); + s.put(725, EntityType.HOGLIN); + s.put(800, EntityType.GHAST); + s.put(850, EntityType.PIGLIN_BRUTE); return s; } diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 329f8e6..0a5096c 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -10,12 +10,12 @@ skygrid: admin: sgadmin sga # 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.16.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.16.0. default-action: go world: @@ -27,634 +27,462 @@ world: # The End chest fill setting end: 5 chest-items: - # Chest items will be taken randomly from this list. All items have an equal chance. + # Chest items will be taken randomly from this list according to the relative probabilities given + # Format: Material : Probability + # Material values can be found at https://hub.spigotmc.org/javadocs/spigot/org/bukkit/Material.html overworld: - - ACTIVATOR_RAIL - - AMETHYST_SHARD - - ANVIL - - APPLE - - ARMOR_STAND - - ARROW - - AXOLOTL_BUCKET - - AXOLOTL_SPAWN_EGG - - BAKED_POTATO - - BAMBOO_SAPLING - - BARREL - - BAT_SPAWN_EGG - - BEACON - - BEE_SPAWN_EGG - - BEEF - - BEETROOT - - BEETROOT_SEEDS - - BEETROOT_SOUP - - BELL - - BLACK_BANNER - - BLACK_BED - - BLACK_DYE - - BLAST_FURNACE - - BLAZE_ROD - - BLUE_BANNER - - BLUE_BED - - BLUE_DYE - - BLUE_ICE - - BLUE_WOOL - - BONE - - BONE_BLOCK - - BONE_MEAL - - BOOK - - BOOKSHELF - - BOW - - BOWL - - BREAD - - BREWING_STAND - - BRICK - - BRICK_WALL - - BRICKS - - BROWN_BANNER - - BROWN_BED - - BROWN_DYE - - BROWN_MUSHROOM - - BROWN_WOOL - - BUCKET - - BUNDLE - - CACTUS - - CAKE - - CAMPFIRE - - CARROT - - CARROT_ON_A_STICK - - CARTOGRAPHY_TABLE - - CARVED_PUMPKIN - - CAT_SPAWN_EGG - - CAULDRON - - CAVE_SPIDER_SPAWN_EGG - - CHAINMAIL_BOOTS - - CHAINMAIL_CHESTPLATE - - CHAINMAIL_HELMET - - CHAINMAIL_LEGGINGS - - CHARCOAL - - CHEST_MINECART - - CHICKEN - - CHICKEN_SPAWN_EGG - - CHISELED_RED_SANDSTONE - - CHISELED_SANDSTONE - - CHISELED_STONE_BRICKS - - CLAY - - CLAY_BALL - - CLOCK - - COAL - - COAL_BLOCK - - COAL_ORE - - COARSE_DIRT - - COCOA - - COCOA_BEANS - - COD - - COD_BUCKET - - COD_SPAWN_EGG - - COMPARATOR - - COMPASS - - COMPOSTER - - CONDUIT - - COOKED_BEEF - - COOKED_CHICKEN - - COOKED_COD - - COOKED_MUTTON - - COOKED_PORKCHOP - - COOKED_RABBIT - - COOKED_SALMON - - COOKIE - - COPPER_INGOT - - CORNFLOWER - - COW_SPAWN_EGG - - CRAFTING_TABLE - - CREEPER_BANNER_PATTERN - - CREEPER_SPAWN_EGG - - CROSSBOW - - CUT_RED_SANDSTONE - - CUT_RED_SANDSTONE_SLAB - - CUT_SANDSTONE - - CUT_SANDSTONE_SLAB - - CYAN_BANNER - - CYAN_BED - - CYAN_DYE - - CYAN_WOOL - - DARK_PRISMARINE - - DAYLIGHT_DETECTOR - - DETECTOR_RAIL - - DIAMOND - - DIAMOND_AXE - - DIAMOND_BLOCK - - DIAMOND_BOOTS - - DIAMOND_CHESTPLATE - - DIAMOND_HELMET - - DIAMOND_HOE - - DIAMOND_LEGGINGS - - DIAMOND_ORE - - DIAMOND_PICKAXE - - DIAMOND_SHOVEL - - DIAMOND_SWORD - - DISPENSER - - DOLPHIN_SPAWN_EGG - - DONKEY_SPAWN_EGG - - DRIED_KELP - - DRIED_KELP_BLOCK - - DROPPER - - DROWNED_SPAWN_EGG - - EGG - - ELDER_GUARDIAN_SPAWN_EGG - - EMERALD - - EMERALD_BLOCK - - EMERALD_ORE - - ENCHANTED_BOOK - - ENCHANTED_GOLDEN_APPLE - - ENCHANTING_TABLE - - ENDER_PEARL - - EVOKER_SPAWN_EGG - - EXPERIENCE_BOTTLE - - FEATHER - - FERMENTED_SPIDER_EYE - - FERN - - FIRE - - FIRE_CHARGE - - FIREWORK_ROCKET - - FIREWORK_STAR - - FISHING_ROD - - FLETCHING_TABLE - - FLINT - - FLINT_AND_STEEL - - FLOWER_BANNER_PATTERN - - FLOWER_POT - - FOX_SPAWN_EGG - - FURNACE - - FURNACE_MINECART - - GHAST_SPAWN_EGG - - GHAST_TEAR - - GLASS_BOTTLE - - GLISTERING_MELON_SLICE - - GLOBE_BANNER_PATTERN - - GLOW_BERRIES - - GLOW_INK_SAC - - GLOW_ITEM_FRAME - - GLOW_SQUID_SPAWN_EGG - - GLOWSTONE - - GLOWSTONE_DUST - - GOAT_SPAWN_EGG - - GOLD_BLOCK - - GOLD_INGOT - - GOLD_NUGGET - - GOLD_ORE - - GOLDEN_APPLE - - GOLDEN_AXE - - GOLDEN_BOOTS - - GOLDEN_CARROT - - GOLDEN_CHESTPLATE - - GOLDEN_HELMET - - GOLDEN_HOE - - GOLDEN_HORSE_ARMOR - - GOLDEN_LEGGINGS - - GOLDEN_PICKAXE - - GOLDEN_SHOVEL - - GOLDEN_SWORD - - GRAVEL - - GRAY_BANNER - - GRAY_BED - - GRAY_DYE - - GREEN_BANNER - - GREEN_BED - - GREEN_DYE - - GRINDSTONE - - GUARDIAN_SPAWN_EGG - - GUNPOWDER - - HAY_BLOCK - - HEART_OF_THE_SEA - - HEAVY_WEIGHTED_PRESSURE_PLATE - - HONEY_BOTTLE - - HONEYCOMB - - HOPPER - - HOPPER_MINECART - - HORSE_SPAWN_EGG - - HUSK_SPAWN_EGG - - ICE - - INK_SAC - - IRON_AXE - - IRON_BARS - - IRON_BLOCK - - IRON_BOOTS - - IRON_CHESTPLATE - - IRON_DOOR - - IRON_HELMET - - IRON_HOE - - IRON_HORSE_ARMOR - - IRON_INGOT - - IRON_LEGGINGS - - IRON_NUGGET - - IRON_ORE - - IRON_PICKAXE - - IRON_SHOVEL - - IRON_SWORD - - IRON_TRAPDOOR - - ITEM_FRAME - - JACK_O_LANTERN - - JUKEBOX - - KELP - - KELP_PLANT - - LADDER - - LANTERN - - LAPIS_BLOCK - - LAPIS_LAZULI - - LAPIS_ORE - - LARGE_FERN - - LAVA_BUCKET - - LEAD - - LEATHER - - LEATHER_BOOTS - - LEATHER_CHESTPLATE - - LEATHER_HELMET - - LEATHER_HORSE_ARMOR - - LEATHER_LEGGINGS - - LECTERN - - LEVER - - LIGHT_BLUE_BANNER - - LIGHT_BLUE_BED - - LIGHT_BLUE_DYE - - LIGHT_GRAY_BANNER - - LIGHT_GRAY_BED - - LIGHT_GRAY_DYE - - LIGHT_GRAY_WOOL - - LIGHT_WEIGHTED_PRESSURE_PLATE - - LILAC - - LILY_OF_THE_VALLEY - - LILY_PAD - - LIME_BANNER - - LIME_BED - - LIME_CARPET - - LIME_DYE - - LIME_WOOL - - LLAMA_SPAWN_EGG - - LOOM - - MAGENTA_BANNER - - MAGENTA_BED - - MAGENTA_DYE - - MAGENTA_WOOL - - MAGMA_BLOCK - - MAGMA_CREAM - - MAGMA_CUBE_SPAWN_EGG - - MAP - - MELON - - MELON_SEEDS - - MELON_SLICE - - MILK_BUCKET - - MINECART - - MOJANG_BANNER_PATTERN - - MOOSHROOM_SPAWN_EGG - - MULE_SPAWN_EGG - - MUSHROOM_STEW - - MUSIC_DISC_11 - - MUSIC_DISC_13 - - MUSIC_DISC_BLOCKS - - MUSIC_DISC_CAT - - MUSIC_DISC_CHIRP - - MUSIC_DISC_FAR - - MUSIC_DISC_MALL - - MUSIC_DISC_MELLOHI - - MUSIC_DISC_STAL - - MUSIC_DISC_STRAD - - MUSIC_DISC_WAIT - - MUSIC_DISC_WARD - - MUTTON - - MYCELIUM - - NAME_TAG - - NAUTILUS_SHELL - - NOTE_BLOCK - - OBSERVER - - OBSIDIAN - - OCELOT_SPAWN_EGG - - ORANGE_BANNER - - ORANGE_BED - - ORANGE_DYE - - ORANGE_TULIP - - ORANGE_WOOL - - OXEYE_DAISY - - PACKED_ICE - - PAINTING - - PANDA_SPAWN_EGG - - PAPER - - PARROT_SPAWN_EGG - - PEONY - - PETRIFIED_OAK_SLAB - - PHANTOM_MEMBRANE - - PHANTOM_SPAWN_EGG - - PIG_SPAWN_EGG - - PILLAGER_SPAWN_EGG - - PINK_BANNER - - PINK_BED - - PINK_DYE - - PINK_TULIP - - PINK_WOOL - - PISTON - - PODZOL - - POISONOUS_POTATO - - POLAR_BEAR_SPAWN_EGG - - POPPY - - PORKCHOP - - POTATO - - POTATOES - - POTTED_ACACIA_SAPLING - - POTTED_ALLIUM - - POTTED_AZURE_BLUET - - POTTED_BAMBOO - - POTTED_BIRCH_SAPLING - - POTTED_BLUE_ORCHID - - POTTED_BROWN_MUSHROOM - - POTTED_CACTUS - - POTTED_CORNFLOWER - - POTTED_DANDELION - - POTTED_DARK_OAK_SAPLING - - POTTED_DEAD_BUSH - - POTTED_FERN - - POTTED_JUNGLE_SAPLING - - POTTED_LILY_OF_THE_VALLEY - - POTTED_OAK_SAPLING - - POTTED_ORANGE_TULIP - - POTTED_OXEYE_DAISY - - POTTED_PINK_TULIP - - POTTED_POPPY - - POTTED_RED_MUSHROOM - - POTTED_RED_TULIP - - POTTED_SPRUCE_SAPLING - - POTTED_WHITE_TULIP - - POTTED_WITHER_ROSE - - POWDER_SNOW_BUCKET - - POWERED_RAIL - - PRISMARINE - - PRISMARINE_CRYSTALS - - PRISMARINE_SHARD - - PUFFERFISH - - PUFFERFISH_BUCKET - - PUFFERFISH_SPAWN_EGG - - PUMPKIN - - PUMPKIN_PIE - - PUMPKIN_SEEDS - - PURPLE_BANNER - - PURPLE_BED - - PURPLE_DYE - - PURPLE_WOOL - - RABBIT - - RABBIT_FOOT - - RABBIT_HIDE - - RABBIT_SPAWN_EGG - - RABBIT_STEW - - RAIL - - RAVAGER_SPAWN_EGG - - RAW_COPPER - - RAW_GOLD - - RAW_IRON - - RED_BANNER - - RED_BED - - RED_DYE - - RED_MUSHROOM - - RED_MUSHROOM_BLOCK - - RED_SAND - - RED_SANDSTONE - - RED_TULIP - - RED_WOOL - - REDSTONE - - REDSTONE_BLOCK - - REDSTONE_LAMP - - REDSTONE_ORE - - REDSTONE_TORCH - - REPEATER - - ROSE_BUSH - - ROTTEN_FLESH - - SADDLE - - SALMON - - SALMON_BUCKET - - SALMON_SPAWN_EGG - - SAND - - SANDSTONE - - SCAFFOLDING - - SCUTE - - SEA_LANTERN - - SEA_PICKLE - - SEAGRASS - - SHEARS - - SHEEP_SPAWN_EGG - - SHIELD - - SILVERFISH_SPAWN_EGG - - SKELETON_HORSE_SPAWN_EGG - - SKELETON_SPAWN_EGG - - SKULL_BANNER_PATTERN - - SLIME_BALL - - SLIME_BLOCK - - SLIME_SPAWN_EGG - - SMITHING_TABLE - - SMOKER - - SNOW_BLOCK - - SNOWBALL - - SOUL_SAND - - SPECTRAL_ARROW - - SPIDER_EYE - - SPIDER_SPAWN_EGG - - SPONGE - - SPYGLASS - - SQUID_SPAWN_EGG - - STICK - - STICKY_PISTON - - STONECUTTER - - STRAY_SPAWN_EGG - - STRING - - SUGAR - - SUGAR_CANE - - SUNFLOWER - - SUSPICIOUS_STEW - - SWEET_BERRIES - - SWEET_BERRY_BUSH - - TERRACOTTA - - TNT - - TNT_MINECART - - TORCH - - TOTEM_OF_UNDYING - - TRADER_LLAMA_SPAWN_EGG - - TRAPPED_CHEST - - TRIDENT - - TRIPWIRE - - TRIPWIRE_HOOK - - TROPICAL_FISH - - TROPICAL_FISH_BUCKET - - TROPICAL_FISH_SPAWN_EGG - - TURTLE_EGG - - TURTLE_HELMET - - TURTLE_SPAWN_EGG - - VEX_SPAWN_EGG - - VILLAGER_SPAWN_EGG - - VINDICATOR_SPAWN_EGG - - VINE - - WALL_TORCH - - WANDERING_TRADER_SPAWN_EGG - - WARPED_FUNGUS_ON_A_STICK - - WATER_BUCKET - - WHEAT - - WHEAT_SEEDS - - WHITE_BANNER - - WHITE_BED - - WHITE_DYE - - WHITE_TULIP - - WHITE_WOOL - - WITCH_SPAWN_EGG - - WOLF_SPAWN_EGG - - WRITABLE_BOOK - - YELLOW_BANNER - - YELLOW_BED - - YELLOW_DYE - - YELLOW_GLAZED_TERRACOTTA - - YELLOW_WOOL - - ZOMBIE_SPAWN_EGG - - ZOMBIE_VILLAGER_SPAWN_EGG - - BLAZE_SPAWN_EGG - - CHISELED_QUARTZ_BLOCK - - DIAMOND_HORSE_ARMOR - - ELYTRA - - ENDER_EYE - - HOGLIN_SPAWN_EGG - - MUSIC_DISC_PIGSTEP - - NETHER_BRICK - - NETHER_BRICK_FENCE - - NETHER_BRICK_SLAB - - NETHER_BRICK_STAIRS - - NETHER_BRICK_WALL - - NETHER_BRICKS - - NETHER_PORTAL - - NETHER_QUARTZ_ORE - - NETHER_STAR - - NETHER_WART - - NETHER_WART_BLOCK - - NETHERITE_INGOT - - NETHERITE_SCRAP - - NETHERRACK - - PIGLIN_BANNER_PATTERN - - PIGLIN_BRUTE_SPAWN_EGG - - PIGLIN_SPAWN_EGG - - QUARTZ - - QUARTZ_BLOCK - - QUARTZ_PILLAR - - QUARTZ_SLAB - - QUARTZ_STAIRS - - RED_NETHER_BRICK_SLAB - - RED_NETHER_BRICK_STAIRS - - RED_NETHER_BRICK_WALL - - RED_NETHER_BRICKS - - STRIDER_SPAWN_EGG - - WITHER_ROSE - - WITHER_SKELETON_SKULL - - WITHER_SKELETON_SPAWN_EGG - - ZOGLIN_SPAWN_EGG - - ZOMBIE_HORSE_SPAWN_EGG - - ZOMBIFIED_PIGLIN_SPAWN_EGG - - BLACK_SHULKER_BOX - - BLUE_SHULKER_BOX - - BREWING_STAND - - BROWN_SHULKER_BOX - - CHORUS_FLOWER - - CHORUS_FRUIT - - CHORUS_PLANT - - CYAN_SHULKER_BOX - - DRAGON_BREATH - - END_CRYSTAL - - END_ROD - - END_STONE - - ENDERMAN_SPAWN_EGG - - ENDERMITE_SPAWN_EGG - - LIGHT_BLUE_SHULKER_BOX - - LIGHT_GRAY_SHULKER_BOX - - LIME_SHULKER_BOX - - MAGENTA_SHULKER_BOX - - ORANGE_SHULKER_BOX - - PINK_SHULKER_BOX - - POPPED_CHORUS_FRUIT - - PURPLE_SHULKER_BOX - - PURPUR_BLOCK - - PURPUR_PILLAR - - PURPUR_SLAB - - PURPUR_STAIRS - - RED_SHULKER_BOX - - SHULKER_BOX - - SHULKER_SHELL - - SHULKER_SPAWN_EGG - - WHITE_SHULKER_BOX - - YELLOW_SHULKER_BOX + ACACIA_BOAT: 100 + ACACIA_CHEST_BOAT: 100 + ALLAY_SPAWN_EGG: 10 + AMETHYST_SHARD: 100 + APPLE: 100 + ARMOR_STAND: 10 + ARROW: 100 + AXOLOTL_BUCKET: 10 + AXOLOTL_SPAWN_EGG: 10 + BAKED_POTATO: 10 + BAMBOO_CHEST_RAFT: 100 + BAMBOO_RAFT: 100 + BAT_SPAWN_EGG: 10 + BEE_SPAWN_EGG: 10 + BEEF: 10 + BEETROOT_SEEDS: 10 + BEETROOT_SOUP: 10 + BEETROOT: 10 + BIRCH_BOAT: 100 + BIRCH_CHEST_BOAT: 100 + BLACK_DYE: 10 + BLUE_DYE: 10 + BONE_MEAL: 10 + BONE: 10 + BOOK: 10 + BOW: 100 + BOWL: 10 + BREAD: 10 + BRICK: 10 + BROWN_DYE: 10 + BRUSH: 10 + BUCKET: 10 + BUNDLE: 10 + CAMEL_SPAWN_EGG: 10 + CARROT_ON_A_STICK: 100 + CARROT: 10 + CAT_SPAWN_EGG: 10 + CAVE_SPIDER_SPAWN_EGG: 10 + CHAINMAIL_BOOTS: 10 + CHAINMAIL_CHESTPLATE: 10 + CHAINMAIL_HELMET: 10 + CHAINMAIL_LEGGINGS: 10 + CHARCOAL: 100 + CHERRY_BOAT: 100 + CHERRY_CHEST_BOAT: 100 + CHEST_MINECART: 100 + CHICKEN_SPAWN_EGG: 10 + CHICKEN: 10 + CHORUS_FRUIT: 10 + CLAY_BALL: 10 + CLOCK: 10 + COAL: 100 + COAST_ARMOR_TRIM_SMITHING_TEMPLATE: 10 + COCOA_BEANS: 10 + COD_BUCKET: 10 + COD_SPAWN_EGG: 10 + COD: 10 + COMPASS: 10 + COOKED_BEEF: 10 + COOKED_CHICKEN: 10 + COOKED_COD: 10 + COOKED_MUTTON: 10 + COOKED_PORKCHOP: 10 + COOKED_RABBIT: 10 + COOKED_SALMON: 10 + COOKIE: 10 + COPPER_INGOT: 100 + COW_SPAWN_EGG: 10 + CREEPER_BANNER_PATTERN: 10 + CREEPER_SPAWN_EGG: 10 + CROSSBOW: 10 + CYAN_DYE: 10 + DARK_OAK_BOAT: 100 + DARK_OAK_CHEST_BOAT: 100 + DIAMOND_AXE: 10 + DIAMOND_BOOTS: 10 + DIAMOND_CHESTPLATE: 10 + DIAMOND_HELMET: 10 + DIAMOND_HOE: 10 + DIAMOND_LEGGINGS: 10 + DIAMOND_PICKAXE: 10 + DIAMOND_SHOVEL: 100 + DIAMOND_SWORD: 100 + DIAMOND: 100 + DISC_FRAGMENT_5: 10 + DOLPHIN_SPAWN_EGG: 10 + DONKEY_SPAWN_EGG: 10 + DRAGON_BREATH: 10 + DRIED_KELP: 10 + DROWNED_SPAWN_EGG: 10 + DUNE_ARMOR_TRIM_SMITHING_TEMPLATE: 10 + ECHO_SHARD: 10 + EGG: 10 + ELDER_GUARDIAN_SPAWN_EGG: 10 + ELYTRA: 100 + EMERALD: 100 + ENCHANTED_BOOK: 10 + ENCHANTED_GOLDEN_APPLE: 10 + END_CRYSTAL: 10 + ENDER_EYE: 10 + ENDER_PEARL: 10 + ENDERMAN_SPAWN_EGG: 10 + ENDERMITE_SPAWN_EGG: 10 + EVOKER_SPAWN_EGG: 10 + EXPERIENCE_BOTTLE: 10 + EYE_ARMOR_TRIM_SMITHING_TEMPLATE: 10 + FEATHER: 10 + FERMENTED_SPIDER_EYE: 10 + FIRE_CHARGE: 10 + FIREWORK_ROCKET: 10 + FIREWORK_STAR: 10 + FISHING_ROD: 10 + FLINT_AND_STEEL: 100 + FLINT: 10 + FLOWER_BANNER_PATTERN: 10 + FOX_SPAWN_EGG: 10 + FROG_SPAWN_EGG: 10 + FURNACE_MINECART: 100 + GLASS_BOTTLE: 10 + GLISTERING_MELON_SLICE: 10 + GLOBE_BANNER_PATTERN: 10 + GLOW_BERRIES: 10 + GLOW_INK_SAC: 10 + GLOW_ITEM_FRAME: 10 + GLOW_SQUID_SPAWN_EGG: 10 + GOAT_HORN: 10 + GOAT_SPAWN_EGG: 10 + GOLD_INGOT: 100 + GOLD_NUGGET: 10 + GOLDEN_APPLE: 10 + GOLDEN_AXE: 100 + GOLDEN_BOOTS: 10 + GOLDEN_CARROT: 10 + GOLDEN_CHESTPLATE: 10 + GOLDEN_HELMET: 10 + GOLDEN_HOE: 100 + GOLDEN_LEGGINGS: 10 + GOLDEN_PICKAXE: 100 + GOLDEN_SHOVEL: 100 + GOLDEN_SWORD: 100 + GRAY_DYE: 10 + GREEN_DYE: 10 + GUARDIAN_SPAWN_EGG: 10 + GUNPOWDER: 10 + HEART_OF_THE_SEA: 10 + HONEY_BOTTLE: 10 + HONEYCOMB: 10 + HOPPER_MINECART: 100 + HORSE_SPAWN_EGG: 10 + HUSK_SPAWN_EGG: 10 + INK_SAC: 10 + IRON_AXE: 100 + IRON_BOOTS: 10 + IRON_CHESTPLATE: 10 + IRON_GOLEM_SPAWN_EGG: 10 + IRON_HELMET: 10 + IRON_HOE: 100 + IRON_INGOT: 100 + IRON_LEGGINGS: 10 + IRON_NUGGET: 10 + IRON_PICKAXE: 100 + IRON_SHOVEL: 100 + IRON_SWORD: 100 + ITEM_FRAME: 10 + JUNGLE_BOAT: 100 + JUNGLE_CHEST_BOAT: 100 + KNOWLEDGE_BOOK: 10 + LAPIS_LAZULI: 100 + LAVA_BUCKET: 10 + LEAD: 10 + LEATHER_BOOTS: 10 + LEATHER_CHESTPLATE: 10 + LEATHER_HELMET: 10 + LEATHER_LEGGINGS: 10 + LEATHER: 10 + LIGHT_BLUE_DYE: 10 + LIGHT_GRAY_DYE: 10 + LIME_DYE: 10 + LINGERING_POTION: 10 + LLAMA_SPAWN_EGG: 10 + MAGENTA_DYE: 10 + MANGROVE_BOAT: 100 + MANGROVE_CHEST_BOAT: 100 + MAP: 10 + MELON_SEEDS: 10 + MELON_SLICE: 10 + MILK_BUCKET: 10 + MINECART: 100 + MOJANG_BANNER_PATTERN: 10 + MOOSHROOM_SPAWN_EGG: 10 + MULE_SPAWN_EGG: 10 + MUSHROOM_STEW: 10 + MUSIC_DISC_11: 10 + MUSIC_DISC_13: 10 + MUSIC_DISC_5: 10 + MUSIC_DISC_BLOCKS: 10 + MUSIC_DISC_CAT: 10 + MUSIC_DISC_CHIRP: 10 + MUSIC_DISC_FAR: 10 + MUSIC_DISC_MALL: 10 + MUSIC_DISC_MELLOHI: 10 + MUSIC_DISC_OTHERSIDE: 10 + MUSIC_DISC_PIGSTEP: 10 + MUSIC_DISC_STAL: 10 + MUSIC_DISC_STRAD: 10 + MUSIC_DISC_WAIT: 10 + MUSIC_DISC_WARD: 10 + MUTTON: 10 + NAME_TAG: 10 + NAUTILUS_SHELL: 10 + NETHER_BRICK: 10 + NETHER_STAR: 10 + NETHERITE_BOOTS: 1 + NETHERITE_CHESTPLATE: 1 + NETHERITE_HELMET: 1 + NETHERITE_LEGGINGS: 1 + NETHERITE_UPGRADE_SMITHING_TEMPLATE: 10 + OAK_BOAT: 100 + OAK_CHEST_BOAT: 100 + OCELOT_SPAWN_EGG: 10 + ORANGE_DYE: 10 + PAINTING: 10 + PANDA_SPAWN_EGG: 10 + PAPER: 10 + PARROT_SPAWN_EGG: 10 + PHANTOM_MEMBRANE: 10 + PHANTOM_SPAWN_EGG: 10 + PIG_SPAWN_EGG: 10 + PILLAGER_SPAWN_EGG: 10 + PINK_DYE: 10 + POISONOUS_POTATO: 10 + POLAR_BEAR_SPAWN_EGG: 10 + POPPED_CHORUS_FRUIT: 10 + PORKCHOP: 10 + POTATO: 10 + POWDER_SNOW_BUCKET: 10 + PRISMARINE_CRYSTALS: 10 + PRISMARINE_SHARD: 10 + PUFFERFISH_BUCKET: 10 + PUFFERFISH_SPAWN_EGG: 10 + PUFFERFISH: 10 + PUMPKIN_PIE: 10 + PUMPKIN_SEEDS: 10 + PURPLE_DYE: 10 + QUARTZ: 100 + RABBIT_FOOT: 10 + RABBIT_HIDE: 10 + RABBIT_SPAWN_EGG: 10 + RABBIT_STEW: 10 + RABBIT: 10 + RAVAGER_SPAWN_EGG: 10 + RAW_COPPER: 100 + RAW_GOLD: 100 + RAW_IRON: 100 + RECOVERY_COMPASS: 10 + RED_DYE: 10 + REDSTONE: 100 + RIB_ARMOR_TRIM_SMITHING_TEMPLATE: 10 + ROTTEN_FLESH: 10 + SADDLE: 100 + SALMON_BUCKET: 10 + SALMON_SPAWN_EGG: 10 + SALMON: 10 + TURTLE_SCUTE: 100 + ARMADILLO_SCUTE: 100 + WOLF_ARMOR: 100 + SENTRY_ARMOR_TRIM_SMITHING_TEMPLATE: 10 + SHEARS: 10 + SHEEP_SPAWN_EGG: 10 + SHIELD: 10 + SILVERFISH_SPAWN_EGG: 10 + SKELETON_SPAWN_EGG: 10 + SKULL_BANNER_PATTERN: 10 + SLIME_BALL: 10 + SLIME_SPAWN_EGG: 10 + SNIFFER_SPAWN_EGG: 10 + SNOUT_ARMOR_TRIM_SMITHING_TEMPLATE: 10 + SNOW_GOLEM_SPAWN_EGG: 10 + SNOWBALL: 10 + SPECTRAL_ARROW: 10 + SPIDER_EYE: 10 + SPIDER_SPAWN_EGG: 10 + SPIRE_ARMOR_TRIM_SMITHING_TEMPLATE: 10 + SPLASH_POTION: 10 + SPRUCE_BOAT: 100 + SPRUCE_CHEST_BOAT: 100 + SPYGLASS: 10 + SQUID_SPAWN_EGG: 10 + STICK: 10 + STONE_AXE: 100 + STONE_HOE: 100 + STONE_PICKAXE: 100 + STONE_SHOVEL: 100 + STONE_SWORD: 100 + STRAY_SPAWN_EGG: 10 + STRING: 10 + SUGAR: 10 + SUSPICIOUS_STEW: 10 + SWEET_BERRIES: 10 + TADPOLE_BUCKET: 10 + TADPOLE_SPAWN_EGG: 10 + TIDE_ARMOR_TRIM_SMITHING_TEMPLATE: 10 + TIPPED_ARROW: 10 + TNT_MINECART: 100 + TORCHFLOWER_SEEDS: 10 + TOTEM_OF_UNDYING: 1 + TRADER_LLAMA_SPAWN_EGG: 10 + TRIDENT: 10 + TROPICAL_FISH_BUCKET: 10 + TROPICAL_FISH_SPAWN_EGG: 10 + TROPICAL_FISH: 10 + TURTLE_HELMET: 100 + TURTLE_SPAWN_EGG: 10 + VEX_ARMOR_TRIM_SMITHING_TEMPLATE: 10 + VEX_SPAWN_EGG: 10 + VILLAGER_SPAWN_EGG: 10 + VINDICATOR_SPAWN_EGG: 10 + WANDERING_TRADER_SPAWN_EGG: 10 + WARD_ARMOR_TRIM_SMITHING_TEMPLATE: 10 + WARDEN_SPAWN_EGG: 1 + WARPED_FUNGUS_ON_A_STICK: 100 + WATER_BUCKET: 10 + WHEAT_SEEDS: 10 + WHITE_DYE: 10 + WILD_ARMOR_TRIM_SMITHING_TEMPLATE: 10 + WITCH_SPAWN_EGG: 10 + WITHER_SPAWN_EGG: 1 + WOLF_SPAWN_EGG: 10 + WOODEN_AXE: 100 + WOODEN_HOE: 100 + WOODEN_PICKAXE: 100 + WOODEN_SHOVEL: 100 + WOODEN_SWORD: 100 + WRITABLE_BOOK: 10 + YELLOW_DYE: 10 + ZOMBIE_HORSE_SPAWN_EGG: 10 + ZOMBIE_SPAWN_EGG: 10 + ZOMBIE_VILLAGER_SPAWN_EGG: 10 + ZOMBIFIED_PIGLIN_SPAWN_EGG: 10 nether: - - BLAZE_SPAWN_EGG - - CHISELED_QUARTZ_BLOCK - - DIAMOND_HORSE_ARMOR - - ELYTRA - - ENDER_EYE - - HOGLIN_SPAWN_EGG - - MUSIC_DISC_PIGSTEP - - NETHER_BRICK - - NETHER_BRICK_FENCE - - NETHER_BRICK_SLAB - - NETHER_BRICK_STAIRS - - NETHER_BRICK_WALL - - NETHER_BRICKS - - NETHER_PORTAL - - NETHER_QUARTZ_ORE - - NETHER_STAR - - NETHER_WART - - NETHER_WART_BLOCK - - NETHERITE_INGOT - - NETHERITE_SCRAP - - NETHERRACK - - PIGLIN_BANNER_PATTERN - - PIGLIN_BRUTE_SPAWN_EGG - - PIGLIN_SPAWN_EGG - - QUARTZ - - QUARTZ_BLOCK - - QUARTZ_PILLAR - - QUARTZ_SLAB - - QUARTZ_STAIRS - - RED_NETHER_BRICK_SLAB - - RED_NETHER_BRICK_STAIRS - - RED_NETHER_BRICK_WALL - - RED_NETHER_BRICKS - - STRIDER_SPAWN_EGG - - WITHER_ROSE - - WITHER_SKELETON_SKULL - - WITHER_SKELETON_SPAWN_EGG - - ZOGLIN_SPAWN_EGG - - ZOMBIE_HORSE_SPAWN_EGG - - ZOMBIFIED_PIGLIN_SPAWN_EGG + APPLE: 10 + ARROW: 10 + BLAZE_POWDER: 10 + BLAZE_ROD: 10 + BLAZE_SPAWN_EGG: 10 + BONE: 10 + BOW: 10 + CARROT_ON_A_STICK: 10 + CHEST_MINECART: 10 + COOKED_PORKCHOP: 10 + DIAMOND_HORSE_ARMOR: 10 + DIAMOND: 10 + ELYTRA: 10 + EMERALD: 10 + ENDER_EYE: 10 + ENDER_PEARL: 10 + ENDERMAN_SPAWN_EGG: 10 + EXPERIENCE_BOTTLE: 10 + FIRE_CHARGE: 10 + FISHING_ROD: 10 + FLINT_AND_STEEL: 10 + FLINT: 10 + FURNACE_MINECART: 10 + GHAST_TEAR: 10 + GLOWSTONE_DUST: 10 + GOLD_INGOT: 10 + GOLD_NUGGET: 10 + GOLDEN_AXE: 10 + GOLDEN_BOOTS: 10 + GOLDEN_CHESTPLATE: 10 + GOLDEN_HELMET: 10 + GOLDEN_HOE: 10 + GOLDEN_HORSE_ARMOR: 10 + GOLDEN_LEGGINGS: 10 + GOLDEN_PICKAXE: 10 + GOLDEN_SHOVEL: 10 + GOLDEN_SWORD: 10 + HOGLIN_SPAWN_EGG: 10 + HOPPER_MINECART: 10 + IRON_HORSE_ARMOR: 10 + LAVA_BUCKET: 10 + LEATHER_HORSE_ARMOR: 10 + MAGMA_CREAM: 10 + MAGMA_CUBE_SPAWN_EGG: 10 + MINECART: 10 + NETHER_BRICK: 10 + NETHER_STAR: 1 + NETHERITE_AXE: 1 + NETHERITE_BOOTS: 1 + NETHERITE_CHESTPLATE: 1 + NETHERITE_HELMET: 1 + NETHERITE_HOE: 1 + NETHERITE_INGOT: 10 + NETHERITE_LEGGINGS: 1 + NETHERITE_PICKAXE: 1 + NETHERITE_SCRAP: 10 + NETHERITE_SHOVEL: 1 + NETHERITE_SWORD: 1 + PIGLIN_BRUTE_SPAWN_EGG: 10 + PIGLIN_SPAWN_EGG: 10 + PORKCHOP: 10 + QUARTZ: 10 + RAW_GOLD: 10 + SNOWBALL: 10 + SPECTRAL_ARROW: 10 + TIPPED_ARROW: 10 + TNT_MINECART: 10 + TOTEM_OF_UNDYING: 10 + WARPED_FUNGUS_ON_A_STICK: 10 + ZOGLIN_SPAWN_EGG: 10 end: - - BLACK_SHULKER_BOX - - BLUE_SHULKER_BOX - - BREWING_STAND - - BROWN_SHULKER_BOX - - CHORUS_FLOWER - - CHORUS_FRUIT - - CHORUS_PLANT - - CYAN_SHULKER_BOX - - DRAGON_BREATH - - END_CRYSTAL - - END_ROD - - END_STONE - - ENDERMAN_SPAWN_EGG - - ENDERMITE_SPAWN_EGG - - LIGHT_BLUE_SHULKER_BOX - - LIGHT_GRAY_SHULKER_BOX - - LIME_SHULKER_BOX - - MAGENTA_SHULKER_BOX - - ORANGE_SHULKER_BOX - - PINK_SHULKER_BOX - - POPPED_CHORUS_FRUIT - - PURPLE_SHULKER_BOX - - PURPUR_BLOCK - - PURPUR_PILLAR - - PURPUR_SLAB - - PURPUR_STAIRS - - RED_SHULKER_BOX - - SHULKER_BOX - - SHULKER_SHELL - - SHULKER_SPAWN_EGG - - WHITE_SHULKER_BOX - - YELLOW_SHULKER_BOX + APPLE: 10 + ARROW: 10 + BOW: 10 + BREAD: 10 + CHARCOAL: 10 + CHORUS_FRUIT: 10 + COAL: 10 + COAST_ARMOR_TRIM_SMITHING_TEMPLATE: 10 + CROSSBOW: 10 + DIAMOND_AXE: 10 + DIAMOND_HOE: 10 + DIAMOND_PICKAXE: 10 + DIAMOND_SHOVEL: 10 + DIAMOND_SWORD: 10 + DIAMOND: 10 + DUNE_ARMOR_TRIM_SMITHING_TEMPLATE: 10 + ELYTRA: 10 + EMERALD: 10 + END_CRYSTAL: 10 + ENDERMAN_SPAWN_EGG: 10 + EYE_ARMOR_TRIM_SMITHING_TEMPLATE: 10 + FIREWORK_ROCKET: 10 + FIREWORK_STAR: 10 + FLINT_AND_STEEL: 10 + LIGHT_BLUE_DYE: 10 + MAGENTA_DYE: 10 + NETHERITE_UPGRADE_SMITHING_TEMPLATE: 10 + POPPED_CHORUS_FRUIT: 10 + PURPLE_DYE: 10 + QUARTZ: 10 + RIB_ARMOR_TRIM_SMITHING_TEMPLATE: 10 + SENTRY_ARMOR_TRIM_SMITHING_TEMPLATE: 10 + SHULKER_SHELL: 10 + SHULKER_SPAWN_EGG: 10 + SNOUT_ARMOR_TRIM_SMITHING_TEMPLATE: 10 + SPIRE_ARMOR_TRIM_SMITHING_TEMPLATE: 10 + TIDE_ARMOR_TRIM_SMITHING_TEMPLATE: 10 + TOTEM_OF_UNDYING: 10 + VEX_ARMOR_TRIM_SMITHING_TEMPLATE: 10 + WARD_ARMOR_TRIM_SMITHING_TEMPLATE: 10 + WILD_ARMOR_TRIM_SMITHING_TEMPLATE: 10 # World block types. If the material cannot be placed, bedrock will be used. # Format: Material : Probability # Block types must be Bukkit Material types. @@ -663,349 +491,337 @@ world: blocks: ACACIA_LEAVES: 8 ACACIA_LOG: 20 - ACACIA_PLANKS: 1 - ACACIA_SAPLING: 17 - ACACIA_WOOD: 16 - ALLIUM: 12 - AMETHYST_BLOCK: 1 - AMETHYST_CLUSTER: 1 + ACACIA_PLANKS: 10 + ACACIA_SAPLING: 107 + ACACIA_WOOD: 106 + ALLIUM: 102 + AMETHYST_BLOCK: 10 + AMETHYST_CLUSTER: 10 ANDESITE: 90 - AZALEA_LEAVES: 1 - AZALEA: 1 - AZURE_BLUET: 1 - BARREL: 1 - BEE_NEST: 1 + AZALEA_LEAVES: 10 + AZALEA: 10 + AZURE_BLUET: 10 + BARREL: 10 + BEE_NEST: 10 BEETROOTS: 9 BIRCH_LEAVES: 9 BIRCH_LOG: 2 - BIRCH_PLANKS: 1 + BIRCH_PLANKS: 10 BIRCH_SAPLING: 8 - BIRCH_WOOD: 16 - BLACK_CONCRETE: 1 - BLACK_GLAZED_TERRACOTTA: 1 - BLACK_STAINED_GLASS: 1 - BLACK_TERRACOTTA: 1 - BLACK_WOOL: 1 - BLUE_CONCRETE: 1 - BLUE_GLAZED_TERRACOTTA: 1 - BLUE_ICE: 1 - BLUE_ORCHID: 1 - BLUE_STAINED_GLASS: 1 - BLUE_TERRACOTTA: 1 - BLUE_WOOL: 1 - BONE_BLOCK: 1 - BOOKSHELF: 10 - BRAIN_CORAL_BLOCK: 1 - BRICKS: 1 - BROWN_CONCRETE: 1 - BROWN_GLAZED_TERRACOTTA: 1 - BROWN_MUSHROOM_BLOCK: 1 + BIRCH_WOOD: 106 + BLACK_CONCRETE: 10 + BLACK_GLAZED_TERRACOTTA: 10 + BLACK_STAINED_GLASS: 10 + BLACK_TERRACOTTA: 10 + BLACK_WOOL: 10 + BLUE_CONCRETE: 10 + BLUE_GLAZED_TERRACOTTA: 10 + BLUE_ICE: 10 + BLUE_ORCHID: 10 + BLUE_STAINED_GLASS: 10 + BLUE_TERRACOTTA: 10 + BLUE_WOOL: 10 + BONE_BLOCK: 10 + BOOKSHELF: 100 + BRAIN_CORAL_BLOCK: 10 + BRICKS: 10 + BROWN_CONCRETE: 10 + BROWN_GLAZED_TERRACOTTA: 10 + BROWN_MUSHROOM_BLOCK: 10 BROWN_MUSHROOM: 8 - BROWN_STAINED_GLASS: 1 - BROWN_TERRACOTTA: 1 - BROWN_WOOL: 1 - BUBBLE_CORAL_BLOCK: 1 + BROWN_STAINED_GLASS: 10 + BROWN_TERRACOTTA: 10 + BROWN_WOOL: 10 + BUBBLE_CORAL_BLOCK: 10 CACTUS: 6 - CALCITE: 1 - CHEST: 5 - CHISELED_DEEPSLATE: 1 - CHISELED_QUARTZ_BLOCK: 1 - CHISELED_RED_SANDSTONE: 1 - CHISELED_SANDSTONE: 1 - CHISELED_STONE_BRICKS: 1 + CALCITE: 10 + CHEST: 105 + CHISELED_DEEPSLATE: 10 + CHISELED_QUARTZ_BLOCK: 10 + CHISELED_RED_SANDSTONE: 10 + CHISELED_SANDSTONE: 10 + CHISELED_STONE_BRICKS: 10 CLAY: 5 - COAL_BLOCK: 1 + COAL_BLOCK: 10 COAL_ORE: 70 - COARSE_DIRT: 17 - COBBLED_DEEPSLATE: 1 - COBBLESTONE: 1 + COARSE_DIRT: 107 + COBBLESTONE: 50 COBWEB: 7 - COMPOSTER: 1 - COPPER_BLOCK: 1 - COPPER_ORE: 1 - CRACKED_DEEPSLATE_BRICKS: 1 - CRACKED_STONE_BRICKS: 1 - CUT_COPPER: 1 - CUT_RED_SANDSTONE: 1 - CUT_SANDSTONE: 1 - CYAN_CONCRETE: 1 - CYAN_GLAZED_TERRACOTTA: 1 - CYAN_STAINED_GLASS: 1 - CYAN_TERRACOTTA: 1 - CYAN_WOOL: 1 - DANDELION: 16 + COMPOSTER: 10 + COPPER_BLOCK: 5 + COPPER_ORE: 10 + CRACKED_DEEPSLATE_BRICKS: 10 + CRACKED_STONE_BRICKS: 10 + CUT_COPPER: 10 + CUT_RED_SANDSTONE: 10 + CUT_SANDSTONE: 10 + CYAN_CONCRETE: 10 + CYAN_GLAZED_TERRACOTTA: 10 + CYAN_STAINED_GLASS: 10 + CYAN_TERRACOTTA: 10 + CYAN_WOOL: 10 + DANDELION: 106 DARK_OAK_LEAVES: 9 - DARK_OAK_LOG: 10 - DARK_OAK_PLANKS: 1 + DARK_OAK_LOG: 100 + DARK_OAK_PLANKS: 10 DARK_OAK_SAPLING: 3 - DARK_OAK_WOOD: 18 + DARK_OAK_WOOD: 108 DARK_PRISMARINE: 3 - DEAD_BRAIN_CORAL_BLOCK: 1 - DEAD_BUBBLE_CORAL_BLOCK: 1 - DEAD_BUSH: 1 - DEAD_FIRE_CORAL_BLOCK: 1 - DEAD_HORN_CORAL_BLOCK: 1 - DEAD_TUBE_CORAL_BLOCK: 1 - DEEPSLATE_COAL_ORE: 1 - DEEPSLATE_COPPER_ORE: 1 - DEEPSLATE_DIAMOND_ORE: 1 - DEEPSLATE_EMERALD_ORE: 1 - DEEPSLATE_GOLD_ORE: 1 - DEEPSLATE_IRON_ORE: 1 - DEEPSLATE_LAPIS_ORE: 1 - DEEPSLATE_REDSTONE_ORE: 1 - DEEPSLATE: 1 - DIAMOND_ORE: 1 + DEAD_BRAIN_CORAL_BLOCK: 10 + DEAD_BUBBLE_CORAL_BLOCK: 10 + DEAD_BUSH: 10 + DEAD_FIRE_CORAL_BLOCK: 10 + DEAD_HORN_CORAL_BLOCK: 10 + DEAD_TUBE_CORAL_BLOCK: 10 + DIAMOND_ORE: 10 DIORITE: 2 DIRT_PATH: 7 - DIRT: 1 - DRIPSTONE_BLOCK: 1 + DIRT: 10 + DRIPSTONE_BLOCK: 10 EMERALD_ORE: 5 - END_STONE_BRICKS: 1 - EXPOSED_COPPER: 1 - EXPOSED_CUT_COPPER: 1 + END_STONE_BRICKS: 10 + EXPOSED_COPPER: 10 + EXPOSED_CUT_COPPER: 10 FARMLAND: 7 FERN: 4 - FIRE_CORAL_BLOCK: 1 - FROSTED_ICE: 1 - GLASS: 1 + FIRE_CORAL_BLOCK: 10 + FROSTED_ICE: 10 + GLASS: 10 GOLD_ORE: 3 GRANITE: 50 GRASS_BLOCK: 200 - GRASS: 100 GRAVEL: 20 - GRAY_CONCRETE: 1 - GRAY_GLAZED_TERRACOTTA: 1 - GRAY_STAINED_GLASS: 1 - GRAY_TERRACOTTA: 1 - GRAY_WOOL: 1 - GREEN_CONCRETE: 1 - GREEN_GLAZED_TERRACOTTA: 1 - GREEN_STAINED_GLASS: 1 - GREEN_TERRACOTTA: 1 - GREEN_WOOL: 1 - HAY_BLOCK: 1 - HONEY_BLOCK: 1 - HONEYCOMB_BLOCK: 1 - HORN_CORAL_BLOCK: 1 - INFESTED_COBBLESTONE: 1 - IRON_ORE: 10 - JUNGLE_LEAVES: 10 - JUNGLE_LOG: 17 - JUNGLE_PLANKS: 1 - JUNGLE_SAPLING: 19 + GRAY_CONCRETE: 10 + GRAY_GLAZED_TERRACOTTA: 10 + GRAY_STAINED_GLASS: 10 + GRAY_TERRACOTTA: 10 + GRAY_WOOL: 10 + GREEN_CONCRETE: 10 + GREEN_GLAZED_TERRACOTTA: 10 + GREEN_STAINED_GLASS: 10 + GREEN_TERRACOTTA: 10 + GREEN_WOOL: 10 + HAY_BLOCK: 10 + HONEY_BLOCK: 10 + HONEYCOMB_BLOCK: 10 + HORN_CORAL_BLOCK: 10 + INFESTED_COBBLESTONE: 10 + IRON_ORE: 100 + JUNGLE_LEAVES: 100 + JUNGLE_LOG: 107 + JUNGLE_PLANKS: 10 + JUNGLE_SAPLING: 109 JUNGLE_WOOD: 20 LAPIS_ORE: 6 - LARGE_AMETHYST_BUD: 1 + LARGE_AMETHYST_BUD: 10 LARGE_FERN: 8 - LAVA_CAULDRON: 1 + LAVA_CAULDRON: 10 LAVA: 5 - LIGHT_BLUE_CONCRETE: 1 - LIGHT_BLUE_GLAZED_TERRACOTTA: 1 - LIGHT_BLUE_STAINED_GLASS: 1 - LIGHT_BLUE_TERRACOTTA: 1 - LIGHT_BLUE_WOOL: 1 - LIGHT_GRAY_CONCRETE: 1 - LIGHT_GRAY_GLAZED_TERRACOTTA: 1 - LIGHT_GRAY_STAINED_GLASS: 1 - LIGHT_GRAY_TERRACOTTA: 1 - LIGHT_GRAY_WOOL: 1 + LIGHT_BLUE_CONCRETE: 10 + LIGHT_BLUE_GLAZED_TERRACOTTA: 10 + LIGHT_BLUE_STAINED_GLASS: 10 + LIGHT_BLUE_TERRACOTTA: 10 + LIGHT_BLUE_WOOL: 10 + LIGHT_GRAY_CONCRETE: 10 + LIGHT_GRAY_GLAZED_TERRACOTTA: 10 + LIGHT_GRAY_STAINED_GLASS: 10 + LIGHT_GRAY_TERRACOTTA: 10 + LIGHT_GRAY_WOOL: 10 LILAC: 7 - LIME_CONCRETE: 1 - LIME_GLAZED_TERRACOTTA: 1 - LIME_STAINED_GLASS: 1 - LIME_TERRACOTTA: 1 - LIME_WOOL: 1 - LODESTONE: 1 - MAGENTA_CONCRETE: 1 - MAGENTA_GLAZED_TERRACOTTA: 1 - MAGENTA_STAINED_GLASS: 1 - MAGENTA_TERRACOTTA: 1 - MEDIUM_AMETHYST_BUD: 1 - MELON: 15 - MOSS_BLOCK: 1 - MOSSY_COBBLESTONE: 1 - MOSSY_STONE_BRICKS: 1 - MUSHROOM_STEM: 1 + LIME_CONCRETE: 10 + LIME_GLAZED_TERRACOTTA: 10 + LIME_STAINED_GLASS: 10 + LIME_TERRACOTTA: 10 + LIME_WOOL: 10 + LODESTONE: 10 + MAGENTA_CONCRETE: 10 + MAGENTA_GLAZED_TERRACOTTA: 10 + MAGENTA_STAINED_GLASS: 10 + MAGENTA_TERRACOTTA: 10 + MEDIUM_AMETHYST_BUD: 10 + MELON: 105 + MOSS_BLOCK: 10 + MOSSY_COBBLESTONE: 10 + MOSSY_STONE_BRICKS: 10 + MUSHROOM_STEM: 10 MYCELIUM: 2 OAK_LEAVES: 4 - OAK_LOG: 10 - OAK_PLANKS: 1 - OAK_SAPLING: 11 - OAK_WOOD: 19 - OBSIDIAN: 1 - ORANGE_CONCRETE: 1 - ORANGE_GLAZED_TERRACOTTA: 1 - ORANGE_STAINED_GLASS: 1 - ORANGE_TERRACOTTA: 1 - ORANGE_TULIP: 10 - ORANGE_WOOL: 1 + OAK_LOG: 100 + OAK_PLANKS: 10 + OAK_SAPLING: 101 + OAK_WOOD: 109 + OBSIDIAN: 10 + ORANGE_CONCRETE: 10 + ORANGE_GLAZED_TERRACOTTA: 10 + ORANGE_STAINED_GLASS: 10 + ORANGE_TERRACOTTA: 10 + ORANGE_TULIP: 100 + ORANGE_WOOL: 10 OXEYE_DAISY: 6 - OXIDIZED_COPPER: 1 - OXIDIZED_CUT_COPPER: 1 - PACKED_ICE: 1 + OXIDIZED_COPPER: 10 + OXIDIZED_CUT_COPPER: 10 + PACKED_ICE: 10 PEONY: 7 - PETRIFIED_OAK_SLAB: 1 - PINK_CONCRETE: 1 - PINK_GLAZED_TERRACOTTA: 1 - PINK_STAINED_GLASS: 1 - PINK_TERRACOTTA: 1 + PETRIFIED_OAK_SLAB: 10 + PINK_CONCRETE: 10 + PINK_GLAZED_TERRACOTTA: 10 + PINK_STAINED_GLASS: 10 + PINK_TERRACOTTA: 10 PINK_TULIP: 8 - PINK_WOOL: 1 + PINK_WOOL: 10 PODZOL: 4 - POINTED_DRIPSTONE: 1 - POLISHED_ANDESITE: 1 - POLISHED_BASALT: 1 - POLISHED_BLACKSTONE: 1 - POLISHED_DEEPSLATE: 1 - POLISHED_DIORITE: 1 - POLISHED_GRANITE: 1 + POINTED_DRIPSTONE: 10 + POLISHED_ANDESITE: 10 + POLISHED_BASALT: 10 + POLISHED_BLACKSTONE: 10 + POLISHED_DEEPSLATE: 10 + POLISHED_DIORITE: 10 + POLISHED_GRANITE: 10 POPPY: 5 - POWDER_SNOW_CAULDRON: 1 - PRISMARINE_BRICKS: 1 + POWDER_SNOW_CAULDRON: 10 + PRISMARINE_BRICKS: 10 PRISMARINE: 3 PUMPKIN: 9 - PURPLE_CONCRETE: 1 - PURPLE_GLAZED_TERRACOTTA: 1 - PURPLE_TERRACOTTA: 1 - RAW_COPPER_BLOCK: 1 - RAW_GOLD_BLOCK: 1 - RAW_IRON_BLOCK: 1 - RED_CONCRETE: 1 - RED_GLAZED_TERRACOTTA: 1 - RED_MUSHROOM_BLOCK: 1 + PURPLE_CONCRETE: 10 + PURPLE_GLAZED_TERRACOTTA: 10 + PURPLE_TERRACOTTA: 10 + RAW_COPPER_BLOCK: 10 + RAW_GOLD_BLOCK: 10 + RAW_IRON_BLOCK: 10 + RED_CONCRETE: 10 + RED_GLAZED_TERRACOTTA: 10 + RED_MUSHROOM_BLOCK: 10 RED_MUSHROOM: 8 RED_SAND: 20 - RED_SANDSTONE: 19 - RED_STAINED_GLASS: 1 - RED_TERRACOTTA: 1 + RED_SANDSTONE: 109 + RED_STAINED_GLASS: 10 + RED_TERRACOTTA: 10 RED_TULIP: 3 - RED_WOOL: 1 - REDSTONE_BLOCK: 1 - REDSTONE_LAMP: 1 + RED_WOOL: 10 + REDSTONE_BLOCK: 10 + REDSTONE_LAMP: 10 REDSTONE_ORE: 3 - ROOTED_DIRT: 1 + ROOTED_DIRT: 10 ROSE_BUSH: 8 SAND: 50 - SANDSTONE: 120 - SCAFFOLDING: 1 - SCULK_SENSOR: 1 - SEA_LANTERN: 1 - SHROOMLIGHT: 1 - SLIME_BLOCK: 1 - SMALL_AMETHYST_BUD: 1 - SMALL_DRIPLEAF: 1 - SMOOTH_BASALT: 1 - SMOOTH_QUARTZ: 1 - SMOOTH_RED_SANDSTONE: 1 - SMOOTH_SANDSTONE: 1 - SMOOTH_STONE: 1 - SNOW_BLOCK: 1 - SNOW: 1 + SANDSTONE: 1020 + SCAFFOLDING: 10 + SCULK_SENSOR: 10 + SEA_LANTERN: 10 + SHROOMLIGHT: 10 + SLIME_BLOCK: 10 + SMALL_AMETHYST_BUD: 10 + SMALL_DRIPLEAF: 10 + SMOOTH_BASALT: 10 + SMOOTH_QUARTZ: 10 + SMOOTH_RED_SANDSTONE: 10 + SMOOTH_SANDSTONE: 10 + SMOOTH_STONE: 10 + SNOW_BLOCK: 10 + SNOW: 10 SPAWNER: 5 - SPONGE: 1 + SPONGE: 10 SPRUCE_LEAVES: 9 SPRUCE_LOG: 3 - SPRUCE_PLANKS: 1 + SPRUCE_PLANKS: 10 SPRUCE_SAPLING: 2 SPRUCE_WOOD: 9 - STICKY_PISTON: 1 - STONE_BRICKS: 1 - STONE: 180 - STRIPPED_ACACIA_LOG: 10 - STRIPPED_ACACIA_WOOD: 10 - STRIPPED_BIRCH_LOG: 10 - STRIPPED_BIRCH_WOOD: 10 - STRIPPED_DARK_OAK_LOG: 10 - STRIPPED_DARK_OAK_WOOD: 10 - STRIPPED_JUNGLE_LOG: 10 - STRIPPED_JUNGLE_WOOD: 10 - STRIPPED_OAK_LOG: 10 - STRIPPED_OAK_WOOD: 10 - STRIPPED_SPRUCE_LOG: 10 - STRIPPED_SPRUCE_WOOD: 10 + STICKY_PISTON: 10 + STONE_BRICKS: 10 + STONE: 1080 + STRIPPED_ACACIA_LOG: 100 + STRIPPED_ACACIA_WOOD: 100 + STRIPPED_BIRCH_LOG: 100 + STRIPPED_BIRCH_WOOD: 100 + STRIPPED_DARK_OAK_LOG: 100 + STRIPPED_DARK_OAK_WOOD: 100 + STRIPPED_JUNGLE_LOG: 100 + STRIPPED_JUNGLE_WOOD: 100 + STRIPPED_OAK_LOG: 100 + STRIPPED_OAK_WOOD: 100 + STRIPPED_SPRUCE_LOG: 100 + STRIPPED_SPRUCE_WOOD: 100 SUGAR_CANE: 4 SUNFLOWER: 3 - TALL_GRASS: 13 - TARGET: 1 - TERRACOTTA: 1 - TINTED_GLASS: 1 - TNT: 1 - TUBE_CORAL_BLOCK: 1 - WATER_CAULDRON: 1 - WAXED_COPPER_BLOCK: 1 - WAXED_CUT_COPPER: 1 - WAXED_EXPOSED_COPPER: 1 - WAXED_EXPOSED_CUT_COPPER: 1 - WAXED_OXIDIZED_COPPER: 1 - WAXED_OXIDIZED_CUT_COPPER: 1 - WAXED_WEATHERED_COPPER: 1 - WAXED_WEATHERED_CUT_COPPER: 1 - WEATHERED_COPPER: 1 - WEATHERED_CUT_COPPER: 1 - WET_SPONGE: 1 + TALL_GRASS: 103 + TARGET: 10 + TERRACOTTA: 10 + TINTED_GLASS: 10 + TNT: 10 + TUBE_CORAL_BLOCK: 10 + WATER_CAULDRON: 10 + WAXED_COPPER_BLOCK: 10 + WAXED_CUT_COPPER: 10 + WAXED_EXPOSED_COPPER: 10 + WAXED_EXPOSED_CUT_COPPER: 10 + WAXED_OXIDIZED_COPPER: 10 + WAXED_OXIDIZED_CUT_COPPER: 10 + WAXED_WEATHERED_COPPER: 10 + WAXED_WEATHERED_CUT_COPPER: 10 + WEATHERED_COPPER: 10 + WEATHERED_CUT_COPPER: 10 + WET_SPONGE: 10 WHEAT: 4 - WHITE_CONCRETE: 1 - WHITE_GLAZED_TERRACOTTA: 1 - WHITE_STAINED_GLASS: 1 - WHITE_TERRACOTTA: 1 + WHITE_CONCRETE: 10 + WHITE_GLAZED_TERRACOTTA: 10 + WHITE_STAINED_GLASS: 10 + WHITE_TERRACOTTA: 10 WHITE_TULIP: 2 - WHITE_WOOL: 1 - YELLOW_CONCRETE: 1 - YELLOW_GLAZED_TERRACOTTA: 1 - YELLOW_STAINED_GLASS: 1 - YELLOW_TERRACOTTA: 1 - YELLOW_WOOL: 1 + WHITE_WOOL: 10 + YELLOW_CONCRETE: 10 + YELLOW_GLAZED_TERRACOTTA: 10 + YELLOW_STAINED_GLASS: 10 + YELLOW_TERRACOTTA: 10 + YELLOW_WOOL: 10 nether: # Generate SkyGrid Nether - if this is false, the nether world will not be made generate: true # Nether block types - # Beware of glowstone and lava - the lighting calcs will lag the + # Beware with glowstone and lava - the lighting calcs will lag the # server badly if there are too many blocks. blocks: - POLISHED_BLACKSTONE_BRICKS: 12 - LAVA: 1 - OBSIDIAN: 10 - NETHER_QUARTZ_ORE: 15 - NETHERITE_BLOCK: 10 - MAGMA_BLOCK: 1 - GRAVEL: 10 - CRACKED_POLISHED_BLACKSTONE_BRICKS: 12 + ANCIENT_DEBRIS: 100 BASALT: 20 - GILDED_BLACKSTONE: 10 - WARPED_WART_BLOCK: 1 - CRACKED_NETHER_BRICKS: 10 + BLACKSTONE: 100 + BONE_BLOCK: 100 + CHEST: 105 + CHISELED_NETHER_BRICKS: 102 + CHISELED_POLISHED_BLACKSTONE: 102 COBWEB: 7 - WARPED_NYLIUM: 1 + CRACKED_NETHER_BRICKS: 100 + CRACKED_POLISHED_BLACKSTONE_BRICKS: 102 + CRIMSON_PLANKS: 1000 + CRYING_OBSIDIAN: 100 + GILDED_BLACKSTONE: 100 GLOWSTONE: 2 - CHISELED_POLISHED_BLACKSTONE: 12 - ANCIENT_DEBRIS: 10 - RED_NETHER_BRICKS: 12 - NETHER_BRICKS: 12 - SOUL_SAND: 90 - BLACKSTONE: 10 - POLISHED_BLACKSTONE_BRICK_STAIRS: 12 - NETHER_WART_BLOCK: 12 - NETHER_GOLD_ORE: 12 - BONE_BLOCK: 10 - SPAWNER: 2 - WARPED_ROOTS: 1 - WARPED_FUNGUS: 1 - CHEST: 15 - NETHER_WART: 19 + GRAVEL: 100 + LAVA: 10 + MAGMA_BLOCK: 10 + NETHER_BRICKS: 102 + NETHER_GOLD_ORE: 102 + NETHER_QUARTZ_ORE: 105 + NETHER_WART_BLOCK: 102 + NETHER_WART: 109 + NETHERITE_BLOCK: 100 NETHERRACK: 200 - WARPED_PLANKS: 1 - WARPED_HYPHAE: 1 - RESPAWN_ANCHOR: 1 - CHISELED_NETHER_BRICKS: 12 + OBSIDIAN: 100 + POLISHED_BLACKSTONE_BRICK_STAIRS: 102 + POLISHED_BLACKSTONE_BRICKS: 102 + RED_NETHER_BRICKS: 102 + RESPAWN_ANCHOR: 10 + SOUL_SAND: 90 SOUL_SOIL: 80 - CRYING_OBSIDIAN: 10 - STRIPPED_CRIMSON_HYPHAE: 100 - STRIPPED_CRIMSON_STEM: 100 - STRIPPED_WARPED_HYPHAE: 100 - STRIPPED_WARPED_STEM: 100 - CRIMSON_PLANKS: 100 - + SPAWNER: 2 + STRIPPED_CRIMSON_HYPHAE: 1000 + STRIPPED_CRIMSON_STEM: 1000 + STRIPPED_WARPED_HYPHAE: 1000 + STRIPPED_WARPED_STEM: 1000 + WARPED_FUNGUS: 10 + WARPED_HYPHAE: 10 + WARPED_NYLIUM: 10 + WARPED_PLANKS: 10 + WARPED_ROOTS: 10 + WARPED_WART_BLOCK: 10 # 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. @@ -1016,21 +832,21 @@ world: generate: true # The End blocks. blocks: - CHEST: 1 - END_ROD: 1 + AIR: 200 + CHEST: 10 CHORUS_PLANT: 2 + END_ROD: 10 + END_STONE: 200 + GRAVEL: 100 OBSIDIAN: 5 PURPLE_STAINED_GLASS: 50 - AIR: 200 - END_STONE: 200 - GRAVEL: 10 - SPAWNER: 1 PURPUR_BLOCK: 50 + SPAWNER: 10 # This option indicates if obsidian platform in the end should be generated # when player enters the end world. # Added since 1.16. create-obsidian-platform: true - # The probability of a frame being created in a chunk. Frames are always at y=0. + # The probability of a frame being created in a chunk. end-frame-probability: 0.1 # Friendly name for this world. Used in admin commands. Must be a single word friendly-name: SkyGrid @@ -1048,9 +864,10 @@ world: # SkyGrid height # This is the height of the top sky grid layer. 255 max. skygrid-height: 128 - # Spawn height - # Height where players will spawn. Can be less than the grid height - spawn-height: 128 + # End Frame height + # This is the height where end frames will generate. + # Added since 1.20.0. + end-frame-height: 3 # Space around new players in blocks (will be rounded up to nearest 16 blocks) space-around-players: 1000 # Default protection radius around player's home (so total size is 2x this) @@ -1064,192 +881,225 @@ world: ban-limit: -1 # Mob white list - these mobs will NOT be removed when logging in or doing /island remove-mobs-whitelist: - - WITHER - ZOMBIE_VILLAGER - GUARDIAN - ZOMBIFIED_PIGLIN + - WITHER # World flags. These are boolean settings for various flags for this world flags: - HURT_ANIMALS: true - DRAGON_EGG: true - ISLAND_RESPAWN: true - REDSTONE: true - VISITOR_KEEP_INVENTORY: false - BUCKET: true - LOCK: true - PETS_STAY_AT_HOME: true - ENDER_PEARL: true - DOOR: true - NATURAL_SPAWNING_OUTSIDE_RANGE: true - BREAK_HOPPERS: true - FURNACE: true - LIQUIDS_FLOWING_OUT: false + ALLAY: true ANVIL: true - MINECART: true - FISH_SCOOPING: true - TRAPPED_CHEST: true - END_PORTAL: true - BREEDING: true - HURT_VILLAGERS: true - TREES_GROWING_OUTSIDE_RANGE: false - FROST_WALKER: true - TURTLE_EGGS: true - COLLECT_LAVA: true + ARMOR_STAND: true + AXOLOTL_SCOOPING: true + BARREL: true + BEACON: true + BED: true + BOAT: true + BOOKSHELF: true + BREAK_BLOCKS: true + BREAK_HOPPERS: true BREAK_SPAWNERS: true - LEVER: true - ELYTRA: true + BREEDING: true + BREWING: true + BUCKET: true + BUTTON: true CAKE: true - RIDING: true - HURT_MONSTERS: true - ARMOR_STAND: true - NAME_TAG: true - CLEAN_SUPER_FLAT: false - TRADING: true - EGGS: true - ITEM_DROP: true + CARTOGRAPHY: true + CHANGE_SETTINGS: true CHEST: true - NOTE_BLOCK: true - ENTER_EXIT_MESSAGES: true - FLINT_AND_STEEL: true - NETHER_PORTAL: true - REMOVE_END_EXIT_ISLAND: true - LECTERN: true - SHULKER_BOX: true - OFFLINE_GROWTH: true - CROP_TRAMPLE: true - ITEM_PICKUP: true - BREWING: true - DROPPER: true - OBSIDIAN_SCOOPING: true - TNT_PRIMING: true + CHORUS_FRUIT: true + CLEAN_SUPER_FLAT: false + COLLECT_LAVA: true + COLLECT_POWDERED_SNOW: true COLLECT_WATER: true - BUTTON: true - COMPOSTER: true - FIRE_EXTINGUISH: true COMMAND_RANKS: true - BEACON: true - TRAPDOOR: true - PRESSURE_PLATE: true - EXPERIENCE_BOTTLE_THROWING: true - HIVE: true - DYE: true - PLACE_BLOCKS: true - ITEM_FRAME: true + COMPOSTER: true + CONTAINER: true CRAFTING: true - REMOVE_MOBS: true + CROP_PLANTING: true + CROP_TRAMPLE: true + DISPENSER: true + DOOR: true + DRAGON_EGG: true + DROPPER: true + DYE: true + EGGS: true + ELYTRA: true ENCHANTING: true - SHEARING: true + END_PORTAL: true + ENDER_PEARL: true + ENTER_EXIT_MESSAGES: true + EXPERIENCE_BOTTLE_THROWING: true + EXPERIENCE_PICKUP: true + FIRE_EXTINGUISH: true + FISH_SCOOPING: true + FLINT_AND_STEEL: true FLOWER_POT: true - BOAT: true - BED: true - SPAWN_EGGS: true - MILKING: true - DISPENSER: true + FROST_WALKER: true + FURNACE: true GATE: true - EXPERIENCE_PICKUP: true - PREVENT_TELEPORT_WHEN_FALLING: false + GRINDSTONE: true + HARVEST: true + HIVE: true HOPPER: true + HURT_ANIMALS: true + HURT_MONSTERS: true + HURT_VILLAGERS: true + ISLAND_RESPAWN: true + ITEM_DROP: true + ITEM_FRAME: true + ITEM_PICKUP: true + JUKEBOX: true LEASH: true - BREAK_BLOCKS: true + LECTERN: true + LEVER: true + LIQUIDS_FLOWING_OUT: false + LOCK: true + LOOM: true + MILKING: true + MINECART: true MOUNT_INVENTORY: true + NAME_TAG: true + NATURAL_SPAWNING_OUTSIDE_RANGE: true + NETHER_PORTAL: true + NOTE_BLOCK: true + OBSIDIAN_SCOOPING: true + OFFLINE_GROWTH: true OFFLINE_REDSTONE: true - CHORUS_FRUIT: true - CONTAINER: true - JUKEBOX: true + PETS_STAY_AT_HOME: true + PLACE_BLOCKS: true POTION_THROWING: true - BARREL: true + PRESSURE_PLATE: true + PREVENT_TELEPORT_WHEN_FALLING: false + REDSTONE: true + REMOVE_END_EXIT_ISLAND: true + REMOVE_MOBS: true + RIDING: true + SCULK_SENSOR: true + SCULK_SHRIEKER: true + SHEARING: true + SHULKER_BOX: true + SIGN_EDITING: true + SMITHING: true + SPAWN_EGGS: true + STONECUTTING: true + TNT_PRIMING: true + TRADING: true + TRAPDOOR: true + TRAPPED_CHEST: true + TREES_GROWING_OUTSIDE_RANGE: false + TURTLE_EGGS: true + VISITOR_KEEP_INVENTORY: false # These are the default protection settings protected areas. # The value is the minimum island rank required to do the action # Ranks are: Visitor = 0, Member = 900, Owner = 1000 default-protection-flags: - HURT_ANIMALS: 500 - DRAGON_EGG: 500 - REDSTONE: 500 - BUCKET: 500 - LOCK: 0 - ENDER_PEARL: 500 - DOOR: 500 - BREAK_HOPPERS: 500 - FURNACE: 500 - MINECART: 500 + ALLAY: 500 ANVIL: 500 - FISH_SCOOPING: 500 - TRAPPED_CHEST: 500 - END_PORTAL: 500 - BREEDING: 500 - HURT_VILLAGERS: 500 - FROST_WALKER: 500 - TURTLE_EGGS: 500 - COLLECT_LAVA: 500 + ARMOR_STAND: 500 + AXOLOTL_SCOOPING: 500 + BARREL: 500 + BEACON: 500 + BED: 500 + BOAT: 500 + BOOKSHELF: 500 + BREAK_BLOCKS: 500 + BREAK_HOPPERS: 500 BREAK_SPAWNERS: 500 - LEVER: 500 - ELYTRA: 0 - RIDING: 500 + BREEDING: 500 + BREWING: 500 + BUCKET: 500 + BUTTON: 500 CAKE: 500 - HURT_MONSTERS: 500 - NAME_TAG: 500 - ARMOR_STAND: 500 - TRADING: 500 - EGGS: 500 - ITEM_DROP: 500 + CARTOGRAPHY: 500 + CHANGE_SETTINGS: 10000 CHEST: 500 - NOTE_BLOCK: 500 - FLINT_AND_STEEL: 500 - NETHER_PORTAL: 500 - LECTERN: 500 - SHULKER_BOX: 500 - ITEM_PICKUP: 500 - CROP_TRAMPLE: 500 - DROPPER: 500 - BREWING: 500 - TNT_PRIMING: 500 + CHORUS_FRUIT: 500 + COLLECT_LAVA: 500 + COLLECT_POWDERED_SNOW: 500 COLLECT_WATER: 500 - COMPOSTER: 500 - BUTTON: 500 - FIRE_EXTINGUISH: 500 COMMAND_RANKS: 500 - BEACON: 500 - TRAPDOOR: 500 - EXPERIENCE_BOTTLE_THROWING: 500 - PRESSURE_PLATE: 500 - DYE: 500 - HIVE: 500 - PLACE_BLOCKS: 500 - ITEM_FRAME: 500 + COMPOSTER: 500 + CONTAINER: 500 CRAFTING: 500 + CROP_PLANTING: 500 + CROP_TRAMPLE: 500 + DISPENSER: 500 + DOOR: 500 + DRAGON_EGG: 500 + DROPPER: 500 + DYE: 500 + EGGS: 500 + ELYTRA: 0 ENCHANTING: 500 - SHEARING: 500 + END_PORTAL: 500 + ENDER_PEARL: 500 + EXPERIENCE_BOTTLE_THROWING: 500 + EXPERIENCE_PICKUP: 500 + FIRE_EXTINGUISH: 500 + FISH_SCOOPING: 500 + FLINT_AND_STEEL: 500 FLOWER_POT: 500 - BOAT: 500 - SPAWN_EGGS: 500 - BED: 500 - MILKING: 500 - DISPENSER: 500 + FROST_WALKER: 500 + FURNACE: 500 GATE: 500 - EXPERIENCE_PICKUP: 500 + GRINDSTONE: 500 + HARVEST: 500 + HIVE: 500 HOPPER: 500 + HURT_ANIMALS: 500 + HURT_MONSTERS: 500 + HURT_VILLAGERS: 500 + ITEM_DROP: 500 + ITEM_FRAME: 500 + ITEM_PICKUP: 500 + JUKEBOX: 500 LEASH: 500 - BREAK_BLOCKS: 500 + LECTERN: 500 + LEVER: 500 + LOCK: 0 + LOOM: 500 + MILKING: 500 + MINECART: 500 MOUNT_INVENTORY: 500 - CHORUS_FRUIT: 500 - CONTAINER: 500 - BARREL: 500 + NAME_TAG: 500 + NETHER_PORTAL: 500 + NOTE_BLOCK: 500 + PLACE_BLOCKS: 500 POTION_THROWING: 500 - JUKEBOX: 500 + PRESSURE_PLATE: 500 + REDSTONE: 500 + RIDING: 500 + SCULK_SENSOR: 500 + SCULK_SHRIEKER: 500 + SHEARING: 500 + SHULKER_BOX: 500 + SIGN_EDITING: 500 + SMITHING: 500 + SPAWN_EGGS: 500 + STONECUTTING: 500 + TNT_PRIMING: 500 + TRADING: 500 + TRAPDOOR: 500 + TRAPPED_CHEST: 500 + TURTLE_EGGS: 500 # These are the default settings for new protected areas default-settings: - PVP_END: false - PVP_NETHER: false - LEAF_DECAY: true - MONSTER_SPAWNERS_SPAWN: true - TNT_DAMAGE: true ANIMAL_NATURAL_SPAWN: true - MONSTER_NATURAL_SPAWN: true - FIRE_IGNITE: true - FIRE_SPREAD: true ANIMAL_SPAWNERS_SPAWN: true + BLOCK_EXPLODE_DAMAGE: true + ENDERMAN_TELEPORT: true FIRE_BURNING: true + FIRE_IGNITE: true + FIRE_SPREAD: true + LEAF_DECAY: true + MONSTER_NATURAL_SPAWN: true + MONSTER_SPAWNERS_SPAWN: true + PVP_END: false + PVP_NETHER: false PVP_OVERWORLD: false + SHULKER_TELEPORT: true + TNT_DAMAGE: true # These settings/flags are hidden from users # Ops can toggle hiding in-game using SHIFT-LEFT-CLICK on flags in settings hidden-flags: [] @@ -1264,6 +1114,19 @@ area: # Default max team size # Permission size cannot be less than the default below. max-team-size: 4 + # Default maximum number of coop rank members per area + # Players can have the skygrid.coop.maxsize. permission to be bigger but + # 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 area + # Players can have the skygrid.trust.maxsize. permission to be bigger but + # 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 + # Accessed via /sg sethome or /sg go + max-homes: 5 reset: # How many resets a player is allowed (override with /sgadmin clearresets ) # Value of -1 means unlimited, 0 means hardcore - no resets. @@ -1324,7 +1187,7 @@ area: # Warning: # * If you are running multiple gamemodes on your server, and all of them have # this feature enabled, an area in all the gamemodes will be created simultaneously. - # However, it is impossible to know on which area the player will be teleported afterwards. + # However, it is impossible to know on which area the player will be teleported to afterwards. # * Area creation can be resource-intensive, please consider the options below to help mitigate # the potential issues, especially if you expect a lot of players to connect to your server # in a limited period of time. @@ -1403,23 +1266,12 @@ area: team-join-reset: true # Reset player death count when they start reset reset-on-new-island: true -island: - # Default maximum number of coop rank members per area - # Players can have the skygrid.coop.maxsize. permission to be bigger but - # 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 area - # Players can have the skygrid.trust.maxsize. permission to be bigger but - # permission size cannot be less than the default below. - # Added since 1.13.0. - max-trusted-size: 4 protection: # Geo restrict mobs. # Mobs that exit the protected space where they were spawned will be removed. geo-limit-settings: [] - # AcidIsland blocked mobs. - # List of mobs that should not spawn in AcidIsland. + # SkyGrid blocked mobs. + # List of mobs that should not spawn in SkyGrid. block-mobs: [] # Invincible visitors. List of damages that will not affect visitors. # Make list blank if visitors should receive all damages diff --git a/src/test/java/world/bentobox/skygrid/SettingsTest.java b/src/test/java/world/bentobox/skygrid/SettingsTest.java new file mode 100644 index 0000000..9a1a26f --- /dev/null +++ b/src/test/java/world/bentobox/skygrid/SettingsTest.java @@ -0,0 +1,1450 @@ +package world.bentobox.skygrid; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import java.util.Collections; +import java.util.List; +import java.util.Map; + +import org.bukkit.Difficulty; +import org.bukkit.GameMode; +import org.bukkit.Material; +import org.bukkit.entity.EntityType; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.powermock.modules.junit4.PowerMockRunner; + + +/** + * @author tastybento + * + */ +@RunWith(PowerMockRunner.class) +public class SettingsTest { + + private Settings s; + + @Before + public void setUp() { + s = new Settings(); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#getBlocks()}. + */ + @Test + public void testGetBlocks() { + assertTrue(s.getBlocks().isEmpty()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#setBlocks(java.util.Map)}. + */ + @Test + public void testSetBlocks() { + assertTrue(s.getBlocks().isEmpty()); + s.setBlocks(Map.of(Material.STONE, 5)); + assertFalse(s.getBlocks().isEmpty()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#getNetherBlocks()}. + */ + @Test + public void testGetNetherBlocks() { + assertTrue(s.getNetherBlocks().isEmpty()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#setNetherBlocks(java.util.Map)}. + */ + @Test + public void testSetNetherBlocks() { + assertTrue(s.getNetherBlocks().isEmpty()); + s.setNetherBlocks(Map.of(Material.STONE, 5)); + assertFalse(s.getNetherBlocks().isEmpty()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#getEndBlocks()}. + */ + @Test + public void testGetEndBlocks() { + assertTrue(s.getEndBlocks().isEmpty()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#setEndBlocks(java.util.Map)}. + */ + @Test + public void testSetEndBlocks() { + assertTrue(s.getEndBlocks().isEmpty()); + s.setEndBlocks(Map.of(Material.STONE, 5)); + assertFalse(s.getEndBlocks().isEmpty()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#getEndFrameProb()}. + */ + @Test + public void testGetEndFrameProb() { + assertEquals(0.1D, s.getEndFrameProb(), 0D); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#setEndFrameProb(double)}. + */ + @Test + public void testSetEndFrameProb() { + assertEquals(0.1D, s.getEndFrameProb(), 0D); + s.setEndFrameProb(20D); + assertEquals(20D, s.getEndFrameProb(), 0D); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#getChestFill()}. + */ + @Test + public void testGetChestFill() { + assertEquals(5, s.getChestFill()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#setChestFill(int)}. + */ + @Test + public void testSetChestFill() { + s.setChestFill(20); + assertEquals(20, s.getChestFill()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#getChestFillNether()}. + */ + @Test + public void testGetChestFillNether() { + assertEquals(5, s.getChestFillNether()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#setChestFillNether(int)}. + */ + @Test + public void testSetChestFillNether() { + s.setChestFillNether(20); + assertEquals(20, s.getChestFillNether()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#getChestFillEnd()}. + */ + @Test + public void testGetChestFillEnd() { + assertEquals(5, s.getChestFillEnd()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#setChestFillEnd(int)}. + */ + @Test + public void testSetChestFillEnd() { + s.setChestFillEnd(20); + assertEquals(20, s.getChestFillEnd()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#getChestItemsOverworld()}. + */ + @Test + public void testGetChestItemsOverworld() { + assertTrue(s.getChestItemsOverworld().isEmpty()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#setChestItemsOverworld(java.util.List)}. + */ + @Test + public void testSetChestItemsOverworld() { + assertTrue(s.getChestItemsOverworld().isEmpty()); + s.setChestItemsOverworld(Map.of(Material.ACACIA_BOAT, 1)); + assertFalse(s.getChestItemsOverworld().isEmpty()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#getChestItemsNether()}. + */ + @Test + public void testGetChestItemsNether() { + assertTrue(s.getChestItemsNether().isEmpty()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#setChestItemsNether(java.util.List)}. + */ + @Test + public void testSetChestItemsNether() { + assertTrue(s.getChestItemsNether().isEmpty()); + s.setChestItemsNether(Map.of(Material.ACACIA_BOAT, 1)); + assertFalse(s.getChestItemsNether().isEmpty()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#getChestItemsEnd()}. + */ + @Test + public void testGetChestItemsEnd() { + assertTrue(s.getChestItemsEnd().isEmpty()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#setChestItemsEnd(java.util.List)}. + */ + @Test + public void testSetChestItemsEnd() { + assertTrue(s.getChestItemsEnd().isEmpty()); + s.setChestItemsEnd(Map.of(Material.ACACIA_BOAT, 1)); + assertFalse(s.getChestItemsEnd().isEmpty()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#isCheckForBlocks()}. + */ + @Test + public void testIsCheckForBlocks() { + assertFalse(s.isCheckForBlocks()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#getFriendlyName()}. + */ + @Test + public void testGetFriendlyName() { + assertEquals("SkyGrid", s.getFriendlyName()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#getWorldName()}. + */ + @Test + public void testGetWorldName() { + assertEquals("skygrid-world", s.getWorldName()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#getDifficulty()}. + */ + @Test + public void testGetDifficulty() { + assertEquals(Difficulty.NORMAL, s.getDifficulty()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#getIslandDistance()}. + */ + @Test + public void testGetIslandDistance() { + assertEquals(1000, s.getIslandDistance()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#getIslandProtectionRange()}. + */ + @Test + public void testGetIslandProtectionRange() { + assertEquals(50, s.getIslandProtectionRange()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#getIslandStartX()}. + */ + @Test + public void testGetIslandStartX() { + assertEquals(0, s.getIslandStartX()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#getIslandStartZ()}. + */ + @Test + public void testGetIslandStartZ() { + assertEquals(0, s.getIslandStartZ()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#getIslandXOffset()}. + */ + @Test + public void testGetIslandXOffset() { + assertEquals(0, s.getIslandXOffset()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#getIslandZOffset()}. + */ + @Test + public void testGetIslandZOffset() { + assertEquals(0, s.getIslandZOffset()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#getIslandHeight()}. + */ + @Test + public void testGetIslandHeight() { + assertEquals(128, s.getIslandHeight()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#isUseOwnGenerator()}. + */ + @Test + public void testIsUseOwnGenerator() { + assertFalse(s.isUseOwnGenerator()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#getSeaHeight()}. + */ + @Test + public void testGetSeaHeight() { + assertEquals(0, s.getSeaHeight()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#getMaxIslands()}. + */ + @Test + public void testGetMaxIslands() { + assertEquals(-1, s.getMaxIslands()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#getDefaultGameMode()}. + */ + @Test + public void testGetDefaultGameMode() { + assertEquals(GameMode.SURVIVAL, s.getDefaultGameMode()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#isNetherGenerate()}. + */ + @Test + public void testIsNetherGenerate() { + assertTrue(s.isNetherGenerate()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#isNetherIslands()}. + */ + @Test + public void testIsNetherIslands() { + assertTrue(s.isNetherIslands()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#getNetherSpawnRadius()}. + */ + @Test + public void testGetNetherSpawnRadius() { + assertEquals(0, s.getNetherSpawnRadius()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#isEndGenerate()}. + */ + @Test + public void testIsEndGenerate() { + assertTrue(s.isEndGenerate()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#isEndIslands()}. + */ + @Test + public void testIsEndIslands() { + assertTrue(s.isEndIslands()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#isDragonSpawn()}. + */ + @Test + public void testIsDragonSpawn() { + assertFalse(s.isDragonSpawn()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#getRemoveMobsWhitelist()}. + */ + @Test + public void testGetRemoveMobsWhitelist() { + assertTrue(s.getRemoveMobsWhitelist().isEmpty()); + + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#getWorldFlags()}. + */ + @Test + public void testGetWorldFlags() { + assertTrue(s.getWorldFlags().isEmpty()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#getDefaultIslandFlagNames()}. + */ + @Test + public void testGetDefaultIslandFlagNames() { + assertTrue(s.getDefaultIslandFlagNames().isEmpty()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#getDefaultIslandSettingNames()}. + */ + @Test + public void testGetDefaultIslandSettingNames() { + assertTrue(s.getDefaultIslandSettingNames().isEmpty()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#getDefaultIslandFlags()}. + */ + @SuppressWarnings("deprecation") + @Test + public void testGetDefaultIslandFlags() { + assertTrue(s.getDefaultIslandFlags().isEmpty()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#getDefaultIslandSettings()}. + */ + @SuppressWarnings("deprecation") + @Test + public void testGetDefaultIslandSettings() { + assertTrue(s.getDefaultIslandSettings().isEmpty()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#getHiddenFlags()}. + */ + @Test + public void testGetHiddenFlags() { + assertTrue(s.getHiddenFlags().isEmpty()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#getVisitorBannedCommands()}. + */ + @Test + public void testGetVisitorBannedCommands() { + assertTrue(s.getVisitorBannedCommands().isEmpty()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#getFallingBannedCommands()}. + */ + @Test + public void testGetFallingBannedCommands() { + assertTrue(s.getFallingBannedCommands().isEmpty()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#getMaxTeamSize()}. + */ + @Test + public void testGetMaxTeamSize() { + assertEquals(4, s.getMaxTeamSize()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#getMaxHomes()}. + */ + @Test + public void testGetMaxHomes() { + assertEquals(5, s.getMaxHomes()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#getResetLimit()}. + */ + @Test + public void testGetResetLimit() { + assertEquals(-1, s.getResetLimit()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#isLeaversLoseReset()}. + */ + @Test + public void testIsLeaversLoseReset() { + assertFalse(s.isLeaversLoseReset()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#isKickedKeepInventory()}. + */ + @Test + public void testIsKickedKeepInventory() { + assertFalse(s.isKickedKeepInventory()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#isCreateIslandOnFirstLoginEnabled()}. + */ + @Test + public void testIsCreateIslandOnFirstLoginEnabled() { + assertFalse(s.isCreateIslandOnFirstLoginEnabled()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#getCreateIslandOnFirstLoginDelay()}. + */ + @Test + public void testGetCreateIslandOnFirstLoginDelay() { + assertEquals(5, s.getCreateIslandOnFirstLoginDelay()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#isCreateIslandOnFirstLoginAbortOnLogout()}. + */ + @Test + public void testIsCreateIslandOnFirstLoginAbortOnLogout() { + assertTrue(s.isCreateIslandOnFirstLoginAbortOnLogout()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#isOnJoinResetMoney()}. + */ + @Test + public void testIsOnJoinResetMoney() { + assertFalse(s.isOnJoinResetMoney()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#isOnJoinResetInventory()}. + */ + @Test + public void testIsOnJoinResetInventory() { + assertFalse(s.isOnJoinResetInventory()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#isOnJoinResetEnderChest()}. + */ + @Test + public void testIsOnJoinResetEnderChest() { + assertFalse(s.isOnJoinResetEnderChest()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#isOnLeaveResetMoney()}. + */ + @Test + public void testIsOnLeaveResetMoney() { + assertFalse(s.isOnLeaveResetMoney()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#isOnLeaveResetInventory()}. + */ + @Test + public void testIsOnLeaveResetInventory() { + assertFalse(s.isOnLeaveResetInventory()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#isOnLeaveResetEnderChest()}. + */ + @Test + public void testIsOnLeaveResetEnderChest() { + assertFalse(s.isOnLeaveResetEnderChest()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#isDeathsCounted()}. + */ + @Test + public void testIsDeathsCounted() { + assertTrue(s.isDeathsCounted()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#isAllowSetHomeInNether()}. + */ + @Test + public void testIsAllowSetHomeInNether() { + assertTrue(s.isAllowSetHomeInNether()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#isAllowSetHomeInTheEnd()}. + */ + @Test + public void testIsAllowSetHomeInTheEnd() { + assertTrue(s.isAllowSetHomeInTheEnd()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#isRequireConfirmationToSetHomeInNether()}. + */ + @Test + public void testIsRequireConfirmationToSetHomeInNether() { + assertTrue(s.isRequireConfirmationToSetHomeInNether()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#isRequireConfirmationToSetHomeInTheEnd()}. + */ + @Test + public void testIsRequireConfirmationToSetHomeInTheEnd() { + assertTrue(s.isRequireConfirmationToSetHomeInTheEnd()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#getDeathsMax()}. + */ + @Test + public void testGetDeathsMax() { + assertEquals(10, s.getDeathsMax()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#isTeamJoinDeathReset()}. + */ + @Test + public void testIsTeamJoinDeathReset() { + assertTrue(s.isTeamJoinDeathReset()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#getGeoLimitSettings()}. + */ + @Test + public void testGetGeoLimitSettings() { + assertTrue(s.getGeoLimitSettings().isEmpty()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#getIvSettings()}. + */ + @Test + public void testGetIvSettings() { + assertTrue(s.getIvSettings().isEmpty()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#getResetEpoch()}. + */ + @Test + public void testGetResetEpoch() { + assertEquals(0L, s.getResetEpoch()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#setFriendlyName(java.lang.String)}. + */ + @Test + public void testSetFriendlyName() { + s.setFriendlyName("test"); + assertEquals("test", s.getFriendlyName()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#setWorldName(java.lang.String)}. + */ + @Test + public void testSetWorldName() { + s.setWorldName("test"); + assertEquals("test", s.getWorldName()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#setDifficulty(org.bukkit.Difficulty)}. + */ + @Test + public void testSetDifficulty() { + s.setDifficulty(Difficulty.HARD); + assertEquals(Difficulty.HARD, s.getDifficulty()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#setIslandDistance(int)}. + */ + @Test + public void testSetIslandDistance() { + s.setIslandDistance(12345); + assertEquals(12345, s.getIslandDistance()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#setIslandProtectionRange(int)}. + */ + @Test + public void testSetIslandProtectionRange() { + s.setIslandProtectionRange(12345); + assertEquals(12345, s.getIslandProtectionRange()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#setIslandStartX(int)}. + */ + @Test + public void testSetIslandStartX() { + s.setIslandStartX(12345); + assertEquals(12345, s.getIslandStartX()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#setIslandStartZ(int)}. + */ + @Test + public void testSetIslandStartZ() { + s.setIslandStartZ(12345); + assertEquals(12345, s.getIslandStartZ()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#setIslandHeight(int)}. + */ + @Test + public void testSetIslandHeight() { + s.setIslandHeight(12345); + assertEquals(255, s.getIslandHeight()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#setDefaultGameMode(org.bukkit.GameMode)}. + */ + @Test + public void testSetDefaultGameMode() { + s.setDefaultGameMode(GameMode.SPECTATOR); + assertEquals(GameMode.SPECTATOR, s.getDefaultGameMode()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#setNetherGenerate(boolean)}. + */ + @Test + public void testSetNetherGenerate() { + s.setNetherGenerate(false); + assertFalse(s.isNetherGenerate()); + s.setNetherGenerate(true); + assertTrue(s.isNetherGenerate()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#setEndGenerate(boolean)}. + */ + @Test + public void testSetEndGenerate() { + s.setEndGenerate(false); + assertFalse(s.isEndGenerate()); + s.setEndGenerate(true); + assertTrue(s.isEndGenerate()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#setRemoveMobsWhitelist(java.util.Set)}. + */ + @Test + public void testSetRemoveMobsWhitelist() { + s.setRemoveMobsWhitelist(Collections.singleton(EntityType.AXOLOTL)); + assertTrue(s.getRemoveMobsWhitelist().contains(EntityType.AXOLOTL)); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#setWorldFlags(java.util.Map)}. + */ + @Test + public void testSetWorldFlags() { + s.setWorldFlags(Map.of("trueFlag", true, "falseFlag", false)); + assertTrue(s.getWorldFlags().get("trueFlag")); + assertFalse(s.getWorldFlags().get("falseFlag")); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#setDefaultIslandFlagNames(java.util.Map)}. + */ + @Test + public void testSetDefaultIslandFlagNames() { + s.setDefaultIslandFlagNames(Map.of("TEST", 500)); + assertTrue(s.getDefaultIslandFlagNames().get("TEST") == 500); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#setDefaultIslandSettingNames(java.util.Map)}. + */ + @Test + public void testSetDefaultIslandSettingNames() { + s.setDefaultIslandSettingNames(Map.of("SETTING", 456)); + assertTrue(s.getDefaultIslandSettingNames().get("SETTING") == 456); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#setHiddenFlags(java.util.List)}. + */ + @Test + public void testSetHiddenFlags() { + s.setHiddenFlags(List.of("FLAG1", "FLAG2")); + assertTrue(s.getHiddenFlags().contains("FLAG2")); + assertFalse(s.getHiddenFlags().contains("FLAG3")); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#setVisitorBannedCommands(java.util.List)}. + */ + @Test + public void testSetVisitorBannedCommands() { + s.setVisitorBannedCommands(List.of("banned")); + assertTrue(s.getVisitorBannedCommands().contains("banned")); + assertFalse(s.getVisitorBannedCommands().contains("not-banned")); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#setFallingBannedCommands(java.util.List)}. + */ + @Test + public void testSetFallingBannedCommands() { + s.setFallingBannedCommands(List.of("banned")); + assertTrue(s.getFallingBannedCommands().contains("banned")); + assertFalse(s.getFallingBannedCommands().contains("not-banned")); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#setMaxTeamSize(int)}. + */ + @Test + public void testSetMaxTeamSize() { + s.setMaxTeamSize(12345); + assertEquals(12345, s.getMaxTeamSize()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#setMaxHomes(int)}. + */ + @Test + public void testSetMaxHomes() { + s.setMaxHomes(12345); + assertEquals(12345, s.getMaxHomes()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#setResetLimit(int)}. + */ + @Test + public void testSetResetLimit() { + s.setResetLimit(12345); + assertEquals(12345, s.getResetLimit()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#setLeaversLoseReset(boolean)}. + */ + @Test + public void testSetLeaversLoseReset() { + s.setLeaversLoseReset(false); + assertFalse(s.isLeaversLoseReset()); + s.setLeaversLoseReset(true); + assertTrue(s.isLeaversLoseReset()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#setKickedKeepInventory(boolean)}. + */ + @Test + public void testSetKickedKeepInventory() { + s.setKickedKeepInventory(false); + assertFalse(s.isKickedKeepInventory()); + s.setKickedKeepInventory(true); + assertTrue(s.isKickedKeepInventory()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#setOnJoinResetMoney(boolean)}. + */ + @Test + public void testSetOnJoinResetMoney() { + s.setOnJoinResetMoney(false); + assertFalse(s.isOnJoinResetMoney()); + s.setOnJoinResetMoney(true); + assertTrue(s.isOnJoinResetMoney()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#setOnJoinResetInventory(boolean)}. + */ + @Test + public void testSetOnJoinResetInventory() { + s.setOnJoinResetInventory(false); + assertFalse(s.isOnJoinResetInventory()); + s.setOnJoinResetInventory(true); + assertTrue(s.isOnJoinResetInventory()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#setOnJoinResetEnderChest(boolean)}. + */ + @Test + public void testSetOnJoinResetEnderChest() { + s.setOnJoinResetEnderChest(false); + assertFalse(s.isOnJoinResetEnderChest()); + s.setOnJoinResetEnderChest(true); + assertTrue(s.isOnJoinResetEnderChest()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#setOnLeaveResetMoney(boolean)}. + */ + @Test + public void testSetOnLeaveResetMoney() { + s.setOnLeaveResetMoney(false); + assertFalse(s.isOnLeaveResetMoney()); + s.setOnLeaveResetMoney(true); + assertTrue(s.isOnLeaveResetMoney()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#setOnLeaveResetInventory(boolean)}. + */ + @Test + public void testSetOnLeaveResetInventory() { + s.setOnLeaveResetInventory(false); + assertFalse(s.isOnLeaveResetInventory()); + s.setOnLeaveResetInventory(true); + assertTrue(s.isOnLeaveResetInventory()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#setOnLeaveResetEnderChest(boolean)}. + */ + @Test + public void testSetOnLeaveResetEnderChest() { + s.setOnLeaveResetEnderChest(false); + assertFalse(s.isOnLeaveResetEnderChest()); + s.setOnLeaveResetEnderChest(true); + assertTrue(s.isOnLeaveResetEnderChest()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#setCreateIslandOnFirstLoginEnabled(boolean)}. + */ + @Test + public void testSetCreateIslandOnFirstLoginEnabled() { + s.setCreateIslandOnFirstLoginEnabled(false); + assertFalse(s.isCreateIslandOnFirstLoginEnabled()); + s.setCreateIslandOnFirstLoginEnabled(true); + assertTrue(s.isCreateIslandOnFirstLoginEnabled()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#setCreateIslandOnFirstLoginDelay(int)}. + */ + @Test + public void testSetCreateIslandOnFirstLoginDelay() { + s.setCreateIslandOnFirstLoginDelay(12345); + assertEquals(12345, s.getCreateIslandOnFirstLoginDelay()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#setCreateIslandOnFirstLoginAbortOnLogout(boolean)}. + */ + @Test + public void testSetCreateIslandOnFirstLoginAbortOnLogout() { + s.setCreateIslandOnFirstLoginAbortOnLogout(false); + assertFalse(s.isCreateIslandOnFirstLoginAbortOnLogout()); + s.setCreateIslandOnFirstLoginAbortOnLogout(true); + assertTrue(s.isCreateIslandOnFirstLoginAbortOnLogout()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#setDeathsCounted(boolean)}. + */ + @Test + public void testSetDeathsCounted() { + s.setDeathsCounted(false); + assertFalse(s.isDeathsCounted()); + s.setDeathsCounted(true); + assertTrue(s.isDeathsCounted()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#setDeathsMax(int)}. + */ + @Test + public void testSetDeathsMax() { + s.setDeathsMax(12345); + assertEquals(12345, s.getDeathsMax()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#setTeamJoinDeathReset(boolean)}. + */ + @Test + public void testSetTeamJoinDeathReset() { + s.setTeamJoinDeathReset(false); + assertFalse(s.isTeamJoinDeathReset()); + s.setTeamJoinDeathReset(true); + assertTrue(s.isTeamJoinDeathReset()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#setGeoLimitSettings(java.util.List)}. + */ + @Test + public void testSetGeoLimitSettings() { + s.setGeoLimitSettings(List.of("test")); + assertTrue(s.getGeoLimitSettings().contains("test")); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#setIvSettings(java.util.List)}. + */ + @Test + public void testSetIvSettings() { + s.setIvSettings(List.of("test")); + assertTrue(s.getIvSettings().contains("test")); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#setAllowSetHomeInNether(boolean)}. + */ + @Test + public void testSetAllowSetHomeInNether() { + s.setAllowSetHomeInNether(false); + assertFalse(s.isAllowSetHomeInNether()); + s.setAllowSetHomeInNether(true); + assertTrue(s.isAllowSetHomeInNether()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#setAllowSetHomeInTheEnd(boolean)}. + */ + @Test + public void testSetAllowSetHomeInTheEnd() { + s.setAllowSetHomeInTheEnd(false); + assertFalse(s.isAllowSetHomeInTheEnd()); + s.setAllowSetHomeInTheEnd(true); + assertTrue(s.isAllowSetHomeInTheEnd()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#setRequireConfirmationToSetHomeInNether(boolean)}. + */ + @Test + public void testSetRequireConfirmationToSetHomeInNether() { + s.setRequireConfirmationToSetHomeInNether(false); + assertFalse(s.isRequireConfirmationToSetHomeInNether()); + s.setRequireConfirmationToSetHomeInNether(true); + assertTrue(s.isRequireConfirmationToSetHomeInNether()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#setRequireConfirmationToSetHomeInTheEnd(boolean)}. + */ + @Test + public void testSetRequireConfirmationToSetHomeInTheEnd() { + s.setRequireConfirmationToSetHomeInTheEnd(false); + assertFalse(s.isRequireConfirmationToSetHomeInTheEnd()); + s.setRequireConfirmationToSetHomeInTheEnd(true); + assertTrue(s.isRequireConfirmationToSetHomeInTheEnd()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#setResetEpoch(long)}. + */ + @Test + public void testSetResetEpoch() { + s.setResetEpoch(12345); + assertEquals(12345, s.getResetEpoch()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#getPermissionPrefix()}. + */ + @Test + public void testGetPermissionPrefix() { + assertEquals("skygrid", s.getPermissionPrefix()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#isWaterUnsafe()}. + */ + @Test + public void testIsWaterUnsafe() { + assertFalse(s.isWaterUnsafe()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#getBanLimit()}. + */ + @Test + public void testGetBanLimit() { + assertEquals(-1, s.getBanLimit()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#setBanLimit(int)}. + */ + @Test + public void testSetBanLimit() { + assertEquals(-1, s.getBanLimit()); + s.setBanLimit(12345); + assertEquals(12345, s.getBanLimit()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#getPlayerCommandAliases()}. + */ + @Test + public void testGetPlayerCommandAliases() { + assertEquals("skygrid sg",s.getPlayerCommandAliases()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#setPlayerCommandAliases(java.lang.String)}. + */ + @Test + public void testSetPlayerCommandAliases() { + assertEquals("skygrid sg",s.getPlayerCommandAliases()); + s.setPlayerCommandAliases("aliases"); + assertEquals("aliases",s.getPlayerCommandAliases()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#getAdminCommandAliases()}. + */ + @Test + public void testGetAdminCommandAliases() { + assertEquals("sgadmin sga",s.getAdminCommandAliases()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#setAdminCommandAliases(java.lang.String)}. + */ + @Test + public void testSetAdminCommandAliases() { + assertEquals("sgadmin sga",s.getAdminCommandAliases()); + s.setAdminCommandAliases("aliases"); + assertEquals("aliases",s.getAdminCommandAliases()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#isDeathsResetOnNewIsland()}. + */ + @Test + public void testIsDeathsResetOnNewIsland() { + assertTrue(s.isDeathsResetOnNewIsland()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#setDeathsResetOnNewIsland(boolean)}. + */ + @Test + public void testSetDeathsResetOnNewIsland() { + s.setDeathsResetOnNewIsland(false); + assertFalse(s.isDeathsResetOnNewIsland()); + s.setDeathsResetOnNewIsland(true); + assertTrue(s.isDeathsResetOnNewIsland()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#getOnJoinCommands()}. + */ + @Test + public void testGetOnJoinCommands() { + assertTrue(s.getOnJoinCommands().isEmpty()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#setOnJoinCommands(java.util.List)}. + */ + @Test + public void testSetOnJoinCommands() { + s.setOnJoinCommands(List.of("command", "do this")); + assertEquals("do this", s.getOnJoinCommands().get(1)); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#getOnLeaveCommands()}. + */ + @Test + public void testGetOnLeaveCommands() { + assertTrue(s.getOnLeaveCommands().isEmpty()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#setOnLeaveCommands(java.util.List)}. + */ + @Test + public void testSetOnLeaveCommands() { + s.setOnLeaveCommands(List.of("command", "do this")); + assertEquals("do this", s.getOnLeaveCommands().get(1)); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#getOnRespawnCommands()}. + */ + @Test + public void testGetOnRespawnCommands() { + assertTrue(s.getOnRespawnCommands().isEmpty()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#setOnRespawnCommands(java.util.List)}. + */ + @Test + public void testSetOnRespawnCommands() { + s.setOnRespawnCommands(List.of("command", "do this")); + assertEquals("do this", s.getOnRespawnCommands().get(1)); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#isOnJoinResetHealth()}. + */ + @Test + public void testIsOnJoinResetHealth() { + assertTrue(s.isOnJoinResetHealth()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#setOnJoinResetHealth(boolean)}. + */ + @Test + public void testSetOnJoinResetHealth() { + s.setOnJoinResetHealth(false); + assertFalse(s.isOnJoinResetHealth()); + s.setOnJoinResetHealth(true); + assertTrue(s.isOnJoinResetHealth()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#isOnJoinResetHunger()}. + */ + @Test + public void testIsOnJoinResetHunger() { + assertTrue(s.isOnJoinResetHunger()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#setOnJoinResetHunger(boolean)}. + */ + @Test + public void testSetOnJoinResetHunger() { + s.setOnJoinResetHunger(false); + assertFalse(s.isOnJoinResetHunger()); + s.setOnJoinResetHunger(true); + assertTrue(s.isOnJoinResetHunger()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#isOnJoinResetXP()}. + */ + @Test + public void testIsOnJoinResetXP() { + assertFalse(s.isOnJoinResetXP()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#setOnJoinResetXP(boolean)}. + */ + @Test + public void testSetOnJoinResetXP() { + s.setOnJoinResetXP(false); + assertFalse(s.isOnJoinResetXP()); + s.setOnJoinResetXP(true); + assertTrue(s.isOnJoinResetXP()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#isOnLeaveResetHealth()}. + */ + @Test + public void testIsOnLeaveResetHealth() { + assertFalse(s.isOnLeaveResetHealth()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#setOnLeaveResetHealth(boolean)}. + */ + @Test + public void testSetOnLeaveResetHealth() { + s.setOnLeaveResetHealth(false); + assertFalse(s.isOnLeaveResetHealth()); + s.setOnLeaveResetHealth(true); + assertTrue(s.isOnLeaveResetHealth()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#isOnLeaveResetHunger()}. + */ + @Test + public void testIsOnLeaveResetHunger() { + assertFalse(s.isOnLeaveResetHunger()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#setOnLeaveResetHunger(boolean)}. + */ + @Test + public void testSetOnLeaveResetHunger() { + s.setOnLeaveResetHunger(false); + assertFalse(s.isOnLeaveResetHunger()); + s.setOnLeaveResetHunger(true); + assertTrue(s.isOnLeaveResetHunger()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#isOnLeaveResetXP()}. + */ + @Test + public void testIsOnLeaveResetXP() { + assertFalse(s.isOnLeaveResetXP()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#setOnLeaveResetXP(boolean)}. + */ + @Test + public void testSetOnLeaveResetXP() { + assertFalse(s.isOnLeaveResetXP()); + s.setOnLeaveResetXP(true); + assertTrue(s.isOnLeaveResetXP()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#isTeleportPlayerToIslandUponIslandCreation()}. + */ + @Test + public void testIsTeleportPlayerToIslandUponIslandCreation() { + assertTrue(s.isTeleportPlayerToIslandUponIslandCreation()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#getMaxCoopSize()}. + */ + @Test + public void testGetMaxCoopSize() { + assertEquals(4, s.getMaxCoopSize()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#setMaxCoopSize(int)}. + */ + @Test + public void testSetMaxCoopSize() { + s.setMaxCoopSize(12345); + assertEquals(12345, s.getMaxCoopSize()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#getMaxTrustSize()}. + */ + @Test + public void testGetMaxTrustSize() { + assertEquals(4, s.getMaxTrustSize()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#setMaxTrustSize(int)}. + */ + @Test + public void testSetMaxTrustSize() { + s.setMaxTrustSize(12345); + assertEquals(12345, s.getMaxTrustSize()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#getDefaultNewPlayerAction()}. + */ + @Test + public void testGetDefaultNewPlayerAction() { + assertEquals("create", s.getDefaultNewPlayerAction()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#setDefaultNewPlayerAction(java.lang.String)}. + */ + @Test + public void testSetDefaultNewPlayerAction() { + s.setDefaultNewPlayerAction("test"); + assertEquals("test", s.getDefaultNewPlayerAction()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#getDefaultPlayerAction()}. + */ + @Test + public void testGetDefaultPlayerAction() { + assertEquals("go", s.getDefaultPlayerAction()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#setDefaultPlayerAction(java.lang.String)}. + */ + @Test + public void testSetDefaultPlayerAction() { + s.setDefaultPlayerAction("test"); + assertEquals("test", s.getDefaultPlayerAction()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#getMobLimitSettings()}. + */ + @Test + public void testGetMobLimitSettings() { + assertTrue(s.getMobLimitSettings().isEmpty()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#setMobLimitSettings(java.util.List)}. + */ + @Test + public void testSetMobLimitSettings() { + s.setMobLimitSettings(List.of("test")); + assertEquals("test", s.getMobLimitSettings().get(0)); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#isMakeNetherPortals()}. + */ + @Test + public void testIsMakeNetherPortals() { + assertFalse(s.isMakeNetherPortals()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#isMakeEndPortals()}. + */ + @Test + public void testIsMakeEndPortals() { + assertTrue(s.isMakeEndPortals()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#setMakeNetherPortals(boolean)}. + */ + @Test + public void testSetMakeNetherPortals() { + s.setMakeNetherPortals(false); + assertFalse(s.isMakeNetherPortals()); + s.setMakeNetherPortals(true); + assertTrue(s.isMakeNetherPortals()); + } + + /** + * Test method for {@link world.bentobox.skygrid.Settings#setMakeEndPortals(boolean)}. + */ + @Test + public void testSetMakeEndPortals() { + s.setMakeEndPortals(false); + assertFalse(s.isMakeEndPortals()); + s.setMakeEndPortals(true); + assertTrue(s.isMakeEndPortals()); + } + + +}