Gallery

Description
GlymeraLumberTower - Automated Tree-Felling Tower with Built-In Chests
Place a single tower block and watch it shoot bolts at nearby trees, fell them, vacuum the wood into its built-in chests, and replant a sapling of the same species - all on its own.
What is GlymeraLumberTower?
GlymeraLumberTower adds a static 9-block-tall tower (17 gold-brick blocks + 4 built-in chests) that automates tree harvesting completely. Place it, then walk away. Every five seconds it scans a configurable cube (32 blocks by default) around itself, fires a green energy bolt at the nearest tree, fells the entire trunk column, sucks the drops into its own chests, and plants a replacement sapling of the matching wood type. When all chests are full, the tower pauses until you make space.
Single JAR, no setup. Drop it into your server's mods/ folder and craft the tower at a workbench.
Features
Fully Automated Tree Harvesting
- 5-second fire cycle per tower - scans, fires, fells, vacuums, replants
- Configurable Chebyshev cube range (default 32 blocks; 3D cube, not sphere - matches the way players think about block ranges)
- Picks the nearest tree when multiple are in range
- Visual bolt: bright green particle trail from the tower tip to the trunk plus an impact strike, with shot/impact sound effects
Smart Trunk Felling
- Fells the entire trunk column in one shot, not just the bottom block
- Triggers Hytale's native physics cascade for branches and leaves (
breakBlock(x, y, z, 0x100)) - Spawns the trunk's natural item drops (the programmatic break path otherwise loses them)
Drop Vacuuming
- 1.5 seconds after impact, the tower scans all item entities in its fire radius
- Tree-drop filter: only picks up wood, leaves, branches, and saplings - unrelated drops on the ground stay where they are
- Round-robin insertion across the four built-in chests, falling through full ones
- Visual feedback: a small green particle burst at the tower tip on each successful vacuum
Automatic Replanting
- On each successful chop, plants a
Plant_Sapling_<WoodType>on the nearest soil block (Type=Soil tag, broader than justSoil_*) - One-sapling-per-tree rule: skips the replant if any sapling already sits within 10 blocks - so multi-shot chopping of one tree never produces a forest of saplings
- Species match: an Oak trunk replants Oak, Stormbark replants Stormbark, etc. (species without a matching sapling - Burnt, Fir - are silently skipped)
Atomic Tower Break (Exploit-Proof)
- The four chest blocks and the floor directly underneath them are protected from being broken or damaged - undermining the floor would otherwise physics-drop a chest as an item
- Breaking any tower block (chest, gold-brick, ornate top) demolishes the entire tower atomically and returns a single tower item to the player
- All chest contents are spawned as item drops at the tower's base - survival players never lose stored items when picking up the tower
- Non-owners cannot break the tower; OPs override
Built-In Chests
- 4×
Furniture_Dungeon_Chest_Epicblocks form the tower's foot - right-click to open like any native chest - Tower pauses firing when all four chests are completely full - no items are destroyed by an overflowing tower
- Chest contents survive server restarts (native Hytale persistence)
Recipe Toggle
- Workbench recipe is enabled by default
- Set
recipesEnabled: falseinconfig.jsonto disable crafting and let admins gate distribution via/give
Crafting
The tower is crafted at the Workbench (Crafting → Workbench_Survival category):
| Ingredient | Quantity |
|---|---|
Concentrated Life Essence (Ingredient_Life_Essence_Concentrated) |
3 |
Gold Bar (Ingredient_Bar_Gold) |
5 |
Output: 1× GlymeraLumberTower (5 second craft time)
Admins can also use /give <player> GlymeraLumberTower to hand them out directly.
Commands
All sub-commands of /lumbertower are OP-only by design (world-modifying or admin commands).
| Command | Description |
|---|---|
/lumbertower spawn |
Place a tower at your feet (the NW-bottom-chest is the anchor) |
/lumbertower remove |
Remove the nearest tower in this world (clean removal, no item drop) |
/lumbertower list |
Show the tower count in this world (yours / total) |
/lumbertower capture <halfWidth> <height> |
Re-capture the structure around you as a new tower template |
/lumbertower captureat <x> <y> <z> <halfWidth> <height> |
Same, with an explicit anchor position |
Configuration
Config file: mods/de.glymera_GlymeraLumberTower/config.json (auto-generated on first start)
{
"_info": "GlymeraLumberTower v1.0.0 - Automated lumber towers.",
"fireRadius": 32,
"cooldownMs": 5000,
"fireTickMs": 1000,
"maxTreeHeight": 32,
"projectileSpeed": 50.0,
"recipesEnabled": true
}
| Field | Description |
|---|---|
fireRadius |
3D Chebyshev half-edge in blocks (default 32 → 65×65×65 search cube) |
cooldownMs |
Milliseconds between shots per tower (default 5000 = 5s) |
fireTickMs |
How often the tower's fire-tick loop runs (default 1000 = 1s) |
maxTreeHeight |
Maximum trunk-column height the felling walks up (default 32) |
projectileSpeed |
Bolt flight speed in blocks per second (default 50 → ~0.6s at 32 blocks) |
recipesEnabled |
If false, the workbench recipe is blocked - admins distribute via /give |
Installation
Drop the single JAR into your server's mods/ folder:
mods/GlymeraLumberTower-1.0.0.jar
That's it. The JAR contains everything: plugin code, the default tower template, block + recipe definitions, particle systems, sounds, icon, and language files. Config, template, and tower-data files are auto-generated under mods/de.glymera_GlymeraLumberTower/ on first start.
Technical Details
- All-in-one JAR with
IncludesAssetPack: true- no separate pack folders required - Default tower template is shipped as
/default-template.jsoninside the JAR and extracted to the data directory on first start (matches the GlymeraObelisk pattern) - Trunk felling uses
world.breakBlock(x, y, z, 0x100)to trigger Hytale's native neighbour-update cascade (thesetBlock("Empty")low-level path would silently delete blocks without propagating updates to branches and leaves) - Trunk drops are spawned manually via
ItemComponent.generateItemDropsbecause the programmatic break path does not produce the natural drop pipeline output - Bottom-trunk detection filters trunks whose block below is not the same trunk type (natural Hytale trees have
Wood_*_RootswithMaterial:Emptybeneath the bottom log) - Soil detection uses the
Type=Soiltag rather than theSoil_*name prefix - this also catchesPathway_*and other tagged blocks that saplings will accept - Sapling re-validation gap: Hytale does not validate
Support.DownatsetBlocktime, only at the first growth tick. The 10-block radius check on existing saplings ensures one tree → one sapling regardless of how many bolts hit it - Atomic protection is tracked in two maps:
blockPosToLumberTower(the 21 tower blocks) andsupportPosToLumberTower(the 4 floor positions under the chests). Break/Damage events on either map trigger atomic demolition; on demolition all chest contents are extracted viaItemContainerBlock.getItemContainer().getItemStack(i)and spawned as item drops - Persistence is atomic (
.tmp+ATOMIC_MOVE) to prevent zero-byte files on crash
Good to Know
- Towers do not aim across worlds. Each tower scans only its own world.
- Towers do not aim at branches or leaves. Only bottom-trunk blocks are targeted - branches and leaves come down via the physics cascade after the trunk is broken.
- Multiple towers in overlapping range all fire independently. The chest contents may end up redundantly populated if both towers vacuum the same drops - that's fine, items are not duplicated.
- Tower placement uses the player's foot position as the NW-bottom-chest anchor. Make sure you have a 3×3 footprint of clear space at your feet when using
/lumbertower spawn. - The recipe is identical to the GlymeraObelisk recipe (3× Concentrated Life Essence + 5× Gold Bar at Workbench Survival). Both items appear as separate craftable entries in the bench - the player picks which one to craft.
Made with care by Glymera for the Hytale community
Changelog
GlymeraLumberTower - Changelog
v4.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.
v3.0.0 (2026-05-30)
Performance fix. The fire-tick tree search was far too expensive and scaled badly
with many towers — on a populated server (for example 10 players × 3 towers each) the
old cost could saturate the world's main thread and cause server-wide lag.
Root cause
- The "nearest trunk" search brute-force scanned the entire
fireRadiuscube on every
attempt. At the defaultfireRadius=60that is a 121×121×121 box — roughly 1.8
million block reads per scan — and it runs on the world's main (tick) thread. - A tower that had free chest space but no tree left in range never started its
cooldown (only a successful shot did), so it re-scanned that whole cube every
single second, forever. Idle towers were the most expensive ones of all.
Fix
- Single rate gate. Every scan attempt — hit, miss, or full chest — now stamps the
per-tower timer, so a tower scans at most once percooldownMs(default 5 s) instead
of every second. This removes the endless idle re-scan. - Ring search with early-out. The cube scan is replaced by an outward
Chebyshev-ring search. Because every block in ring d is at least d blocks away,
once a candidate is found that is closer than the current ring the search stops — the
work is now proportional to the distance to the nearest tree (typically a few hundred
reads), not to the cube volume. It still returns the exact nearest bottom-trunk. - Per-column early break at the tree base, plus a tighter inner loop.
- Default
fireRadiuslowered 60 → 32. Existingconfig.jsonfiles keep their
saved value; lower it there as well for the full benefit in the worst case (a tower
with no tree anywhere in range).
Result
- With a tree in range, per-scan cost drops by roughly one to two orders of magnitude.
- Idle towers drop by a further ~5× from the rate-gate fix.
- Many towers no longer pile their scans onto the single main thread.
No gameplay changes: harvesting, replanting, drop vacuuming, the recipe and the
tower-break protection all behave exactly as before.
v1.0.0 (2026-05-21)
Initial release.
Tower Structure
- Static 9-block-tall tower placed via a single inventory item: 17×
Rock_Gold_Brick_*blocks (Ornate/Beam/Roof/Pillar_Base) plus 4×Furniture_Dungeon_Chest_Epicas the foot - Default layout is shipped as
default-template.jsoninside the JAR and extracted to the data directory on first start - no admin setup required - Re-capturable via
/lumbertower captureand/lumbertower captureatfor server admins who want a different tower shape
Automated Tree Harvesting
- Fire-tick loop runs every 1 second; per-tower cooldown is 5 seconds between shots
- 60-block Chebyshev cube scan (
fireRadius=60) picks the nearest bottom-trunk in range - Green particle bolt (
LumberTowerBoltspawner,RGB 50/220/80) flies from the tower tip to the trunk at ~50 blocks/s, with shot and impact sound effects - On impact the trunk column is felled top-to-bottom via
world.breakBlock(x, y, z, 0x100), triggering Hytale's native neighbour-update cascade for branches and leaves - Trunk drops are spawned manually via
ItemComponent.generateItemDropsbecause the programmatic break path does not produce the natural drop pipeline output - Pre-shot check pauses firing when all four chests are completely full
Drop Vacuuming
- 1.5 seconds after a successful chop, the tower scans all item entities in its fire radius
- Filter accepts only tree-related item ids (
Wood_*,Plant_Leaves*,Plant_Sapling*,*_Branch*,*_Leaves*) - unrelated drops on the ground stay put - Round-robin chest insertion via
ItemContainer.addItemStack; items that don't fit anywhere stay on the ground - Visual feedback: a small green particle burst at the tower tip on each vacuum cycle
Automatic Replanting
- On each successful chop, plants a
Plant_Sapling_<WoodType>on the nearest soil block within radius 5 - One-sapling-per-tree gate: skips the replant if any sapling already sits within 10 blocks of the felled trunk - multi-shot chopping of a single tree produces at most one sapling
- Soil detection uses the
Type=Soiltag rather than theSoil_*name prefix; this also catchesPathway_*and other tagged blocks that saplings will accept - Species with no matching sapling (Burnt, Fir) are silently skipped
Atomic Tower Break (Exploit-Proof)
- The four chest blocks and the floor positions directly underneath them are protected from
BreakBlockEventandDamageBlockEventfor non-owners - Without this, a player could undermine the floor under a chest, the chest would physics-drop as an item, the tower would still be intact, and the chest could be combined with a fresh placement to produce unlimited chests - exploit closed
- Owner/OP break on any tower block triggers an atomic demolition: the entire 21-block structure is silently removed, the 4 chest inventories are extracted and spawned as item drops at the tower base, and one
GlymeraLumberToweritem is returned to the player's hotbar - Survival players never lose their stored items when picking the tower back up
Recipe
- Crafted at the Workbench (Crafting →
Workbench_Survival) from 3×Ingredient_Life_Essence_Concentrated+ 5×Ingredient_Bar_Goldin 5 seconds recipesEnabled: falseinconfig.jsonblocks the workbench recipe viaCraftRecipeEvent.Prefor admin-gated distribution
Item Icon
- 32×32 in-game screenshot of the placed tower, native Hytale convention
- Matches the convention from
project_glymeraBeaconsv2 - rendered icons or oversized PNGs cause the engine to stripe-stripe them into unreadability
Plugin Logic Architecture
- Forked from
GlymeraObeliskv2.0.0, replacing the lightning-strike-on-hostile-NPCs logic with tree-felling. The chest, vacuum, replant, and atomic-break logic are net-new to this plugin - Single all-in-one JAR with
IncludesAssetPack: true; particles, sounds, recipes, language strings, and the default template are all bundled - Persistence (
towers.json,template.json,config.json) uses atomic.tmp+ATOMIC_MOVEwrites to prevent zero-byte files on crash
Only Marc can read this.