• v0.8.1+26.3-pre2 1227b17573

    admin_ekaii released this 2026-09-06 19:15:07 +00:00 | 0 commits to mc-26.3 since this release

    LitematicaFolia 0.8.1 for Paper 26.3-pre-2 (canary). Built against a locally published io.papermc.paper:dev-bundle:26.3-pre-2.local-SNAPSHOT (no upstream 26.3 artifact yet). Carries the 26.2 line up to 0.8.0 (Servux wire v2 for Litematica 26.2-0.28.5+, issue #4 placement fidelity) merged onto mc-26.3.

    Easy Place V3 without PacketEvents (issue #5)

    • PacketEvents removed entirely (dependency and shading). The 0.6.0 canary failed with PacketEvents load failed ... Class.getConstructor because 2.13.0 has no 26.3 mappings; the shaded copy also fought separately installed PacketEvents plugins. The jar shrinks from 9.5 MB to 219 KB.
    • Easy Place V3 now runs on a per-connection Netty handler (litematica_easyplace, before packet_handler) over the server's own ServerboundUseItemOnPacket: decodes the Litematica protocol value from the cursor X, lets vanilla place the block, then sets the exact schematic state.
    • Full V3 property set (Servux 26.2-faithful): facing, half, axis, slab type, stairs shape, hinge, open, rail shape, orientation, chest type, comparator mode, repeater delay, note, cake bites, sign/skull rotation, bell attachment, attach face, inverted, copper golem pose. Previously only facing.
    • Single block update for blocks without a block entity (applied inside BlockPlaceEvent); block-entity blocks are corrected on the next region tick. Doors and other two-block-tall blocks keep both halves consistent. Beds stay vanilla-oriented.
    • Hard server gate: runs on the 26.3 line only.

    Still protocol.enableEasyPlace: false by default: verified by unit tests (45 green) and a static link check against paper-26.3-pre-2.jar, not yet by a real Litematica client on 26.3. Test plan in ~/ekaii-263/notes/litematica-263-easyplace.md (server side) and CHANGELOG 0.8.1.

    sha256 670f3bac69328f0641ef5c9ca44b128ddb40ad0ab405baa564420f1c532dea62 (LitematicaFolia-0.8.1-26.3-pre2-all.jar; asset name uses - instead of +)

    Downloads
  • v0.6.0+26.3-pre2 3954ec1cff

    admin_ekaii released this 2026-09-06 16:15:24 +00:00 | 10 commits to mc-26.3 since this release

    LitematicaFolia 0.6.0 built against the Paper dev/26.3 dev bundle (26.3-pre-2.local-SNAPSHOT). Easy Place V3 disabled without a 26.3 packetevents. Canary only.

    sha256 ca551fd34bc303e8fc8372480f4e688c8537805ad21011042dfe7373d19a5fe4

    Downloads
  • v0.9.0+1.21.11 c9b6da1a3b

    admin_ekaii released this 2026-08-29 13:24:24 +00:00 | -1 commits to main since this release

    LitematicaFolia now runs on Minecraft 1.21.11

    This is a real 1.21.11 build, not a compatibility shim. It has its own 1.21.11 server internals, a PacketEvents version that actually supports 1.21.11, and it speaks the Servux protocol that the 1.21.11 Litematica client uses. It also carries every placement-fidelity fix from 0.8.0.

    What works

    • Full Servux "Direct Paste" from a real Litematica 1.21.11 client. This was tested end to end on a live Folia 1.21.11 server: a genuine client connects, pastes, and the blocks and entities land correctly.
    • Coexists with a separate PacketEvents plugin. By default the plugin does not touch PacketEvents at all; it only initializes it if you turn on Easy Place. Tested with a standalone PacketEvents installed and Easy Place enabled: clean joins, no conflict.
    • Correct placement for rotation, mirror, per-sub-region overrides, replace modes, layer ranges, and entity position and orientation.

    Which version do I use?

    • Minecraft 1.21.11: this release.
    • 26.2: 0.8.x. 26.1.2: 0.4.x/0.6.x. On any version it is not built for, the plugin now disables itself cleanly instead of interfering.

    Thanks to venson for the report that led to proper 1.21.11 support, and to stavapin for the detailed placement report behind the fidelity fixes this build inherits.

    Downloads
  • v0.4.3+26.1.2 73fa30ae0b

    admin_ekaii released this 2026-08-29 13:24:24 +00:00 | 19 commits to main since this release

    Safety release: the plugin can no longer break a server it is not built for

    Thanks to venson for the report that surfaced this.

    If an older 0.4.x jar was run on the wrong Minecraft version (for example 1.21.11), it could stop every player from joining. That is fixed two ways:

    • The plugin now checks the server version at startup. If it is not 26.1.2, it disables itself cleanly with a clear message instead of interfering with connections.
    • It no longer initializes PacketEvents unless you explicitly enable Easy Place, so by default there is nothing that could conflict with another plugin.

    Running 26.2 or newer? Use 0.6.x or 0.8.x. Running 1.21.11? Use 0.9.0. This release is for Minecraft 26.1.2.

    Downloads
  • v0.8.0+26.2 18944044d4

    0.8.0+26.2 - Servux placement fidelity (issue #4)
    All checks were successful
    Build / build (push) Successful in 1m57s
    Stable

    admin_ekaii released this 2026-08-29 13:24:24 +00:00 | 0 commits to main since this release

    Servux Direct Paste placement fidelity

    Big thanks to stavapin for an unusually thorough and precise bug report. This release works through it point by point so that a server-side paste matches exactly what the Litematica client shows.

    Fixed

    • Replace modes (None / With non-air / All) are now honored.
    • Entities no longer land offset, and their fractional coordinates rotate correctly.
    • Entity orientation now rotates and mirrors together with the schematic.
    • Per-sub-region overrides (enabled, position, rotation, mirror) are applied.
    • Paste layer behavior and render layer range are respected.
    • maxBlocksPerChunkTask actually paces large pastes now instead of being advisory.
    • /litematica save no longer captures an entity twice when it straddles a chunk border.
    • Bonus: block states such as stairs rotate and mirror correctly, and structure void is never pasted.

    Validated with 103 unit tests and a 56-check fidelity suite across 12 scenarios on Folia 26.2. For Minecraft 26.2.

    Downloads
  • v0.6.1+26.2 296c712483

    v0.6.1+26.2
    All checks were successful
    Build / build (push) Successful in 1m44s
    Stable

    admin_ekaii released this 2026-08-22 00:01:06 +00:00 | 7 commits to main since this release

    Hardening release after issue #3 (client joins breaking on a Leaves 1.21.11 server).

    Fixed

    • Hard server-version gate. Bukkit's api-version does not reject a plugin newer than the server: Paper 1.21.11 and Leaves 1.21.11 both load and enable the 26.2 build silently (verified). The plugin now checks the real server version at load: on anything that is not Minecraft 26.2 it logs a SEVERE explaining what to install (0.4.x for 26.1.x; nothing supports 1.21.x and older) and disables itself without ever touching the netty pipeline. Client joins on the unsupported server stay untouched.
    • PacketEvents is injected only when needed. PacketEvents.getAPI().init() used to run unconditionally on enable, placing a version-sensitive packet pipeline into every connection even with all protocol features off. Easy Place V3 is its only consumer, so init (and terminate) are now gated behind protocol.enableEasyPlace: true. The Servux bridge runs entirely on the Bukkit Messenger and needs no injection.

    Validated on: Leaves 1.21.11 build 157 (self-disable, ~25 bot joins clean), Paper 1.21.11 build 132 (self-disable), Paper 26.2 (normal enable, Servux Direct Paste end-to-end: 64/64 blocks, metadata handshake OK, Easy Place listener online).

    Support matrix reminder: 26.2 -> 0.5+/0.6.x releases; 26.1.x -> 0.4.x releases; 1.21.x and older -> unsupported.

    Downloads
  • v0.6.0+26.2 619d48be53

    admin_ekaii released this 2026-08-09 18:25:49 +00:00 | 9 commits to main since this release

    CoreProtect support, contributed by @UPSOKen (PR #2, first external contribution, thanks!). Paste block changes are recorded under the initiating player (#litematica for console), WorldEdit-style removal then placement so /co rollback works; unchanged blocks are skipped. Fail-open by design: no CoreProtect, an API older than v10, or a mid-paste failure all degrade to a clean no-op without touching the paste. New logging.coreprotect toggle (default true; a 4.19M-block paste goes from 5.4s to 7.1s with logging on). Note for 26.2 servers: stock CoreProtect CE 24.0 refuses MC 26.2 and disables itself, so a dev or patched build is needed for records; the hook stays dormant otherwise (verified). Also bumped to the Paper 26.2 stable dev bundle (build 111). Validated on Paper 26.2 + Folia 26.2: unit suite, boot/paste/save smokes with and without CoreProtect, DB-level attribution and replacement checks, stress paste with logging active on region threads, zero errors.

    sha256(LitematicaFolia-0.6.0+26.2-all.jar) = 63b838754daeb39e9390fb2192ea5b514867fa43517b37019de7e1a948c4008d

    Downloads
  • v0.5.1+26.2 b31eff8d59

    admin_ekaii released this 2026-07-18 18:17:17 +00:00 | 17 commits to main since this release

    Fixes server-side paste hanging forever on Leaves-derived bases (Lophine): the base protocol core claimed servux:litematics/servux:structures at the packet-decode layer even with litematics-enabled=false, silently dropping every C2S payload before the Bukkit Messenger. LeavesChannelReclaim now evicts the base codecs at bridge enable (verified decode->null). Inbound C2S logging is configurable (protocol.logInbound / logInboundHex). Validated end-to-end with ProtocolBot against the Lophine 26.2 jar (paste complete, 64 blocks, 0 err).

    sha256(LitematicaFolia-0.5.1+26.2-all.jar) = 176a744de733e81ee16416abb386d4d7a07f039de3a7e614b7c037571ed35b6a

    Downloads
  • v0.5.0+26.2 d3b84d6e5a

    admin_ekaii released this 2026-07-18 11:05:16 +00:00 | 18 commits to main since this release

    Minecraft 26.2 port + save origin-normalization

    Port

    • Dev bundle 26.2.build.62-beta (no stable channel yet), api-version 26.2, JDK 25.
    • Single NMS drift fixed: EntityType.loadEntityRecursive via TagValueInput wrap.
    • NmsBridge26_2 + candidate-list bridge factory.
    • PacketEvents 2.7.0 → 2.13.0 (2.7 cannot parse 26.2 version strings → Easy Place V3 was silently dead). Shades kyori adventure-nbt + examination-* (Paper does not expose them).
    • Servux wire format re-verified vs upstream 26.2-0.11.1: litematics PROTOCOL_VERSION=1, structures =2: unchanged. Protocol-bot on 776.

    The v0.3.0 "0 blocks after paste" bug was a misdiagnosis

    No chunk staleness ever existed: the fixture bakes region Position=(0,64,0) and paste follows world = origin + region Position: the repro saved the wrong box. Paste now logs each region's effective world placement, and /litematica save writes origin-normalized regions (Position=(0,0,0)) so save→paste round-trips land where commanded.

    Validation

    • 62 unit tests green (2 stale word-aligned PackedLongArray tests corrected; they had been red since the compact codec landed).
    • Source-built Folia ver/26.2.x: load / paste / save round-trip / Servux Direct Paste end-to-end (protocol 776): all PASS.
    • Lophine 26.2-917b2cf: load / paste / save PASS. ⚠️ Servux bridge CANNOT work on Leaves-lineage servers (Lophine included): their core natively implements Servux and consumes servux:* payloads before Bukkit plugins see them, even config-disabled. Commands/paste/save unaffected.

    For 26.1.x servers use the v0.4.x releases.

    Downloads
  • v0.4.2+26.1.2 96a221688e

    v0.4.2+26.1.2 Stable

    admin_ekaii released this 2026-07-02 00:41:06 +00:00 | 20 commits to main since this release

    Fixed: PasteOperation semaphore deadlock (Folia region self-deadlock)

    Completes the v0.4.1 fix, which only hopped the pass-1 dispatch loop off the region tick thread.

    Root cause. The pass-2 loop (pass1All.thenCompose(...)) and the deferred-physics sweep loop (pass2All.thenCompose(...)) used a plain (non-async) thenCompose. That runs its body on the thread that completed the upstream future; completed by done.complete(null) inside FoliaCompat.runOnRegion, i.e. a Folia region tick thread. Those loops then called the blocking acquireSlot() on that region thread. When the same region still had more pending chunk tasks than free CHUNK_THROTTLE permits, the region parked in Semaphore.acquire() waiting for permits only it could release → self-deadlock. Watchdog logged Tick region … has not responded indefinitely without crashing; cumulative across Overworld + Nether. On creaclone a region was stuck ~116 h before a manual restart (issue #1); stacks at PasteOperation.java:293 (pass 2) and :345 (sweep).

    Fix.

    1. Both continuation loops now run via thenComposeAsync(..., offRegionExecutor) (Folia async pool / Paper async worker) → every acquireSlot() runs off-region; a blocked dispatch thread can no longer park a region.
    2. acquireSlot() now uses tryAcquire(60 s) and reports whether a permit was taken; a timeout dispatches the chunk unthrottled + logs instead of blocking forever. The releasedOnce guard is seeded so an untaken permit is never over-released.

    No config/schema change vs 0.4.1; in-place drop-in. Normal-load behaviour (32 in-flight chunk-task throttle) unchanged.

    Fixes #1.

    Downloads