Skip to content

Changelog

liuye edited this page Nov 8, 2026 · 4 revisions

Changelog

简体中文 | English

← Back to the index

This page answers the two questions a server owner actually has: what changed in this version, and which setting do I need to touch when I upgrade. For setup steps see Installation; for the full meaning of any single key, see the page for that feature.

At a glance

Version In one line Upgrade effort
1.4.0 Stability pass: protection plugins now see mob mining, pickup stops eating valuables, reload reaches mobs that are already spawned Swap the jar; two old edge values now behave differently
1.3.0 New: the plugin tells you when a newer release is published Swap the jar, change no settings
1.2.1 Fixes "fails to load on first start on Paper / Purpur 26.2 and similar"; one jar now loads on 1.21.8 ~ 26.x Swap the jar, change no settings
1.2.0 Two new config files (message.yml, equip.yml), player chase priority, mining under itself and mining the ceiling; plus a batch of mining and bridging feel fixes Align 4 defaults by hand — see below

If you just want it running: do the 1.2.1 swap first, then come back to the 1.2.0 defaults table.


1.4.0 (stability and protection)

Upgrade advice: replace the jar and restart. No setting has to change — but two edge values you may have written earlier now mean what you expected (see the bottom of this section).

Three things you will notice

Change What it means for you
Protection plugins finally see mob mining Every block a mob breaks is now announced to Bukkit's block-break event, so WorldGuard, CoreProtect, claim plugins and BlockLocker can see it — and refuse it. Before, the block simply vanished behind their back.
Pickup only takes blocks the backpack will use It used to pick up diamond blocks and netherite blocks too; the stock is cleaned up after 15 seconds, so those items were destroyed. Now only blocks listed in placement.yml → entries are picked up.
/mobinteract reload reaches mobs that are already spawned After a reload, mobs already in the world re-roll their birth equipment and stock with the new settings. No restart needed. The trade-off: the stock they are carrying at that moment is re-rolled as well.

Fixed (written the way you would notice it)

  • A long chase no longer stops building halfway and never recovers.
  • Walking far away and coming back no longer hands the mob a fresh stock of free blocks.
  • Placed blocks no longer stay forever by accident, and one mob's cleanup can no longer remove an unrelated batch of blocks elsewhere.
  • TNT and water can no longer be used to break into a protected area from one block outside it.
  • A player standing where the mob wants to place a block no longer gets walled in.
  • The update notice no longer repeats every 6 hours for the same release, and tags such as 1.4.0+build.7 are no longer treated as "newer forever".
  • /mobinteract inspect no longer prints an error when the mob you are looking at stands in another region.
  • Rewriting a list in message.yml now actually overrides the built-in text; &A / &R in colour codes work.

Configuration edges (behaviour change)

Key Before Now
break-time.hard-cap-seconds 0 was clamped to 0.05 s, i.e. nothing was mineable 0 (or a negative number) means no cap
placement.block-lifetime-seconds A negative number became 0, i.e. forever A negative number becomes 1 s; 0 still means forever
backpack.chance 65 was clamped to 1.0, i.e. every mob 65 is read as 65% (and logged once)

1.3.0 (update checker)

Upgrade advice: replace the jar and restart. A new update.yml is written on first start, with comments; nothing else changes.

What is new

What you get Details
The plugin tells you about new versions 60 seconds after start, then once every 6 hours, it asks GitHub Releases for the newest published release and compares that tag with its own version
Three places it tells you One line in the console, an in-game message to online players holding mobinteract.admin, and a reminder when an admin first joins after each restart
/mobinteract update Runs the same check right now and prints the result to whoever asked
A new update.yml On/off switch, which repository to ask, first delay, interval, console notice, admin notice, join notice, whether to count pre-releases, request timeout, debug
Nothing gets downloaded It only reports the version number and links to the release page; upgrading is still "swap the jar"

Practical notes for a server owner:

  • update.yml is a normal config file: change it, run /mobinteract reload, the new interval applies immediately.
  • Set interval-hours: 0 to check once per start instead of on a schedule; set enabled: false to turn the whole thing off (no requests leave the server at all then).
  • The check needs the server to be able to reach api.github.com over HTTPS. On a machine without outside access that check simply fails — quietly, logged only when debug: true, and never as a red error that looks like a broken plugin.
  • Pre-releases are ignored by default, so a -beta tag does not nag you; flip include-prerelease: true if you want them.
  • All player-facing texts live in message.yml under update.*, so you can reword or translate them like any other message.

1.2.1 (compatibility fix)

Upgrade advice: replace the jar and change nothing in your config. If you gave up on pre-26.3 servers because the plugin showed up red in /plugins, it is worth trying again.

This release fixes "it will not install", not "it does not behave well"

On Paper / Purpur 26.2 and similar servers, 1.2.0 failed at the very first start. The symptoms are easy to recognise:

  • the console shows Could not load plugin ... InvalidPluginException: Unsupported API version 26.3;
  • the plugin appears red and disabled in /plugins;
  • a later manual PlugMan load only returns That file is not a valid plugin or Plugin didn't load any plugin providers?.

The cause has nothing to do with your configuration: the API version declared inside the jar was hard-coded to 26.3, and the server rejects a declaration newer than itself during the startup scan, before it ever reads a config file.

1.2.1 declares api-version: 1.21.8 instead, so the same jar loads on 1.21.8 ~ 26.x. The minimum supported version is still 1.21.8 — older servers lack the pathfinding and scheduling capabilities the plugin relies on, and no setting can work around that.

What was fixed

What you saw Root cause, in server-owner terms What happens now
First start on Paper / Purpur 26.2 failed to load, reporting InvalidPluginException: Unsupported API version 26.3; red in /plugins; a later PlugMan load did not help either The API version declared in the jar was hard-coded to 26.3, so the server rejected a declaration newer than itself during the startup scan The declaration is now api-version: 1.21.8; one jar loads on 1.21.8 ~ 26.x. Minimum supported version: 1.21.8
In the same failure, one code path called a pathfinding entry point that only newer servers (26.3) provide, which older servers do not have That code assumed "every server has this new interface"; 1.21.8 does not It now probes the server for the capability first and falls back to the older approach when it is missing, so both old and new servers work
After the first mob failed to attach its behaviour, no mob behaved for the rest of the run; only /plugman reload brought it back (the tell-tale symptom: it works again after a reload) The plugin treated "this one attempt failed" (a transient situation such as a chunk unloading or an entity about to be removed) as "this server cannot take over mobs", latched that verdict permanently and stopped retrying Only a server that genuinely does not support it is disabled permanently; a transient failure warns once in the console and later mobs keep being tried
The console was flooded with debug lines starting with [diag] Temporary logging left over from 1.2.0 debugging Removed

Upgrade steps

  1. Stop the server and overwrite the old jar with the 1.2.1 jar (the file name is unchanged).
  2. Start the server and confirm the plugin is green in /plugins.
  3. Run /mobinteract status once and confirm it prints normally.
  4. To prove mobs are really being taken over: forceload an area, summon a mob, then check that the "known mob state" count in /mobinteract status goes up — a rising count means the behaviour attached successfully.

Config files, permissions and command syntax are unchanged in 1.2.1; your existing configs work as they are.


1.2.0 (features and feel)

Upgrade advice: set break-time.hard-cap-seconds to 180.0 and placement.max-per-chase to 32; if your placement.yml still has the old block-lifetime-seconds: 60, change it to 15. equip.yml and message.yml are generated automatically on first start — open them once and have a look.

Added

Item What it means for you
message.yml Every text sent to players (/mobinteract status / inspect / reload) is now yours to edit: & colour codes, {placeholders}, multi-line YAML lists. A missing key falls back to the built-in default, so deleting one never breaks anything. reload reloads it too and reports how many messages it read
equip.yml The master gate for spawn equipment: chance defaults to 0.10, and worlds can override it per world name (case-insensitive). Inside the gate, tool.give.chance / backpack.chance split the share of "carries a pickaxe" versus "carries blocks"
/mobinteract status A new "spawn equipment" line showing the effective chance and how many per-world overrides are in effect
trigger.dig-below-self When the target is below and nearby, the mob mines the block under itself and drops down to keep chasing instead of waiting at the edge (on by default)
trigger.ceiling-blocked When the ceiling blocks the way, the mob mines that block away first instead of repeatedly switching columns (on by default)
debug Mining debug logging (off by default) — turn it on when investigating "why is this mob not mining"
Temporary-block renewal When a temporary block expires and a creature is standing on it, it is renewed for a full cycle, so it no longer vanishes from under their feet
targeting.yml Player chase priority: when a chaseable player is nearby, the target switches to the nearest player (within 16 blocks, checked every 10 ticks, never swapped back and forth while already chasing a player, line of sight optionally required)
BlockLocker compatibility BlockLocker is detected automatically; chests / doors / trapdoors it protects are neither mined nor blown up, and the plugin waits for BlockLocker to be ready at startup
pickup.only-equipped Only mobs that passed the spawn-equipment gate pick items up, keeping the combined share of "pickaxe + blocks" mobs at or under equip.chance
Uninstall cleanup fallback On uninstall / shutdown, blocks still awaiting cleanup are written to pending-blocks.txt before being deleted, and the next start cleans up again — even a hard kill leaves nothing permanent behind

Default changes

This is the only part of the upgrade that may need your hands. Upgrading never overwrites your existing config files: a value you explicitly wrote stays as written, and only keys still on the old default (or not present at all) run with the new default. The table below lists what a fresh install gets, and why it changed.

Config New default Old default Why
break-time.multiplier 4.0 2.0 Halves the mining speed, so a mob no longer hollows out a wall as if it were on fast-forward
break-time.hard-cap-seconds 180.0 45 The old value made the plugin give up on hard blocks such as obsidian, calling them "cannot be mined"; skipped materials produce one console notice
placement.block-lifetime-seconds 15 60 Meant to pair with "renew while someone stands on it": blocks live briefly but never disappear when needed, leaving less litter in the world
placement.max-per-chase 32 10 The old value made long bridges / tall pillars stop halfway; with config-version < 2 and a value of 10 it runs as 32 and warns in the console
tool.give.chance / backpack.chance (built-in fallbacks) 0.8 / 0.65 — Aligned with the bundled yml; only effective if you delete those keys

One exception, stated plainly: placement.max-per-chase is the only value that changes behaviour on your behalf. If your placement.yml has config-version below 2 and max-per-chase is still the old default 10, the plugin runs with 32 and warns — because 10 is almost certainly an untouched leftover. Every other number you wrote yourself is respected.

Fixes

What you saw Why it used to happen Now
Long mining was cut off and restarted every 3 seconds, obsidian most of all The "is mining stuck" timestamp was recorded once at the start and never refreshed as progress advanced, so a working job looked stuck The check is refreshed as progress advances, so long jobs finish in one go
A block-breaking task was judged timed out the instant it was submitted, and the mob swung once and walked off The value recording when the current break started was never filled in, so the timeout check was always true The start time is recorded correctly and nothing times out instantly
Expired temporary blocks never disappeared, or their records were mysteriously lost Expiry deleted the record before checking whether the chunk was loaded (so the deletion was wasted), and a failed sweep submission was never retried An expiry table plus periodic sweeping plus retries — an expired block is always cleaned up
Mobs stood uselessly in front of a fence without mining Obstacles ahead were only checked "one block diagonally", which misses the case of standing at a corner Both horizontal axes are checked separately, so walls and corners are recognised
Mobs paved the ground while walking across flat terrain, leaving a trail of blocks Any drop of up to 3 blocks counted as a gap worth bridging Small drops are simply walked down; only deeper gaps get a bridge
With the ceiling blocked, mobs switched columns over and over without doing any work There was no path for "mine the block above first" With a pickaxe they mine that block away first; mining and placing are mutually exclusive, and the mob keeps staring at the target block while mining
Far more mobs had spawn equipment than equip.chance allowed One code path handed out equipment without passing the master gate The gate result is decided when the mob is taken over, and every path honours it afterwards
Two config keys changed nothing no matter what you set approach.start-distance / approach.timeout-ticks were read but never used by any behaviour Both keys are gone; leaving them in the file does nothing (you can delete them)

Upgrade notes

  • equip.yml / message.yml are created automatically on first start — do not create them by hand. To change wording, edit message.yml and run /mobinteract reload.
  • An older placement.yml is recognised (config-version below 2) and your file is not rewritten; the new defaults are only applied at runtime.
  • If you run BlockLocker, test it once after upgrading: send a mob at a protected chest and confirm it does not touch it.
  • To make "mobs with pickaxes mining" rarer overall, lower chance in equip.yml (default 0.10). To make an individual mob work faster or slower, adjust break-time.multiplier (default 4.0 — higher is slower).

Related pages

  • Installation — install from scratch, back up before upgrading, where the configs live
  • Mining — every key in mining.yml, pickaxe requirements, blacklists
  • Placement — every key in placement.yml, temporary blocks, bridges and pillaring
  • Backpack and Pickup — pickup.only-equipped and item filtering
  • Equipment and Messages — the equip.yml gate and message.yml wording
  • Commands — /mobinteract status / inspect / reload
  • FAQ — plugin shows red, mobs will not mine, blocks will not disappear

Clone this wiki locally