GlymeraFarmWater v4.0

Water blocks automatically keep nearby farmland watered within a 4-block radius. Minecraft-Style.
GlymeraIrrigation - Changelog

v4.0.0 (2026-05-30)


Changed (performance — no behaviour change)

  • The 30-second discovery scan (which previously scanned every loaded chunk for farmland and water in a single server tick) is now amortized across many ticks in small bounded slices. This removes the once-per-cycle tick stutter on large farms.
  • The water to farmland reverse lookup is now computed once per discovery pass and reused by every 10-second irrigation scan, instead of being rebuilt on every scan.

Fixed

- Hardened a restart edge case introduced by the amortized discovery: until the first discovery pass has fully completed after a restart, the irrigation scan now skips (instead of treating "no data yet" as "no water nearby"). This guarantees that already-watered fields — whose watered state is persisted by the game — are never wrongly dried out during the warm-up window. The per-block watered persistence mechanism itself (the external-water flag + watered-until time) is unchanged.

Unchanged

- Irrigation radius (4 blocks), watered-state persistence across chunk reload and server restart, and the "only dehydrate our own blocks" behaviour (watering-can fixes remain). No config migration.

Notes

  • Server restart required to load the new JAR.
  • Earlier versions (up to v3.0.0) were internal builds and were not separately documented.

Hytale Stable-5 Migration
All Glymera plugins updated for Hytale Server 0.5.x (Stable 5)

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

All Glymera plugins have been updated for compatibility with Hytale Server 0.5.x (Stable 5). The previous versions targeted Hytale Server 0.4.x (Stable 4).

This document covers what changed in the Hytale Server API between Stable 4 and Stable 5, and which adjustments were required across plugins so that things keep working.

Why a new major version

Stable 5 introduced a number of source-incompatible API changes. A plugin compiled against Stable 4 will either fail to load, fail silently on first use, or — in a few cases — crash the world thread. Because the surface of change is large, every plugin received a new major version number, even when the only functional behaviour change was a manifest flag.

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

What changed in Hytale Stable 5

Vector math
  • Internal Hytale vector types were replaced by JOML.
  • com.hypixel.hytale.math.vector.Vector3d/3i/3f → org.joml.Vector3d/3i/3f
  • Rotation helpers now use the Rotation3fc interface where the older API took a concrete Rotation3f.

Particle / Sound API
  • SpawnParticleSystem constructors gained additional arguments.
  • PlaySoundEvent3D / ambient sound registration semantics tightened — long-running or looped sounds attached to a block must now use the block-state AmbientSoundEventId path; firing them with PlaySoundEvent3D from a tick handler no longer behaves correctly.

Asset pack registration
  • AssetModule.registerPack(...) now requires a PackSource parameter (use PackSource.MODS for plugin-installed packs).
  • The IncludesAssetPack manifest flag is now strictly enforced. If a plugin both declares IncludesAssetPack: true and registers a runtime pack from its setup code, Hytale detects this as a duplicate registration and aborts boot with "Duplicate asset pack ... Remove the duplicate." For affected plugins IncludesAssetPack is now set to false; the actual asset pack is installed by the plugin at startup as before.

HUD / UI system
  • The HudManager API has moved to a keyed model — HUD entries now require a stable key and explicit lifecycle hooks.
  • InteractiveCustomUIPage event bindings are wiped if the page is rebuilt while the client is processing a click. Plugins refreshing a HUD per tick had to throttle the rebuild rate (commonly to 1 Hz) so button presses are not lost.

Player handles
  • The Player component and the PlayerRef reference have been split. Plugins previously juggling one or the other now need to consider both.
  • ServerPlayerListPlayer requires a worldUuid field — entries without it are silently dropped from the tab list.

Entity utilities
  • EntityUtils.toHolder(...) was removed. Lookups need to go through the entity store directly or via Ref<EntityStore>.

Damage system
  • Resistance fields on EntityEffect (damageResistanceValuesRaw, damageResistanceValues) now expect ResistanceModifier[], not StaticModifier[]. Plugins that previously injected resistances via reflection now use the ResistanceModifier(ResistanceCalculationType, float) constructor.
  • The corresponding JSON CalculationType value "Multiplicative" is no longer accepted for damage resistance — it must be "Percent". Migrating large packs needed a bulk rewrite of Potion/Effect JSONs.
  • Lethal-damage detection: EntityStatValue#getMin() is no longer a usable death-threshold. Lethal checks now compare the post-damage health against 0.0f directly. Plugins relying on the old behaviour would silently fail to fire and the player just died.

ECS / system tick safety
  • It is no longer legal to call mutating store methods (addComponent, removeEntity, …) directly from inside a system's tick handler. Doing so now throws IllegalStateException: Store is currently processing! Such calls must be deferred: either via the system's CommandBuffer, or by scheduling onto the next world tick with world.execute(...).

Items, weapons and recipes
  • Custom swords must declare Tags.Type: "Weapon" (not "Tool"), and they need their own complete InteractionVars block — these are no longer inherited from the parent template under Stable 5. A custom weapon without its own InteractionVars will spawn but cannot deal damage.
  • Recipe bench IDs and recipe categories are now validated against the asset registry. Mistyped values cause Hytale to silently drop the recipe with no error message.

Cosmetics
  • CosmeticsToHide now only accepts a restricted, enumerated set of values. Custom values are rejected at asset-load time.

Server authentication

After every Stable update the server's OAuth credentials must be refreshed:
  1. auth logout
  2. auth login device
  3. Open the printed verification URL, complete the device authorisation
  4. auth select <profile>
If the server is still on cached OAUTH_STORE credentials after a Stable update, every incoming player connection is rejected with serverAuthUnavailable and the client only sees "QUIC handshake failed".

Manifest / ServerVersion
  • Stable 5 enforces a recognisable ServerVersion declaration in each plugin's manifest.json. A malformed value prevents the server from booting. Glymera plugins declare "ServerVersion": "*" to remain agnostic across patch versions.

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Plugin-data path

The plugin-data directory used by all Glymera plugins is now:

mods/de.glymera_<PluginName>/

(Previously it was plugins/<PluginName>/.) Existing configuration files are not migrated automatically — if you want to keep custom configuration from an older install, move the relevant files from the old plugins/ location into the new one before first launch.
Clean Release - All Plugins

2026-03-16

Silent Operation
  • Removed all debug and info log output from every plugin. Plugins now operate completely quietly in the background, keeping your server log clean and free of plugin messages.

Major Version Bump
  • All plugins have been bumped to the next major version to clearly distinguish this clean release from previous development builds.

Universal Server Compatibility
  • All plugins now use wildcard server versioning for maximum compatibility with future Hytale server updates.
v1.4.0

Watering Can Fix

  • Manual Watering Preserved - Farmland watered by hand (e.g. with a watering can) is no longer affected by the plugin. The irrigation system now only manages blocks it irrigated itself, so your manual watering stays intact.

Performance Improvements

  • Water Position Caching - The plugin no longer checks every single farmland block for nearby water each scan cycle. Water positions are now cached and looked up directly, massively reducing chunk reads per cycle.
  • Smart Region Scanning - Water scanning is limited to areas where farmland actually exists, skipping empty regions entirely. This results in significantly faster irrigation scans, especially on servers with large farms.
v1.3.1

Fix: Native Decay Handoff on Water Removal

  • Visual Reset - dehydrateBlock() now resets the block state to default/fertilized immediately (soil turns dry visually right away)
  • scheduleTick - A native Hytale tick is scheduled so tickSoil() performs the decay to Soil_Mud_Dry
  • Early Return - Already dehydrated blocks are skipped to avoid unnecessary work per scan cycle

v1.3.0

Complete Rewrite of Irrigation Logic

  • externalWater instead of wateredUntil - setExternalWater(true) is now the primary mechanism. This is a persistent boolean flag that survives chunk unload/reload
  • wateredUntil as Backup - The native WaterGrowthModifierAsset overrides externalWater during crop ticks (only checks 1-block radius). wateredUntil keeps the soil moist and the growth multiplier active as a fallback
  • Game-Time instead of Real-Time - Uses WorldTimeResource.getGameTime() (30x speed) instead of Instant.now(). Fixes the issue where timers expired in real time during chunk unloads
  • Decay Protection - setDecayTime() is set far into the future for unplanted farmland near water. Hytale's decay system is independent of watering!
  • Block State Variant IDs - All 4 state IDs are now registered (Base=38, Watered=3061, Fertilized=3238, Fertilized_Watered=2301). Without tracking all variants, irrigated blocks were lost after state changes
  • dehydrateBlock() - New method that removes externalWater, clears wateredUntil, and sets decayTime to the native ~58 real-time minutes

Bugfixes

  • Farmland dries out overnight - Root cause was wateredUntil using a 20s real-time timer that expired as soon as chunks were unloaded
  • Farmland disappears from tracking after irrigation - Block ID changes from 38 (Base) to 3061 (Watered) via setBlockInteractionState() but was not in the tilledSoilBlockIds set
  • Planting seeds makes wet soil dry - Native WaterGrowthModifierAsset sets externalWater=false during crop ticks (only 1-block range). Resolved by using wateredUntil as backup

v1.2.0

Optimization

  • Chunk-based discovery with direct BlockSection access
  • Block ID caching instead of string comparisons
  • Scans all loaded chunks per cycle (~2-10ms for 1000 chunks)
  • blockChunk.contains(id) as quick filter on chunk and section level

v1.1.0

Chunk-Based Discovery

  • Farmland detection is no longer player-based
  • Scans all loaded chunks regardless of player position

v1.0.0

Initial Release

  • Automatic irrigation of farmland within a 4-block radius of water
  • wateredUntil-based system with periodic refresh
EULA: Free EULA
522 Views
4 Downloads
Feb 23, 2026 Published
May 30, 2026 Updated
Not yet rated
9.6 KB File size
Open source
  1. No
DRM-free
  1. Yes
Unobfuscated
  1. Yes
Type
  1. Gameplay
  1. Food
  1. Optimization
Game mode
  1. Survival
  1. Creative
  1. CityBuild
Supported languages
  1. English
Creator
Recommended for you
Personal teleportation network with custom heads GUI and 10 languages
5.00 star(s) 2 ratings
4 purchases
Automated tree farming - place, charge with Spawn Saplings, collect logs, leaves, sticks & more.
5.00 star(s) 1 ratings
1 purchase
Reward players with money for mining blocks - encouraging active gameplay.
5.00 star(s) 1 ratings
1 purchase
Smelt ores directly into blocks - place ore in, get blocks out automatically!
5.00 star(s) 1 ratings
1 purchase
Browse and collect over 90,000 decorative heads across 10 categories with an intuitive GUI.
5.00 star(s) 1 ratings
1 purchase
522 Views
4 Downloads
Feb 23, 2026 Published
May 30, 2026 Updated
Not yet rated
9.6 KB File size
Open source
  1. No
DRM-free
  1. Yes
Unobfuscated
  1. Yes
Type
  1. Gameplay
  1. Food
  1. Optimization
Game mode
  1. Survival
  1. Creative
  1. CityBuild
Supported languages
  1. English
Creator
Recommended for you
Personal teleportation network with custom heads GUI and 10 languages
5.00 star(s) 2 ratings
4 purchases
Automated tree farming - place, charge with Spawn Saplings, collect logs, leaves, sticks & more.
5.00 star(s) 1 ratings
1 purchase
Reward players with money for mining blocks - encouraging active gameplay.
5.00 star(s) 1 ratings
1 purchase
Smelt ores directly into blocks - place ore in, get blocks out automatically!
5.00 star(s) 1 ratings
1 purchase
Browse and collect over 90,000 decorative heads across 10 categories with an intuitive GUI.
5.00 star(s) 1 ratings
1 purchase
Top