Voxel Shop beta is live. Expect occasional bugs. Learn more  
ModernJobs - Folia Support icon

ModernJobs - Folia Support 1.0.3

A next-generation jobs experience built for modern Minecraft servers.

Page 1
1.0.3 7 days ago
Maintenance Patch | Bug Fix Update
Data Integrity & Save Fixes
  - Fixed YamlStorage saving player files non-atomically — saves now write to a .tmp file first then atomically replace the real file, preventing corrupt YAML on server crash or power loss
  - Fixed ConfigManager re-parsing config.yml from disk unnecessarily during language file loading — it now reuses the already-loaded config object
  - Fixed MySQLStorage missing DEFAULT '' on the player_name column in the auto-migration ALTER TABLE statement, which caused migration failures on strict SQL servers
  ---
  XP Exploits & Farming
  - Fixed a farming exploit where breaking a single bamboo, sugar cane, or cactus block directly on the ground (without another block of the same type below it) would grant XP as if it were a full grown plant
  - Fixed a smelting exploit where extracting a large batch of items from a furnace in one event (after leaving items to accumulate) would grant XP proportional to the entire stack. XP scaling is now capped at a configurable maximum (default: 8 items per extract, set via settings.smelting-max-xp-items in
  config.yml)
  - Fixed shift-click crafting granting XP for only 1 item crafted when the actual crafted amount was much higher
  GUI Fixes
  - Fixed JobDetailGui opening the Rewards GUI always at prestige 0 regardless of the player's actual prestige level
  - Fixed JobsMainGui re-opening the main menu even when leaveJob() failed (e.g. data not loaded), which caused a blank/broken menu state
  - Fixed RewardsGui using fragile Java reflection to cancel inventory click events — replaced with a direct instanceof check, matching every other GUI in the plugin
  - Fixed all GUI open methods using Bukkit.getScheduler() in the AdminGui reload action on Folia-based servers
  Memory Leaks
  - Fixed placedBlocks set in BlockListener growing forever — blocks destroyed by explosions or fire are now properly removed from the set
  - Fixed trackedPassiveEffects and stoneSenseCooldowns in PerkListener not being cleaned up when a player disconnects, causing a permanent memory leak per logout
  - Fixed getOfflinePlayer() calls in LeaderboardGui triggering blocking disk I/O on the main thread for players not cached locally — replaced with createPlayerProfile(UUID, name)
  Perk Fixes
  - Fixed the Scaffold perk reading and modifying the player's held item from an async/region thread — the item type is now captured on the main thread and the inventory update is scheduled back to the player's thread
  - Fixed the Netherite Upgrade perk not cancelling the smithing table event after a successful upgrade, allowing the item to also be consumed by the vanilla recipe handler
  Command Fixes
  - Fixed /jobs giveexp and /jobs setlevel not validating that the target player had actually joined the specified job before applying changes
  - Fixed tab-completion for /jobs stats inserting an empty string "" into the suggestions list when the sender was the console
  Code Quality
  - Fixed PlaceholderAPI availability check being evaluated at class-load time (before plugins finished enabling) — it is now checked lazily at the point of use
  - Fixed MongoDBStorage leaderboard queries crashing entirely if any single stored UUID was malformed — bad entries are now skipped individually with a warning
  - Fixed PrestigeManager.canPrestige() calling Optional.get() without an isPresent() guard, risking a NoSuchElementException
  - Fixed PrestigeManager.canPrestige() not guarding against maxLevel <= 0, which would allow infinite prestige on jobs with no level cap configured
1.0.0 Apr 23, 2026
Page 1
Sign in
$6.00 USD $12.00 USD
Sign in to purchase, save this product to your cart, and keep downloads tied to your account.
Stripe

jobs