
Better Veinminer
A Paper 1.21 veinminer plugin that mines entire ore veins instantly. Uses strict same-type BFS matching, so adjacent ores are never accidentally destroyed. Fully configurable via config.yml.
279
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).
Файлы
BetterVeinminer-1.3.0.jar(28.56 KiB)
ОсновнойМетаданные
Канал релиза
Release
Номер версии
1.3.0
Загрузчики
BukkitPaperPurpurSpigot
Версии игры
1.21–1.21.11
Загрузок
27
Дата публикации
1 нед. назад
