promotional bannermobile promotional banner

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.

File Details

GlymeraObelisk-2.0.0.jar

  • R
  • May 19, 2026
  • 81.01 KB
  • 46
  • Early Access

File Name

GlymeraObelisk-2.0.0.jar

Supported Versions

  • Early Access

GlymeraObelisk - Changelog

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