AbyssalLib Help

Creating Your First Feature

Features allow you to generate blocks naturally into the world during chunk generation, such as custom trees, ores, or structures.

Creating a feature

To create a new feature, navigate to your server's plugin directory and create a JSON file at the following path: plugins/AbyssalLib/worldgen/features/<namespace>/<feature_name>.json

(For example: plugins/AbyssalLib/worldgen/features/abyssallib_example/gold_block_ore.json)

The feature JSON file consists of four primary sections:

  1. "type": Defines the base feature logic to use (e.g., an ore vein or a tree).

  2. "config": Holds the specific configuration parameters required by the chosen feature type.

  3. "placement": Defines the rules and modifiers that dictate where, how often, and at what altitudes the feature generates within a chunk.

  4. "worlds": A list of world names where this feature is permitted to generate. If this array is empty, the feature will not generate anywhere.

{ "type": "abyssallib:ore", "config": { "targets": [ { "target": [ { "id": "minecraft:stone" }, { "id": "minecraft:deepslate" } ], "state_provider": { "type": "abyssallib:simple", "state": { "id": "minecraft:gold_block" } } } ], "size": 9 }, "placement": [ { "type": "abyssallib:count", "count": 12 }, { "type": "abyssallib:in_square" }, { "type": "abyssallib:height_range", "min_inclusive": -64, "max_inclusive": 32 } ], "worlds": [ "world" ] }

BlockInfo Format

When defining blocks inside your configuration (such as the "target" blocks to replace, or the "state" block to place), AbyssalLib uses a specific BlockInfo JSON object format.

Key

Information

"id"

The namespace identifier of the block (e.g., "minecraft:stone", "abyssallib_example:custom_ore").

"states"

A key-value map defining standard vanilla block states (e.g., "facing": "north").

"properties"

A key-value map defining custom properties specific to AbyssalLib custom blocks.

"nbt"

A JSON object defining TileEntity data for vanilla blocks.

05 June 2026