Skip to content

NeoTab 1.4.2

Latest

Choose a tag to compare

@DasEtwa DasEtwa released this 05 Sep 07:41
· 4 commits to main since this release

NeoTab 1.4.2

1.4.2 is a stability and performance update for NeoTab's stable 1.4.x line. It addresses configuration recovery, region changes, nearest-player searches, timer accuracy, and GUI input handling while retaining the shared JAR for Paper, Spigot, and CraftBukkit on Minecraft 1.20.6+.

This release builds directly on 1.4.1. Existing configuration keys, commands, and permissions remain compatible. Validation includes the full automated regression suite, server smoke tests across the supported platforms, and a successful manual visual test on Paper 1.21.11.

Highlights

  • Invalid or missing configuration and region files no longer lead to existing data being silently overwritten after a failed reload.
  • Region profiles update after successful teleports, portals, and world changes.
  • Nearest-player searches reuse position snapshots and spread larger searches across ticks.
  • Timers and stopwatches measure elapsed time independently and preserve progress through pause and resume.
  • Delayed chat answers and timeouts cannot interfere with a newer input prompt.
  • GUI actions are scheduled safely and discarded when their original menu is no longer active.
  • 14 regression tests were added, bringing the suite to 65 tests.

Safe reloads and configuration recovery

NeoTab now validates both config.yml and regions.yml before applying a command reload. If either file is missing or contains invalid YAML, the reload fails while the last valid configuration remains active.

The affected file is protected against further persistent edits until it has been repaired and successfully reloaded. This prevents a later GUI or command change from replacing a damaged file with defaults or incomplete data.

Additional safeguards include:

  • Configuration and region mutations check whether their backing file is writable before changing persistent settings.
  • Invalid region mapping structures are rejected.
  • English and German messages explain when a file is protected from writes.
  • At initial startup, an invalid file prevents normal enablement instead of being silently replaced. There is no previous in-memory configuration to retain on that first load.

To recover, repair the indicated YAML file and run /tab reload again. Normal persistent edits become available after the reload succeeds.

Regions and movement handling

Region profile checks now explicitly handle teleports, portals, and world changes in addition to ordinary movement.

  • Successful teleports and portals refresh the applicable region profile.
  • Cancelled teleports and portals are ignored.
  • World changes trigger a fresh region calculation so a profile from the previous world does not remain active.

These changes address cases where the tab or scoreboard profile could stay on the previous region until another movement event occurred.

Nearest-player performance and visibility

Nearest-player searches now take position snapshots once per pass and reject geometrically irrelevant candidates before performing visibility checks. A visible player at zero distance ends that search immediately.

Larger searches are processed within fixed per-tick limits:

  • Up to 4,096 candidate inspections per tick.
  • Up to 64 completed player searches per tick.
  • Unfinished searches continue on subsequent ticks.

Before a result is published, NeoTab checks the target's visibility, connection, world, and range again. This helps prevent a result becoming stale while a search is spread across ticks.

In the deterministic test with 1,000 visible players at the same coordinates, the full pass uses 3,000 position reads and 2,000 visibility checks, compared with 1,001,000 and 999,000 respectively in 1.4.1. These are synthetic operation counts, not measured TPS or MSPT improvements. Dense groups without visible matches can still require quadratic total search work, but that work is now bounded per tick.

Timer and stopwatch accuracy

Timers and stopwatches now use an individual monotonic clock for each session.

  • A newly started session no longer inherits the timing phase of an existing scheduler task.
  • Pause and resume preserve fractional seconds instead of discarding partial progress.
  • Elapsed time remains accurate when server ticks are delayed.

Display updates still follow the server scheduler. During a lag spike, the display can update late and then catch up to the measured time.

Chat input and GUI lifecycle

Queued chat answers and timeout callbacks are now tied to the input session that created them. An older callback cannot complete or cancel a replacement prompt.

GUI click actions run on the next server tick. Before execution, NeoTab verifies that the plugin, player, menu, and reload state are still valid. Actions are discarded if the player switches or closes the menu, disconnects, or the plugin reloads or stops.

Validation performed

  • The complete Gradle build and platform compatibility check pass on Java 21.
  • All 65 tests pass, including 14 new regression tests covering the hotfix behavior.
  • NeoTab 1.4.2 starts and passes smoke checks on Paper 1.20.6, Paper 1.21.11, Spigot 1.21.11, CraftBukkit 1.20.6, and the available Paper 26.2 development build.
  • Smoke checks cover plugin enablement, reloads, retained regions, rejected writes after intentionally invalid YAML, recovery after repair, nearest-player toggles, and clean shutdown.
  • LuckPerms 5.5.53 and PlaceholderAPI 2.12.2 enable successfully with NeoTab on Paper 1.21.11.
  • The maintainer confirmed that the manual visual test passed on Paper 1.21.11 using the final JAR and the existing server configuration.
  • The release JAR is byte-identical to the artifact used for these server tests and the manual visual test.

Known limitations and watch points

  • PlaceholderAPI 2.12.2 fails independently when parsing the server version on the tested Paper 26.2 development build (26.2.build.10-alpha). NeoTab continues running without PlaceholderAPI there; this is not a successful PlaceholderAPI integration test for that build.
  • Large-player-count TPS and MSPT were not measured for this release. The search improvements are supported by regression tests and operation counts.
  • Spreading searches across ticks can delay result updates under heavier search workloads.
  • The manual visual test does not establish compatibility with every other tablist, scoreboard, or ActionBar plugin.

Compatibility and upgrade notes

  • Server platforms: Paper, Spigot, and CraftBukkit.
  • Minecraft: 1.20.6+.
  • Java: 21 or newer; use the Java version required by your server build.
  • Existing NeoTab configuration keys, commands, and permissions are preserved. No configuration migration is required.
  • The new storage-read-only message is provided in English and German.

Back up the existing plugins/NeoTab folder, replace the old JAR with NeoTab-1.4.2.jar, and perform a full server restart. Please include the server platform, Minecraft version, NeoTab log excerpt, and relevant configuration section when reporting an issue, while removing any private server information.