
HomeLimiter
Automatically enforces EssentialsX home limits when a player’s rank changes. If a player is downgraded and their new rank allows fewer homes, the plugin removes the most recently created homes to match the EssentialsX limits.
Оцените первым
85
1
Список изменений
HomeLimiter Changelog
v1.1
Bug Fixes
- Fixed
/sethomealias detection — the old version incorrectly listened for/ehome(which is the teleport alias) when tracking new home creation. It now correctly listens for/esethome. - Fixed home creation timestamps being overwritten — re-running
/sethomeon an existing home used to reset its timestamp, which could cause the wrong homes to get locked when enforcing limits. The timestamp is now preserved on re-set (INSERT OR IGNOREinstead ofINSERT OR REPLACE). - Fixed locked home restoration losing original creation time — when a home was restored from the locked list, it was saved with the current time instead of the original creation time. The original timestamp is now carried through correctly.
- Fixed
onDisablenot checking if connection is already closed — could throw an exception on shutdown in some cases.
Improvements
- Overhauled home limit calculation — the old system read limits from a custom
groups.*section inconfig.ymland picked the highest-weighted LuckPerms group. The new system reads directly from Essentials' ownsethome-multipleconfig section and checksessentials.sethome.multiple.<key>permissions in LuckPerms, making it fully compatible with existing Essentials setups without any extra configuration. - Enforcement is now fully async/main-thread safe — the old
enforce()ran entirely on the main thread, blocking it during DB reads. The new version choreographs work across threads: DB reads happen async, all Essentials API calls happen on the main thread, and DB writes are flushed async at the end. - Bulk DB timestamp loading — instead of querying the database once per home during enforcement, all timestamps for a player are now loaded in a single query upfront.
- All DB mutations are batched — locking and restoration no longer write to the database mid-enforcement. Changes are collected and flushed in one async pass at the end, reducing DB contention.
- SQLite WAL mode and busy timeout enabled —
PRAGMA journal_mode=WALandPRAGMA busy_timeout=5000are now set on startup, allowing concurrent reads during writes and preventing instant failures on a locked write. - Context-aware permission queries — online players now use full contextual
QueryOptions(respecting world/gamemode contexts) when checking LuckPerms permissions, with a fallback to static options for offline players. - Re-enforce on LP data recalculate — LuckPerms'
UserDataRecalculateEventnow triggers enforcement directly instead of going through asafeEnforcewrapper, simplifying the code path. /reloadnow requires permission — thehomelimiter.adminpermission is checked before allowing a config reload. Previously any player could run it.- Tab completion now requires permission — tab completion for
/hl reloadis now gated behindhomelimiter.adminas well. - Startup scan delay uses
long—delay-ticksis now read as alonginstead ofint, preventing overflow on very large configured values.
Code Cleanup
- Removed unused
findOfflineByName()helper method. - Removed unused
import net.luckperms.api.model.group.Group. - Replaced the
safeEnforce()wrapper with inline error handling in the async callback. - Replaced the
LockedHomestatic class with aLockedHomeRecordrecord for DB mutation staging. - Orphan timestamp cleanup is now handled inline during enforcement instead of in a separate
cleanupOrphans()method. - Added section comments throughout for readability.
Файлы
HomeLimiter-1.1.jar(13.00 MiB)
ОсновнойМетаданные
Канал релиза
Release
Номер версии
1.1
Загрузчики
PaperPurpurSpigot
Версии игры
1.20–1.21.11
Загрузок
8
Дата публикации
03.04.2026
