
Limited Spectator
A lightweight NeoForge mod that introduces a restricted spectator mode for Minecraft players (fully customizable).
- Загрузки
- 1K
- Подписчики
- 2
- Обновлён
- 5 июня 2026 г.
- Лицензия
- MIT
Опубликован 2 ноября 2025 г.
🧭 Limited Spectator
A multi-loader Minecraft mod that introduces a restricted spectator mode with configurable limitations.
Supported Loaders: NeoForge ✅ • Fabric ✅ • Quilt ✅ (Production Only)
📖 Overview
Limited Spectator allows players to enter a controlled spectator mode that limits what they can do while flying and observing the world. Unlike the vanilla spectator mode, this version allows to press F1 to show HUD and restricts interactions to preserve game balance on servers or custom worlds.
Perfect for:
• SMP;
• Builders who want visual observation without full spectator privileges.
✨ Features
✅ Fully Configurable Spectator Mode Comprehensive TOML-based configuration system allowing server owners to customize every aspect of spectator behavior.
✅ Limited Spectator Mode Players can enter a custom spectator state that allows free flight but prevents inventory use, PvP, and world interactions.
✅ Flexible Distance Limits Configure maximum travel distance from start position (default 75 blocks) or disable it entirely. Choose between teleport-back or warning behavior.
✅ Customizable Block Interactions Define exactly which blocks players can interact with using Minecraft block IDs. Default includes doors, trapdoors, and fence gates.
✅ Granular Permission Control
Set different permission levels (0-4) for /spectator and /survival commands, with optional OP requirement.
✅ Selective HUD Visibility HUD elements remain hidden by default but can be temporarily shown by pressing F1 (configurable).
✅ Dimension Travel Control Configure whether players can switch dimensions (Nether, End, etc.) while in spectator mode.
✅ Player Repositioning
Automatic position reset when exceeding distance limits or executing /survival command.
✅ Flight Capability Players in spectator mode can fly by double-pressing the space bar.
✅ Combat & Interaction Restrictions Individually toggle PvP, mob attacks, item drop/pickup, and inventory crafting.
✅ Hot-Reloadable Configuration
All settings can be changed in config/limitedspectator-common.toml and reloaded with /reload command.
✅ Server-Friendly All restrictions are handled server-side for secure multiplayer behavior.
✅ Multilingual Support Full translation support for 5 European languages (English, Italian, German, French, Spanish).
🧠 Technical Details
| Aspect | Value |
|---|---|
| Version | 2.0.0 |
| Minecraft | 1.21.1 → 1.21.11+ (cross-version compatible) |
| Mod Loaders | NeoForge ✅ • Fabric ✅ • Quilt ✅ |
| NeoForge | 21.1.217+ |
| Fabric Loader | 0.16.5+ |
| Fabric Loom | 1.7.3+ |
| Quilt Loader | 0.26.4+ |
| Quilt Loom | 1.7.3+ (Production only) |
| Java | 21 |
| Mod ID | limitedspectator |
⚙️ Commands
| Command | Description | Default Permission |
|---|---|---|
/spectator |
Switch to the limited spectator mode | Level 0 (everyone) |
/survival |
Return to normal gameplay and restore the HUD | Level 0 (everyone) |
🌍 Command feedback messages are fully localized in 5 languages: English, Italian, German, French, and Spanish.
Note: Permission levels can be customized in the config file. See Configuration section below.
⚙️ Configuration
Limited Spectator features a comprehensive configuration system. On first launch, a config file is automatically generated at:
Location: config/limitedspectator-common.toml
Configuration Categories
🚶 Movement Restrictions
max_distance- Maximum travel distance from start position (default: 75.0 blocks, -1 to disable)allow_dimension_travel- Allow dimension changes in spectator mode (default: false)teleport_back_on_exceed- Teleport back when exceeding distance vs. warning (default: true)reset_position_on_logout- Reset position on logout to prevent abuse (default: true)
🎮 Player Abilities
enable_invulnerability- Make players invulnerable (protects from mobs and environmental damage, not fall damage) (default: true)enable_flight- Allow flight in spectator mode (default: true)spectator_gamemode- GameMode to use: "ADVENTURE" or "SPECTATOR" (default: "ADVENTURE")
🔧 Interaction Restrictions
allow_pvp- Allow attacking other players (default: false)allow_item_drop- Allow dropping items (default: false)allow_item_pickup- Allow picking up items (default: false)allow_inventory_crafting- Allow inventory crafting (2x2 grid) (default: false)interactable_blocks- List of block IDs players can interact with (default: all doors, trapdoors, gates)
Note: Mob attacks are always disabled because mobs don't target players with mayfly=true ability (Minecraft core behavior).
🔐 Command Permissions
spectator_command_permission_level- Permission level for/spectator(0-4, default: 0)survival_command_permission_level- Permission level for/survival(0-4, default: 0)require_op_for_spectator- Require OP status for spectator commands (default: false)
🖥️ Client & HUD Behavior
- HUD automatically hides when entering spectator mode (hard-coded)
- F1 key toggles HUD visibility temporarily
💬 Message Settings
use_action_bar_messages- Show messages in action bar instead of chat (default: true)show_distance_warnings- Show warnings when approaching distance limit (default: true)
Example Configurations
Server with relaxed spectator mode:
[movement_restrictions]
max_distance = -1 # No distance limit
allow_dimension_travel = true
[interactions]
allow_item_pickup = true # Allow picking up items
interactable_blocks = ["minecraft:oak_door", "minecraft:lever", "minecraft:stone_button"]
Strict survival server:
[permissions]
spectator_command_permission_level = 2 # Requires moderator rank
require_op_for_spectator = true
[movement_restrictions]
max_distance = 50.0 # Shorter distance limit
reset_position_on_logout = true # Prevent logout abuse
All configuration changes can be applied without restarting the server using /reload.
🔐 Default Restrictions in Spectator Mode
Note: Most restrictions below are configurable via config/limitedspectator-common.toml
• ❌ No block breaking or placing (enforced by ADVENTURE mode - cannot be changed)
• ❌ No chest, bed, crafting table, or item interactions (configurable via block whitelist)
• ❌ No inventory crafting (2x2 grid) - ingredients restored automatically (configurable)
• ❌ No dimension travel (configurable)
• ❌ No mob attacks (mobs don't target players with mayfly ability)
• ❌ No PvP (configurable)
• ❌ No item dropping or pickup (individually configurable)
• ✅ Doors, trapdoors, and fence gates remain interactable (fully customizable via block IDs)
• ✅ F1 toggles HUD visibility (configurable)
• ✅ Distance limit: 75 blocks (configurable, can be disabled)
🧩 Compatibility
• ✅ Minecraft 1.21.1+
• ✅ NeoForge 21.1.0+
• ✅ Multiplayer-safe
• ⚠️ Limited Spectator uses standard NeoForge event hooks and should be compatible with most mods. However, mods that deeply alter player gamemode handling or HUD rendering may interfere with its behavior.
🌐 Environment Requirements
Limited Spectator is a server-authoritative mod. The Modrinth "Client and server" tag refers to where the mod can be installed, not where it is required.
| Where to install | Required | Result |
|---|---|---|
| Server | ✅ Yes | All gameplay restrictions (distance limits, item drop/pickup, interactions, attacks, dimension travel, command permissions) are enforced here. The mod cannot function without being on the server. |
| Client | ⚪ Optional but highly recommended | Enables a richer UX: HUD auto-hide when entering /spectator, F1 toggle for temporary HUD reveal, and tighter sync with world events/interactions. |
Connection compatibility
- Vanilla clients can join a server running Limited Spectator. All restrictions still apply server-side — players just won't get the HUD-hide effect.
- Clients with Limited Spectator installed get the full intended experience (clean HUD, synced events).
Per-loader detail
- Fabric & Quilt builds: no client-side code currently exists, so the JAR is effectively server-only. Installing it on the client is harmless but adds no extra features today.
- NeoForge build: the only client-side piece is a small optional packet handler for HUD sync. The network channel is registered as optional, so connection handshake works against both modded and vanilla clients.
Recommended setup
| Use case | Server | Client |
|---|---|---|
| Public SMP with vanilla guests | Required | Vanilla works, install for full UX |
| Private server, all members modded | Required | Install on both for best experience |
| Single-player testing | n/a | Required (acts as local server) |
🧰 Installation
📦 Choose Your Loader
Download the correct version for your mod loader:
| Loader | File | Notes |
|---|---|---|
| NeoForge | LimitedSpectator-neoforge-2.0.0.jar |
Full config support |
| Fabric | LimitedSpectator-fabric-2.0.0.jar |
Hardcoded defaults |
| Quilt | LimitedSpectator-quilt-2.0.0.jar |
Uses Fabric API |
Installation Steps
- Install your mod loader (NeoForge 21.1.217+ / Fabric 0.16.5+ / Quilt 0.26.4+)
- Place the correct JAR into your
mods/folder - Launch Minecraft
- (NeoForge only) Config file auto-generates at
config/limitedspectator-common.toml - (NeoForge only) Reload changes with
/reloadcommand
Note: Fabric and Quilt versions use hardcoded defaults. Configuration system planned for future release.
🌍 Localization
Limited Spectator includes full translation support for the most common European languages:
Supported Languages:
- 🇬🇧 English (en_us) - Base language
- 🇮🇹 Italian (it_it) - Italiano
- 🇩🇪 German (de_de) - Deutsch
- 🇫🇷 French (fr_fr) - Français
- 🇪🇸 Spanish (es_es) - Español
Translated Messages:
- Command feedback (
/spectatorand/survival) - Distance limit notifications
- Error messages (dimension travel, crafting restrictions)
- All user-facing text
The mod automatically detects your Minecraft language setting and displays messages accordingly.
⚠️ Minecraft ADVENTURE Mode Limitations
Limited Spectator uses Minecraft's ADVENTURE mode (instead of SPECTATOR mode) to prevent noclip while allowing flight. This design choice introduces some inherent limitations:
Core Limitations (By Design)
These are NOT bugs - they are fundamental restrictions of Minecraft's ADVENTURE mode that cannot be overridden:
Manual Flight Activation: Players must double-press spacebar to start flying. Auto-start flying requires vanilla SPECTATOR mode (which enables noclip).
Fall Damage Only: When
mayfly=true, Minecraft's engine prevents fall damage calculation entirely. However,enable_invulnerability=trueDOES protect against mobs, lava, fire, cacti, and other environmental damage.Block Breaking/Placing Disabled: ADVENTURE mode blocks all building actions at the GameMode level. This cannot be changed without deep Mixins into Minecraft's core engine.
Why These Limitations Exist
Limited Spectator prioritizes observation without noclip over feature completeness. Enabling vanilla SPECTATOR mode would allow players to:
- Phase through walls and blocks (noclip)
- Access areas they shouldn't see
- Bypass server protections
These limitations preserve the mod's core purpose: balanced spectating for servers.
Alternative: Use SPECTATOR Mode
If you need full vanilla spectator features (invulnerability, noclip, etc.), set spectator_gamemode = "SPECTATOR" in the config. Note that this enables noclip and reduces security for multiplayer servers.
🧾 License
This project is licensed under the MIT License. See the LICENSE file for details. Copyright (c) 2025 karashi
You may use, modify, and distribute this mod freely, provided that attribution is maintained.
📦 Project Links
| Platform | Link |
|---|---|
| CurseForge | Limited Spectator on CurseForge |
| GitHub | GitHub Repository |
| Issues | Report Bugs / Suggestions |
❤️ Credits
• Author: Karashi
• Development: Full custom codebase for NeoForge 1.21.1
• Icon Design: AI-generated minimalist design (OpenAI)
• Special thanks: Minecraft & NeoForge community
🚀 Future Roadmap
• 🧱 Optional integration with third-party permission systems (LuckPerms, FTB Chunks)
• 🔍 Extended API for custom spectator events (SpectatorModeEnterEvent, SpectatorModeExitEvent)
• 💾 Persistent state storage (save spectator positions across server restarts)
• ⏱️ Spectator time limits (configurable max duration in spectator mode)
• ✨ Particle effects or visual boundaries for distance limits
Ченджлог
1.21.x-2.0.1Релиз1.21.9, 1.21.10, 1.21.11 · 5 июня 2026 г.
See Limited-Spectator-NeoForge-1.21.x-2.0.1 for full changelog.
1.21.x-2.0.1Релиз1.21.9, 1.21.10, 1.21.11 · 5 июня 2026 г.
See Limited-Spectator-NeoForge-1.21.x-2.0.1 for full changelog.
1.21.x-2.0.1Релиз1.21.9, 1.21.10, 1.21.11 · 5 июня 2026 г.
🔧 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.jsonandneoforge.mods.tomlwere declaring incorrect ranges (one too narrow at exactly1.21.1, the other open-ended). Both now correctly declare the actual supported1.21.1–1.21.11range, 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.tomlandmodrinth.mod.jsondue to hardcoded values that were never updated for the v2.0.0 release. From now ongradle.propertiesis 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 nowoptional()andsendHudState()checkshasChannel()before dispatching. - Fixed:
neoforge.mods.tomlwas declaringversion="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 followsgradle.propertiesautomatically. - Fixed:
modrinth.mod.jsonwas declaring"version": "1.1.1"since the v1.1.1 era — corrected. - Fixed:
modrinth.mod.jsondeclared 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.tomlminecraftversionRangewas[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
.gitattributesnow enforces LF on all source/config/script files, CRLF on*.bat/*.cmd, with binary markers. Fixes./gradlewon Linux (CRLF shebang was breaking/bin/sh).- NeoForge dev runs (
:neoforge:runClient/:neoforge:runServer) no longer crash withNoClassDefFoundError: SpectatorConfigat boot. The:commonsource set is now correctly grouped with:neoforge's under the samelimitedspectatormod identifier via NeoGradle'smodSourcesAPI. - All build.gradle files (root + common + 3 loaders) now read
version = mod_versionfromgradle.propertiesinstead of hardcoding it in five places. build.gradleruns DSL: switched to the canonical NeoGradle 7 shorthandarguments 'arg1', 'arg2'.
🙏 Credits
- Issue triage and bug reports: @TheSast
- See full changelog: CHANGELOG.md
1.21.x-2.0.0Релиз1.21.9, 1.21.10, 1.21.11 · 23 января 2026 г.
See Limited-Spectator-NeoForge-1.21.x-2.0.0 for full changelog
1.21.x-2.0.0Релиз1.21.9, 1.21.10, 1.21.11 · 23 января 2026 г.
See Limited-Spectator-NeoForge-1.21.x-2.0.0 for full changelog
1.21.x-2.0.0Релиз1.21.9, 1.21.10, 1.21.11 · 23 января 2026 г.
[2.0.0] - 2026-01-18
🚀 Multi-Loader Architecture Release
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 supportLimitedSpectator-fabric-2.0.0.jar(156 KB) - Hardcoded defaultsLimitedSpectator-quilt-2.0.0.jar(158 KB) - Uses Fabric API compatibility
- Core Abstraction Layer:
SpectatorConfiginterface - Loader-agnostic configuration contractSpectatorManagerclass - Shared business logic (100% code reuse)SpectatorStaterecord - Immutable state representationDistanceValidationResultrecord - Type-safe validation results
- Loader-Specific Adapters:
NeoForgeSpectatorConfig- Adapts NeoForge config to interfaceFabricSpectatorConfig- Hardcoded defaults for FabricQuiltSpectatorConfig- Delegates to Fabric config (composition pattern)
- Fabric Implementation:
LimitedSpectatorFabric- Fabric entry point with Fabric API integration- Command registration via
CommandRegistrationCallback.EVENT - Event handlers via
ServerTickEventsandServerPlayConnectionEvents
- 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
- Separate Gradle build files per loader (
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.printlnwith 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:
SpectatorManagerusesConcurrentHashMapfor multiplayer safety - Type-Safe Validation: Enum-based validation results prevent null pointer exceptions
- Backward Compatibility: Legacy HashMaps maintained with
@Deprecatedannotation - Dual-Write Strategy: Ensures external mods/mixins continue working
- Clean Separation: Zero loader dependencies in core business logic
Performance
- Shared
SpectatorManagerinstance 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)
1.21.x-1.2.1Релиз1.21.9, 1.21.10, 1.21.11 · 23 декабря 2025 г.
[1.2.1] - 2025-12-23
🔧 Code Quality Hotfix
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
- Merged redundant
- 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
1.21.x-1.2.0Релиз1.21.9, 1.21.10, 1.21.11 · 23 декабря 2025 г.
[1.2.0] - 2025-12-23
🌍 Multilingual Release
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 (
/spectatorand/survival) - Distance limit notifications (exceeded/reached)
- Error messages (dimension travel blocked, crafting blocked)
- All user-facing text automatically displays in player's Minecraft language
- Command feedback messages (
Changed
- Replaced all hardcoded
Component.literal()messages withComponent.translatable() - Added
MutableComponentimport 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
Комментарии
Загружаем…