← All plugins
GlymeraCropSpread icon

GlymeraCropSpread

Mature crops automatically spread to adjacent empty farmland blocks.

v5.0.0 Hytale 0.6.x FarmingUtilityQuality of Life

Gallery

Description

🌾 GlymeraCropSpread v1.1.0 🌾

Mature crops automatically spread to adjacent empty farmland blocks. Natural farm expansion without player interaction!


◆ What is GlymeraCropSpread?

GlymeraCropSpread is a farming automation plugin for Hytale servers. When a crop reaches full maturity (StageFinal), it has a chance to spread to adjacent empty farmland blocks - just like grass spreading in nature. The newly placed crop starts as a baby plant and grows up naturally through Hytale's built-in FarmingBlock system. No custom growth tracking, no tick manipulation - just natural farm expansion.

Plant a few seeds, wait, and watch your farm grow on its own.

◆ How It Works

The plugin runs a scan cycle at a configurable interval (default: every 60 seconds). During each cycle:

  1. All loaded chunks are scanned for mature crops (StageFinal)
  2. For each mature crop found, a random chance is rolled (default: 25%)
  3. If the chance succeeds, the plugin checks the 4 adjacent blocks (North, South, East, West)
  4. A valid spread target must have empty air above and tilled farmland below
  5. One random valid target is chosen and a new baby crop of the same type is placed
  6. Hytale's native FarmingBlock system takes over and grows the new plant naturally

▸ Spread Rules

  • Only mature crops spread - Growing crops (Stage1, Stage2, etc.) do not spread. Only fully grown StageFinal plants trigger spreading.
  • Farmland required - Both the source crop and the target position must have tilled farmland (Soil_Dirt_Tilled) below. Watered and fertilized farmland variants are also recognized.
  • Empty space required - The target block must be empty (air). Crops will not overwrite existing blocks.
  • Cardinal directions only - Crops spread North, South, East, or West. No diagonal spreading.
  • Cross-chunk spreading - Crops at chunk borders can spread into adjacent loaded chunks.
  • Random target selection - If multiple adjacent blocks are valid, one is chosen randomly.
  • Max spreads per cycle - A configurable cap prevents performance issues on large farms (default: 50 per cycle).

◆ Supported Crops (16)

All 16 crop types are enabled by default. Each can be individually enabled or disabled in the config.

  • Wheat
  • Corn
  • Carrot
  • Potato
  • Tomato
  • Onion
  • Lettuce
  • Cauliflower
  • Aubergine
  • Chilli
  • Turnip
  • Pumpkin
  • Rice
  • Cotton
  • Berry
  • Apple

◆ Configuration

On first start, a config file is automatically created at: mods/GlymeraCropSpread/config.json

Stop the server, edit the file with any text editor, and restart the server to apply changes. The default config:

{
  "spreadIntervalSeconds": 60,
  "spreadChancePercent": 25,
  "maxSpreadsPerCycle": 50,
  "crops": {
    "Plant_Crop_Wheat_Block": true,
    "Plant_Crop_Corn_Block": true,
    "Plant_Crop_Carrot_Block": true,
    "Plant_Crop_Potato_Block": true,
    "Plant_Crop_Tomato_Block": true,
    "Plant_Crop_Onion_Block": true,
    "Plant_Crop_Lettuce_Block": true,
    "Plant_Crop_Cauliflower_Block": true,
    "Plant_Crop_Aubergine_Block": true,
    "Plant_Crop_Chilli_Block": true,
    "Plant_Crop_Turnip_Block": true,
    "Plant_Crop_Pumpkin_Block": true,
    "Plant_Crop_Rice_Block": true,
    "Plant_Crop_Cotton_Block": true,
    "Plant_Crop_Berry_Block": true,
    "Plant_Crop_Apple_Block": true
  }
}

▸ spreadIntervalSeconds

How often the plugin scans for mature crops and attempts to spread them. Lower values mean faster spreading but slightly more server load. Default: 60 | Minimum: 5

▸ spreadChancePercent

The percentage chance that each mature crop will attempt to spread during a scan cycle. At 25%, roughly 1 in 4 mature crops will try to spread each cycle. Default: 25 | Range: 1-100

▸ maxSpreadsPerCycle

The maximum number of new crops that can be placed in a single scan cycle. This prevents performance issues on servers with very large farms. Default: 50 | Minimum: 1

▸ crops

Per-crop toggle. Set any crop to false to prevent it from spreading. Useful if you want only certain crops to auto-expand. Example - disable wheat and corn spreading:

"crops": {
    "Plant_Crop_Wheat_Block": false,
    "Plant_Crop_Corn_Block": false,
    ...
}

◆ Performance

GlymeraCropSpread is designed for minimal server impact:

  • Chunk-level filtering - Chunks without mature crops are skipped entirely before any block-level scanning begins
  • Section-level filtering - Within chunks, sections (32x32x32) without mature crops are also skipped
  • FastUtil collections - Uses high-performance integer hash sets for block ID lookups instead of standard Java collections
  • Capped spreads - The maxSpreadsPerCycle setting ensures scan cycles terminate early once the limit is reached
  • Y-range limited - Only scans between Y=30 and Y=200, skipping underground and sky sections
  • No tick manipulation - Does not modify Hytale's internal tick rate or farming system. Growth after placement is 100% native.

◆ Installation

  1. Stop your Hytale server
  2. Copy GlymeraCropSpread-1.1.0.jar into your server's mods/ folder
  3. Start the server
  4. The config file will be created automatically at mods/GlymeraCropSpread/config.json
  5. Check the server log for: "[GlymeraCropSpread] Started v1.1.0 - Interval: 60s, Chance: 25%, Max/Cycle: 50"
server/
└── mods/
    └── GlymeraCropSpread-1.1.0.jar

No pack required. No dependencies. Just one JAR file.

◆ Server Log Output

Example log messages:

[GlymeraCropSpread] Config loaded
[GlymeraCropSpread] Farmland 'Soil_Dirt_Tilled' -> ID 3421
[GlymeraCropSpread] Crop 'Plant_Crop_Wheat_Block' -> StageFinal ID 5102
[GlymeraCropSpread] Crop 'Plant_Crop_Corn_Block' -> StageFinal ID 5118
[GlymeraCropSpread] Resolved 16 crop types, 4 farmland IDs
[GlymeraCropSpread] Started v1.1.0 - Interval: 60s, Chance: 25%, Max/Cycle: 50, Crops: 16, Farmland IDs: 4
[GlymeraCropSpread] Spread 12 new plants
[GlymeraCropSpread] Spread 8 new plants
[GlymeraCropSpread] Stopped.

◆ Technical Details

  • No ECS systems registered - the plugin uses a scheduled executor task independent of Hytale's entity system
  • Block placement via BlockAccessor.setBlock() with the base crop block name - Hytale's FarmingBlock system handles all growth stages natively
  • Mature crops are detected by their StageFinal interaction state block ID (e.g. *Plant_Crop_Wheat_Block_State_Definitions_StageFinal)
  • Farmland detection includes all tilled soil variants: base, watered, fertilized, and fertilized+watered
  • Block operations are deferred to the world thread via world.execute() to avoid concurrency issues
  • All block ID lookups use FastUtil IntOpenHashSet and Int2ObjectOpenHashMap for O(1) performance
  • Scan range is limited to Y=30-200 with section-level pre-filtering (sections are 32 blocks tall)

◆ Summary

  • 16 crop types supported, all individually toggleable
  • Automatic spreading - mature crops spread to adjacent empty farmland
  • Native growth - new plants grow through Hytale's built-in FarmingBlock system
  • Configurable - interval, chance, max spreads, per-crop toggle
  • Performance optimized - chunk and section pre-filtering, FastUtil collections, spread cap
  • Cross-chunk capable - crops at chunk borders spread into neighboring chunks
  • Zero dependencies - one JAR, no pack required, no external libraries
  • Farmland-aware - recognizes base, watered, fertilized, and fertilized+watered farmland

◆ Changelog

▸ v1.1.0

  • Added section-level pre-filtering for improved scan performance
  • Added farmland variant detection (watered, fertilized)
  • Config validation with minimum value enforcement

▸ v1.0.0 - Initial Release

  • Automatic crop spreading with configurable interval, chance, and cap
  • 16 crop types with per-crop toggle
  • JSON config with auto-generation

◆ Support

Having issues or questions? Leave a message here or visit our Discord!


Developed by GlymeraCraft

Changelog

GlymeraCropSpread — Changelog

v5.0.0 (2026-08-28) — Hytale 0.6.0 (Update 6)

  • Rebuilt for Hytale 0.6.0 (Update 6). Requires server 0.6.0 or newer; this version does not run on 0.5.x, and older versions of this plugin do not run on 0.6.0.
  • Migrated to the 0.6.0 APIs (network protocol hytale/3, new command-permission API, block/chunk/entity API changes). Everything that was open to players before is open to players again.
  • Upgrade: delete the old jar from mods/, drop in the new one and keep the plugin's data folder — configs and saved data carry over unchanged. Restart the server.

v4.0.0 (2026-05-30)

Changed (performance only — no gameplay change)

  • The periodic spread scan no longer scans the whole world in a single server tick.
    It is now amortized across many ticks in small bounded slices (each slice is capped
    by a block-read budget and a chunk budget). A large farm can therefore no longer
    cause a once-per-cycle tick stutter.
  • Spread chance per crop, the per-cycle spread cap, the scan interval, and all crop
    toggles are unchanged. Crops spread at the same rate and to the same valid targets
    (empty farmland on N/S/E/W) as before.

Unchanged

  • config.json (spreadIntervalSeconds, spreadChancePercent, maxSpreadsPerCycle,
    crops). No migration required.
  • Growth is still handled natively by Hytale; the plugin only places baby crops on
    valid empty farmland.

Notes

  • Server restart required to load the new JAR.
  • Earlier versions (up to v3.0.0) were internal builds and were not separately
    documented.
Public — visible to everyone. No account needed.

Only Marc can read this.