New:
- Basalt Ore Generation: Added support for generating ores in basalt blocks when basalt is formed.
Bug Fix:
- Fixed an issue with the
BlockFromToEvent
where the plugin was incorrectly checking adjacent blocks of the destination block. This prevented liquids from flowing as they should when updated by any blocks touching the source block. The event handler now correctly checks the adjacent blocks of the source block, ensuring proper event cancellation when necessary.
Configuration:
- Updated
ores.yml
: Added default ores/block generation configurations for basalt.
If you just want normal basalt generation, you can set it up like this:
BASALT:
BASALT: 100
If not, here is the new default file:
# Ore Replacement Chances
# This file is used to specify the chances of different ores being chosen for replacement
# when lava or water generates stone blocks in the world. The stone generated in the world can be replaced by any block you want as long as it's in the Bukkit materials list: https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/Material.html
# Format: Material_Name:Percentage
# The percentage represents the chance (in whole numbers) of the ore being chosen
# for replacement out of the total replacements when lava or water generates stone.
# Each line represents one ore with its corresponding replacement chance.
# Lines starting with '#' are considered comments and will be ignored by the code.
# Example:
# DIAMOND_ORE:5
# This means that there is a 5% chance of a diamond ore block being chosen
# when lava or water generates a stone block.
# The total sum of percentages should be less than or equal to 100.
# If the sum exceeds 100, the probabilities will be scaled down proportionally
# to fit within the 0-100 range.
# For example, if the total sum of percentages exceeds 100 as follows:
# DIAMOND_ORE:40
# COAL_ORE:60
# IRON_ORE:30
# GOLD_ORE:20
# The total sum is 40 + 60 + 30 + 20 = 150, which exceeds 100.
# To fit within the 0-100 range, the probabilities will be scaled down proportionally:
# DIAMOND_ORE: 40 * (100 / 150) = 26 (approximately 27)
# COAL_ORE: 60 * (100 / 150) = 40
# IRON_ORE: 30 * (100 / 150) = 20
# GOLD_ORE: 20 * (100 / 150) = 13 (approximately 13)
# The adjusted probabilities now add up to 26 + 40 + 20 + 13 = 99, which is within the 0-100 range.
# For if the block generated is stone
STONE:
STONE: 98
COAL_ORE: 0.3
COPPER_ORE: 0.4
DIAMOND_ORE: 0.1
EMERALD_ORE: 0.1
GOLD_ORE: 0.2
IRON_ORE: 0.4
LAPIS_ORE: 0.2
REDSTONE_ORE: 0.3
# For if the block generated is cobblestone
COBBLESTONE:
DEEPSLATE: 98
DEEPSLATE_COAL_ORE: 0.3
DEEPSLATE_COPPER_ORE: 0.4
DEEPSLATE_DIAMOND_ORE: 0.1
DEEPSLATE_EMERALD_ORE: 0.1
DEEPSLATE_GOLD_ORE: 0.2
DEEPSLATE_IRON_ORE: 0.4
DEEPSLATE_LAPIS_ORE: 0.2
DEEPSLATE_REDSTONE_ORE: 0.3
# For if the block generated is basalt
BASALT:
ANCIENT_DEBRIS: 0.1
BASALT: 44.9
BLACKSTONE: 20
GILDED_BLACKSTONE: 3.0
NETHER_GOLD_ORE: 3.0
NETHER_QUARTZ_ORE: 5.0
POLISHED_BASALT: 12
POLISHED_BLACKSTONE: 12
Update:
- The pregen command's default radius now adapts to the world's border instead of being hardcoded to 29999984, ensuring compatibility with custom world borders.
- you can use this if set your world border manually using /worldborder set #
- Usage: /pregen <ParallelTasksMultiplier> <PrintUpdateDelayin(Seconds/Minutes/Hours)> <world> <Radiusin(Blocks/Chunks/Regions) or default>
Command Examples:
- /pregen 6 5s world 1000b
- /pregen 2 2m world_nether 500c
- /pregen 1 12h world_the_end 100r
- /pregen 4 10s world default
1.21 Update:
Added chest items for Overworld:
- MACE
- OMINOUS_BOTTLE
- OMINOUS_TRIAL_KEY
- TRIAL_KEY
- BREEZE_ROD
Added spawner entities for Overworld:
- BREEZE
- BOGGED
Added blocks for Overworld
- CHISELED_COPPER
- COPPER_BULB
- COPPER_GRATE
- VAULT
- TRIAL_SPAWNER
- HEAVY_CORE
For VAULT and TRIAL_SPAWNER there is a 50% chance applied to determine if it will be set Ominous.
Note: These blocks where added to the default files, you can still add any other blocks from the available in the materials page. https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/Material.html
Pre-generator Rework:
- Usage: /pregen <ParallelTasksMultiplier> <PrintUpdateDelayin(Seconds/Minutes/Hours)> <world> <Radiusin(Blocks/Chunks/Regions)>
For more information you can check out the page here.
Bug Fixed
- Fixed some issues with pregenerator unloading chunks to soon,
- Extend unloading until chunk is entity ticking to ensure chunks are fully generated
New Datapack
- Made my own simple data pack Void-Biomes-1.21, currently Void Worldgen has not been updated to 1.21 yet, so in the future if you want you can use that instead.
- The data pack only generate the biome data for the Minecraft worlds, the only structure is the end portal and pillars
- The Void-Biomes-1.21 data pack should improve performance (~20%) if used in place of the old Void Worldgen data pack since it is not generating structure boundary boxes for any structures.
Optimization and Memory Usage Reduction:
- Boosted pregenerator performance by up to 25%
- Enhanced generator, custom chest, spawner, and related utility classes to utilize the fastutil library, yielding a performance increase of up to 3-7% and significantly reducing memory usage (observed differences of up to 1.5GB in certain scenarios).
- Optimized the custom chest class by minimizing the number of times the chest block is accessed. Used a "fake" chest represented by an array for item placement calculations, accessed the chest instance only twice, and implemented multithreading to significantly reduce processing time to get random chest items.
- Improved material loading by adopting a new alias, resulting in more balanced loading between materials with and without biomes. Fetching random materials for both world and biome is now notably faster, reducing thread blocking during operations like /tpr. Additionally, precomputing wherever feasible and implementing caching mechanisms have been employed to further reduce fetch times for random materials. CPU usage during /tpr decreased from consistently hitting 100% across all cores for 2-3 seconds to a range of 80-90% for less than a second (test done with simulation-distance=8 and view-distance=8).
Note: Many main classes have been almost fully overhauled to use the fastutil library. If you encounter any issues, please submit them on the GitHub issue page. I tried my best to test every scenario I can think of, but I can't always catch every issue.
Updated Command:
/gclogs(on)/(off)
: Updated to/eclogs(on)/(off)
. This change comes as the more general event control has been introduced and it's no longer just growth control.
Updated Permissions:
gc.gclogson
: Updated toec.gclogson
. Grants permission to enable event control logging using /eclogson. (Default OP)gc.gclogsoff
: Updated toec.gclogsoff
. Grants permission to disable event control logging using /gclogsoff. (Default OP)
New Configuration Settings:
TPR Command Settings:
- Added a new option for the server to randomly teleport players on first join,
onFirstJoin
by default is false, this provides servers without a spawn the option to random teleport the player only the first time they connect to the server. - Added a new delay option for usage of
/tpr
commands,b2bDelay
adds a fourth timer to prevent players from using the/tpr
command back-to-back. Players must wait for this duration before they can use any/tpr
commands again. - Moved the list of blocks considered unsafe to teleport to settings file, under
DANGEROUSBLOCKS
, this list is used by the code to determine what materials you do not want the player to be teleported on top of when they use the /tpr command.
Event Control Settings:
EventControl
: Lets you turn off and on all the newly added grid integrity checks, these monitor server events to prevent the following: BlockIgniteEvent, BlockFadeEvent, BlockFromToEvent, StructureGrowEvent, BlockSpreadEvent, BlockGrowEvent, BlockFormEvent, and EntityChangeBlock.- There is also a new list of materials in
GRAVITY_AFFECTED_BLOCKS
which is used to determine what blocks you do not want snow to form on in the grid or general gravity-affected blocks that you do not want to fall due to server overload.
# Configuration
# Generator settings
generator:
# Delay in ticks before processing chunks after chunk load event.
# A shorter delay increases server load, while a longer delay may affect player immersion.
processDelay: 5
# Max and Min height for blocks placed in the Grids for all Environments.
# Keep within increments of 4 starting from the current min or max.
# i.e. 0, 4, 8, 12, 16 ... or 128, 124, 120, 116, 112 ...
# Exceeding max heights for worlds will result in errors.
# Nether settings (min 0, max 128)
nether:
minY: 0
maxY: 128
# End settings (min 0, max 128)
end:
minY: 0
maxY: 128
# Normal world settings (min -64, max 256)
normal:
minY: -64
maxY: 64
# Default settings for unspecified environments (min and max depend on your custom environment)
default:
minY: 0
maxY: 128
# TPR Command settings
tprCommand:
# Randomly teleports the player using /tpr when they first join.
# Set to true to enable.
onFirstJoin: false
# The delay in seconds to prevent players from using the /tpr command back-to-back.
# Players must wait for this duration before they can use the /tpr command again.
b2bDelay: 10
# Delay in seconds before teleporting in the overworld
tprDelay: 30
# Delay in seconds before teleporting in the nether
tprNetherDelay: 30
# Delay in seconds before teleporting in the end
tprEndDelay: 30
# Maximum X coordinate for random teleport (max 29999983)
maxX: 29999983
# Maximum Z coordinate for random teleport (max 29999983)
maxZ: 29999983
# Minimum X coordinate for random teleport (max -29999983)
minX: -29999983
# Minimum Z coordinate for random teleport (max -29999983)
minZ: -29999983
# Default Y coordinate for teleport destination (min -64, max 256, try to get it somewhere in between all your environments)
destinationY: 64
# These are materials that the tpr command considers dangerous and will prevent players from being placed on them when /tpr is used.
DANGEROUSBLOCKS:
Materials:
- AIR
- ALLIUM
- AZURE_BLUET
- BEETROOTS
- BIG_DRIPLEAF
- BLUE_ORCHID
- BROWN_MUSHROOM
- CACTUS
- CAMPFIRE
- CARROTS
- CAVE_VINES_PLANT
- COBWEB
- CORNFLOWER
- CRIMSON_FUNGUS
- CRIMSON_ROOTS
- DANDELION
- DEAD_BUSH
- FERN
- FIRE
- GLOW_LICHEN
- HANGING_ROOTS
- KELP
- KELP_PLANT
- LARGE_FERN
- LAVA
- LAVA_CAULDRON
- LILAC
- LILY_OF_THE_VALLEY
- MAGMA_BLOCK
- MELON_STEM
- NETHER_SPROUTS
- NETHER_WART
- ORANGE_TULIP
- OXEYE_DAISY
- PEONY
- PINK_TULIP
- PITCHER_PLANT
- POINTED_DRIPSTONE
- POPPY
- POTATOES
- POWDER_SNOW
- PUMPKIN_STEM
- RED_MUSHROOM
- RED_TULIP
- ROSE_BUSH
- SCULK_VEIN
- SEAGRASS
- SHORT_GRASS
- SMALL_DRIPLEAF
- SNOW
- SOUL_FIRE
- SPORE_BLOSSOM
- SUGAR_CANE
- SUNFLOWER
- SWEET_BERRY_BUSH
- TALL_GRASS
- TALL_SEAGRASS
- TORCHFLOWER
- TORCHFLOWER_CROP
- TWISTING_VINES
- VINE
- VOID_AIR
- WARPED_FUNGUS
- WARPED_ROOTS
- WATER
- WEEPING_VINES
- WHEAT
- WHITE_TULIP
- WITHER_ROSE
# Fog settings
fog:
# Auto-enable fog setting
# Set to true to automatically enable fog when the plugin starts.
autoEnable: false
# Event Control settings
EventControl:
# (true to enable event check, false to disable)
# BlockIgniteEvent - Prevents lava from causing fires to near by flammable grid blocks
BlockIgniteEvent: true
# BlockFadeEvent - Prevents ice from melting if it's in the grid and fire from burning out
BlockFadeEvent: true
# BlockFromToEvent - Prevents lava and water from flowing due to server overload
BlockFromToEvent: true
# StructureGrowEvent - Prevents saplings in floating in grid from growing
StructureGrowEvent: true
# BlockSpreadEvent - Prevents bamboo sapling from growing since it does not trigger with StructureGrowEvent
BlockSpreadEvent: true
# BlockGrowEvent is used for KELP_PLANT, SUGAR_CANE, CACTUS, and TWISTING_VINES_PLANT (not logged in /eclogson, to much spam)
BlockGrowEvent: true
# BlockFormEvent - Prevents block updates that mess up the grid in snow biomes, snow forming on top of blocks
BlockFormEvent: true
# EntityChangeBlock - Prevents gravity-affected blocks from randomly falling due to overload
EntityChangeBlockEvent: true
# This list is for blocks that you want to monitor the BlockFormEvent and EntityChangeBlock events.
GRAVITY_AFFECTED_BLOCKS:
Materials:
- SAND
- RED_SAND
- GRAVEL
- KELP_PLANT
- ANVIL
- SUSPICIOUS_SAND
- SUSPICIOUS_GRAVEL
- DRAGON_EGG
- BLACK_CONCRETE_POWDER
- BLUE_CONCRETE_POWDER
- BROWN_CONCRETE_POWDER
- CYAN_CONCRETE_POWDER
- GRAY_CONCRETE_POWDER
- GREEN_CONCRETE_POWDER
- LIGHT_BLUE_CONCRETE_POWDER
- LIGHT_GRAY_CONCRETE_POWDER
- LIME_CONCRETE_POWDER
- MAGENTA_CONCRETE_POWDER
- ORANGE_CONCRETE_POWDER
- PINK_CONCRETE_POWDER
- PURPLE_CONCRETE_POWDER
- RED_CONCRETE_POWDER
- WHITE_CONCRETE_POWDER
- YELLOW_CONCRETE_POWDER
Generator Update:
- Auto populates
BEEHIVE
andBEE_NEST
, currently only 2 are added to reduce the use of resources. - Updated generator to improve efficiency, offloading some of the work off the main thread when possible.
Other Updates:
- Grid and Block Pallets: New block pallet changes for more variety and better distribution.
- The chest loading has been simplified and optimized. Improved method for filling chests with items to increase performance.
- Updated
FirstBootChecker
to consider any missing files as a first boot not just the world.txt file in theSkygridBlocks
folder. - Reduced the chunks preloaded in the initial check on first boot to 4 chunk distance instead of 16.
- Update chest settings to add the missing biome
THE_END
to the end chest settings.
Thank you for your continued support! Please report any bugs/issues/feature suggestions on my GitHub.
New Features, Commands, Permissions, and Performance Improvements
New Features and Commands:
New Commands
- /tpro: Random teleport in the Overworld.
- /tprn: Random teleport in the Nether.
- /tpre: Random teleport in the End.
- These are shorthand versions of the previous /tpr [world] command with the advantage of being able to set the permissions individually.
Updated Command
- /tpr [world]: Random teleport in the Overworld, Nether, or End. Updated to add
overworld
to the autocomplete. Using/tpr
with no arguments still defaults tooverworld
.
Permissions:
Added Permissions for every command
sg.tpr
: Allows teleportation to Overworld, Nether, and End using the/tpr [world]
command. (Default all)sg.tpr.overworld
: Grants permission to use the/tpro
command for teleportation in the Overworld. (Default all)sg.tpr.nether
: Grants permission to use the/tprn
command for teleportation in the Nether. (Default all)sg.tpr.end
: Enables usage of the/tpre
command for teleportation in the End. (Default all)sg.tpr.*
: Provides access to all teleportation commands. (Default OP)sg.fogon
: Allows enabling fog using the/fogon
command. (Default OP)sg.fogoff
: Allows disabling fog with the/fogoff
command. (Default OP)sg.gclogson
: Grants permission to enable GrowthControl logging using/gclogson
. (Default OP)sg.gclogsoff
: Grants permission to disable GrowthControl logging using/gclogsoff
. (Default OP)sg.pregen
: Grants permission to use the pre-generation command with customizable parameters. (Default OP)sg.pregenoff
: Grants permission to disable pre-generation using the/pregenoff
command. (Default OP)sg.patch
: Allows patching files to update materials and entities to another version. (Default OP)sg.regen
: Grants permission to regenerate all loaded chunks using the/regen
command. (Default OP)sg.*
: Provides access to all SkyGrid commands. (Default OP)
Configuration:
New Configuration File settings.yml
Generator Settings
processDelay
: Delay in ticks before processing chunks after chunk load event (default: 10).- Environment-specific grid generation height minY and maxY settings for Nether, End, and Normal worlds.
TPR Command Settings
- Delay in seconds before using the /tpr commands again (default: 30). You can change it individualy for each environment.
- Max and Min coordinates for random teleportation.
- Default Y coordinate for teleport destination.
Fog Settings
autoEnable
: Automatically enable fog when the plugin starts (default: false).
# Configuration
# Generator settings
generator:
# Delay in ticks before processing chunks after chunk load event.
# A shorter delay increases server load, while a longer delay may affect player immersion.
processDelay: 10
# Max and Min height for blocks placed in the Grids for all Environments.
# Keep within increments of 4 starting from the current min or max.
# i.e. 0, 4, 8, 12, 16 ... or 128, 124, 120, 116, 112 ...
# Exceeding max heights for worlds will result in errors.
# Nether settings (min 0, max 128)
nether:
minY: 0
maxY: 128
# End settings (min 0, max 128)
end:
minY: 0
maxY: 128
# Normal world settings (min -64, max 256)
normal:
minY: -64
maxY: 64
# Default settings for unspecified environments (min and max depend on your custom environment)
default:
minY: 0
maxY: 128
# TPR Command settings
tprCommand:
# Delay in seconds before teleporting in the overworld
tprDelay: 30
# Delay in seconds before teleporting in the nether
tprNetherDelay: 30
# Delay in seconds before teleporting in the end
tprEndDelay: 30
# Maximum X coordinate for random teleport (max 29999983)
maxX: 29999983
# Maximum Z coordinate for random teleport (max 29999983)
maxZ: 29999983
# Minimum X coordinate for random teleport (max -29999983)
minX: -29999983
# Minimum Z coordinate for random teleport (max -29999983)
minZ: -29999983
# Default Y coordinate for teleport destination (min -64, max 256, try to get it somewhere in between all your environments)
destinationY: 64
# Fog settings
fog:
# Auto-enable fog setting
# Set to true to automatically enable fog when the plugin starts.
autoEnable: true
Performance Improvements:
- Made the plugin faster and more efficient by using better data handling methods.
- Reduced unnecessary code execution to improve speed.
Bug Fixes:
- Fixed the problem with empty chunks in the spawn chunk region. Spawn chunks are now force-loaded using Paperlib async operations before the player connects, then regenerated to prevent the issue or fix it if present.
I hope you enjoy the new features, performance improvements, and added flexibility with configurations! Feel free to reach out with any feedback or issues :) https://github.com/DavidS-Repo/SkyGridx/issues
Made significant improvements and added new features
New Features:
- /regen Command:
- Introducing the /regen command, allowing you to refresh all currently loaded areas with new materials from your configuration file. This is useful for those who modify biomes in the files and helps fix any bugged areas with empty chunks.
Performance Improvements:
- Material Manager Enhancements:
- Made the plugin run faster and handle large amounts of data more efficiently.
- Reading files is now quicker, making the plugin respond faster.
- Optimized how materials are loaded and distributed to improve overall performance.
Material Loading Process:
- Separated Loaders:
- The process of loading materials is now divided into two types:
- Basic Material Loader:
- For simpler setups without specific biomes.
- Ensures materials are evenly distributed across all biomes.
- Advanced Material Loader:
- For setups that include specific biomes.
- Uses a system that distributes materials based on their specified weights.
- Requires all biomes to be listed in the configuration file to prevent missing areas in the game.
- Basic Material Loader:
- You can play around with using either one or see what works best for you, all the biomes are listed in the world text files.
- The process of loading materials is now divided into two types:
Bug Fixes:
- Teleportation Cooldown:
- Fixed an issue where players could bypass the cooldown for teleportation by disconnecting and reconnecting. Now, cooldowns are enforced properly.
Additional Improvements:
- Updated Descriptions:
- Improved world text file descriptions to better explain the new material loaders, making it easier to understand and use all the features.
I hope you enjoy the new features and improvements!
Feel free to reach out with any feedback or issues :)
Introducing Armadillo Scuttles and Patching Command
What’s New:
Armadillo Scuttles in Chest Loot Tables
- I've temporarily added Armadillo Scuttles to the chest loot tables for the overworld, giving players quick access to new update items.
Armadillos in Overworld Spawner Settings
- Armadillos have been permanently added to the Overworld entity list in Spawner Settings.
Introducing the /patch Command
- The new /patch command allows for the forced patching of files to their new versions, ideal for servers with default settings. It replaces old files with new ones containing updated materials or entities. For heavily modified files, manual updating is recommended.
New Items and Entities
- The new items introduced are ARMADILLO_SCUTE and WOLF_ARMOR, while the ARMADILLO entity has been added as well.
I plan to further enhance compatibility by adding support for specific versions to the /patch command in the future and their associated items and entities.
What’s New:
Pre-Generator Feature:
-
Built in async pregenerator feature that allows for efficient world generation. This feature is accessible through the /pregen command, with customizable parameters for chunks per cycle and print update delay.
-
Works best on paper servers, on none paper servers the async functionality will not be used. Recommend you go into your paper server paper-global.yml and update these.
chunk-system:
gen-parallelism: 'true'
io-threads: 12
worker-threads: 12
-
Adjust io-threads and worker-threads to match your CPU’s thread count. Default settings utilize only half.
-
Usage: /pregen chunksPerCycle PrintUpdate(DelayinMinutes)
- For "chunksPerCycle" It’s recommended to match the number of threads your system has. For example, 12 threads yielded 50-80 chunks per second on a 5600x CPU, depending on server activity and other system tasks.
-
I left some headroom on CPU usage to decrease the likelihood of unintended block updates. I don't recommend playing while the pregeneration is happening, you can just let it run for a while if you don't want to play in a server and just want to generate the world, about 24 hours should be good enough.
Command Updates:
- Removed the "/sgon" command, eliminating the need for user-triggered commands to turn on SkyGrid generation. It now starts automatically during the first boot or subsequent server restarts/reloads. This modification improves the user experience by providing a more user-friendly and automated approach to SkyGrid generation, making the plugin more intuitive for server administrators.
This update is all about making your life easier and your server more efficient. I have been testing pregen for the last two months, if you run into any issue, please let me know (here).
Biome generation, Fog feature Updates and performance improvements
Updated Generator for enhanced biome generation, Fog feature Improvements and performance improvements
- Added support for multiple biomes: Modified the code to support multiple biomes in the header of the material files. You can now specify multiple biomes separated by commas.
-OCEAN,COLD_OCEAN,DEEP_COLD_OCEAN,DEEP_FROZEN_OCEAN,DEEP_LUKEWARM_OCEAN,DEEP_OCEAN,FROZEN_OCEAN,LUKEWARM_OCEAN-
SAND:80
SANDSTONE:9.0
SEA_PICKLE:1.0
TUBE_CORAL:1.0
TUBE_CORAL_FAN:1.0
HORN_CORAL:1.0
HORN_CORAL_FAN:1.0
FIRE_CORAL:1.0
FIRE_CORAL_FAN:1.0
BUBBLE_CORAL:1.0
BUBBLE_CORAL_FAN:1.0
BRAIN_CORAL:1.0
BRAIN_CORAL_FAN:1.0
-WARM_OCEAN-
SAND:80
SANDSTONE:20
- Updated Generator: Previously, the biome generation was done once per chunk, but it has been updated to check the biome for every block generated in the grid. This change ensures more accurate biome-specific generation and avoids issues where biomes don't extend all the way underground.
- Generator optimizations: Optimized to improve performance. Changes include storing constant values in local variables, minimizing block data modifications inside the loop, and reducing exception handling to enhance efficiency.
- Updates to Fog feature: Improved user experience by changing how the resource pack is installed. Previously, the resource pack was installed every time a player joined the server while the plugin was enabled. Now, the resource pack is only asked to be installed when the fogon command is used. This change provides a better experience for users who do not use the fog feature but were previously asked to install the resource pack every time they joined.
These changes allow for more precise biome-based block generation and improve the overall performance of the plugin. The updates ensure that the generated biomes are accurately represented throughout the world, overcoming limitations of the previous chunk-based approach.
Full Overhaul
New Feature and Improvements
Check out the updated installation Instructions
- Generator Overhaul: Completely revamped the generator for a 2x efficiency boost. Eliminated unnecessary chunk clearing checks, relying entirely on the datapack for smoother operation. Moved away from reliance on files to keep track of data, the only files now needed are in the OreGenBlock folder and SkygridBlocks folder.
- Introduction of GrowthControl Class: Ensures regulated growth of sugarcane and cactus generated by the system. Includes optional log commands (toggleable with 'gclogson' and 'gclogsoff') for tracking controlled plants, enhancing server management. This maintains the integrity of the skygrid over time with minimal performance impact. Even under simulated heavy loads, such as a high 'randomtickspeed' for 300 players, no discernible TPS drop occurred.
- Built-in Fog Feature: Added a new fog feature accompanied by a texture pack. Admins can enable it using '/fogon' and disable with '/fogoff'. This feature allows lower render distances without disrupting immersion. Upon server connection, users will receive a prompt to install a datapack for the fog; failure to install may result in a white bar at the top when the fog feature is activated. The texture pack conceals this UI change, crucial for the feature to function properly, as it cannot be implemented directly into the server's datapack files due to its nature.
- Reworked Ore Generation: Enhanced control allowing customization of stone and cobblestone generation via a new yml format. Preserves existing txt files for those with modifications, enabling an easy port-over to the new format.
# Ore Replacement Chances
# This file is used to specify the chances of different ores being chosen for replacement
# when lava or water generates stone blocks in the world. The stone generate in the world can be replaced by any block you want as long as its in the bukkit materials list https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/Material.html
# Format: Material_Name:Percentage
# The percentage represents the chance (in whole numbers) of the ore being chosen
# for replacement out of the total replacements when lava or water generates stone.
# Each line represents one ore with its corresponding replacement chance.
# Lines starting with '#' are considered comments and will be ignored by the code.
# Example:
# DIAMOND_ORE:5
# This means that there is a 5% chance of a diamond ore block being chosen
# when lava or water generates a stone block.
# The total sum of percentages should be less than or equal to 100.
# If the sum exceeds 100, the probabilities will be scaled down proportionally
# to fit within the 0-100 range.
# For example, if the total sum of percentages exceeds 100 as follows:
# DIAMOND_ORE:40
# COAL_ORE:60
# IRON_ORE:30
# GOLD_ORE:20
# The total sum is 40 + 60 + 30 + 20 = 150, which exceeds 100.
# To fit within the 0-100 range, the probabilities will be scaled down proportionally:
# DIAMOND_ORE: 40 * (100 / 150) = 26 (approximately 27)
# COAL_ORE: 60 * (100 / 150) = 40
# IRON_ORE: 30 * (100 / 150) = 20
# GOLD_ORE: 20 * (100 / 150) = 13 (approximately 13)
# The adjusted probabilities now add up to 26 + 40 + 20 + 13 = 99, which is within the 0-100 range.
#For if the block generated though water and lava is stone
STONE:
STONE: 98
COAL_ORE: 0.3
COPPER_ORE: 0.4
DIAMOND_ORE: 0.1
EMERALD_ORE: 0.1
GOLD_ORE: 0.2
IRON_ORE: 0.4
LAPIS_ORE: 0.2
REDSTONE_ORE: 0.3
#For if the block generated though water and lava is cobblestone
COBBLESTONE:
DEEPSLATE: 98
DEEPSLATE_COAL_ORE: 0.3
DEEPSLATE_COPPER_ORE: 0.4
DEEPSLATE_DIAMOND_ORE: 0.1
DEEPSLATE_EMERALD_ORE: 0.1
DEEPSLATE_GOLD_ORE: 0.2
DEEPSLATE_IRON_ORE: 0.4
DEEPSLATE_LAPIS_ORE: 0.2
DEEPSLATE_REDSTONE_ORE: 0.3
General Fixes
Synchronized Chunk Clearing:
- Resolved an issue with out-of-sync chunk clearing between the Void Worldgen Data pack and the plugin's block placement, preventing blocks from being placed in chunks not yet processed by the data pack. Increased delay for chunk processing after loading to minimize potential conflicts, particularly during high server loads. Despite this mitigation, during periods of extreme overload, the generator and datapack may still go out of sync intermittently. To further reduce the chance of chunk errors during high loads, consider reducing player render distance. Typically, a reasonable distance is around 6 chunks, but further reduction may be necessary on less capable servers to maintain stability and prevent chunk-related issues.
Performance Optimization:
- Adjusted generator settings to optimize performance on less capable servers. Previously, block placements for the overworld covered a range from -64 to 256, while the nether and end were limited to 0 to 128. Modified block placements to unify the height across all dimensions, reducing load by restricting overworld block placements from -64 to 64, resulting in uniform grids of 128 blocks in height across all dimensions. This adjustment aims to alleviate server load, particularly in environments with higher user activity.
These adjustments aim to enhance synchronization between the plugin and the data pack, ensuring smoother block generation while optimizing server performance for a better user experience.
Chest Support Added
New Feature: Chest Support Added
Key Features:
- Flexible Loot Customization: Tailor chest loot settings with precision, specifying the items, percentages, and amounts.
- Tiered Loot Distribution: Items are distributed into tiers, adding variety and complexity to the loot. Each tier has its own set of items with different probabilities.
- Biome-Specific Chests: Customize chest loot for specific biomes, allowing for a more immersive and thematic distribution of items based on the environment.
- Easy Configuration: Edit the ChestSettings.yml file located in the SkygridBlocks folder to define the loot settings for each chest. Use compact or expanded formatting for easy customization.
How to Use:
- Update your plugin to the latest version.
- Configure Chests: Open the ChestSettings.yml file located in the plugin's SkygridBlocks folder.
- Customize Loot Settings: Define the loot settings for each chest in the configuration file. Use the provided examples as a guide.
# The available items for use can be found at https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/Material.html
# The available biomes can be found here: https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/block/Biome.html
# In YAML, identifiers or keys (such as "Chest1" in your example) are subject to certain rules.
# - Do's -
# Alphanumeric Characters: Identifiers can contain letters (both uppercase and lowercase) and numbers. For example, "Chest1" is a valid identifier.
# Underscores: You can use underscores (_) in identifiers. For instance, "my_chest" is a valid identifier.
# Hyphens in Quoted Strings: If an identifier contains special characters or spaces, you can enclose it in single or double quotes. For example, "'Special Chest'" or "\"Special Chest\"" are valid.
# - Don'ts -
# Special Characters: Avoid using special characters like !, @, #, $, %, etc., in identifiers without enclosing them in quotes. For example, "Chest@123" should be written as "'Chest@123'" if you want to use special characters.
# Leading Spaces: Identifiers should not have leading spaces. For instance, " MyChest" with a space at the beginning is not a valid identifier.
# Trailing Spaces: Similarly, identifiers should not have trailing spaces. "MyChest " with a space at the end is not valid.
# Spaces in the Middle: While you can use spaces within identifiers if they are enclosed in quotes, it's generally a good practice to avoid spaces within identifiers for clarity. For example, "My Chest" is valid, but "MyChest" is more commonly used.
# Reserved Keywords: Avoid using YAML reserved keywords as identifiers. These keywords have special meaning in YAML and should not be used as keys. For example, "true," "false," and "null" are reserved keywords.
# Case Sensitivity: YAML is case-sensitive. "myChest" and "MyChest" would be considered as two different identifiers.
# ChestSettings: This is the top-level section of the YAML configuration and acts as the main container for all chest settings.
# Chest1: This represents the first chest configuration, which we'll be using as an example. The code will look for a chest configuration with the key "Chest1." The key can be whatever you want; it serves as an identifier.
# Items: Under the "Chest1" configuration, there is an "Items" section. The code will process the items listed here to determine what should be placed in the chest's inventory. Formatting: "- ITEM_NAME:PERCENTAGE:MAX_AMOUNT"
# Biomes: This section lists the biomes in which the chest's item configuration will apply. Formatting: "- BIOME_NAME"
Example with Expanded Formatting:
ChestSettings:
Chest1:
Items:
- MYCELIUM:30:5
- RED_MUSHROOM:20:5
- BROWN_MUSHROOM:20:5
- RED_MUSHROOM_BLOCK:10:5
- BROWN_MUSHROOM_BLOCK:10:5
- MUSHROOM_STEM:10:5
Biomes:
- MUSHROOM_FIELDS
# The YAML above will be interpreted as follows:
# For a chest located in the "MUSHROOM_FIELDS" biome, the code will use the specified item settings to randomly populate the chest's inventory. The percentage chances and amount ranges for each item will be considered when filling the chest.
# MYCELIUM:30:5 - This line specifies an item with the name "MYCELIUM" with a chance of 30% (percentage) of being placed in the chest, and the max amount of this item is 5. The code will randomly select a value between 1 and 5 for the number of MYCELIUM to place in the chest.
Example with Compact Formatting:
ChestSettings:
Chest1:
Items: [WOODEN_AXE:20:1, WOODEN_PICKAXE:20:1, CROSSBOW:20:1, ...]
Biomes: [BADLANDS, BAMBOO_JUNGLE, BIRCH_FOREST, ...]
# This is a more compact way of formatting the above. Both versions are valid.
# How to format item entries: [ITEM_NAME:PERCENTAGE:MAX_AMOUNT]. If there is more than one item, you can do [ITEM_NAME:PERCENTAGE:MAX_AMOUNT, ITEM_NAME:PERCENTAGE:MAX_AMOUNT].
# If you are doing multiple biomes, this is also a more compact way of formatting it.
# How to format biome entries: [BIOME_NAME]. If there is more than one biome, you can do [BIOME_NAME, BIOME_NAME].
Sample of 10 chest from the Overworld, Nether, and End with the included Pre-Configuration.
Spawner Support Added
New Feature: Customize Mob Spawner Settings
Elevate your Skygrid adventures with the new Spawner Support feature, offering complete control over mob spawner settings. Customize spawner attributes, including the types of entities, spawn rates, and other parameters.
Key Features:
- Fine-Tune Spawner Settings: Precisely adjust the spawner settings, specifying the entity, delay, max nearby entities, and more.
- Random Entity Selection: Set the spawn weights for entities to add unpredictability to your gameplay. The plugin will select entities randomly based on these weights.
- Worldwide Customization: Customize spawners for all biomes across all world dimensions, ensuring a seamless and immersive experience.
- Grid Block Inclusion: To enable the Spawner Support feature, be sure to add the SPAWNER block to your world.txt, world_nether.txt, or world_the_end.txt configuration in the SkygridBlocks folder. The Spawner code won't be called unless the SPAWNER block is added.
- Biome-Specific Spawners: Customize spawners for specific biomes at the block level, adding a new layer of customization. For example, if you specify the biome as "DEEP_DARK," you can configure spawners to spawn WARDEN entities exclusively in that biome.
How to Use:
- Update your plugin to the latest version.
- Configure Spawners: Open the SpawnerSettings.yml file located in the plugin's folder.
- Customize Settings: Define the settings for each spawner in the configuration file, specifying the entity, delay, max nearby entities, and more. You can use either of the following YML formatting styles, and they will both be read the same by the YML parser:
# The available entities for use can be found at https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/entity/EntityType.html
# The available biomes can be found here: https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/block/Biome.html
# Entities - Define entities and their chances of being chosen for the spawner. Formatting "- DOLPHIN:33.33"
# Biomes - List the biomes where this spawner will spawn. Formatting "- BEACH"
# Delay: - Set the spawner's delay. If set to -1, the delay will be randomized (randomly choose a delay between min and max spawn delays).
# MaxNearbyEntities - Set the maximum nearby entities (of the same type) allowed. Default value is 16.
# MaxSpawnDelay - The maximum spawn delay amount (in ticks). This value must be greater than 0 and less than or equal to MaxSpawnDelay. Default value is 800 ticks.
# MinSpawnDelay - The minimum spawn delay amount (in ticks). Default value is 200 ticks.
# PlayerRange - Set the range for player activation (given that there are players online). Default value is 16.
# SpawnCount - Set how many mobs attempt to spawn. Default value is 4.
# SpawnRange - Set the radius around which the spawner will attempt to spawn mobs in. Default value is 4.
Example with Expanded Formatting:
SpawnerSettings:
Spawner1:
Entities:
- SKELETON:100
- ZOMBIE:100
Biomes:
- FOREST
- PLAINS
Delay: -1
MaxNearbyEntities: 16
MaxSpawnDelay: 800
MinSpawnDelay: 200
PlayerRange: 16
SpawnCount: 4
SpawnRange: 4
Example with Compact Formatting:
SpawnerSettings:
Spawner1:
Entities: [SKELETON:100, ZOMBIE:100]
Biomes: [FOREST, PLAINS]
Delay: -1
MaxNearbyEntities: 16
MaxSpawnDelay: 800
MinSpawnDelay: 200
PlayerRange: 16
SpawnCount: 4
SpawnRange: 4
In these examples, "Spawner1" can spawn both SKELETON and ZOMBIE entities with equal chances.
Random Entity Selection: Create a list of entities with associated spawn weights to add unpredictability to your spawners.
Entities: [SKELETON:10, ZOMBIE:10, CREEPER:5]
In these examples, "Spawner1" can spawn both SKELETON and ZOMBIE entities with equal chances.
With Spawner Support, you have the freedom to tailor your spawner settings to your liking. Enjoy the flexibility to customize spawners for all biomes across all world dimensions, making your Skygrid experience truly unique. Stay tuned for more updates, as I am working on additional features such as chest support. Your feedback and suggestions are highly valued as we continue to improve the plugin.
Biome Generation Support
New Feature: Biome-Specific Block Generation
- Customize the block generation in your world based on different biomes. Specify unique block materials and percentages for each biome in the world.
- Enjoy a more immersive and dynamic Skygrid experience with biome-specific block generation.
How to Use:
- Update your plugin to the latest version.
- Configure Biome-Specific Blocks:
- Open the text files for each world dimension (e.g., world.txt, world_nether.txt, world_the_end.txt) located in the plugin's folder.
- Specify block materials and their respective percentages for each biome in your world.
For example:
DIRT:20
STONE:20
GRASS_BLOCK:20
-OCEAN-
SAND:50
WATER:50
-DESERT-
SAND:100​
- In this example, when generating chunks in the "OCEAN" biome, there's a 50% chance of generating "SAND" blocks and a 50% chance of generating "WATER" blocks. In the "DESERT" biome, only "SAND" blocks will be generated. For the blocks above they will be generated on all biomes not specified in the file for that dimension. So, if you only want to have 1 custom biome with the rest having another variety of blocks you can do that.
- Biomes are signified by the -BIOME_NAME-, everything under the biome header will generate only in that biome, unless there is another biome under it like in the example above.
Here is another example,
-OCEAN-
SAND:80
SANDSTONE:9
SEA_PICKLE:1
TUBE_CORAL:1
TUBE_CORAL_FAN:1
HORN_CORAL:1
HORN_CORAL_FAN:1
FIRE_CORAL:1
FIRE_CORAL_FAN:1
BUBBLE_CORAL:1
BUBBLE_CORAL_FAN:1
BRAIN_CORAL:1
BRAIN_CORAL_FAN:1
- Supported biomes can be found here: Biomes
I hope this new feature adds a layer of depth to your Skygrid adventures. As always, we value your feedback and suggestions to further improve the plugin. Feel free to reach out with any questions or comments. Next features being worked on right now is spawner and chest support, no ETA.
Fixed "moved too quickly" Warnings
Issues:
- Warning spam when players used /tpr command
- Example: [99:99:99 WARN]: Go0fy_Go0ber moved too quickly! 999,999,999
Remedies:
- Resolved the issue of "moved too quickly" warnings spam by enhancing the block identification system, ensuring players are less likely to be teleported onto dangerous blocks.