Releases: endixons/EndSectors
Release v1.7.4
🚀 EndSectors Update 1.7.4 | Global Market & Virtual Backpacks
📋 GENERAL OVERVIEW
Major overhaul of the storage, trade, and financial infrastructure. This update introduces a synchronized Global Market, a lease-based Virtual Backpack system, a robust Economy engine, and a network-wide player synchronization.
⚠️ MIGRATION & DEPLOYMENT (IMPORTANT!)
REDIS DATA WIPE REQUIRED: Due to a fundamental shift in the Redis HASH structure and data schema, you MUST perform a
FLUSHALLorFLUSHDBon your Redis instance before booting v1.7.4. Failure to do so will result inunresolvedconnection states and legacy data corruption.PROXY STABILITY FIX: This version introduces shaded and relocated Netty & Lettuce dependencies (
pl.endixon.sectors.shadow.*) to prevent ClassLoader conflicts with the Velocity native transport layer.
🎒 VIRTUAL BACKPACK SYSTEM
Lease & Mechanics
- Subscription Model: Page 1: Permanent. Pages 2-18: 7-day renewal cycle.
- Financial Tracking: Real-time balance monitoring in GUI with dynamic color-coded coverage percentages.
- Bulk Renewal: One-click fulfillment for all expired pages (Middle-Click/Shift).
- Death Breach: 5% chance to drop items from unpaid pages on death with high-priority alerts.
- Combat Integration: Automated access lockdown during active combat (CombatTag support).
Access & Administration
- Command:
/backpack– Main player interface for personal cloud storage access. - Command:
/bpadmin <player/uuid>– Full remote audit suite for staff (inventory wipes, lease manipulation, and force-unlocks).
⚖️ GLOBAL MARKET SYSTEM
Trade & Management
- Unified Bridge: Cross-server listing visibility and instant purchasing via NATS synchronization.
- Segmented Profile: Dedicated windows for Active Offers, Claimable Deposits, and Expired Warehouses.
- Real-time Monitoring: MarketBossBarTask alerts you when items are ready for pickup.
- Command:
/market– Opens the global trade interface. - Command:
/sell <price> [amount]– List items directly from hand with automated category detection.
💸 ECONOMY & COMMANDS
Financial Engine
- Vault Integration: Seamless economy management with high-precision double handling.
- Command:
/eco [player]– View balance with a modernized prefix (Adventure API). - Command:
/pay <player> <amount>– Secure P2P transfers with minimum value validation (self-transfer strictly blocked). - Admin Actions:
/eco <set/add/take> <player> <amount>– Full server-side financial control.
☁️ CLOUD PLAYER SYNC (Proxy)
Multi-Proxy Architecture
-
Global Player Count: Implemented
ProxyCounterTaskfor network-wide synchronization across multiple proxy nodes using Redis HASH maps. - Optimized Sync: Task scheduled every 5 seconds to balance Redis performance with accurate player visibility.
-
Redis Integration: Each proxy reports its local state via
proxyNamefromconfig.jsonto the central Redis database. -
High Performance:
ProxyPingListenerfetches counts from a localizedAtomicIntegercache, ensuring$O(1)$ latency during pings without blocking on Redis I/O.
🔧 TECHNICAL REFACTOR
Backend & Performance
- NATS Protocol: Implementation of
ExpirationNotify,Janitor,Update, andNotifylisteners for cross-server sync. - Data Layer: BSON Schema migration (String-keys) for MongoDB POJO compatibility and repository
warmup()logic. - Atomic Transactions: Prevention of balance/data desync during high-frequency bulk operations.
User Interface & Security
- Adventure API Migration: Full MiniMessage implementation for modern gradients and Hex colors across all modules.
- WindowUI v2: Advanced interaction state-machine (
interactionAllowed) and Action Decorator pattern for secure event handling.
🔧 BUGFIXES
- Paper Module: Removed redundant
setCollidable(false)inPlayerLocallyJoinListener– arrows now deal damage correctly. - Tools Module:
- Removed duplicated player-type check in
onPlayerDamage– centralPlayerTypeValidatornow handles validation. - Added proper shutdown in
onDisable()to clean upheartbeatHookand common resources (Common.getInstance().shutdown()).
- Removed duplicated player-type check in
⚠️ DEVELOPMENT NOTE
- Configuration: Currently, Market, Economy, and Backpack settings (prices, limits, times) and Messages are hardcoded and not yet available in
config.yml. - Stability: This version is production-ready. Configuration support and message localization will be introduced in v1.7.5, provided that no critical bugs are found.
🏗️ BUILD INFO
- Java: 21 | Paper API: 1.21.4
- Infrastructure: NATS, MongoDB, Redis, Vault
- Manual Build: You can build the project manually using the provided Gradle wrapper:
./gradlew clean build🔗 Full Changelog: v1.7.3...v1.7.4
Release v1.7.3
🚀 EndSectors 1.7.3
Logging improvements, exploit fixes & Paper 1.21.4 compatibility (Adventure API)
🧾 Overview
This release focuses on full migration to Adventure API across Paper and Tools modules, enhancing the logging system, and fully updating the project for Paper 1.21.4.
💡 Why Adventure API?
We have completely moved away from legacy String-based text handling. This change was necessary to:
- Fix Font Issues: Resolved the "distorted/italic" font bug that occurred by default in Paper 1.21.4.
- Modern Color Support: Native support for MiniMessage and HEX/RGB gradients without "stripping" colors or causing
ParsingException. - Future Proofing: Following the latest Paper/Bukkit standards to ensure stability in future Minecraft updates.
The update improves stability, removes IDE/runtime warnings, and hardens the plugin against known and potential exploits across all project modules.
🔧 Technical Changes
🎨 UI & Text (Adventure API Migration - Paper & Tools)
- Refactored
ChatAdventureUtil(Tools module):- Rewrote parsing logic to safely handle mixed formats (MiniMessage, Legacy
§, and Ampersand&). - Fixed
ParsingExceptionImplcaused by legacy codes in modern strings. - Implemented automatic italic decoration removal to ensure clean, readable fonts in all GUIs and messages.
- Rewrote parsing logic to safely handle mixed formats (MiniMessage, Legacy
- Modernized
StackBuilder(Paper module):- Fully migrated
displayNameandloreto useComponentAPI. - Fixed deprecated
StackBuilder.type(Material)method.
- Fully migrated
- WindowUI Improvements:
- Updated inventory creation to use
Componenttitles, removing deprecation warnings and ensuring 1.21.4 compatibility.
- Updated inventory creation to use
🛡 Exploit Fixes & Protection (Paper module)
- Anti-Duplication: Added preventive protection against item duplication exploits involving dispensers, sticky mechanics, and shulker boxes.
- Shulker Protection: Added listener to prevent interacting with shulker boxes inside sector border distance (works silently).
- Projectile Fix: Corrected
ProjectileLaunchEventhandling to safely check shooter type, preventingClassCastExceptionfrom non-player entities.
🧪 Serialization, Logic & Cleanup
- Legal & Documentation: Added missing Non-Commercial License (2025) headers to all source files to protect intellectual property.
- Potion Effects: Refactored
PlayerDataSerializerUtilto use the new registry-based API compatible with Paper 1.21+. - SendSectorInfoTask: Replaced static instance usage with proper field-based
paperSectorinstance. - General Code Cleanup: Applied various minor formatting fixes (e.g.,
knockBorderlogic), cosmetic code improvements, and simplified internal logic.
🪵 Logging & Diagnostics
- Structured Logging: Added
LoggerUtil.warn(String, Throwable)and replaced allprintStackTrace()calls with proper logging. - TPS Monitoring: Updated
TpsUtilto log exceptions properly with a safe20.0TPS fallback.
⚙️ Build & Compatibility
- Updated Gradle to
paper-api:1.21.4-R0.1-SNAPSHOT. - Project fully compatible with Paper 1.21.4 and the latest Bukkit/Paper registry-based APIs.
📦 Requirements
- Paper: 1.21.4
- Java / JDK: 21
📥 Local Build
./gradlew clean buildRelease v1.7.2
feat(tools/config + refactor): load config + clean deprecated methods
- Add
ConfigLoaderintoolsmodule to load configuration from config.json (MongoDB host, port, db, etc.) - Refactor
StackBuilderandWindowUIto use MiniMessage for text formatting - Update
StackBuildermethods (durability,name) to handle new item meta - Remove deprecated methods and improve code readability across Paper, Proxy, and Tools modules
Full Changelog: v1.7.1...v1.7.2
Release v1.7.1
refactor: enhance code readability, logging, null safety, and heartbeat logic
- Add NotNull annotations to method parameters in HomeCommand.java and RandomTPCommand.java to improve null safety.
- Refactor CommonHeartbeatHook: introduce isCommonOffline() for clearer offline checks and more robust heartbeat handling.
- Simplify and standardize logging messages in TeleportToSectorListener.java, InfrastructureIntegrityListener.java, and other classes; convert non-English log messages to English for consistency.
- Remove unused variables, fields, and methods in UserProfileCache.java and SectorQueueRegistry.java to clean up the codebase; remove the unused constructor in UserProfileCache for clarity.
- Remove unused dispatchers map in NatsManager to reduce memory overhead and simplify code.
- Improve code formatting and remove unnecessary line breaks across multiple files for enhanced readability.
- Update project version in build.gradle.kts from 1.7.0-SNAPSHOT to 1.7.1-SNAPSHOT to reflect the latest changes and prepare for release.
Full Changelog: v1.7.0...v1.7.1
Release v1.7.0
build: release 1.7.0 and CI improvements
- Promoted version to stable (removed BETA tag).
- Integrated Dependabot for dependency management.
- Fixed release workflow to filter out only redundant JARs (sources/javadoc) without touching the main fat JAR.
- Disabled empty root project JAR generation to prevent accidental uploads.
- Ensured main application JAR keeps full size to avoid Netty/Lettuce runtime issues.
1.6 FIX
EndSectors v1.6 - FIX Release Notes
Minimum Minecraft version: 1.20
🆕 Major Updates
Major Update: Separate Common Service & Server Failure Handling
- Common is now a standalone service required for all proxy and sector servers.
- Proxy and Paper servers check Common availability on startup:
- Proxy blocks players if Common is unavailable.
- Paper servers fail to start properly without Common.
- Runtime failure handling:
- Proxy: Does not shut down; kicks players, blocks new logins, updates MOTD to maintenance, logs errors on lost Common.
- Paper servers: Detect loss of Common and immediately shut down to prevent player data corruption.
- Summary: Gameplay impossible without Common running; servers behave to protect data.
Configuration System Update
- Config creation now uses Gson instead of Jackson.
- Improves performance and consistency across proxy and sector modules.
Messaging & Redis Refactor
- Centralized Redis and NATS initialization in Common module:
- Moved Redis and NATS initialization from individual modules to Common.
- Added
initInstance()to safely initialize the singleton. - Added detailed logging for Redis and NATS initialization and shutdown.
- Simplified shutdown logic with proper logs.
- Removed Redis-based packet publishing/subscribing.
- Redis retained only for player data caching.
- Integrated NATS for inter-server messaging and packet handling.
- Messaging is now sector-specific and more efficient.
- Redis Fix: Fixed Lettuce epoll issue on Linux/VPS that prevented Redis connections in the Common application.
Messaging & Config Fixes
- Fix: Missing channel/show messages in
MessageLoader. - Added missing
CHANNEL_*andSHOW_*message keys. - Fixed configuration desync caused by outdated
message.json.
Tools & Homes Update
- Restriction on creating homes in the SPAWN sector:
- Users can no longer create homes in the SPAWN sector.
- Updated Home GUI to prevent adding new homes in restricted sectors.
- Teleportation and GUI updates remain functional for existing homes.
- User & Inter-Sector Homes:
- Added User management module with MongoDB integration.
- Implemented cross-sector home system.
- Fixed
/spawncommand for inter-sector teleportation. - Fixed
/randomtpcommand for inter-sector teleportation.
- TODO: Add cooldown task for
/home.
Paper Module Update
- Added
SectorsAPIclass for plugin and sector interaction:- Provides singleton access to the PaperSector plugin instance.
- Methods for teleportation, random locations, and user retrieval.
- Access to
SectorManagerand async user fetching. - Logs initialization on startup.
💬 Discord Support
Join our official Discord server for support and updates: dsc.gg/endsectors
This release improves infrastructure and communication between modules.
Gameplay now requires the Common service to be running first; without it, plugins will not start.
Recommended startup sequence
- Common – start the core service first:
java -jar common-1.6-BETA-all.jar - Proxy – start the proxy server next.
- Sectors – start the sector servers (PaperSpigot).
The order must be:
Common → Proxy → PaperSpigot
Additional Improvements
- General optimizations across all modules for performance and stability.
- Fixed minor bugs and corrected inconsistencies in various systems.
- Enhanced logging and error handling for better maintainability.
- Internal code refactoring to simplify workflows and improve efficiency.
1.5
EndSectors v1.5 Release Notes
Minecraft minimum version: 1.20
🆕 Changes & Improvements
- Removed MongoDB; user data now stored in Redis (Lettuce).
- Replaced previous Redis client (Redisson) with Lettuce for better performance; publish/subscribe and packet sending logic completely rebuilt.
- Added SectorsAPI class to expose sector management, teleportation, and utility methods for plugins.
- Improved sector handling: faster transfers, better synchronization, and bug fixes.
- Added method to check if a sector is full (
isSectorFull) so plugins can handle full sectors properly (e.g., show title, knock border, or prevent entry). - Queue system updated: properly fetches
lastSectorand handles first join logic. - Player creation logic fixed: new users are correctly initialized, and first join random teleport works properly.
- Movement listener (
MoveListener) logic fixed: sector checks and teleport triggers now function correctly. - Scoreboard system added: configurable via plugin config, can be enabled or disabled.
- Hex color support added: action bars, boss bars,
/chand/sektor showcommands, and nearly all player messages now support hex colors. - Several API and internal methods optimized to reduce unnecessary async calls and improve reliability.
- General code optimizations to enhance sector synchronization and overall performance.
- New Gradle module
toolsadded with example plugin demonstrating usage of SectorsAPI:/randomtpcommand for teleporting to a random location in a sector./spawncommand for teleporting to the spawn sector.
1.4
EndSectors v1.4 Release Notes
ℹ️ Requirements: Redis and MongoDB must be installed and running.
Minecraft minimum version: 1.20
🆕 Features
- Queue system fully integrated with Redis, cache, and async communication.
- Players joining QUEUE sectors are handled correctly: first join actions and random teleport skipped.
- UserFlagCache singleton added for proxy-side caching (existence, request state, last sector).
- Redis communication packets:
PacketUserCheck(query from Proxy → Paper)PacketUserCheckListener(Paper, fetches user data async and responds via Redis)PacketUserCheckProxyListener(Proxy, updates cache and queues players)
LastSectorConnectListenerhandles players connecting to QUEUE: removes from previous queues, polls Paper for user data.- GUI improvements:
WindowUIandWindowHolderfixed.- Inventory click events properly trigger actions.
- Heads, TPS, online counts, and sector info display correctly.
🛠 Bugfixes & Improvements
- Async database fetching for user data.
- TPS display and scoreboard fixed with legacy color codes.
- First join skipped in QUEUE sectors.
- Cooldowns between transfers enforced.
- General code cleanup and scheduler improvements.