Christmas Season

Lightweight Christmas event plugin for Paper and Spigot 1.21 with biome snow, global snowstorms, decoration drops, gifts, elves and snowmen, controlled via the /xmas command, requires Java 21.

File Details

christmas-season-2.0.0.jar

  • R
  • Dec 19, 2025
  • 13.00 MB
  • 114
  • 1.21.11+11

File Name

christmas-season-2.0.0.jar

Supported Versions

  • 1.21.11
  • 1.21.10
  • 1.21.9
  • 1.21.8
  • 1.21.7
  • 1.21.6
  • 1.21.5
  • 1.21.4
  • 1.21.3
  • 1.21.2
  • 1.21.1
  • 1.21
## [2.0.0] - 2025-12-19

### Added
- **🎄 Multi-Platform Support** - Plugin now runs on Spigot, Paper, Purpur AND Folia!
  - Automatic platform detection at runtime
  - Single JAR works on all server types (no separate builds needed)
  - Zero configuration required - works out of the box
  - **Smart Scheduler Strategy:**
    - **Paper/Spigot/Purpur:** Global timer (preserves v1.4.1 architecture & performance)
    - **Folia:** Player-based Entity Scheduler (regionalized threading)

- **FoliaLib Integration**
  - Added FoliaLib 0.4.3 dependency (shaded & relocated)
  - Seamless multi-platform scheduler abstraction
  - Automatic fallback to Bukkit scheduler on non-Folia servers

- **Folia-Specific Optimizations**
  - Region-based scheduling for biome processing (uses Global/Region Scheduler)
  - Entity-based scheduling for mobs (Wichtel, Elfen, Schneemänner)
  - Location-based scheduling for blocks (Gifts, Decorations)
  - Full support for Folia's regionalized multithreading

- **Chunk Queue System** (NEW!)
  - Budget-based chunk processing prevents TPS spikes
  - Config option: `perTickBudget` (default: 12 chunks/tick)
  - Prevents lag when players move quickly into new areas
  - Queue distributes chunk updates across multiple ticks

- **Manual Biome Correction Command**
  - `/xmas biome set <biome> [radius]` - Manually fix biome issues
  - Only works when ChristmasSeason is active (prevents permanent changes)
  - Includes automatic snapshot creation
  - Protection against global timer conflicts

### Changed
- **Complete Scheduler Migration**
  - All managers migrated from Bukkit scheduler to FoliaLib
  - `BiomeSnowManager`: Multi-platform scheduler strategy (Global on Paper, Entity on Folia)
  - `DecorationManager`: Entity scheduler for item lifetimes
  - `GiftManager`: Location scheduler for chest placement/removal
  - `SnowstormManager`: Global scheduler for weather control
  - `WichtelManager`: Entity scheduler for mob management
  - `SnowmanManager`: Entity scheduler for snowman behavior
  - `XmasCommand`: Global scheduler for delayed operations

- **New Scheduler Helper**
  - Created `FoliaSchedulerHelper` utility class
  - Platform-agnostic API for scheduling tasks
  - Automatic platform detection (isFolia() method)
  - Supports all scheduler types: Global, Region, Entity, Location, Async

- **Task Types Updated**
  - Replaced `BukkitTask` with `WrappedTask` (FoliaLib wrapper)
  - Replaced `BukkitRunnable` with lambda expressions
  - All scheduler calls now go through FoliaSchedulerHelper

- **Performance Improvements**
  - `perTickBudget` increased from 6 → 12 (2x faster biome updates)
  - Cache management optimized (processedChunks, knownSnapshotChunks)
  - Chunk queue prevents processing duplicates

### Fixed
- **CRITICAL: Multi-Platform Teleport Incompatibility**
  - Fixed `NoSuchMethodError` on Spigot (teleportAsync doesn't exist)
  - Fixed `UnsupportedOperationException` on Folia (must use teleportAsync)
  - Platform-dependent teleport: `teleportAsync()` on Folia, `teleport()` on Spigot/Paper/Purpur
  - Wichtel can now teleport correctly on all platforms

- **CRITICAL: Race Condition in `/xmas biome set`**
  - Fixed global timer overwriting manual biome changes
  - Chunks are now marked as processed BEFORE async tasks start
  - Manual changes are now persistent until `/xmas off`

- **CRITICAL: Chunk Stripes Not Restored**
  - Fixed chunks being deleted from database even when restore failed
  - Chunks now only deleted after successful restoration
  - Failed chunks remain in DB for retry on next `/xmas off`
  - Added logging for failed chunk loads

- **Database Management**
  - Improved cache clearing before/after restore operations
  - Better error handling for chunk loading failures
  - Success-only database cleanup prevents data loss

### Technical
- **Dependencies**
  - Updated from `spigot-api` to `paper-api` (1.21.3-R0.1-SNAPSHOT)
  - Added `FoliaLib` 0.4.3 (com.tcoded:FoliaLib)
  - Added tcoded-releases repository (https://repo.tcoded.com/releases)
  - FoliaLib is shaded and relocated to avoid conflicts

- **Build Configuration**
  - Updated Maven Shade plugin to include FoliaLib
  - Relocation: `com.tcoded.folialib` → `de.boondocksulfur.christmas.libs.folialib`
  - SQLite JDBC driver still bundled (3.45.0.0)

- **Version Bump**
  - Major version bump to 2.0.0 (breaking changes in internal APIs)
  - Updated version in pom.xml, plugin.yml, and READMEs
  - Platform description updated to "Spigot/Paper/Purpur/Folia"
  - Added `folia-supported: true` flag to plugin.yml (required for Folia)

### Migration Notes
- **No action required for server admins** - plugin auto-detects platform
- **For developers**: Internal scheduler API changed (use FoliaSchedulerHelper)
- **Compatible with existing configs** - no configuration changes needed
- **Works on Folia 1.20+** and all Paper/Spigot versions supporting 1.21+