
Better Veinminer
A Paper 1.21 Vein miner plugin that mines entire ore veins instantly.. Fully configurable via config.yml.
554
1
Список изменений
[1.3.0] — 2026-04-25
Added
BetterVeinmineEvent— Custom cancellable Bukkit event fired just before extra blocks are broken. Other plugins can now:- Cancel the entire veinmine via
event.setCancelled(true) - Inspect the block list via
event.getBlocks()(unmodifiable) - Override the EXP reward via
event.setExpReward(int) - Read the ore type via
event.getOreType()
- Cancel the entire veinmine via
StatsManager— Full YAML persistence forPlayerStats. Stats are now saved toplugins/BetterVeinminer/stats/<uuid>.ymland survive server restarts.- Stats load synchronously on
PlayerJoinEvent(file is tiny, no noticeable delay) - Stats save asynchronously on
PlayerQuitEvent - Auto-save every 5 minutes (async) while the server is running
- Final synchronous flush in
onDisable()to guarantee no data loss on shutdown
- Stats load synchronously on
Fixed
- NullPointerException on missing config sections —
PluginConfig.reload()called.getKeys(false)directly on the return value ofgetConfigurationSection(...), which returnsnullwhen the section is absent fromconfig.yml. This caused an NPE crash on any server whereore-multipliers.multipliers,per-ore-cooldowns.cooldowns, orpermission-levelswere omitted or empty. All three sites now null-check the section before iterating. - Player-offline NPE in
VeinmineTask— The task is scheduled 1 tick after theBlockBreakEvent. If the player disconnects in that window (network drop, kick, crash), every subsequent field access on thePlayerobject threw aNullPointerException. Added an earlyif (!player.isOnline()) return;guard at the top ofrun(). {uses}placeholder never replaced in/bvm stats—showStats()built the message with{blocks}and{tier}substitutions but forgot{uses}, so the literal string{uses}was printed to the player.{blocks}placeholder never replaced in tier-up message — The tier-up message template"You reached Tier {tier}! New max blocks: {blocks}"only had{tier}replaced;{blocks}was left as-is in the output.sendActionBar(String)deprecated in Paper 1.21 — Replaced with the Adventure API:player.sendActionBar(LegacyComponentSerializer.legacySection().deserialize(msg)). This eliminates the deprecation warning in server logs and future-proofs the call.- Scheduler tasks not cancelled on disable —
onDisable()cleared data maps but never calledBukkit.getScheduler().cancelTasks(this). The cooldown-cleanup and daily-reset runnables could fire after the plugin was disabled (e.g. during/reload), accessing a partially torn-down plugin instance.cancelTasks(this)is now the first action inonDisable(), before any data is flushed or cleared.
Changed
onDisable()now cancels all plugin tasks before flushing data, then callsstatsManager.saveAll()as a final synchronous write to guarantee persistence.VeinmineTasknow collects extra blocks into aList<Block>(instead of iteratingSet<Block>with an origin equality check) to pass cleanly toBetterVeinmineEvent.- EXP calculation is now performed before the event is fired so listeners can read
and override the reward via
event.setExpReward(int).
Метаданные
Канал релиза
Release
Номер версии
1.3.0
Загрузчики
BukkitPaperPurpurSpigot
Версии игры
1.21–1.21.11
Загрузок
58
Дата публикации
1 мес. назад
