Skip to content

Releases: kalashnikxvxiii/Limited-Spectator

Limited Spectator v3.0.0-alpha.1 - 🚀 MC 26.1.2 Support (Alpha 1)

Choose a tag to compare

@kalashnikxvxiii kalashnikxvxiii released this 06 Jun 00:54

⚠️ Pre-release for testing. Not for production servers. Please report any bug on the issue tracker.

🚀 Minecraft 26.1.2 Support — Alpha 1

First port of Limited Spectator to Minecraft 26.1.2 — the first MC release on Mojang's new YY.release.patch versioning scheme and the first with official, stable Mojang mappings. This is a major rewrite at the toolchain and API level; the spectator-mode semantics (commands, restrictions, distance limits, HUD-hide UX, vanilla-client compat from v2.0.1) are preserved.

📦 Downloads

Loader File
NeoForge LimitedSpectator-neoforge-3.0.0-alpha.1.jar
Fabric LimitedSpectator-fabric-3.0.0-alpha.1.jar
Quilt Not yet available on 26.1+ — see "Removed" below.

✨ Highlights

  • MC 26.1.2 compatibility for NeoForge and Fabric.
  • Java 25 (was Java 21 — required by Mojang for 26.1).
  • ✅ The vanilla-client connection support from v2.0.1 (Issue #2) is preserved on 26.1.
  • ✅ Server boots in ~1.6 s in dev environment; 16/16 common-module tests pass.
  • ⚠️ The legacy-1.21 branch (v2.0.1 release) is preserved for users still on MC 1.21.x or Quilt.

🔄 Compatibility

  • Minecraft: 26.1.2 only (minecraft_version_range=[26.1.2]).
  • NeoForge: 26.1.2.71+.
  • Fabric Loader: 0.19.2+ with Fabric API 0.150.0+26.1.2.
  • Java: 25 (required by Mojang at runtime).
  • Quilt: not available on this release — Quilt Loader has not shipped 26.1.x support.

🛠️ What changed under the hood

Full breakdown in CHANGELOG.md [3.0.0-alpha.1]. The highlights:

Toolchain bumps

  • Gradle 8.10 → 9.4.0
  • NeoForge plugin: NeoGradle 7.0.167 → ModDevGradle 2.0.141 (recommended plugin family for 26.1+)
  • Fabric Loom 1.7.3 → 1.16.3 (no longer remaps Minecraft or mods — MC is unobfuscated now)

API renames (all behavioural-equivalent)

  • ResourceLocationIdentifier
  • ServerPlayer.displayClientMessage(Component, boolean) split into sendSystemMessage() and sendOverlayMessage()
  • CommandSourceStack.hasPermission(int) replaced by the new PermissionSet/Permission API (mapped to old semantics via a hasPermissionLevel() helper — see "Known issues" below)
  • Entity.teleportTo(...) signature widened
  • Window.getWindow().handle(); InputConstants.isKeyDown(long, int)isKeyDown(Window, int)
  • TriState moved from net.neoforged.neoforge.common.util to net.minecraft.util

Quilt dropped on this branch because Quilt Loader has no MC 26.1.x release. The quilt/ subproject was deleted along with related Gradle / .bat scripts. The Quilt JAR (v2.0.1) is still available on the legacy-1.21 branch.

🐛 Known issues for the alpha

  • hasPermissionLevel() is a coarse approximation: level <= 0 allows everyone, any positive level requires "ALL_PERMISSIONS" (server console / full-op). The vanilla level 1 / 2 / 3 / 4 distinctions are not preserved. A proper named-permission rewrite is planned for the next alpha.
  • Two vanilla-NeoForge deprecation warnings on compileJava. Not from this mod, not a blocker.

🧪 How to help test

  1. Spin up a NeoForge 26.1.2 server (or Fabric Loader 0.19.2 + Fabric API for the Fabric build).
  2. Drop the matching JAR into mods/.
  3. Hit it with the v2.0.1 functional checklist (commands, distance limit, item drop/pickup, HUD-hide on modded client, vanilla-client connect, …).
  4. Report any divergence vs. v2.0.1 behavior on the issue tracker — focus on permission checks, since the new system is a known approximation.

🙏 Credits

Limited Spectator v2.0.1 - 🔧 Compatibility & Cleanup Hotfix

Choose a tag to compare

@kalashnikxvxiii kalashnikxvxiii released this 05 Jun 12:32

🔧 Compatibility & Cleanup Hotfix

Drop-in update on top of v2.0.0. Lets vanilla clients connect to servers running the NeoForge build, aligns Minecraft version ranges across all manifests, fixes the dev environment for contributors on Linux, and corrects long-standing version metadata drift inside the published JARs.

✨ Highlights

  • 🌐 Vanilla clients can now join NeoForge servers running the mod. The HUD-sync network channel is now optional — vanilla clients get all the gameplay restrictions, just without the HUD-hide UX. (Closes #2)
  • 📚 README adds a clear "Environment Requirements" section with per-loader breakdown of where to install the mod for best UX.
  • MC version range consistency: modrinth.mod.json and neoforge.mods.toml were declaring incorrect ranges (one too narrow at exactly 1.21.1, the other open-ended). Both now correctly declare the actual supported 1.21.11.21.11 range, matching the rest of the manifests and docs.
  • 🛠️ Internal version metadata fix: published JARs since v1.2.1 had been declaring the wrong version inside META-INF/neoforge.mods.toml and modrinth.mod.json due to hardcoded values that were never updated for the v2.0.0 release. From now on gradle.properties is the single source of truth.

🔄 Compatibility

  • Drop-in replacement for v2.0.0 — no config or save migration needed.
  • Same Minecraft + loader version support: MC 1.21.1 → 1.21.11, NeoForge 21.1.217+, Fabric Loader 0.16.5+, Quilt Loader 0.26.4+.
  • Java 21 required.

📦 Downloads

Choose the JAR matching your loader:

Loader File
NeoForge LimitedSpectator-neoforge-2.0.1.jar
Fabric LimitedSpectator-fabric-2.0.1.jar
Quilt LimitedSpectator-quilt-2.0.1.jar

🐛 Bug fixes

  • Fixed: NeoForge servers running the mod rejected vanilla client connections during handshake (channel not registered). The HUD-sync channel is now optional() and sendHudState() checks hasChannel() before dispatching.
  • Fixed: neoforge.mods.toml was declaring version="1.21.x-1.2.1" inside the JAR despite v2.0.0 being the actual release (the file was never updated when bumping). Now uses ${mod_version} placeholder so it follows gradle.properties automatically.
  • Fixed: modrinth.mod.json was declaring "version": "1.1.1" since the v1.1.1 era — corrected.
  • Fixed: modrinth.mod.json declared exactly "minecraft": "1.21.1", causing Modrinth to advertise compatibility only with 1.21.1 even though the mod supports the full 1.21.x family. Now ">=1.21.1 <1.22".
  • Fixed: neoforge.mods.toml minecraft versionRange was [1.21.1,) (no upper bound). Would have attempted to load on future MC 1.22 / 26.x and crashed on the first renamed Minecraft API call. Now [1.21.1,1.22).

🧰 Internal / contributor-facing

  • .gitattributes now enforces LF on all source/config/script files, CRLF on *.bat/*.cmd, with binary markers. Fixes ./gradlew on Linux (CRLF shebang was breaking /bin/sh).
  • NeoForge dev runs (:neoforge:runClient / :neoforge:runServer) no longer crash with NoClassDefFoundError: SpectatorConfig at boot. The :common source set is now correctly grouped with :neoforge's under the same limitedspectator mod identifier via NeoGradle's modSources API.
  • All build.gradle files (root + common + 3 loaders) now read version = mod_version from gradle.properties instead of hardcoding it in five places.
  • build.gradle runs DSL: switched to the canonical NeoGradle 7 shorthand arguments 'arg1', 'arg2'.

🙏 Credits

Limited Spectator v2.0.0 - 🚀 Multi-Loader Architecture

Choose a tag to compare

@kalashnikxvxiii kalashnikxvxiii released this 24 Jan 02:43
01e5a06

Major architectural overhaul introducing support for NeoForge, Fabric, and Quilt mod loaders with shared core logic.

Added

  • Multi-Loader Support - Three separate builds for different mod loaders:
    • LimitedSpectator-neoforge-2.0.0.jar (171 KB) - Full configuration support
    • LimitedSpectator-fabric-2.0.0.jar (156 KB) - Hardcoded defaults
    • LimitedSpectator-quilt-2.0.0.jar (158 KB) - Uses Fabric API compatibility
  • Core Abstraction Layer:
    • SpectatorConfig interface - Loader-agnostic configuration contract
    • SpectatorManager class - Shared business logic (100% code reuse)
    • SpectatorState record - Immutable state representation
    • DistanceValidationResult record - Type-safe validation results
  • Loader-Specific Adapters:
    • NeoForgeSpectatorConfig - Adapts NeoForge config to interface
    • FabricSpectatorConfig - Hardcoded defaults for Fabric
    • QuiltSpectatorConfig - Delegates to Fabric config (composition pattern)
  • Fabric Implementation:
    • LimitedSpectatorFabric - Fabric entry point with Fabric API integration
    • Command registration via CommandRegistrationCallback.EVENT
    • Event handlers via ServerTickEvents and ServerPlayConnectionEvents
  • Quilt Implementation:
    • LimitedSpectatorQuilt - Quilt entry point (100% Fabric API compatible)
    • Uses Fabric API for all events and commands
    • Demonstrates perfect Fabric-Quilt compatibility
  • Build System:
    • Separate Gradle build files per loader (build.gradle, build-fabric.gradle, build-quilt.gradle)
    • Source exclusions to prevent cross-loader compilation errors
    • Java 21 toolchain configuration

Changed

  • Architecture: Refactored from monolithic NeoForge-only to multi-loader with shared core
  • Code Organization:
    • Core logic moved to loader-agnostic classes
    • Loader-specific code isolated in separate packages
    • Zero code duplication (>95% shared code)
  • Logging: Replaced System.out.println with SLF4J Logger in Fabric/Quilt implementations
  • Build Process:
    • NeoForge build excludes Fabric/Quilt sources
    • Fabric build excludes NeoForge/Quilt sources
    • Quilt build excludes NeoForge/Fabric entry points

Technical

  • Thread-Safe State Management: SpectatorManager uses ConcurrentHashMap for multiplayer safety
  • Type-Safe Validation: Enum-based validation results prevent null pointer exceptions
  • Backward Compatibility: Legacy HashMaps maintained with @Deprecated annotation
  • Dual-Write Strategy: Ensures external mods/mixins continue working
  • Clean Separation: Zero loader dependencies in core business logic

Performance

  • Shared SpectatorManager instance across all loaders
  • Singleton pattern for config adapters
  • Lazy configuration evaluation
  • Minimal per-tick overhead (~0.01ms per spectator)

Documentation

  • Updated README.md with multi-loader installation instructions
  • Added loader comparison table
  • Documented build commands for each loader

Migration Notes

  • NeoForge users: No changes required - fully backward compatible with v1.x
  • Fabric/Quilt users: New! Download the appropriate JAR for your loader
  • Configuration: Only NeoForge version supports TOML config (Fabric/Quilt use hardcoded defaults)

Known Limitations

  • Quilt version requires Fabric API (QSL support planned)

Limitied Spectator v1.2.1 - 🔧 Code Quality Hotfix

Choose a tag to compare

@kalashnikxvxiii kalashnikxvxiii released this 23 Dec 13:41

Minor code quality improvements and performance optimizations in client-side event handling.

Fixed

  • Removed duplicate condition check in ClientEventHandler.onMouseClick()
    • Merged redundant isSpectator() check that was executed twice
    • Simplified logic flow for better readability
  • Commented out production debug log in ClientEventHandler.onRenderHud()
    • Debug log was executing every frame, causing log spam
    • Moved to commented debug section for development use only

Performance

  • Reduced redundant condition checks in mouse input handling
  • Eliminated per-frame debug logging in production builds

Technical

  • No functional changes or API modifications
  • Pure code cleanup and optimization
  • Build remains compatible with v1.2.0

Limited Spectator v1.2.0 - 🌍 Multilingual Release

Choose a tag to compare

@kalashnikxvxiii kalashnikxvxiii released this 23 Dec 13:11

This release introduces full translation support for European languages, making Limited Spectator accessible to a wider international audience.

Added

  • Multilingual Translation System - Complete i18n support for all user-facing messages
    • English (en_us) - Base language
    • Italian (it_it) - Full Italian translation
    • German (de_de) - Full German translation
    • French (fr_fr) - Full French translation
    • Spanish (es_es) - Full Spanish translation
  • Translated Messages:
    • Command feedback messages (/spectator and /survival)
    • Distance limit notifications (exceeded/reached)
    • Error messages (dimension travel blocked, crafting blocked)
    • All user-facing text automatically displays in player's Minecraft language

Changed

  • Replaced all hardcoded Component.literal() messages with Component.translatable()
  • Added MutableComponent import for proper message building
  • Message system now respects player's language preference

Technical

  • Created src/main/resources/assets/limitedspectator/lang/ directory structure
  • Translation files use standard Minecraft JSON format with key-value pairs
  • Translation keys follow naming convention: limitedspectator.command.*, limitedspectator.error.*
  • Messages automatically formatted with appropriate chat colors (AQUA, GREEN, RED, GRAY)

Documentation

  • Updated README.md with new Localization section
  • Removed multilingual translation from Future Roadmap (completed)
  • Added multilingual support to Features section

Limited Spectator v1.1.2 - 🔒 Security Release

Choose a tag to compare

@kalashnikxvxiii kalashnikxvxiii released this 23 Dec 11:35

This release addresses critical security vulnerabilities in transitive dependencies and expands version compatibility.

Security

  • Updated Netty to 4.1.125.Final - Fixes CVE-2025-58057 (BrotliDecoder DoS vulnerability, CVSS 7.5)
    • Previous: 4.1.118.Final (CVE-2025-24970)
    • Impact: Prevents denial of service attacks via crafted compressed input
  • Updated Log4j Core to 2.25.3 - Fixes CVE-2025-68161 (TLS hostname verification, CVSS 5.4)
    • New dependency forcing for both log4j-core and log4j-api
    • Impact: Prevents man-in-the-middle attacks on log traffic
  • Updated LZ4-Java to 1.10.1 - Fixes CVE-2025-66566 (buffer disclosure vulnerability, CVSS 7.5)
    • Migrated from org.lz4:lz4-java to at.yawk.lz4:lz4-java (new official group ID)
    • Previous: 1.8.0
    • Impact: Prevents sensitive data disclosure via output buffer reuse
  • Maintained Commons Lang3 3.18.0 - Continues protection against CVE-2025-48924 (CVSS 5.3)

Changed

  • Version scheme updated from 1.21.1-1.1.1 to 1.21.x-1.1.2
    • Reflects compatibility with all Minecraft 1.21.x versions (1.21.1, 1.21.2, ... 1.21.11+)
    • Dependency range already configured as [1.21.1,) in neoforge.mods.toml
  • Documentation updates:
    • Updated README.md to clarify Minecraft 1.21.1+ compatibility
    • Updated build output JAR name to LimitedSpectator-1.21.x-1.1.2.jar

Technical

  • All dependency version forcing configured via build.gradle resolutionStrategy
  • Build tested successfully with clean build (no warnings or errors)
  • JAR output: build/libs/LimitedSpectator-1.21.x-1.1.2.jar
  • Gradle configuration remains at 8.10 with NeoGradle 7.0.167

Migration Notes

Users on any 1.21.x Minecraft version can safely upgrade to this release. No configuration changes required.
All existing configs from 1.1.1 remain fully compatible.

Limited Spectator v1.1.1 - Stable Release

Choose a tag to compare

@kalashnikxvxiii kalashnikxvxiii released this 14 Nov 16:54

🎯 Overview

This is the stable release following 1.1.0-beta, featuring cleaned configuration and comprehensive documentation updates. All non-functional config options have been removed, and Minecraft engine limitations are now
clearly documented.

📦 Downloads

  • JAR File: LimitedSpectator-1.21.1-1.1.1.jar (158KB)
  • Minecraft Version: 1.21.1
  • NeoForge Version: 21.1.0+

✨ What's Changed

Configuration Cleanup

Removed config options that were non-functional due to Minecraft limitations:

  • allow_mob_attacks - always blocked (mobs don't target players with mayfly=true)
  • allow_block_breaking - always blocked in ADVENTURE mode
  • allow_block_placing - always blocked in ADVENTURE mode
  • auto_hide_hud - behavior now hard-coded (always hides, F1 toggles)
  • allow_f1_hud_toggle - F1 toggle always enabled
  • auto_start_flying - players must double-tap spacebar (ADVENTURE mode limitation)

Documentation Updates

  • ✅ Clarified that enable_invulnerability does NOT prevent fall damage (Minecraft engine behavior)
  • ✅ Updated all wiki pages with accurate information
  • ✅ Renamed "Known Issues" to "Known Limitations" with proper context
  • ✅ Added clear explanations of Minecraft engine limitations vs actual bugs

Code Improvements

  • ✅ Cleaned up ModConfig.java - removed unused config variables
  • ✅ Updated SpectatorMod.java - hard-coded HUD behavior
  • ✅ Updated ClientEventHandler.java - simplified HUD management
  • ✅ Generated config file now clean and accurate

📝 Migration from v1.1.0-beta

If upgrading from 1.1.0-beta, your existing config will continue to work. The removed options will simply be ignored. No action required - the mod will use correct behavior regardless of old config values.

🔧 Current Features

  • ✅ Configurable spectator mode with flight
  • ✅ Distance limits (default: 75 blocks, configurable)
  • ✅ Dimension travel restrictions
  • ✅ Customizable interaction controls (PvP, items, crafting)
  • ✅ Block interaction whitelist (doors, trapdoors, gates by default)
  • ✅ Permission system (configurable command access levels)
  • ✅ HUD auto-hide with F1 toggle
  • ✅ Full multiplayer support

📚 Documentation

Full documentation available in the wiki

🐛 Known Limitations

These are Minecraft engine limitations, not bugs:

  • Fall damage always prevented when mayfly=true (Minecraft core behavior)
  • Players must double-tap spacebar to fly (ADVENTURE mode limitation)
  • Block breaking/placing always blocked in ADVENTURE mode (GameMode restriction)

Full Changelog: v1.1.0-beta...v1.1.1

v.1.1.0-beta - Configuration System & Critical Fixes

Choose a tag to compare

@kalashnikxvxiii kalashnikxvxiii released this 10 Nov 00:03

⚠️ Beta Release

This is a beta release with extensive new features and bug fixes. Most functionality works well, but some advanced features have known limitations documented below.

✨ What's New

Complete Configuration System

  • 25+ configurable options via config/limitedspectator-common.toml
  • Movement restrictions: distance limits, dimension travel, teleport behavior
  • Player abilities: invulnerability, flight, auto-flying, gamemode selection
  • Interaction controls: PvP, mob attacks, item drop/pickup, block breaking/placing
  • Customizable block whitelist via Minecraft block IDs
  • Permission system: configurable levels (0-4) for commands
  • Client/HUD settings: auto-hide, F1 toggle functionality
  • Message settings: action bar vs chat, distance warnings
  • Hot-reload support via /reload command

Critical Bug Fixes

  • /survival command now correctly teleports players back to original dimension (Overworld/Nether/End)
  • ✅ Added dimension tracking to prevent cross-dimension bugs
  • ✅ Distance boundary enforcement when teleport_back_on_exceed=false - players stopped at exact boundary
  • ✅ Vanilla F1 HUD toggle works when auto_hide_hud=false
  • ✅ HUD flicker reduced significantly
  • ✅ Message encoding fixed - removed garbled characters (À symbols)
  • ✅ Messages now properly rendered with Minecraft's Component system
  • ✅ Messages visible even with HUD hidden (action bar works independently)

Documentation

  • 📖 New CONTRIBUTING.md for developers and contributors
  • 📖 Updated README with comprehensive configuration guide
  • 📖 Detailed CHANGELOG with all changes

⚠️ Known Issues (Beta)

High Priority

  1. Fall Damage: enable_invulnerability=false doesn't apply fall damage due to Minecraft core behavior with flying abilities in ADVENTURE mode
  2. Auto-Flying: auto_start_flying=true doesn't immediately activate flying - players must manually double-tap spacebar (client-server sync timing issue)
  3. Block Interaction: allow_block_breaking=true and allow_block_placing=true don't work in ADVENTURE mode due to vanilla restrictions

Medium Priority

  1. HUD Edge Cases: Minor visual glitches with certain config combinations of auto_hide_hud and allow_f1_hud_toggle

See CONTRIBUTING.md for detailed technical information and workarounds.

📥 Installation

  1. Install NeoForge 21.1.0+
  2. Place limitedspectator-1.21.1-1.1.0-beta.jar in your mods/ folder
  3. Launch Minecraft - config file auto-generates at config/limitedspectator-common.toml
  4. (Optional) Customize configuration to suit your needs
  5. Reload changes with /reload command

🧪 Testing & Feedback

This is a beta release - please report bugs and issues:

📦 Compatibility

  • ✅ Minecraft 1.21.1
  • ✅ NeoForge 21.1.0+
  • ✅ Multiplayer-safe

Full Changelog: v1.0.2...v1.1.0-beta

Limited Spectator v1.0.2

Choose a tag to compare

@kalashnikxvxiii kalashnikxvxiii released this 08 Nov 17:51

🔧 Critical bug fix release resolving item loss issues in spectator mode.

🐛 What's Fixed

  • Critical: Items no longer disappear when trying to drop them in spectator mode
  • Items are properly returned to inventory when drop is blocked
  • Players can no longer pick up items from the ground while in spectator mode

📦 Installation

Download the JAR below and place it in your mods/ folder with NeoForge 21.1.0+ for Minecraft 1.21.1.

📝 Full Changelog

See CHANGELOG.md for complete details.


⭐ Star the repo if you find this mod useful!

v1.0.1 - Security Patch Release

Choose a tag to compare

@kalashnikxvxiii kalashnikxvxiii released this 05 Nov 23:10

Security Fixes 🔒

  • CVE-2025-24970 (Score 7.5): Fixed Netty SSL handler vulnerability by upgrading to 4.1.118.Final
  • CVE-2025-48924 (Score 5.3): Fixed Apache Commons Lang3 uncontrolled recursion vulnerability by upgrading to 3.18.0

Code Improvements 🛠️

  • Replaced deprecated @EventBusSubscriber with modern IEventBus registration
  • Migrated all console logging to SLF4J Logger for better log management
  • Removed redundant null checks and code quality improvements
  • Updated NeoForge from 21.1.209 to 21.1.213

Technical Details

This patch release adds Gradle dependency resolution strategies to force secure versions of transitive dependencies, ensuring all known vulnerabilities are addressed.