File Details
Syntactical 2.0.7
- R
- Sep 10, 2025
- 24.66 KB
- 30
- 1.21.4
File Name
syntactical-2.0.7.jar
Supported Versions
- 1.21.4
Changelog — Syntactical (latest update)
New Features
- LuckPerms Integration
- Added /promote and /demote commands.
- Supports:
- Step-by-step rank changes (/promote Player → next rank).
- Direct rank changes (/promote Player governor).
- Enforces hierarchy: players can only modify ranks below their own.
- All messages configurable via config.yml.
- Tab-completion for player names and configured ranks.
- Configurable Rank Order
- Rank progression now defined in config.yml under ranks.order.
- Easily modify or extend rank ladders without recompiling.
- OP Safeguard
- Intercepts /op from authorized players and assigns the governor rank via LuckPerms instead.
- Console-issued /op is never intercepted.
- Sends configurable warnings advising the use of /promote.
- Stores a pending override so the executor can still force /op with /override.
- Added /override command (with tab-complete for pending player).
- Now supports offline targets: resolves UUID via LuckPerms and assigns governor even if the player is offline.
Improvements
- Centralized messages: All command/event messages now come from config.yml.
- Paper Brigadier commands: Registered commands via Paper’s lifecycle for better tab-complete and performance.
- Permission-aware safeguard: The /op safeguard only triggers if the executor actually has permission to use /op (no extra messages for unauthorized users).
- LuckPerms rank updates: Only inheritance (group) nodes are changed; other permission nodes are preserved.
- Rank order handling: Normalizes to lowercase and provides a sensible default fallback aligned with config.
- Vault UX consistency:
- Unified vault title prefix across manager/listener.
- /pv uses an integer argument with proper bounds based on config and permissions (syntactical.vault.unlimited).
- Code cleanup:
- Removed duplicate listener registration.
- Consistent colorization and minor UX tweaks.
Fixes
- Resolved LuckPerms API incompatibility: replaced NodeMap.mutate()/removeIf with a safe collect-and-remove approach.
- Unban logging: fixed to use logUnBan instead of logBan.
- Player name handling: stopped lowercasing player names during /op interception to preserve exact matches.
Existing Features Maintained
- Ban logging system (banlogs.yml).
- /seticon command.
- /swaphand command.
Notes for admins
- Ensure LuckPerms API 5.x is available (compileOnly net.luckperms:api:5.4 recommended).
- Paper 1.21.4 and Java 21 are targeted.
- Update config.yml to customize the new messages:
- messages.op-safeguard.* (usage, warn, override-tip, given-governor, given-governor-offline, unknown-offline, etc.)
- If you previously relied on multi-group setups, review the new “single-group” behavior for promotions/demotions (only inheritance nodes are replaced).

