← All plugins
GlymeraFloatingIslands icon

GlymeraFloatingIslands

Floating sky-islands worlds for Hytale. 6 biome presets with native Hytale vegetation, structures and mobs. Configurable island size and density.

v8.0.0 Hytale 0.6.x World GenMiscellaneous

Gallery

Description

GlymeraFloatingIslands - Sky Islands for Hytale

Create new worlds made entirely of floating islands - Minecraft-style. Choose a theme or let each zone keep its native biome.


What is GlymeraFloatingIslands?

GlymeraFloatingIslands adds floating sky islands worlds to your server. Each world consists purely of islands suspended in the air - no ground, no ocean, no caves. The islands are generated natively by Hytale's terrain pipeline, so they come with grass, flowers, trees, structures, NPCs and mobs out of the box, exactly as they would on a normal map.

You pick a biome preset when you create a world, and every island in that world is built from the preset's blocks. Or you go with the native preset and let each zone keep its own biome - so a single world has sand islands in desert zones, snow islands in tundras, grass islands in plains, and so on.

Works out of the box - one command to create, one to teleport. No client mod needed.


Quick Start

/fi biomes             - Show available biome presets
/fi create sky native  - Create a new floating-islands world named "sky"
/fi tp sky             - Teleport to it
/fi back               - Return to your previous world

That's it. The world is generated, saved, and persists across server restarts.


Biome Presets

Preset Surface Atmosphere
native per-zone Mixed - sand in deserts, snow in tundras, grass in plains, etc.
grasslands Soil_Grass / Soil_Dirt / Rock_Stone Classic green Minecraft-style
desert Soil_Sand_White / Rock_Sandstone / Rock_Stone Warm sandy islands
snow Soil_Snow / Rock_Ice / Rock_Stone Frozen arctic islands
volcanic Rock_Basalt / Rock_Volcanic / Rock_Slate Dark basalt floating rocks
crystal Rock_Quartzite / Rock_Marble / Rock_Calcite Pale crystalline islands

Every preset places native covers (grass, flowers, trees), structures (Hytale Unique-Prefabs) and NPC spawns on the islands. Only block materials and island density differ per preset.


Commands

Command Who Description
/fi create <name> <biome> OP Create a new floating-islands world
/fi tp <name> OP Teleport to a managed world
/fi back OP Return to the previous world
/fi list Everyone List all floating-islands worlds
/fi biomes Everyone Show all available biome presets
/fi delete <name> OP Delete a world (folder + config, no server restart needed)
/fi reload OP Reload the config and re-apply per-world settings

/fi delete cleanly unloads the world from Hytale, deletes its disk folder, and removes it from the plugin config - all in one step. No server restart, no manual cleanup. The player running the command must teleport out first, and no other players may be in the world.


Installation

  1. Place GlymeraFloatingIslands-3.0.0.jar in your server's mods/ folder
  2. Start (or restart) the server
  3. Done! No asset pack, no config file needed for defaults.

Features

  • Native Hytale world generation - islands use the real biome pipeline, so vegetation, trees, structures, and mobs all spawn naturally
  • 3D Simplex noise islands - organic cave-like shapes, not blocky
  • Vertical taper - soft edges top and bottom, no flat cutoffs
  • Guaranteed spawn platform at world origin so you never fall into the void on first teleport
  • Configurable per world - island size, density, Y-range, custom block choices - tunable in plugins/GlymeraFloatingIslands/config.json and applied with /fi reload
  • Legacy config support - old noiseScale field from pre-1.0 versions is accepted as an alias for islandSize
  • Event-driven biome application - islands work correctly even for worlds that already existed before the plugin was installed, and across server restarts
  • No caves - cave-prefab stalactites that would dangle in empty sky space are disabled per world
  • No water - empty sky worlds don't generate oceans between islands
  • Bounded prefab placement - native structure-prefabs only spawn within the island Y-range, never floating in the empty air below
  • Chunk post-processor - any block that slipped in outside the island range (forced unique-prefab fallbacks, leftover structure bits) is cleared automatically during chunk load

Configuration

Every world gets an entry in plugins/GlymeraFloatingIslands/config.json. Defaults come from the preset you chose. You can override any value and reload:

{
  "worlds": {
    "sky": {
      "islandSize": 0.015,
      "density": 0.30,
      "heightMin": 120,
      "heightMax": 200,
      "surfaceDepth": 3,
      "surfaceBlock": "Soil_Grass",
      "subBlock": "Soil_Dirt",
      "coreBlock": "Rock_Stone"
    }
  }
}
  • islandSize - noise scale. Smaller = bigger islands. Range: 0.005-0.05.
  • density - fraction of the Y-range that becomes solid. 0.1 = sparse, 0.3 = minecraft-like, 0.5 = dense, 0.8 = almost solid. Range: 0.05-0.90.
  • heightMin / heightMax - lowest / highest Y coordinate for islands.
  • surfaceDepth - thickness of the surface-block layer (grass, sand, snow, etc.).
  • surfaceBlock / subBlock / coreBlock - the three layers of each island.
  • native - set to true to inherit the zone's native biome instead of the custom blocks (overrides the three block fields).

After editing, run /fi reload - the scanner re-applies the settings without a server restart.


Performance

Designed to stay lightweight:
- Column-level fast-path - 3 pre-sampled noise values per column skip the full 3D-noise loop when the column is obviously empty air
- No per-block extras - Hytale's native pipeline does the actual block placement, layering, covers and prefab spawning
- No ticking overhead - zero work per tick; all computation happens during chunk generation and chunk load
- No threads - two event listeners, one optional 500 ms safety scanner, nothing more
- No asset pack - the JAR is around 30 KB

Chunk generation is a little more expensive than vanilla (one custom 3D-noise call per non-empty block in the island Y-range plus a brief post-processing pass), but the column fast-path and Hytale's built-in chunk caching keep regular play smooth.


Good to Know

  • The plugin only modifies terrain for worlds it manages. Your existing default world and any other worlds are untouched.
  • NPCs may spawn over open sky and fall off islands - this is intentional; Hytale's spawning system is zone-wide, not Y-bounded.
  • native mode is marked stable but some Hytale zones render islands as empty - individual zone compatibility may vary. If you see empty patches, use one of the five fixed biome presets.
  • The chunk post-processor clears every block outside the island Y-range on chunk load. This keeps the sky clean but means player-built structures placed below heightMin or above heightMax do not persist across chunk unload/reload cycles. Build on the islands themselves to preserve your work.
  • Plugin runs silently - no log output in normal operation.

Made with care by Glymera for the Hytale community

Changelog

GlymeraFloatingIslands - Changelog

v8.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.

v7.0.0 (2026-08-07)

Bug Fixes

  • Trees are no longer cut off at the top of the island range. The world post-processor used to clear every block above heightMax, which decapitated trees (and structure roofs) rooted on islands near the upper edge - visible as flat-topped trees across the whole world. The cleanup zone now starts 96 blocks above heightMax: prefabs are placed with their base inside the island range, and 96 is the tallest prefab in the game (measured across all 7,810 prefabs - the tallest tree tops out at 82), so nothing legitimate can ever reach the cleanup zone. The safety net against floating misplaced prefabs high above the islands remains active. Thanks to the player report that pinpointed this!
  • /fi reload now actually applies changed parameters. Previously the internal "already patched" cache skipped the re-application, so edits to heightMax, density etc. in config.json silently did nothing until a server restart.

Changes

  • Full internal rewrite. The plugin was rebuilt from the ground up on the same generation concept, incorporating everything learned from our newer world plugins:
  • The generator guard now also runs immediately before every /fi tp teleport, closing a rare window where the engine could swap in a fresh (unpatched) generator right as chunk generation starts at the arrival point.
  • Robust JSON config parsing (a malformed config.json is reported and skipped instead of being half-parsed).
  • Config saves are atomic - a crash during save can no longer truncate config.json.
  • /fi create validates world names (letters, digits, -, _, max 32 chars) so world folders are safe on every OS.
  • Internal code restructured from one monolithic class into focused modules; diagnostic log spam removed.

Compatibility

  • Existing worlds keep working - this is the core promise of this release. The island generation math is byte-for-byte identical to all previous versions: already-generated chunks match newly generated ones with no seams, same seeds produce the same islands.
  • Note: chunks that were already generated with older versions keep their flat-cut trees baked in (block data on disk is never rewritten). Newly explored terrain generates with intact trees.
  • Config format unchanged, including legacy noiseScale support. Commands and presets unchanged. Drop-in update: replace the jar, restart.

v5.0.0 (2026-04-17)

Bug Fixes

  • Restart bug fixed: After a server restart, newly-to-be-generated chunks stopped being rendered as islands. Chunks that were already generated (saved on disk) stayed fine, but walking into unexplored territory produced flat normal terrain instead of floating islands. Root cause: worldConfig.getWorldGenProvider().getGenerator() is a factory and returns a brand new ChunkGenerator instance on every call. The v4 approach ("fetch the generator once at AddWorldEvent, patch it via reflection, put it back") therefore modified short-lived objects that Hytale immediately discarded.
  • Teleport crash fixed: Teleporting into a freshly-created island world could occasionally fail with RejectedExecutionException[ChunkThreadPoolExecutor Terminated] and disconnect the player. Root cause: applyIslandBiome was being invoked twice (once from the AddWorldEvent listener, once from the createAndLoadWorld.thenAccept callback). The second chunkStore.setGenerator() call shut down the ThreadPool of the previous generator while it was still generating chunks.

Changes

  • Idempotent on-demand generator patching: New method ensurePatched(world, def) replaces the old "patch once" flow. ensurePatched is called from four entry points - AddWorldEvent, the scheduler, createAndLoadWorld.thenAccept, and new in v5 the ChunkPreLoadProcessEvent - and decides for itself whether patching is required:
  • Reads the generator currently in use by the ChunkStore (the one actually generating chunks)
  • Skips in O(1) via System.identityHashCode() lookup if the generator has already been patched
  • Otherwise patches in place via reflection (no setGenerator(), no ThreadPool gets killed)
  • chunkStore.setGenerator() is now only called when the ChunkStore has no generator yet (fresh world)
  • Integration in the chunk post-processor: The ChunkPreLoadProcessEvent handler calls ensurePatched before its block-clear pass. If Hytale swaps in a fresh generator between the AddWorldEvent patch and actual chunk generation (the v4 failure mode), this new generator is intercepted and patched here, before a single chunk is generated incorrectly.
  • Diagnostic logging: All plugin log lines are prefixed [FI-v5] and can be filtered from server logs with grep FI-v5. Exceptions are now logged with full stack trace instead of being swallowed.

Technical Details

  • patchGenerator(worldGen, def, worldName) now does only the pure reflection work, without touching the ChunkStore. The setGenerator() call is isolated inside ensurePatched and happens exactly once per world lifetime.
  • New Set<Integer> patchedGeneratorHashes holds the identity hashes of all generator instances that have already been patched.
  • switching AtomicBoolean is still used to serialize concurrent reflection runs (several chunk events firing at once).

No Functional Changes

  • All commands (/fi create|tp|back|list|delete|biomes|reload) behave identically.
  • Config format is unchanged. v4 config files load without migration.
  • Preset list (native, grasslands, desert, snow, volcanic, crystal) is unchanged.
  • Island shape (3D Simplex noise, density / vertical taper, spawn platform at origin) is identical to v4.

Compatibility

  • Existing v4 worlds: work without any further action. On first world-load after the plugin upgrade, ensurePatched notices the generator is not yet patched and patches it.
  • Running server: the plugin can be swapped in-place by just replacing the JAR in the mods/ folder and restarting the server. No world regeneration required.

v4.0.0 (2026-04-16)

Bug Fixes

  • Player-edit loss fixed: In v3.0.0 the ChunkPreLoadProcessEvent handler cleared blocks outside heightMin..heightMax on every chunk load - including chunks loaded from disk. As a result any player-built structure placed outside the island Y-range disappeared on the next chunk reload (server restart, player leaving and re-entering the world, etc.). Fix: if (!event.isNewlyGenerated()) return; at the top of the handler. The clear logic now only runs on freshly generated chunks.

No Functional Changes

  • All other behaviour identical to v3.0.0.

v3.0.0 (2026-04-16)

  • Switched to a custom IHeightThresholdInterpreter (Island3DInterpreter) with direct 3D Simplex noise evaluation
  • No more carving or post-fill logic - Hytale now generates the islands natively through the biome pipeline
  • heightmapInterpreter, heightmapNoise, layerContainer, waterContainer are replaced per biome via reflection
  • coverContainer (grass/flowers/trees), environmentContainer (NPCs/animals) and prefabContainer (structures) are preserved natively - islands get correct vegetation and structures out of the box
  • Spawn-platform guarantee: 5x5x3 solid blocks at world origin so Hytale's UniquePrefab placement (Spawn, Temple) does not fail
  • /fi biomes command for preset overview
  • Cave deactivation: Zone.caveGenerator.caveTypes is emptied so stalactites don't dangle in the empty air under islands
  • Native prefab Y-range bounding via BoundedHeightCondition (wraps the heightCondition of each PrefabPatternGenerator)

v2.0.0 (2026-04-15)

  • Removed the custom zone system, switched to per-biome reflection
  • Asymmetric vertical taper (fades more aggressively at the bottom so no rock debris dangles)
  • Fast path: getContext() stores 3 Y-samples per column; if all below cutoff, column is treated as empty and the 3D-noise loop is skipped
  • Per-world offset seed (worldName.hashCode()), so different worlds with identical parameters look different

v1.0.0 (2026-04-15)

  • Initial release: floating-island worlds via /fi create <name> <biome>
  • 6 biome presets: native, grasslands, desert, snow, volcanic, crystal
  • 3D-Simplex-noise based island shape (islandSize, density, heightMin, heightMax configurable)
  • Persistent worlds via JSON config at plugins/GlymeraFloatingIslands/config.json
  • /fi create|tp|back|list|delete|biomes|reload commands
  • No asset pack, JAR under 30 KB
Public — visible to everyone. No account needed.

Only Marc can read this.