🌿 VeinSpread
by Moon Flower
Organic vein-based block spreading — like mycelium, sculk, or vines. A lightweight Paper/Spigot plugin for Minecraft 1.21+. Fully configurable via
config.ymlor in-game commands.
✨ Features
- Veins, not circles. Infection grows in winding lines with branches — like mycelium, sculk veins, or tree roots.
- Catalyst-driven. Place a catalyst block — and veins start crawling from it. Break it — growth stops, but the blocks that have already grown remain in the world.
- Full control. Step speed, vein length, branching frequency, direction "inertia", vertical branches, tip limit — everything is configurable.
- Replaceable blocks list. You decide what the vein is allowed to "eat". Use
/vein blocksto see the current list. - Time conditions. Veins can grow only at night, only during the day, or always.
- In-game management. The
/veincommand with tab-completion: change percentages, blocks, and speed without restarting the server. Changes are saved to the config immediately. - Persistent growth. Active veins are saved to
veins.jsonand seamlessly resume after a server restart. - Localization. Player messages support both English and Russian out of the box.
🎯 Target Audience
- SMP servers looking to add a "living world" without mods or new dimensions.
- Lore-based survival — veins as an "infection", "curse", or "ancient corruption".
- Builders and decorators — beautiful organic patterns made of sculk or mycelium.
- Admins who need a customizable alternative to the sculk catalyst with flexible logic.
📦 Installation
- Make sure you have Paper 1.21+ (or Spigot 1.21+) and Java 21.
- Download
VeinSpread-1.1.1.jarfrom the releases page on Modrinth or GitHub. - Place the
.jarinto theplugins/folder on your server. - Restart the server.
- Open
plugins/VeinSpread/config.yml— or use/veindirectly in-game.
⚙️ Quick Start
Minimal example: mycelium turns stone and dirt into mycelium, grows every 3 seconds, veins are 12 blocks long, branching chance is 25%.
vein:
catalyst-block: "MYCELIUM"
result-block: "MYCELIUM"
replaceable-blocks:
- "STONE"
- "DIRT"
- "GRASS_BLOCK"
interval-ticks: 60
tip-energy: 12
branch-chance: 0.25
persistence: 0.75
max-branch-depth: 3
vertical-branch-chance: 0.1
max-tips-per-catalyst: 8
time-conditions:
enabled: false
Place a mycelium block on stone — and step back. In a couple of seconds, you will see veins crawling across the stone.
🧩 Configuration
vein section
| Parameter | Type | Default | Description |
|---|---|---|---|
catalyst-block |
Material | SCULK_CATALYST |
The block that triggers growth when placed |
result-block |
Material | SCULK |
What the "eaten" blocks turn into |
replaceable-blocks |
list | stone, cobblestone, dirt, grass_block, deepslate | Blocks the vein is allowed to replace |
interval-ticks |
int | 100 |
Interval between steps (20 ticks = 1 sec) |
tip-energy |
int | 12 |
How many steps a single tip makes |
branch-chance |
0.0–1.0 | 0.2 |
Chance to branch at each step |
max-branch-depth |
int | 3 |
Maximum branching depth |
persistence |
0.0–1.0 | 0.7 |
Inertia: 1.0 — straight lines, 0.0 — chaos |
vertical-branch-chance |
0.0–1.0 | 0.1 |
Chance to branch up/down |
max-tips-per-catalyst |
int | 8 |
Lag protection |
time-conditions section
| Parameter | Type | Default | Description |
|---|---|---|---|
enabled |
bool | false |
Enable in-game time condition |
start-time |
long | 13000 |
Start of the window (ticks, 0–24000) |
end-time |
long | 23000 |
End of the window (supports wrap-around past 0) |
🎮 Commands
All commands require the veinspread.admin permission (default is op).
| Command | Description |
|---|---|
/vein reload |
Reload the config |
/vein info |
Show current settings |
/vein list |
List active catalysts and tips |
/vein blocks |
List all replaceable blocks |
/vein set <parameter> <value> |
Change a setting on the fly |
/vein addblock <Material> |
Add a block to the list |
/vein removeblock <Material> |
Remove a block from the list |
/vein help |
Show help |
Examples
/vein set branch-chance 30%
/vein set persistence 0.85
/vein set interval 60
/vein set tip-energy 20
/vein set vertical 5%
/vein set max-branch-depth 4
/vein set maxtips 12
/vein set catalyst-block MYCELIUM
/vein set result-block MYCELIUM
/vein addblock RED_SAND
/vein removeblock DIRT
/vein set time true
/vein set start-time 13000
/vein set end-time 23000
Percentages are accepted as 30%, 0.3, or 30 — the parser understands all three forms.
🔑 Permissions
| Permission | Description | Default |
|---|---|---|
veinspread.admin |
Access to /vein commands |
op |
🎨 Use Cases
Survival "Corruption"
vein:
catalyst-block: "SCULK_CATALYST"
result-block: "SCULK"
replaceable-blocks: ["STONE", "DEEPSLATE", "COBBLESTONE", "GRAVEL"]
interval-ticks: 120
tip-energy: 25
branch-chance: 0.15
persistence: 0.85
max-branch-depth: 2
vertical-branch-chance: 0.05
max-tips-per-catalyst: 4
time-conditions:
enabled: true
start-time: 13000
end-time: 23000
At night, the corruption crawls across the stone; during the day, it freezes. Perfect for a "cursed biome".
"Living Forest"
vein:
catalyst-block: "OAK_LOG"
result-block: "MOSS_BLOCK"
replaceable-blocks: ["DIRT", "GRASS_BLOCK", "STONE", "COBBLESTONE"]
interval-ticks: 80
tip-energy: 15
branch-chance: 0.35
persistence: 0.6
vertical-branch-chance: 0.2
max-tips-per-catalyst: 12
🛠️ Building from Source
git clone https://github.com/Moon-F1ower/VeinSpread.git
cd VeinSpread
mvn clean package
The compiled .jar will appear in target/VeinSpread-x.y.z.jar.
Requirements: Maven 3.9+, JDK 21.
❓ FAQ
Can I use it on Spigot instead of Paper?
Yes, but Paper is recommended — it was tested on Paper, and the 1.21 API is more stable there.
Does it work with WorldGuard?
Not yet — the plugin places blocks via Block.setType() without firing BlockSpreadEvent. WorldGuard won't see it. It's on the roadmap.
Are veins saved after a restart?
Yes! Active veins are saved to veins.json every 5 minutes and on server shutdown. They will seamlessly resume growing when the server starts again.
Can I have multiple catalysts with different settings?
In the current version — no, there is a single config for the server. Profiles by Material are on the roadmap.
Are thin veins (sculk veins, lichen) supported?
No, only full block replacement. It's on the roadmap.
Why aren't the veins growing?
- The catalyst is placed (not just in the inventory).
- Blocks in
replaceable-blocksmatch by exactMaterial. - If
time-conditionsis enabled — it is currently the right time. - Chunks are loaded (a player is nearby).
🗺️ Roadmap
- Save active veins to disk (YAML/JSON) (Done in v1.1.0)
- In-game localization (English/Russian) (Done in v1.1.0)
- Support thin blocks (
SCULK_VEIN,GLOW_LICHEN,VINE) - Different catalyst profiles (
Map<Material, Profile>) - Light and biome conditions
- Fire
BlockSpreadEventfor WorldGuard / GriefPrevention compatibility - bStats
-
BlockFadeEvent— "decaying" veins without a catalyst
📜 License & Source
This project is licensed under the MIT License — see LICENSE. Source code is available on GitHub: github.com/Moon-F1ower/VeinSpread
💬 Feedback
Found a bug or have a suggestion? Please open an issue on GitHub: github.com/Moon-F1ower/VeinSpread/issues
If you use the plugin on your server — I'd love to see screenshots in the Modrinth comments 🌿
No gallery available for this project.
| Version | Minecraft | Loader | Download |
|---|---|---|---|
|
VeinSpread 1.2.0 1.2.0 |
1.21, 1.21.1, 1.21.10, 1.21.11, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9
|
bukkit, paper, purpur, spigot
|
Download |
|
VeinSpread 1.1.1 1.1.1 |
1.21, 1.21.1, 1.21.10, 1.21.11, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9
|
bukkit, paper, purpur, spigot
|
Download |
|
VeinSpread 1.1.0 1.1.0 |
1.21, 1.21.1, 1.21.10, 1.21.11, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9
|
bukkit, paper, purpur, spigot
|
Download |