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
v6.0.0 (2026-10-16) — sticks, tree sap and plant fibre are collected too
- Fix: the tower left part of the harvest on the ground. A felled tree drops more than logs: sticks and tree sap fall out of the branches, plant fibre out of the leaves. The tower only collected the logs (and leaf or sapling items, which trees do not actually drop) and left the rest lying around. It now collects everything a tree drops.
- New config: pick what gets collected.
collectLogs,collectSticks,collectTreeSap,collectPlantFibreandcollectSaplings(alltrueby default). Set one tofalseand that kind stays on the ground for you to pick up yourself. - Every setting in config.json now has its explanation directly above it (
_namelines), refreshed on every start; your values are kept. The config path is printed in the server log on startup. A config.json that cannot be read is left untouched, with a warning in the log, and the defaults are used until it is fixed. - Upgrade: replace the jar in
mods/, keep the plugin's data folder and restart the server.
v5.0.0 (2026-10-12) — Hytale 0.7.0 (Update 7)
- Rebuilt for Hytale 0.7.0 (Update 7 / Chapter 1). Requires server 0.7.0 or newer; this version does not run on 0.6.x, and the previous version does not run on 0.7.0 (the server removed the old block and chunk API).
- Migrated to the 0.7.0 world API: block reads and writes now go through the chunk store and block sections (
BlockOperations), chunk ticking through the engine's new marker component, spawn points through the asynchronous spawn provider. - Mod icon added (
icon-256.pngin the jar) so the plugin shows its picture in the world's mod list instead of a question mark. - 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. - Block placement migrated from the removed chunk accessor to the section API; behaviour unchanged.
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.