
XGamemode
You're not switching modes, you're switching dimensions.
2.0K
4
Список изменений
Added
- Folia scheduler support with automatic fallback to Bukkit scheduler
- SQLite ON CONFLICT detection for better UPSERT performance
- UUID-based write locks for thread-safe player data operations
- Player save queue (
pendingSaves) to serialize async database writes per UUID - Offline player name caching to reduce I/O operations during batch processing
- YAML save debouncing with resettable timer (
scheduleYamlSave) - Atomic reference for
nameToUUIDsanduuidToNamemaps for safe reload - Legacy YAML format detection and migration support (
uuid: GAMEMODE) - Support for setting gamemode for players who have never joined the server
GamemodeChangeEventcustom event for API integration-all,-online,-offlinebatch operation flags- Database transaction support for batch offline player updates
- Automatic config.yml key merging with missing defaults preservation
- Connection retry mechanism with configurable attempts and delay
- Debug logging controlled by config option
Fixed
- NPE in
onDisable()whenstorageTypeis not"yaml"andyamlCacheis null - Race condition in
onPlayerJoinwhere async save could overwrite recently set gamemode - SQL operation silent failure - now logs error after max retry attempts
- Write lock timeout now logs debug message instead of failing silently
- Skipped offline players during batch operations now logged with warning count
- Config merge now properly adds missing keys without overwriting existing values
- Migration now handles both legacy (flat) and modern (nested) YAML formats
Changed
- Replaced
pendingSavesSet<String>withMap<UUID, CompletableFuture<Void>>for per-UUID queuing - Refactored
tryWriteLockpattern intowithWriteLockhelper method - Optimized
processOfflinePlayersDatawith name cache and early empty check - Cached UPSERT SQL generation to avoid repeated ON CONFLICT detection
- Message placeholder replacement now uses
Matcher.quoteReplacement()to escape$and\ - Folia reflection now uses
Consumer.classwith proper generic erasure handling savePlayerModeDirectnow updates memory cache immediately before async DB write- Batch migration now uses incremental
executeBatch()to avoid memory issues
Removed
- Legacy
yamlCache.set(uuid.toString(), mode.name())flat format write - Redundant
saveYamlCache()call when using database storage - Unused
SAVE_DELAYfield from earlier versions
Файлы
XGamemode-4.5-rls.jar(22.98 KiB)
ОсновнойМетаданные
Канал релиза
Release
Номер версии
4.5-rls
Загрузчики
BukkitFoliaPaperPurpurSpigot
Версии игры
1.7.9–26.1.2
Загрузок
23
Дата публикации
1 нед. назад
