← All plugins
GlymeraObelisk icon

GlymeraObelisk

Defensive lightning Obelisk: place a 17-block gold-brick monument that auto-fires energy bolts at hostile and provoke-able creatures in a configurable 3D cube radius. Custom sounds, owner-protected, craftable.

v4.0.0 Hytale 0.6.x Quality of LifeMiscellaneousFurnitureUtilityArmor

Gallery

Description

GlymeraObelisk - Defensive Lightning Obelisk

A 17-block gold-brick monument that automatically fires glowing energy bolts at hostile or aggressive creatures within a configurable 3D cube radius. Owner-protected, craftable, with custom sound and particle effects.


What is GlymeraObelisk?

GlymeraObelisk gives you a static defensive structure you can plant in your base, your farm, your trade outpost, anywhere you want to keep hostile mobs out. Place a single item, and a full 17-block gold-brick obelisk rises from the ground. From the moment it stands, it will quietly scan the area around it and pick off any creature that is hostile to players, or any creature that can become hostile to players (predators, mythic beasts) - while leaving peaceful livestock and prey alone.

It is built from native Hytale blocks, hooks into the native NPC attitude system to decide who is a valid target, and uses a custom particle and sound pair so you can clearly tell when one of your obelisks is engaging.


How It Works

Placement

Craft or pick up an Obelisk item. Right-click any block to place. The item triggers placement of a 17-block structure at that position:

  • 7 stacked Rock_Gold_Brick_Ornate blocks form the central column
  • 4 Rock_Gold_Brick_Roof blocks form a sloped base around the bottom
  • 4 Rock_Gold_Brick_Beam blocks form a cross at the top
  • 1 Rock_Gold_Brick_Pillar_Base + 1 Rock_Gold_Brick_Beam crown the tip

The block layout is captured 1:1 from a hand-built template, so the orientations are guaranteed to be correct.

Targeting

Every second, each obelisk scans a 3D cube around its anchor (default: 16-block half-edge, i.e. 33x33x33 blocks centered on the bottom ornate) and looks for valid targets.

A creature is a valid target if:

  • Its default attitude toward players is HOSTILE (always-aggressive: zombies, skeletons, goblins, troops...), OR
  • Its default attitude toward players is NEUTRAL AND its AttitudeGroup is not "Prey" or "Livestock" (predators that can be provoked: bears, wolves, mythic beasts...)

Peaceful animals like armadillos, rabbits, sheep, chickens, cows, pigs etc. are never targeted, even when they have NEUTRAL attitude, because their AttitudeGroup marks them as Prey/Livestock.

The closest valid target is selected per tick.

Firing

The obelisk fires from its tip (top beam):

  1. A laser-flash sound and a chain of golden energy spheres travel from the tip toward the target
  2. A delayed impact (based on distance and projectile speed, default 50 blocks/s) plays an explosion sound and applies damage at the target
  3. Damage is dealt as PHYSICAL and is environmental-sourced ("Obelisk")

Default damage: 50 HP per shot. Default fire interval: 1 second.

Sound

Two custom sound events are bundled:

  • SFX_Obelisk_Shot - the laser-flash at the obelisk tip
  • SFX_Obelisk_Impact - the explosion at the target

Both have 3D positional attenuation (full volume from 0-1 blocks, fading to silence at 20 blocks).

Particles

A custom particle system ObeliskBolt is bundled. It uses the round Ball6.png texture, square-scaled with ScaleRatioConstraint: OneToOne so the particle reads as a small glowing sphere from any angle. Coloured gold (255, 215, 0) per spawn via the packet's color modifier.


Crafting

Craft at the Workbench in the Survival category:

  • 3x Greater Essence of Life (Ingredient_Life_Essence_Concentrated)
  • 5x Gold Bar (Ingredient_Bar_Gold)
  • 5-second craft time, yields 1 Obelisk

The recipe can be disabled via config; OPs can still spawn Obelisks via /obelisk spawn.


Commands

Command Who Description
/obelisk spawn OP only Spawn an obelisk at your current position
/obelisk remove OP only Remove the nearest obelisk in this world
/obelisk list Anyone Show how many obelisks you own and the world total
/obelisk capture <halfWidth> <height> OP only (Build tool) capture a volume of blocks as the placement template
/obelisk captureat <x> <y> <z> <halfWidth> <height> OP only (Build tool) capture from explicit world coordinates

The capture commands are how the template was built originally. They write to plugins/GlymeraObelisk/template.json. Most servers will never need them - the bundled template is correct out of the box.


Block Protection

  • Only the obelisk's owner (the player who placed it) or an OP can damage or break it.
  • Damage from other players is silently cancelled.
  • Breaking by owner/OP removes the entire 17-block structure and returns 1 Obelisk item to the breaker's hotbar inventory (with a /give fallback if the hotbar is full).

Each block of the obelisk is marked as "deco" via BlockPhysics.markDeco so the cross arms and decorative pieces don't fall when a neighbour changes.


Config

File: plugins/GlymeraObelisk/config.json (created on first start).

Setting Default Description
guardRadius 16 3D Chebyshev (cube) half-edge in blocks. Total covered = (2*r+1)^3.
attackNeutral true If true, also target NEUTRAL creatures (predators that can be provoked). Peaceful prey is always excluded regardless.
fireTickMs 1000 How often each obelisk scans + shoots, in milliseconds.
damage 50.0 HP damage per shot.
projectileSpeed 50.0 Visual projectile speed in blocks/second. Controls impact delay only.
recipesEnabled true Whether the Workbench recipe is allowed. Set to false to gate access to /obelisk spawn only.

Persistence

  • plugins/GlymeraObelisk/obelisks.json - placed obelisks (world, anchor position, rotation quarter, owner UUID). Atomically written via tmp + fsync + atomic rename, survives crashes.
  • plugins/GlymeraObelisk/template.json - the captured block template (overrides the bundled default if present).
  • plugins/GlymeraObelisk/config.json - settings (above).

Features

  • 17-block structure from a single item - placement triggers a multi-block layout with correct rotations
  • 3D cube targeting with configurable radius (no infinite vertical range)
  • Attitude-aware filtering - hostile + provoke-able predators, never peaceful prey
  • Custom particle + sound system bundled in the JAR
  • Owner protection - only owner or OP can damage/break
  • Item-on-break - breaking returns the item to the breaker's hotbar
  • Physics-stable - BlockPhysics.markDeco prevents the cross-arms from falling
  • Recipe toggle via config
  • Persistent + atomic save of placed obelisks

Installation

  1. Place GlymeraObelisk-2.0.0.jar in your server's mods/ folder.
  2. Start (or restart) the server.
  3. Everything is embedded in the JAR - no external asset folders needed.

Sound Credits

  • Shot sound based on "flash-laser-gun" by the freesound community
  • Impact sound based on "pixel-explosion" by Lumora Studios

Both samples have been trimmed and re-encoded to OGG.


Made with care by Glymera for the Hytale community

Changelog

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

v2.0.0 - 2026-05-19

Bug Fixes

  • Obelisk no longer fails to spawn on a fresh install: Placing the Obelisk block item on a freshly installed server used to result in nothing happening — only the single gold-brick marker block stayed where the item was used, and the rest of the 17-block structure never appeared. Reported by a CurseForge customer. The plugin now ships a built-in default template inside the JAR and writes it out to the data directory on first start, so the structure spawns correctly out of the box.

Root Cause

  • The placement logic in placeObelisk() returns silently when the in-memory template has no blocks: if (blocks.isEmpty()) return;. The template is loaded from <dataDirectory>/template.json, which v1.0.0 expected an OP to create by running /obelisk capture <halfWidth> <height> against a manually built sample obelisk.
  • On the development server this file existed (Marc captured it once during plugin development), so the bug was invisible there. On a customer's server the file was missing, no error was logged, the PlaceBlockEvent system fired normally, the scheduled placeObelisk() call exited immediately, and the player just saw the placed marker block with no further structure.

Changes

  • Default template shipped inside the JAR: A default-template.json (the 17-block gold-brick obelisk layout matching the header comment in the source) now lives in the JAR root as a Java resource.
  • loadTemplate() extended: If <dataDirectory>/template.json is missing at plugin startup, the plugin now extracts default-template.json from the classpath into the data directory before parsing it. If the file already exists, it is loaded as before — admins keep any customizations they made via /obelisk capture.
  • Config defaults aligned with the documented values: fireTickMs default changed from 1500 to 1000 (1-second scan + fire interval), damage default changed from 5.0f to 50.0f (per-shot damage). Previously the in-code defaults disagreed with the CurseForge description, so a fresh install behaved much weaker than advertised. Servers that already wrote config.json keep their existing values; the change only affects fresh data directories.
  • No behavioural change for existing installs: Servers that already have a template.json (whether captured by an OP or copied in manually) load that file unchanged. The extraction step only runs when the file is genuinely missing.
  • Header comment + manifest bumped to v2.0.0.

Migration

  • No migration required. Existing template.json, obelisks.json, and config.json files are read as before. Already-placed obelisks remain registered and continue to fire.

Coverage

  • Verified on Dev: moved the existing template.json aside, restarted the server, observed the plugin re-create it from the JAR resource. The extracted file was byte-identical to the original, and the previously placed obelisks on Dev loaded and functioned without errors.

v1.0.0 - 2026-05-18

Initial release.

Features

  • Multi-block placement: a single Obelisk item spawns a 17-block gold-brick structure (7 ornate column + 4 sloped roof base + 4 cross-arm beams + pillar base + tip)
  • 3D cube targeting with configurable Chebyshev half-edge radius (default 16, total 33x33x33 blocks)
  • Attitude-aware filtering:
  • Attitude.HOSTILE creatures (zombies, skeletons, troops...) - always targeted
  • Attitude.NEUTRAL creatures - targeted only when attackNeutral=true AND their AttitudeGroup is not "Prey" or "Livestock"
  • Peaceful animals (armadillo, rabbit, sheep, chicken, cow, pig...) are never targeted
  • Custom particle: golden round ObeliskBolt (uses Ball6.png, square-scaled, billboard) chains from tip to target
  • Custom sounds:
  • SFX_Obelisk_Shot - laser-flash at the obelisk tip
  • SFX_Obelisk_Impact - explosion at the target
  • 3D positional attenuation (1 block full → 20 block silent)
  • Owner protection via DamageBlockEvent + BreakBlockEvent (only owner or OP can damage or break)
  • Item-on-break: owner/OP breaking returns 1 Obelisk to their hotbar (with /give fallback)
  • Workbench recipe: 3x Ingredient_Life_Essence_Concentrated + 5x Ingredient_Bar_Gold, 5s, toggleable via recipesEnabled
  • Block physics: every placed block of the structure is marked deco via BlockPhysics.markDeco so the cross-arms don't fall when neighbours change
  • Atomic persistence: obelisks.json written via tmp + atomic rename

Commands

  • /obelisk spawn (OP) - place an obelisk at your position
  • /obelisk remove (OP) - remove the nearest obelisk in this world
  • /obelisk list - count of obelisks (yours + total)
  • /obelisk capture <halfWidth> <height> (OP) - rebuild the placement template from blocks around you
  • /obelisk captureat <x> <y> <z> <halfWidth> <height> (OP) - capture from explicit coordinates

Config

  • guardRadius (default 16) - cube half-edge in blocks
  • attackNeutral (default true) - also target provoke-able predators
  • fireTickMs (default 1000) - scan + fire interval
  • damage (default 50.0) - HP per shot
  • projectileSpeed (default 50.0) - blocks/s, controls impact delay only
  • recipesEnabled (default true) - allow the Workbench recipe
Public — visible to everyone. No account needed.

Only Marc can read this.