
Zenith-Mod
Advanced moderation plugin with ban/mute systems, escalation templates, offline support, and Web-API integration for professional server management.
Zenith-Mod 1.2.7
release15 марта 2026 г.Changelog
Ban GUI
- Completely remade the Ban GUI, fixing several bugs from the previous version
- Added a Case-ID search feature — simply click the magnifying glass and type the ID in chat
- Active bans now show in red, expired/unbanned players in green
- Added a filter button to toggle between all bans, active only, or inactive only
AutoMod
- Added an AutoMod system that automatically detects and removes messages containing blacklisted words
- Leetspeak detection included — things like 1d10t or i.d.i.o.t are caught automatically, you only need to add the base word to the list
- Added an AntiSpam system that detects duplicate messages and message flooding
- Staff alerts are sent in-game and to Discord when a message is blocked
- Staff can toggle their own alerts with /automod alerts
Zenith-Mod 1.2.6
release31 января 2026 г.Zenith-Mod v1.2.6 Update
🐛 Bug Fixes
BanList GUI Critical Fixes
This update fixes several critical issues in the BanList GUI module that could cause server crashes.
Fixed Issues
-
Fixed: Critical crash when opening Ban Details GUI caused by invalid material name (
HOURGLASS)- The material
HOURGLASSdoes not exist in Minecraft/Bukkit API - Changed to
CLOCK(the correct material name) - Added fallback handling for invalid material names throughout the module
- The material
-
Fixed: Material validation errors
- All
Material.valueOf()calls now include proper try-catch error handling - Invalid material names from configuration now fallback to safe defaults (PAPER, RED_CONCRETE)
- Prevents
IllegalArgumentExceptioncrashes when configuration contains invalid materials
- All
-
Fixed: Pagination bounds checking
- Improved index validation when clicking on ban items
- Prevents
IndexOutOfBoundsExceptionwhen navigating between pages - Better handling of edge cases in pagination logic
Technical Improvements
-
Added: Safe material name validation with fallback handling for all GUI items
- Filter buttons, navigation buttons, action buttons, and info items all have fallback materials
- Configuration errors no longer cause server crashes
- Server continues to function even with invalid material names in config
-
Added: Enhanced slot bounds checking throughout the BanList module
- All slot assignments now validate bounds before setting items
- Prevents
ArrayIndexOutOfBoundsExceptionerrors - Better error logging for configuration issues
-
Improved: Better error handling for invalid configuration values
- Invalid slot numbers are safely ignored
- Invalid material names use fallback materials
- Configuration errors are logged but don't crash the server
🚀 Velocity Plugin Available
Zenith-Mod Velocity v1.2.5 is now also available! The Velocity version includes all the same features and bug fixes as the Bukkit version.
📋 Compatibility
- Fully backward compatible - No breaking changes
- No configuration changes needed - Existing configs work as-is
- No database migrations needed - Automatic database handling
- Works with all database types - H2, SQLite, MySQL, MariaDB
🔧 Technical Details
Material Name Validation
All GUI item creation now includes safe material validation:
Material material;
try {
material = Material.valueOf(materialName);
} catch (IllegalArgumentException e) {
// Fallback to safe default
material = Material.PAPER; // or appropriate fallback
}
This ensures that even if the configuration contains invalid material names (like HOURGLASS), the server will not crash and will use a safe fallback material instead.
Slot Bounds Checking
All slot assignments now validate bounds:
if (slot >= 0 && slot < gui.getSize()) {
gui.setItem(slot, item);
}
This prevents ArrayIndexOutOfBoundsException errors when configuration contains invalid slot numbers.
📝 Configuration Notes
If you're using custom material names in modules/banlist.yml, please ensure they are valid Minecraft material names. Common mistakes:
- ❌
HOURGLASS→ ✅CLOCK - ❌
WOOL→ ✅WHITE_WOOL(or specific color) - ❌
STAINED_GLASS→ ✅WHITE_STAINED_GLASS(or specific color)
For a complete list of valid material names, refer to the Bukkit Material API documentation.
⚠️ Important Notes
- This update is highly recommended - Fixes critical crashes in the BanList GUI
- No data loss - All existing bans and history entries remain intact
- Automatic fallback - Invalid configurations are automatically handled with safe defaults
- Error logging - Configuration errors are logged to help identify issues
🔗 Links
- Bukkit Version: Download on Modrinth
- Documentation: Plugin Documentation
- API Documentation: Java API Docs
⚠️ Recommendation: If you're using the BanList GUI feature, we strongly recommend updating to this version to prevent potential server crashes.
Developed by Zenith-Studios
Zenith-Mod 1.2.5
release24 января 2026 г.Zenith-Mod v1.2.5 Update
🎨 New: Ban List GUI (/banlist)
- GUI-based ban overview with player heads
- Click a ban to open a detail view
- Unban directly from the GUI (permission-based)
- Pagination + filters (Active/Expired, Player/IP, All)
🛠️ Fixed
- Fixed: A crash (
ArrayIndexOutOfBoundsException) when opening the Ban Details GUI caused by invalid slot handling / config path mismatch.
🌐 Velocity Plugin Available
- The Zenith-Mod Velocity plugin is now available for proxy/network setups. Download on our Discord
🔐 Permissions
zenith.banlist— Access/banlistzenith.banlist.unban— Unban from the GUI
Developed by Zenith-Studios
Zenith-Mod 1.2.4
release22 января 2026 г.Zenith-Mod v1.2.4 Update
🎨 New Feature: Ban List GUI
A powerful, interactive GUI system for managing bans!
Zenith-Mod now includes a comprehensive ban list interface that makes it easier than ever to view, filter, and manage player bans directly from an in-game GUI.
✨ Key Features
Interactive Ban List GUI
- Visual Ban Overview: Browse all bans in a beautiful, organized GUI
- Player Heads: See player avatars for each banned player
- Detailed Information: View ban reason, staff member, case ID, date, duration, and status at a glance
- Click to View Details: Click on any ban to see full information
Advanced Filtering System
- Active Bans: Filter to show only currently active bans
- Expired Bans: View bans that have expired or been lifted
- Player Bans: Filter to show only player-specific bans
- IP Bans: Filter to show only IP-based bans
- All Bans: View complete ban history
Pagination Support
- Navigate through large ban lists with ease
- Page indicators show your current position
- Smooth navigation between pages
Quick Actions
- Unban Directly from GUI: Unban players with a single click (requires permission)
- Detailed View: Click any ban to see complete information including:
- Player UUID and IP address
- Full ban reason
- Staff member details
- Case ID
- Ban date and duration
- Current status (Active/Expired/Unbanned)
🎯 Configuration
The ban list GUI is fully configurable via modules/banlist.yml:
- Customizable GUI Titles: Use hex colors and small caps formatting
- Configurable Item Lore: Customize what information is displayed
- Filter Button Positions: Arrange filter buttons as you prefer
- Material Customization: Choose different materials for active/expired/IP bans
- Variable Support: Use placeholders like
{player_name},{reason},{case_id}, etc. - Color Utils Support: Full support for
%smcaps%and hex colors (&#RRGGBB)
🔐 Permissions
zenith.banlist- Access to/banlistcommandzenith.banlist.unban- Unban players from the GUI
📋 Usage
Simply use the /banlist command to open the ban list GUI. From there, you can:
- Browse all bans with pagination
- Apply filters to narrow down results
- Click on any ban to view detailed information
- Unban players directly from the detail view (if you have permission)
🎨 Customization Examples
The ban list GUI supports extensive customization through the configuration file:
gui:
title: '�FFAA%smcaps%BAN LIST%smreset%'
ban_item:
name: '&#FF5555{player_name}'
lore:
- '&#AAAAAAReason: &#FFFFFF{reason}'
- '&#AAAAAAStaff: &#FFFFFF{staff_name}'
- '&#AAAAAACase ID: &#FFFFFF{case_id}'
All text supports:
- Hex colors (
&#RRGGBB) - Small caps formatting (
%smcaps%...%smreset%) - Variable placeholders (
{player_name},{reason}, etc.) - Standard Minecraft color codes
🔧 Technical Details
- Asynchronous Loading: Ban data is loaded asynchronously to prevent server lag
- Session Management: Player sessions track current filter and page state
- Efficient Filtering: Smart filtering system handles large ban lists efficiently
- Thread-Safe: All GUI operations are properly synchronized
📊 Integration
The ban list GUI integrates seamlessly with:
- Existing ban system
- History tracking
- Case ID system
- Unban functionality
- Staff notification system
⚠️ Breaking Changes
None - This update is fully backward compatible. All existing commands and functionality work exactly as before.
🔄 Migration Notes
- No configuration changes required
- The ban list module is enabled by default
- New configuration file
modules/banlist.ymlwill be created automatically - All existing bans are immediately visible in the GUI
📝 Files Changed
New Classes
me.kzlyth.modules.banlist.BanListModuleme.kzlyth.modules.banlist.BanListConfigme.kzlyth.modules.banlist.gui.BanListGUIme.kzlyth.modules.banlist.gui.BanDetailGUIme.kzlyth.modules.banlist.gui.BanListGUIHandlerme.kzlyth.commands.admin.BanListCommand
New Configuration
modules/banlist.yml- Complete GUI configuration
Enhanced
ZenithMod- Added ban list module initializationplugin.yml- Added/banlistcommand and permissions
🎉 Enjoy the new ban list GUI! This feature makes ban management more intuitive and efficient than ever before.
📢 Note: The ban list GUI requires players to have the zenith.banlist permission. Make sure to grant this permission to your staff members.
Zenith-Mod 1.2.3
release31 октября 2025 г.Zenith-Mod v1.2.3 Update
⚠️ Beta Notice
This update includes significant API additions that are currently in Beta. While we've thoroughly tested all features, please be aware that:
- In very rare cases, API methods may behave unexpectedly
- In very rare cases, events may not fire or fire incorrectly
- API structure may undergo changes in future versions
- We do not provide any warranty or guarantee regarding the API's functionality
Use of the new API features is at your own risk. However, all core plugin functionality (commands, moderation, etc.) remains stable and fully supported.
🚨 CRITICAL: Database Fix
⚠️ THIS UPDATE IS HIGHLY RECOMMENDED - CRITICAL DATABASE ISSUE FIXED
This version fixes a critical database problem that could cause data inconsistency issues. We strongly recommend updating immediately, especially if you're using MySQL or MariaDB databases.
What Was Fixed?
- Fixed: Critical database transaction issue that could cause history entries to be incomplete
- Fixed: Potential race condition in database operations that could lead to missing case IDs
- Improved: Database connection handling and error recovery
- Result: More reliable database operations and complete history tracking
Note: If you experience any issues after updating, please check your database logs and ensure all migrations completed successfully.
🎯 New API System (Beta)
Zenith-Mod now includes a comprehensive Java API for developers to integrate with other plugins and extend functionality!
📦 New API Modules
FreezeAPI (me.kzlyth.api.freeze)
freeze(UUID, UUID, String)- Freeze a player with reasonunfreeze(UUID, UUID, String)- Unfreeze a playerisFrozen(UUID)- Check if player is frozengetFrozenPlayers()- Get list of all frozen players- Automatic history logging with case IDs
- Staff notifications for all freeze actions
ChatFreezeAPI (me.kzlyth.api.chatfreeze)
freezeChat(UUID, String)- Freeze the server chatunfreezeChat(UUID, String)- Unfreeze the server chatisChatFrozen()- Check if chat is currently frozen- Server-wide chat control with history tracking
- Automatic staff notifications
EssentialsAPI (me.kzlyth.api.essentials)
- God Mode:
setGodMode(UUID, UUID, boolean),isGodMode(UUID) - Fly Mode:
setFlyMode(UUID, UUID, boolean),isFlying(UUID) - Heal:
heal(UUID, UUID)- Restore player health - Feed:
feed(UUID, UUID)- Restore player hunger - Clear Inventory:
clearInventory(UUID, UUID)- Clear player inventory - Teleport:
teleport(UUID, UUID),teleportHere(UUID, UUID)- Teleport players - All methods include staff notifications
VanishAPI (me.kzlyth.api.vanish)
vanish(UUID)- Make player invisibleunvanish(UUID)- Make player visibletoggleVanish(UUID)- Toggle vanish statusisVanished(UUID)- Check if player is vanishedgetVanishedPlayers()- Get list of all vanished players- Automatic staff notifications
🎪 Event System (Beta)
A powerful event bus system for listening to moderation actions in real-time!
Available Events
- Ban Events:
PlayerBanEvent,PlayerUnbanEvent - Mute Events:
PlayerMuteEvent,PlayerUnmuteEvent - Warn Events:
PlayerWarnEvent - Kick Events:
PlayerKickEvent
Event Packages
me.kzlyth.api.events.ban.*- Ban and unban eventsme.kzlyth.api.events.mute.*- Mute and unmute eventsme.kzlyth.api.events.warn.*- Warn eventsme.kzlyth.api.events.kick.*- Kick events
Features
- Events fired after actions complete (for integrations and logging)
- Complete event data (player info, staff info, reason, case ID, duration, etc.)
- Automatic main-thread handling for safe Bukkit API access
- Simple subscription/unsubscription system
- Perfect for Discord webhooks, external databases, analytics, and plugin integrations
📚 API Integration
All new APIs are accessible through the main ZenithAPI class:
ZenithAPI api = ZenithAPI.getInstance();
if (api != null && api.isAvailable()) {
FreezeAPI freezeAPI = api.getFreezeAPI();
ChatFreezeAPI chatFreezeAPI = api.getChatFreezeAPI();
EssentialsAPI essentialsAPI = api.getEssentialsAPI();
VanishAPI vanishAPI = api.getVanishAPI();
ZenithEventBus eventBus = ZenithEventBus.getInstance();
eventBus.subscribe(PlayerBanEvent.class, event -> {
// Handle ban event
});
}
📖 Complete API Documentation
For detailed API documentation, method signatures, parameters, and usage examples, visit:
http://javadocs.zenith-studios.org/
The Javadoc includes:
- Complete class and method documentation
- Parameter descriptions and return types
- Usage examples and best practices
- Exception handling guides
- Event system documentation
✅ Enhanced Existing APIs
BanAPI Improvements
- Fixed: Players are now automatically kicked when banned via API
- Added: Staff notifications for all ban API calls
- Improved: Better error handling and validation
MuteAPI Improvements
- Added: Staff notifications for all mute API calls
- Improved: Better offline player handling
WarnAPI Improvements
- Added: Staff notifications for all warn API calls
- Fixed: Auto-escalation now works correctly with API calls
KickAPI Improvements
- Added: Staff notifications for all kick API calls
- Improved: Better integration with history system
📊 Analytics Integration
bStats Integration
- Added: Integrated bStats metrics system for plugin analytics
- Anonymous usage statistics to help us improve the plugin
- Respects server privacy settings
- Can be disabled via bStats configuration
🔧 Technical Details
API Architecture
- Asynchronous Operations: All API methods use
CompletableFuturefor non-blocking operations - Thread Safety: Event bus automatically handles thread synchronization
- Error Handling: Comprehensive exception handling with
APIUnavailableException - History Integration: All API actions automatically create history entries with case IDs
- Notification System: Automatic staff notifications for all moderation actions
Database Improvements
- Fixed critical transaction issues
- Improved connection handling
- Better error recovery mechanisms
- Enhanced history entry consistency
Performance
- Asynchronous API calls prevent server lag
- Event system optimized for high-throughput scenarios
- Efficient database operations
📋 Setup Instructions
For Plugin Developers
- Add Zenith-Mod as a dependency in your
plugin.yml:
depend: [Zenith-Mod]
- Get the API instance:
ZenithAPI api = ZenithAPI.getInstance();
if (api != null && api.isAvailable()) {
// Use API...
}
- Subscribe to events:
ZenithEventBus bus = ZenithEventBus.getInstance();
bus.subscribe(PlayerBanEvent.class, event -> {
// Handle event...
});
For complete setup instructions and examples, see the API Documentation.
⚠️ Breaking Changes
None - This update is fully backward compatible. All existing commands and functionality work exactly as before.
🔄 Migration Notes
- No configuration changes required
- No database migrations needed (automatic)
- All existing bans, mutes, warns, and history entries remain intact
- API is opt-in - existing plugins continue to work without changes
📝 Files Changed
New API Classes
me.kzlyth.api.freeze.FreezeAPIme.kzlyth.api.chatfreeze.ChatFreezeAPIme.kzlyth.api.essentials.EssentialsAPIme.kzlyth.api.vanish.VanishAPIme.kzlyth.api.events.ZenithEventme.kzlyth.api.events.ZenithEventBus- Event classes in
me.kzlyth.api.events.*packages
Enhanced Existing Classes
ZenithAPI- Added getters for new APIsBanAPI- Added notifications and auto-kickMuteAPI- Added notificationsWarnAPI- Added notificationsKickAPI- Added notifications
Database Fixes
- Enhanced transaction handling in all repository classes
- Improved connection pool management
- Better error recovery mechanisms
🔗 Full API Documentation: http://javadocs.zenith-studios.org/
⚠️ Remember: The API system is in Beta. While core plugin functionality is stable, please test API integrations thoroughly in a development environment before using in production.
📢 Important: This update fixes a critical database issue. We highly recommend updating as soon as possible.
Developed by Zenith-Studios