
LilWorlds
LilWorlds is a performant, modern world management plugin for Minecraft servers.
- Загрузки
- 288
- Подписчики
- 2
- Обновлён
- 10 июля 2025 г.
- Лицензия
- MIT
Опубликован 13 июня 2025 г.
🌍 LilWorlds - Advanced World Management
A performant and modular world management plugin for Minecraft servers supporting versions 1.16 to 1.21.6.
✨ Key Features
🌍 World Management
- Create worlds with custom environments and generators
- Clone existing worlds with all their data
- Load/unload worlds dynamically
- Import external worlds seamlessly
- Universal spawn system for cross-world teleportation
📦 Separate Inventories
- Per-world/group inventories - Players can have different inventories in different worlds
- World groups - Share inventories between worlds in the same group
- Configurable separation - Choose what to separate: inventory, health, experience, gamemode, flight, effects, location, ender chest
⚡ Performance Focused
- Optimized world loading/unloading
- Asynchronous operations where possible
- Minimal server impact
- Rate limiting protection
🔧 Modular Design
- Custom generator system with YAML configuration
- Complete configuration options
- PlaceholderAPI integration
- bStats metrics integration
🎮 Commands
World Commands (/world or /w)
/world create <name> [environment] [-g generator] # Create new world
/world clone <source> <target> # Clone existing world
/world load [world] # Load world(s)
/world unload [world] # Unload world(s)
/world import <name> [environment] # Import external world
/world setspawn # Set world spawn
/world setuniversalspawn # Set universal spawn
/world info [world] # Show world information
/world list # List all worlds
Plugin Commands (/worlds)
/worlds reload [target] # Reload plugin components
/worlds inventory <action> # Manage separate inventories
/worlds groups <action> # Manage world groups
🛠️ Custom Generators
Create custom world generators using YAML files in the generators/ folder:
display-name: "Custom Flat World"
type: "FLAT"
generate-structures: true
biomes: ["PLAINS", "FOREST"]
layers:
- "minecraft:bedrock"
- "minecraft:stone:5"
- "minecraft:dirt:3"
- "minecraft:grass_block"
📊 Separate Inventories System
Advanced inventory separation system allowing players to have different inventories in different worlds or world groups:
features:
separate-inventories:
enabled: true
separate:
inventory: true
health: true
experience: true
world-groups:
survival: ["world", "world_nether", "world_the_end"]
creative: ["creative_world", "build_world"]
🔗 PlaceholderAPI Support
Extensive placeholder support for integration with other plugins:
%lilworlds_current_world%- Current world name%lilworlds_total_worlds%- Total loaded worlds%lilworlds_world_players_<world>%- Players in specific world- And many more...
📋 Requirements
- Minecraft: 1.16 - 1.21.5 (Bukkit/Spigot/Paper)
- Java: 8 or higher
- Dependencies: None (PlaceholderAPI optional)
🚀 Quick Start
- Download and place in
plugins/folder - Restart server
- Create your first world:
/world create myworld - Enable separate inventories:
/worlds inventory enable - Configure in
plugins/LilWorlds/config.yml
📚 Links
- 📖 Documentation - Complete guides and tutorials
- 💬 Discord - Community support
- 🐛 Issues - Bug reports and feature requests
- ⭐ GitHub - Source code and releases
LilWorlds - Making world management simple, fast, and powerful.
Ченджлог
v1.6.0Релиз1.21.4, 1.21.5, 1.21.6 · 10 июля 2025 г.
️ CRITICAL BUG FIXES
Asynchronous Operations
- FIXED: Critical server errors and instability caused by performing Bukkit API calls (world loading, unloading, deletion) on asynchronous threads.
- FIXED: Potential server freezes when deleting worlds due to slow file operations blocking the main thread.
- IMPROVED: All world management operations are now fully thread-safe, preventing data corruption and unexpected crashes.
TECHNICAL IMPROVEMENTS
️ Architecture
- IMPROVED: Refactored
WorldManagerandLilWorldsAPIto correctly separate heavy, non-API tasks (like file deletion) from main-thread-only Bukkit calls. - IMPROVED: The internal list of managed worlds now uses a
ConcurrentHashMapto guarantee safe access from multiple threads. - NEW: The
deleteWorldprocess now returns aCompletableFuture, providing a more robust and modern asynchronous API for developers.
️ IMPLEMENTATION
⚙️ Correct Asynchronous Pattern
The API now safely handles threading, allowing developers to call asynchronous methods without worrying about server stability.
// Example: Asynchronously and safely deleting a world
lilWorldsAPI.deleteWorldAsync("world_to_delete").thenAccept(success -> {
if (success) {
player.sendMessage("World deleted successfully!");
} else {
player.sendMessage("Error: Could not delete the world.");
}
});
COMPATIBILITY
️ Backward Support
- MAINTAINED: Fully backward compatible. No changes are required for existing code that uses the API.
- MAINTAINED: All command syntax and behavior remain identical for users.
- MAINTAINED: No configuration migrations are needed.
UPDATE SUMMARY
- Fixed Critical Threading Issues: Resolved major stability problems by ensuring all Bukkit API calls run on the main server thread.
- Eliminated Server Lag: Moved slow file deletion operations to a separate thread, preventing server freezes.
- Enhanced Reliability: Made the plugin significantly more stable and safe for production environments.
v1.5.1Релиз1.21.4, 1.21.5, 1.21.6 · 18 июня 2025 г.
🛠️ CRITICAL BUG FIXES
🚨 WorldEdit Compatibility
- FIXED: Startup crashes when WorldEdit missing (
NoClassDefFoundError) - FIXED: Portal system requiring WorldEdit for basic operation
- IMPROVED: Graceful fallback to manual coordinates
🌐 LOCALIZATION
📝 Portal Message System
- NEW: 50+ messages moved to
messages.yml - NEW: Consistent formatting and placeholders (
{name},{world}) - NEW: Multi-language support with easy customization
# Example Messages
portal-created-success: "&aPortal '{name}' created successfully!"
portal-worldedit-not-found: "&cWorldEdit required for visual selection"
🔧 TECHNICAL IMPROVEMENTS
🔄 Dependency Handling
- NEW: Reflection-based WorldEdit integration
- NEW: Runtime detection and feature toggling
- IMPROVED: Clean separation of optional/core features
🛡️ Architecture
- IMPROVED: Independent plugin initialization
- IMPROVED: Enhanced error handling with clear feedback
- IMPROVED: Better command system resilience
🎯 PORTAL ENHANCEMENTS
🌀 Creation Flexibility
- IMPROVED: Unified workflow (WorldEdit/manual modes)
- IMPROVED: Automatic detection of available features
- NEW: Clear guidance for both creation methods
🏗️ IMPLEMENTATION
⚙️ Reflection Example
// Safe dynamic WorldEdit loading
Class<?> worldEditClass = Class.forName("com.sk89q.worldedit.WorldEdit");
📦 Dependency Config
- MAINTAINED: WorldEdit as
softdepend(plugin.yml) - MAINTAINED: Full functionality without WorldEdit
🎯 USAGE EXAMPLES
Without WorldEdit:
/portal create myportal world_nether 10 64 10 15 70 15 0 64 0
With WorldEdit:
//wand
/portal create myportal world_nether
🔄 COMPATIBILITY
🛡️ Backward Support
- MAINTAINED: All existing functionality preserved
- MAINTAINED: Identical command syntax
- MAINTAINED: No config migrations needed
📋 HOTFIX SUMMARY
- Fixed WorldEdit-related startup crashes
- Implemented complete message localization
v1.5.0Релиз1.21.4, 1.21.5, 1.21.6 · 18 июня 2025 г.
🚀 MAJOR NEW FEATURES
🌐 Complete Portal System
- NEW: Built-in portal system with WorldEdit integration (
//wandsupport) - NEW: Persistent storage in
portals.ymland cooldown system - NEW: Frame customization, API support, and portal management
🔧 WorldEdit Integration
- NEW: Visual boundary selection and automatic detection
- NEW: Fallback to manual coordinates when unavailable
- NEW: Enhanced UX with seamless plugin integration
📡 Portal Command System
- NEW:
/portal create|delete|list|info|tp|reload- Full management suite - NEW: Automatic destination handling and coordinate support
🔤 Intuitive Portal Creation
- NEW: Two-step workflow (select area → create portal)
- NEW: Smart validation and error prevention
🔧 Portal Features
🔄 Persistent Storage
- NEW: Auto-save to YAML with restart persistence
- NEW: Manual reload capability
🏗️ Advanced Portal Management
- NEW: Portal types (NETHER/END/CUSTOM) and frame materials
- NEW: Multi-world support with conflict prevention
🛡️ Security & Performance
- NEW: Granular permissions (
lilworlds.portal.*) - NEW: Cooldown system and world validation
- NEW: Efficient event handling with minimal impact
🎯 Developer API
- NEW: Full lifecycle methods (create/delete/teleport)
- NEW: Information retrieval and event integration
📚 Portal Documentation & Examples
📖 Complete User Guide
- NEW: Dedicated portals page with tutorials
- NEW: Permission examples and troubleshooting
🎯 Usage Examples
- NEW: WorldEdit/manual workflows + API samples
- NEW: Configuration structure documentation
🔧 Core Plugin Improvements
💬 Enhanced Command Structure
- IMPROVED: Tab completion and contextual feedback
- IMPROVED: WorldEdit status indicators
🛡️ Permission System
- NEW: Granular controls (
create|delete|teleport|admin|bypass.cooldown)
📝 User Experience
- NEW: Real-time feedback and formatted info displays
- NEW: Command suggestions and error guidance
🔧 Technical Implementation
🏗️ Portal Architecture
src/main/java/org/hydr4/lilworlds/portals/
├── Portal.java # Core data structure
├── PortalManager.java # Persistence layer
├── PortalListener.java # Event handlers
└── PortalCommand.java # WorldEdit integration
🔄 Event Integration
- NEW: Optimized
PlayerMoveEvent/PlayerPortalEventhandling - NEW: Custom
WorldTeleportEventtriggering
📦 WorldEdit Compatibility
- NEW: Dynamic detection and selection API support
- NEW: Graceful fallback for all selection types
🔄 Backward Compatibility & Version Support
- NEW: Added Minecraft 1.21.6 support
- MAINTAINED: All existing functionality preserved
- MAINTAINED: Zero breaking changes to configurations
- MAINTAINED: Uncompromised performance standards
🌟 Portal System Highlights
- INTUITIVE: Visual two-step creation
- PERSISTENT: Restart-proof storage
- FLEXIBLE: WorldEdit + manual modes
- SECURE: Permissions + validation
- PERFORMANT: Low-impact detection
- EXTENSIBLE: Full API integration
v1.4.0Релиз1.21.3, 1.21.4, 1.21.5 · 13 июня 2025 г.
🚀 MAJOR NEW FEATURES
🔧 Complete Developer API System
- NEW: Comprehensive API for developers with full world management capabilities
- NEW:
LilWorldsAPI- Main API entry point with singleton pattern - NEW:
WorldBuilder- Fluent builder pattern for intuitive world creation - NEW:
WorldManager- Advanced world management operations with async support - NEW:
WorldInfo- Comprehensive world information wrapper - NEW:
WorldUtils- Utility functions for common world operations
📡 Event System
- NEW: Custom event system for world operations (all cancellable)
- NEW:
WorldCreateEvent- Fired before world creation - NEW:
WorldCreatedEvent- Fired after successful world creation - NEW:
WorldDeleteEvent- Fired before world deletion - NEW:
WorldTeleportEvent- Fired before player teleportation
⚡ Teleport Command
- NEW:
/world teleport <world>command (alias:/w tp <world>) - NEW: Teleports players to spawn location of specified world
- NEW: Security validation and rate limiting
- NEW: Permission checking (
lilworlds.world.teleport) - NEW: Player-only command with appropriate error messages
🔤 Short Command Aliases
- NEW:
/w i(info),/w cr(create),/w cl(clone) - NEW:
/w ld(load),/w ul(unload),/w rm(remove) - NEW:
/w imp(import),/w ls(list),/w ss(setspawn) - NEW:
/w sus(setuniversalspawn),/w cfg(config),/w tp(teleport)
🔧 API Features
🔄 Async Operations
- NEW: All I/O operations return
CompletableFuture - NEW: Non-blocking world loading, unloading, deletion, cloning
- NEW: Async world creation with callback support
- NEW: Thread-safe operations with proper main thread scheduling
🏗️ Builder Pattern
- NEW: Fluent world creation:
api.createWorld("name").environment(NORMAL).build() - NEW: Method chaining for intuitive API usage
- NEW: Callback support for success/failure handling
- NEW: Async and sync creation methods
🛡️ Advanced Features
- NEW: World size calculation and formatting
- NEW: World backup functionality
- NEW: Player evacuation from worlds
- NEW: Safe spawn location detection
- NEW: World existence checking (loaded/unloaded)
📚 Documentation & Examples
📖 Complete Documentation
- NEW:
API_EXAMPLE.java- Complete example plugin - NEW: Maven/Gradle dependency setup instructions
- NEW: Best practices and performance tips
🎯 Developer Support
- NEW: JitPack integration for easy dependency management
- NEW: Example implementations for common use cases
🔧 Core Plugin Improvements
💬 Enhanced Commands
- IMPROVED: All commands now support short aliases
- IMPROVED: Tab completion for all aliases
- IMPROVED: Help system shows available aliases
- IMPROVED: Teleport command with full validation
🛡️ Security & Performance
- IMPROVED: Enhanced world name validation
- IMPROVED: Rate limiting for teleport operations
- IMPROVED: Security logging for sensitive operations
- IMPROVED: Efficient caching of world information
📝 Messages & UX
- NEW: Teleport-specific messages in
messages.yml - IMPROVED: Command descriptions show aliases
- IMPROVED: Clear error messages for all scenarios
- IMPROVED: Consistent command structure
🔧 Technical Implementation
🏗️ API Architecture
src/main/java/org/hydr4/lilworlds/api/
├── LilWorldsAPI.java # Main API class
├── events/ # Event system
├── utils/ # Utility classes
└── world/ # World management
🔄 Async Pattern
- NEW: CompletableFuture-based async operations
- NEW: Proper thread management with Bukkit scheduler
- NEW: Error handling with callbacks and exceptions
- NEW: Thread-safe operations throughout
📦 Publishing Ready
- NEW: JitPack integration ready
🎯 Usage Examples
Basic API Usage:
LilWorldsAPI api = LilWorldsAPI.getInstance();
api.createWorld("myworld")
.environment(World.Environment.NORMAL)
.generator("superflat")
.onSuccess(world -> System.out.println("Created!"))
.buildAsync();
Event Handling:
@EventHandler
public void onWorldCreate(WorldCreateEvent event) {
if (event.getWorldName().startsWith("temp_")) {
event.setCancelled(true);
}
}
🔄 Backward Compatibility
- MAINTAINED: All existing commands work unchanged
- MAINTAINED: Existing configurations remain valid
- MAINTAINED: No breaking changes to plugin behavior
- MAINTAINED: Same security and performance standards
v1.3.1Релиз1.21.3, 1.21.4, 1.21.5 · 13 июня 2025 г.
🎯 Critical Bug Fix
- FIXED:
WorldBorderCenterChangeEvent may only be triggered synchronouslyerror- Fixed async world creation that was causing IllegalStateException
- Implemented hybrid async/sync approach for optimal performance
- World preparation (reflection, validation, logging) now runs asynchronously
- Only the critical
creator.createWorld()call runs synchronously (required by Bukkit API) - Maintains performance benefits while respecting Bukkit's threading requirements
🚀 Performance Improvements
- NEW:
createWorldAdvancedAsync()method for better async handling - IMPROVED: World creation now uses callback-based async pattern
- OPTIMIZED: Minimal main thread usage - only for world border events
- MAINTAINED: Legacy synchronous method for compatibility
🔧 Technical Changes
- Added
Consumer<Boolean>callback pattern for async world creation - Split world creation into async preparation and sync execution phases
- Added proper error handling for both async and sync phases
- Improved thread safety for world creation operations
v1.3.0Релиз1.21.3, 1.21.4, 1.21.5 · 13 июня 2025 г.
🎯 Major Fixes
- FIXED: World creation bug that caused
NoSuchFieldExceptionwhen using/w createcommand- Fixed reflection issue in
WorldManager.createWorldAdvanced()method - Now properly accesses private fields using
getDeclaredField()andsetAccessible(true) - World creation with all environments (NORMAL, NETHER, THE_END) now works correctly
- Fixed reflection issue in
🚀 Major Improvements
REMOVED: Annoying timeout system for rate limiting
- Players can now perform world operations without waiting for cooldowns
- Console operations were never rate-limited and remain unchanged
- Security validation for world names and other inputs is still maintained
IMPROVED: Confirmation system for dangerous operations
- Confirmation prompts for world deletion and bulk unloading are kept for safety
- REMOVED: Timeout expiration on confirmations - they no longer expire
- Users can now take their time to confirm dangerous operations
- Clearer confirmation messages with better formatting
🔧 Technical Changes
- Updated
SecurityUtils.checkRateLimit()to always returntrue - Updated
SecurityUtils.canPerformOperation()to bypass rate limiting - Modified world deletion confirmation to not expire
- Modified bulk world unload confirmation to not expire
- Improved reflection handling in
WorldManagerfor better compatibility
v1.2.0Релиз1.21.3, 1.21.4, 1.21.5 · 13 июня 2025 г.
🎉 New Features
Advanced Configuration Management
/world config set <key> <value> for runtime configuration
/world config disable <option> for boolean toggles
Per-world configuration overrides
Configuration validation and error recovery
per-world inventories
Plugin Integrations
PlaceholderAPI integration support
BStats metrics integration
Hooks for other world management plugins
Enhanced Generator System
/worlds reload generators for hot-reloading custom generators
Advanced generator parameters and options
Generator validation and error handling
Improved User Experience
Colorful initialization messages (no ASCII art as requested)
Better command aliases and shortcuts
Enhanced confirmation dialogs for destructive operations
🔧 Improvements
Performance Enhancements
Optimized world loading/unloading processes
Better memory management for large world operations
Async operations where possible
Code Quality
Comprehensive logging for all operations
Better error handling and recovery
Improved modular architecture
Configuration System
More granular configuration options
Better default values and validation
Hot-reload capabilities for most settings
🐛 Bug Fixes
Fixed world deletion confirmation system
Resolved tab completion edge cases
Improved error handling for invalid world names
Fixed memory leaks in world management operations
📋 Technical Details
Full Java 17+ compatibility
Enhanced integration package with proper abstractions
Comprehensive command system with inheritance
Robust configuration management system
Complete logging and monitoring capabilities
v1.1.0Релиз1.21.3, 1.21.4, 1.21.5 · 13 июня 2025 г.
🎉 New Features
Advanced World Operations
World cloning with /world clone <source> <target>
World importing from external sources
Bulk world loading/unloading operations
Custom Generator Support
Built-in custom generator system
Generator configuration files in /generators folder
Support for custom world generation parameters
Spawn Management
/world setspawn for individual worlds
/world setuniversalspawn for global spawn
Spawn point persistence and management
Enhanced Commands
/world info for detailed world information
/worlds reload with granular reload options
Improved error messages and user feedback
🔧 Improvements
Better tab completion with context-aware suggestions
Enhanced configuration validation
Improved logging with more detailed output
Performance optimizations for world operations
📋 Technical Details
Enhanced BaseCommand inheritance system
Improved integration package structure
Better memory management for world operations
Комментарии
Загружаем…