Skip to content

Releases: DasEtwa/NeoTab

NeoTab 1.4.2

Choose a tag to compare

@DasEtwa DasEtwa released this 05 Sep 07:41

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.

NeoTab 1.4.1

Choose a tag to compare

@DasEtwa DasEtwa released this 29 Aug 11:19

NeoTab 1.4.1

A small quality and localization update for NeoTab.

  • 🌍 Added a complete German translation
  • 🐛 Fixed bStats lifecycle issues after reloads and configuration changes
  • ⏱️ Fixed timer-based features being affected by system clock changes
  • 🔧 Improved Linux build compatibility

No major configuration changes are required.

NeoTab 1.4.0

Choose a tag to compare

@DasEtwa DasEtwa released this 25 Jul 14:42

NeoTab 1.4.0

1.4.0 is NeoTab's first stable cross-platform release. It keeps the Minecraft minimum at 1.20.6, but the same JAR can now run on Paper, Spigot, and CraftBukkit. This release also contains a broad rendering, lifecycle, performance, and correctness pass based on real testing outside Paper.

The stable build promotes the code tested in 1.4.0-Beta.1. No compatibility or configuration break was introduced between the beta and stable release; the promotion follows another source audit, a clean build, the full regression suite, and extended churn diagnostics.

Highlights

  • One shared JAR for Paper, Spigot, and CraftBukkit on Minecraft 1.20.6+.
  • Tab names, RAM values, scoreboard titles, and animation styles update correctly on Spigot and CraftBukkit.
  • MiniMessage colors and RGB gradients remain available without requiring Adventure from the server.
  • Tab and scoreboard rendering now use separate animation and statistics schedules.
  • Region, scoreboard, GUI, ActionBar, advancement, visibility, and asynchronous save lifecycles were hardened.
  • Anonymous bStats metrics were added with strict, aggregated custom charts and plugin ID 32846.
  • 27 regression tests were added, bringing the suite to 46 tests across 7 suites.

Paper, Spigot, and CraftBukkit support

NeoTab now compiles against the Spigot 1.20.6 API instead of relying on Paper as its shared compile target. Direct Paper-only event, logger, inventory, tablist, item, scoreboard, and plugin-metadata calls were removed from shared code.

Adventure, MiniMessage, and Gson are embedded into the final JAR and relocated into NeoTab's own namespace. This allows the same color and formatting pipeline to work on all three supported server platforms while avoiding dependency conflicts with the server or other plugins.

ActionBar delivery uses a platform bridge:

  1. Paper and Spigot use the supported Spigot ActionBar API.
  2. CraftBukkit uses a small runtime packet bridge because it does not expose a public ActionBar API.
  3. If a future CraftBukkit version changes the internal packet layout, NeoTab falls back to the vanilla minecraft:title ... actionbar command.

Only the CraftBukkit ActionBar packet path depends on non-public implementation details. A warning is emitted only if both the packet bridge and command fallback fail.

LuckPerms integration is isolated behind an optional boundary. PlaceholderAPI, LuckPerms, WorldEdit, FastAsyncWorldEdit, and Geyser remain optional and are not hard dependencies.

Tab rendering and animation fixes

The tab renderer now separates fast animation frames from slower statistic refreshes. Animated text can therefore keep moving smoothly without repeatedly recalculating RAM, ping, prefixes, or other comparatively expensive values.

Cross-platform ownership tracking was corrected for servers that normalize legacy text when a header or footer is applied. NeoTab stores the server's actual read-back representation and compares normalized formatting semantics, preventing Spigot and CraftBukkit from treating NeoTab's own output as foreign ownership. This fixes frozen tab names, RAM displays, and styles while preserving Paper behavior.

Animations received several correctness improvements:

  • Rainbow and gradient effects have more visible movement between frames.
  • Static endpoint handling no longer collapses an animated transition incorrectly.
  • Emoji, surrogate pairs, combining marks, zero-width-joiner sequences, flags, and legacy formatting codes are kept intact.
  • Header and footer ownership are completely separate, so another plugin can control one without disabling NeoTab's other section.
  • LuckPerms player-name rendering uses a short cache with targeted invalidation instead of repeating the same lookup every animation frame.
  • Join and quit refreshes are batched to at most one refresh operation per server tick.

MiniMessage remains NeoTab's internal parser. RGB colors, gradients, and standard decorations survive the string-based Bukkit boundaries. Interactive click events, hover events, insertion events, and custom fonts cannot be represented by those APIs and are therefore not preserved in player-list output, ActionBars, GUIs, item text, or command messages. NeoTab's defaults do not depend on those component-only features.

Scoreboard correctness and performance

Scoreboard rendering now caches static templates, animation frames, and values that are shared during a render pass. PlaceholderAPI is only invoked when text contains an actual %placeholder%, reducing unnecessary work on ordinary lines.

Additional fixes include:

  • Animated scoreboard titles and all animation styles now update consistently across supported platforms.
  • The minimum scoreboard update interval remains one tick for configurations that intentionally request it.
  • Startup and reload warnings explain the performance context of unusually aggressive intervals.
  • Scoreboard title and line limits are enforced without splitting Unicode sequences or formatting codes.
  • Titles are limited to 128 UTF-16 units and lines to 64 UTF-16 units at the Bukkit boundary.
  • Delayed join tasks are tracked and cancelled when a player disables the scoreboard, quits, the plugin reloads, or the plugin disables.
  • External scoreboard ownership remains conservative: NeoTab will not overwrite a foreign objective or team.
  • GUI scoreboard access now requires both the base GUI permission and the relevant child permission.

Regions and movement handling

Region profiles use an incremental spatial index rather than repeatedly scanning every configured region. Player movement checks only the relevant indexed chunks, while oversized regions are handled separately with explicit safeguards.

To prevent scheduler buildup, region changes are debounced per player and each player can have at most one pending application task. Movement handling now observes the final, non-cancelled destination at MONITOR priority, and respawns trigger a fresh region calculation.

The safety limits are:

  • Up to 512 loaded regions.
  • Up to 131,072 indexed chunk references.
  • Up to 64 oversized regions outside the regular chunk index.
  • The full vanilla world-border range remains valid for region coordinates.

/tab region pos1 and /tab region pos2 now report success only when the selection operation actually succeeds.

ActionBar, GUI, visibility, and advancement fixes

  • Identical ActionBar output is deduplicated before sending.
  • Reflection and fallback strategies are resolved once and cached rather than rediscovered per message.
  • Random messages without explicit formatting receive NeoTab's active palette.
  • Existing MiniMessage or legacy colors are preserved, and ordinary text such as <3 is no longer mistaken for a MiniMessage tag.
  • Persistent timer text now requires neotab.timer.admin.
  • All NeoTab inventories share a dedicated NeoTabInventoryHolder, making GUI lifecycle and click ownership reliable.
  • Nearest-player calculations respect viewer.canSee(candidate), preventing vanished players from leaking through the feature.
  • Advancement counting reconciles grant, revoke, and re-grant transitions instead of permanently overcounting.

Safe reloads and configuration writes

Reload now waits for outstanding asynchronous YAML writes without blocking the server thread. Configuration-changing actions are locked during that short barrier so an older write cannot silently overwrite newly loaded state.

Writes retain their ordering across NeoTab YAML files, and shutdown allows up to three seconds for the writer to finish. Existing configurations remain backward compatible: missing settings use defaults and existing user values are not overwritten.

Anonymous metrics

NeoTab uses the official bStats Bukkit library 3.2.1, shaded and relocated into NeoTab's private namespace. Metrics initialize at most once, never block plugin startup, and failures are only reported in debug mode. Server owners can disable NeoTab metrics with:

metrics:
  enabled: false

bStats can also be disabled globally in plugins/bStats/config.yml.

Standard bStats data covers server count, player count, Minecraft and plugin versions, Java version, operating system, and server software. NeoTab does not duplicate those standard values. Its custom charts contain only these normalized states:

  • configured_language
  • scoreboard_enabled
  • header_enabled
  • footer_enabled
  • ram_display_enabled
  • ping_display_enabled
  • average_display_enabled
  • afk_feature_enabled
  • update_checker_enabled
  • luckperms_status
  • placeholderapi_status
  • geyser_status
  • server_platform
  • animation_count

NeoTab does not collect IP addresses, ports, server names, MOTDs, player names or UUIDs, chat messages, permission or group names, tab/header/footer or scoreboard contents, paths, complete configuration values, world names, secrets, tokens, or webhooks.

Validation performed

  • Gradle compilation, unit tests, and the platform compatibility gate pass on Java 21.
  • 46 tests across 7 suites cover rendering helpers, metrics defaults, platform detection, GUI lifecycle, visibility, scoreboard permissions, asynchronous services, and region behavior.
  • The output JAR is checked for relocated bStats, Adventure, MiniMessage, and Gson classes.
  • The JAR contains no bundled Bukkit, Spigot, Paper, LuckPerms, PlaceholderAPI, or unrelocated org.bstats/net.kyori classes.
  • The shared JAR was previously started on a nine-server matrix: Paper, Spigot, and CraftBukkit at Minecraft 1.20.6, 1.21.11, and 26.2.
  • Each matrix server reached its ready state and passed RCON checks for plugin version, plugin listing, reload, random-message listing, and region listing before a clean stop.
  • The latest rendering and lifecycle fixes were additionally deployed to the Paper lobby plus Spigot and CraftBukkit 1.20.6 test servers. Plugin enable, reload, permission, and basic command smoke checks ...
Read more

NeoTab 1.4.0-Beta.1

NeoTab 1.4.0-Beta.1 Pre-release
Pre-release

Choose a tag to compare

@DasEtwa DasEtwa released this 24 Jul 02:54

NeoTab 1.4.0-Beta.1

1.4.0-Beta.1 is the first public test build of NeoTab's cross-platform 1.4.0 line. It keeps the Minecraft minimum at 1.20.6, but the same JAR can now run on Paper, Spigot, and CraftBukkit. This release also contains a broad rendering, lifecycle, performance, and correctness pass based on real testing outside Paper.

This is deliberately a beta: the automated compatibility suite and multi-server smoke tests pass, but the larger internal changes deserve further testing with real players, existing configurations, and other scoreboard or tablist plugins before a stable 1.4.0 release.

Highlights

  • One shared JAR for Paper, Spigot, and CraftBukkit on Minecraft 1.20.6+.
  • Tab names, RAM values, scoreboard titles, and animation styles update correctly on Spigot and CraftBukkit.
  • MiniMessage colors and RGB gradients remain available without requiring Adventure from the server.
  • Tab and scoreboard rendering now use separate animation and statistics schedules.
  • Region, scoreboard, GUI, ActionBar, advancement, visibility, and asynchronous save lifecycles were hardened.
  • Anonymous bStats metrics were added with strict, aggregated custom charts and plugin ID 32846.
  • 27 regression tests were added, bringing the suite to 46 tests across 7 suites.

Paper, Spigot, and CraftBukkit support

NeoTab now compiles against the Spigot 1.20.6 API instead of relying on Paper as its shared compile target. Direct Paper-only event, logger, inventory, tablist, item, scoreboard, and plugin-metadata calls were removed from shared code.

Adventure, MiniMessage, and Gson are embedded into the final JAR and relocated into NeoTab's own namespace. This allows the same color and formatting pipeline to work on all three supported server platforms while avoiding dependency conflicts with the server or other plugins.

ActionBar delivery uses a platform bridge:

  1. Paper and Spigot use the supported Spigot ActionBar API.
  2. CraftBukkit uses a small runtime packet bridge because it does not expose a public ActionBar API.
  3. If a future CraftBukkit version changes the internal packet layout, NeoTab falls back to the vanilla minecraft:title ... actionbar command.

Only the CraftBukkit ActionBar packet path depends on non-public implementation details. A warning is emitted only if both the packet bridge and command fallback fail.

LuckPerms integration is isolated behind an optional boundary. PlaceholderAPI, LuckPerms, WorldEdit, FastAsyncWorldEdit, and Geyser remain optional and are not hard dependencies.

Tab rendering and animation fixes

The tab renderer now separates fast animation frames from slower statistic refreshes. Animated text can therefore keep moving smoothly without repeatedly recalculating RAM, ping, prefixes, or other comparatively expensive values.

Cross-platform ownership tracking was corrected for servers that normalize legacy text when a header or footer is applied. NeoTab stores the server's actual read-back representation and compares normalized formatting semantics, preventing Spigot and CraftBukkit from treating NeoTab's own output as foreign ownership. This fixes frozen tab names, RAM displays, and styles while preserving Paper behavior.

Animations received several correctness improvements:

  • Rainbow and gradient effects have more visible movement between frames.
  • Static endpoint handling no longer collapses an animated transition incorrectly.
  • Emoji, surrogate pairs, combining marks, zero-width-joiner sequences, flags, and legacy formatting codes are kept intact.
  • Header and footer ownership are completely separate, so another plugin can control one without disabling NeoTab's other section.
  • LuckPerms player-name rendering uses a short cache with targeted invalidation instead of repeating the same lookup every animation frame.
  • Join and quit refreshes are batched to at most one refresh operation per server tick.

MiniMessage remains NeoTab's internal parser. RGB colors, gradients, and standard decorations survive the string-based Bukkit boundaries. Interactive click events, hover events, insertion events, and custom fonts cannot be represented by those APIs and are therefore not preserved in player-list output, ActionBars, GUIs, item text, or command messages. NeoTab's defaults do not depend on those component-only features.

Scoreboard correctness and performance

Scoreboard rendering now caches static templates, animation frames, and values that are shared during a render pass. PlaceholderAPI is only invoked when text contains an actual %placeholder%, reducing unnecessary work on ordinary lines.

Additional fixes include:

  • Animated scoreboard titles and all animation styles now update consistently across supported platforms.
  • The minimum scoreboard update interval remains one tick for configurations that intentionally request it.
  • Startup and reload warnings explain the performance context of unusually aggressive intervals.
  • Scoreboard title and line limits are enforced without splitting Unicode sequences or formatting codes.
  • Titles are limited to 128 UTF-16 units and lines to 64 UTF-16 units at the Bukkit boundary.
  • Delayed join tasks are tracked and cancelled when a player disables the scoreboard, quits, the plugin reloads, or the plugin disables.
  • External scoreboard ownership remains conservative: NeoTab will not overwrite a foreign objective or team.
  • GUI scoreboard access now requires both the base GUI permission and the relevant child permission.

Regions and movement handling

Region profiles use an incremental spatial index rather than repeatedly scanning every configured region. Player movement checks only the relevant indexed chunks, while oversized regions are handled separately with explicit safeguards.

To prevent scheduler buildup, region changes are debounced per player and each player can have at most one pending application task. Movement handling now observes the final, non-cancelled destination at MONITOR priority, and respawns trigger a fresh region calculation.

The safety limits are:

  • Up to 512 loaded regions.
  • Up to 131,072 indexed chunk references.
  • Up to 64 oversized regions outside the regular chunk index.
  • The full vanilla world-border range remains valid for region coordinates.

/tab region pos1 and /tab region pos2 now report success only when the selection operation actually succeeds.

ActionBar, GUI, visibility, and advancement fixes

  • Identical ActionBar output is deduplicated before sending.
  • Reflection and fallback strategies are resolved once and cached rather than rediscovered per message.
  • Random messages without explicit formatting receive NeoTab's active palette.
  • Existing MiniMessage or legacy colors are preserved, and ordinary text such as <3 is no longer mistaken for a MiniMessage tag.
  • Persistent timer text now requires neotab.timer.admin.
  • All NeoTab inventories share a dedicated NeoTabInventoryHolder, making GUI lifecycle and click ownership reliable.
  • Nearest-player calculations respect viewer.canSee(candidate), preventing vanished players from leaking through the feature.
  • Advancement counting reconciles grant, revoke, and re-grant transitions instead of permanently overcounting.

Safe reloads and configuration writes

Reload now waits for outstanding asynchronous YAML writes without blocking the server thread. Configuration-changing actions are locked during that short barrier so an older write cannot silently overwrite newly loaded state.

Writes retain their ordering across NeoTab YAML files, and shutdown allows up to three seconds for the writer to finish. Existing configurations remain backward compatible: missing settings use defaults and existing user values are not overwritten.

Anonymous metrics

NeoTab uses the official bStats Bukkit library 3.2.1, shaded and relocated into NeoTab's private namespace. Metrics initialize at most once, never block plugin startup, and failures are only reported in debug mode. Server owners can disable NeoTab metrics with:

metrics:
  enabled: false

bStats can also be disabled globally in plugins/bStats/config.yml.

Standard bStats data covers server count, player count, Minecraft and plugin versions, Java version, operating system, and server software. NeoTab does not duplicate those standard values. Its custom charts contain only these normalized states:

  • configured_language
  • scoreboard_enabled
  • header_enabled
  • footer_enabled
  • ram_display_enabled
  • ping_display_enabled
  • average_display_enabled
  • afk_feature_enabled
  • update_checker_enabled
  • luckperms_status
  • placeholderapi_status
  • geyser_status
  • server_platform
  • animation_count

NeoTab does not collect IP addresses, ports, server names, MOTDs, player names or UUIDs, chat messages, permission or group names, tab/header/footer or scoreboard contents, paths, complete configuration values, world names, secrets, tokens, or webhooks.

Validation performed

  • Gradle compilation, unit tests, and the platform compatibility gate pass on Java 21.
  • 46 tests across 7 suites cover rendering helpers, metrics defaults, platform detection, GUI lifecycle, visibility, scoreboard permissions, asynchronous services, and region behavior.
  • The output JAR is checked for relocated bStats, Adventure, MiniMessage, and Gson classes.
  • The JAR contains no bundled Bukkit, Spigot, Paper, LuckPerms, PlaceholderAPI, or unrelocated org.bstats/net.kyori classes.
  • The shared JAR was previously started on a nine-server matrix: Paper, Spigot, and CraftBukkit at Minecraft 1.20.6, 1.21.11, and 26.2.
  • Each matrix server reached its ready state and passed RCON checks for plugin version, plugin listing, reload, random-message listing, and region listing before a clean stop.
  • The latest rendering and lifecycle fixes were additionally deployed to the Paper lobby plus Spigot and CraftBukkit 1.20.6 test servers. Plugin enable, reload, permis...
Read more

NeoTab 1.3.3

Choose a tag to compare

@DasEtwa DasEtwa released this 12 Jul 05:38

NeoTab 1.3.3

1.3.3 is a focused scoreboard-interoperability patch for the 1.3.x feature line.

Fix

  • Treats another plugin's scoreboard takeover as temporary rather than a permanent per-player opt-out.
  • Continues evaluating the configured NeoTab scoreboard state during normal update ticks without fighting an active external owner.
  • Reuses the existing NeoTab session when a temporary sidebar plugin restores NeoTab's known board.
  • Creates a fresh NeoTab session when the external plugin restores an empty, available board.
  • Clears temporary ownership state when the player explicitly disables the NeoTab scoreboard.

Tests and validation

  • Adds regression coverage for active external ownership, restoration of the known NeoTab board, and restoration of a free board.
  • Clean Gradle build and all regression tests pass without deprecation warnings.

Compatibility

  • Paper 1.20.6+
  • Java 21 bytecode
  • LuckPerms, PlaceholderAPI, WorldEdit, and FastAsyncWorldEdit remain optional.

NeoTab 1.3.2

Choose a tag to compare

@DasEtwa DasEtwa released this 10 Jul 20:28

NeoTab 1.3.2

1.3.2 is a stability, interoperability, and performance patch for the 1.3.x feature line.

Lifecycle and correctness

  • Prevents delayed join work from recreating region or scoreboard state after a player has disconnected.
  • Restores tablist state only while NeoTab still owns it and yields when another plugin takes control.
  • Avoids replacing scoreboards that already contain objectives or teams and yields ownership when another plugin assigns a board later.
  • Clears stale update-check results after failures and respects the global ActionBar switch in timer and stopwatch services.
  • Preserves legacy ActionBar Timer configuration paths when editing timer text.
  • Keeps Region Profile boundary endpoints stable while Pos1 and Pos2 are edited in either order.

Permissions and Paper APIs

  • Rechecks granular permissions for GUI clicks and delayed chat callbacks.
  • Adds functional permission inheritance for scoreboard and ActionBar Extras parent nodes.
  • Uses Paper's Adventure-based AsyncChatEvent, inventory titles, and scoreboard components.
  • Removes deprecated scoreboard and Gradle resource-processing APIs.

Performance

  • Adds chunk-based Region Profile lookup with a safe fallback for extremely large regions.
  • Replaces the nearest-player all-pairs scan with a spatial grid.
  • Caches the visible advancement registry and per-player completion counts.
  • Shares player-independent footer components and skips unchanged tablist packets.
  • Coalesces YAML snapshots and performs atomic disk writes on a dedicated writer thread.

Tests and validation

  • Adds JUnit 5 regression coverage for YAML persistence, version ordering, timer parsing, and canonical region bounds.
  • Clean Gradle build and all regression tests pass without deprecation warnings.
  • Runtime smoke-tested on Paper 1.20.6, 1.21.11, and 26.1.2 with NeoTab enable, reload, command, RCON, and clean shutdown checks.

Compatibility

  • Paper 1.20.6+
  • Java 21 bytecode
  • LuckPerms, PlaceholderAPI, WorldEdit, and FastAsyncWorldEdit remain optional.

NeoTab 1.3.1

Choose a tag to compare

@DasEtwa DasEtwa released this 09 Jul 20:32

NeoTab 1.3.1

1.3.1 is a stable patch release for the 1.3.0 feature line.

Fixes

  • Prevents a delayed scoreboard join update from recreating a session after a player has quit.
  • Makes ActionBar messages with equal priority resolve deterministically by source name.
  • Restricts ActionBar command tab completions to players with the matching module permission.

Compatibility

  • Paper 1.20.6+
  • Java 21 bytecode
  • LuckPerms, PlaceholderAPI, WorldEdit, and FastAsyncWorldEdit remain optional.

Validation

  • Clean Gradle build completed successfully.
  • Multi-server startup and NeoTab enablement checked across the local Paper test network.

NeoTab 1.3.0

Choose a tag to compare

@DasEtwa DasEtwa released this 07 Jul 19:20

Stable 1.3.0 release of the ActionBar Extras update line.

Highlights:

  • ActionBar priority dispatcher with timer, stopwatch, clock, welcome, random messages, biome popup, achievements, and nearest-player modules.
  • Region Profiles for automatic tab and scoreboard profile switching.
  • Random Messages admin commands and expanded default messages.
  • Global ActionBar disable handling and safer scoreboard interop from the final beta pass.
  • Build compiles against Paper 1.20.6 API to protect the documented 1.20.6+ support target.

Validation:

  • Gradle clean build succeeded.
  • Built jar plugin.yml reports version 1.3.0.
  • Smoke-tested on the local Paper test network across 1.20.6, 1.21.x, 26.1.2, and 26.2 backends.

NeoTab 1.3.0-Beta.3

NeoTab 1.3.0-Beta.3 Pre-release
Pre-release

Choose a tag to compare

@DasEtwa DasEtwa released this 30 Jun 22:02

Bugfix beta

This beta contains the focused high-priority bugfix pass after 1.3.0-Beta.2.

Fixed

  • Global extras.actionbar.enabled: false now fully stops ActionBar extras instead of leaving module tasks scheduled.
  • Scoreboard interop is safer: NeoTab remembers the previous scoreboard and only restores it if the player is still using NeoTab's own board.
  • Command usage/help text now includes the newer ActionBar extras commands: welcome, randommessages, biomepopup, nearestplayer, and achievements.
  • German UTF-8/default docs were checked and kept clean.
  • The build now compiles against Paper API 1.20.6-R0.1-SNAPSHOT, protecting the documented 1.20.6+ support range from accidental 1.21-only API usage.

Validation

  • Built with ./gradlew.bat --no-daemon clean build.
  • Verified the built JAR reports version: 1.3.0-Beta.3 and api-version: 1.20.

NeoTab 1.3.0-Beta.2

NeoTab 1.3.0-Beta.2 Pre-release
Pre-release

Choose a tag to compare

@DasEtwa DasEtwa released this 27 Jun 18:19

NeoTab 1.3.0-Beta.2

Changes:

  • Added Region Profiles with cuboid matching, priority handling, wand selection, optional WorldEdit/FAWE import, and region profile switching for tab and scoreboard.
  • Added /tab region gui for listing, editing, creating, importing, toggling, and deleting regions.
  • Added Random Messages management commands: /tab randommessages list/add/remove/clear.
  • Expanded the active English Random Messages defaults and included an inactive German message pack for a later workflow.
  • Fixed ActionBar extras timing/labels, visible advancement counting, persistent scoreboard toggle behavior, and the first-run default header text.

Validation:

  • Built with ./gradlew.bat --no-daemon clean build.
  • Verified packaged plugin.yml version is 1.3.0-Beta.2.