Skip to content

Release 1.0.1 - #16

Merged
tastybento merged 10 commits into
masterfrom
develop
Jul 30, 2026
Merged

Release 1.0.1#16
tastybento merged 10 commits into
masterfrom
develop

Conversation

@tastybento

Copy link
Copy Markdown
Member

Release 1.0.1

First patch release. Fixes all bugs reported against 1.0.0 (#11, #13, #14), resolves the command and flag collisions with CaveBlock and AOneBlock, and makes ChunkBlock behave cleanly when the required Level addon is missing.

See the 1.0.1 draft release notes for the full changelog.

🤖 Generated with Claude Code

https://claude.ai/code/session_01Y7xSdVPS5vRu6wqf6XshRq

tastybento and others added 10 commits July 29, 2026 08:24
The phases panel offered the SELECT action (and its 'Click to change'
tooltip) based on island state and phase requirements alone, without
checking whether the player actually holds the permission of the setcount
command the click runs. A player with chunkblock.island.setcount negated
saw the tooltip and then got a permission error when clicking. The panel
now resolves the setcount subcommand and checks its permission before
offering the action; if the command cannot be resolved it stays permissive
and lets the command's own check decide.

Also renames the GUI/list titles from the AOneBlock leftover 'OneBlock
Phases' to 'ChunkBlock Phases'.

Fixes #11

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Y7xSdVPS5vRu6wqf6XshRq
…land

When a respawn (or join/teleport) landed a player inside a locked chunk —
e.g. because the world had no spawn set and a respawn plugin picked a bad
location on an old, abandoned island — backtrack() relocated the player to
the nearest unlocked spot of whatever island was at that location and, if
the spot was unsafe, created a landing block there. Players ended up
standing on a lone generated block on an island they had never visited.

backtrack() now only ejects a player locally when they hold coop rank or
higher on the island at their location. Everyone else is sent to their own
island home (falling back to spawn), and landing blocks can no longer be
created on islands the player does not belong to.

Fixes #13

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Y7xSdVPS5vRu6wqf6XshRq
The border-claim detection ran on every left/right click and walked a
5-block horizontal ray from the eye that ignored the clicked block and
passed straight through walls. Mining anything within ~5 blocks of a
locked chunk (e.g. a cobblestone generator) fired a claim attempt on every
swing, nagging 'You need X more level(s) of credit' with a sound each time
even though the player was not touching the border.

The claim gesture is now: a click on a block inside unlocked territory is
ordinary interaction and never a claim; punching a block that is itself in
a locked chunk targets that chunk directly; an air click walks the real
3D aim line and stops at the first solid block, so aiming through your own
builds no longer probes the chunk beyond them. Failure feedback (no-credit
and beyond-limit) is additionally throttled to once per two seconds per
player so repeated swings cannot spam chat.

Fixes #14

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Y7xSdVPS5vRu6wqf6XshRq
CaveBlock already uses /cb and /cbadmin (plus /cba) as its default
aliases, so running both gamemodes on one server made the short commands
collide. ChunkBlock's defaults are now 'ch chunkblock' for players and
'chadmin chunkblockadmin cha' for admins. Existing servers keep whatever
they have in config.yml; only fresh installs get the new defaults.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Y7xSdVPS5vRu6wqf6XshRq
The pinned SHA predates BentoBoxWorld/.github#13, which moved the CurseForge
metadata and Hangar versionUpload JSON out of inline curl -F values and into
files. curl treats a ';' in an inline -F value as the start of a type=
attribute, so a release body containing a semicolon truncates the JSON and
both platforms reject the upload.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SAQ3YQkcfRoCZEwa6SPJcp
Two related fixes around the flags copied from AOneBlock:

1. Rename ONEBLOCK_BOSSBAR/ONEBLOCK_ACTIONBAR/START_SAFETY to
CHUNKBLOCK_BOSSBAR/CHUNKBLOCK_ACTIONBAR/CHUNKBLOCK_START_SAFETY.
FlagsManager rejects duplicate flag IDs, so on a server running AOneBlock
and ChunkBlock together, whichever addon loaded second silently lost its
flag registration — and the surviving flag's listener belonged to the
other addon, so the boss bar/action bar/start-safety features broke for
one of the two gamemodes. Locale keys and default config are renamed to
match; servers that changed these world settings from the defaults will
need to re-apply them once under the new names.

2. Guard BossBarListener and StartSafetyListener against running for an
addon that never enabled. These listeners are registered by FlagsManager
when the flags are registered in onLoad, so they outlive a load failure —
seen in the wild when the Level addon was removed: BentoBox drops
ChunkBlock for the missing dependency after onLoad has run, the flag
listeners stay registered with no world behind them, and every join and
move then NPEs in inWorld() (BentoBoxWorld/BentoBox fix in progress too;
this guard also protects released BentoBox versions).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Y7xSdVPS5vRu6wqf6XshRq
ChunkBlock cannot function without Level: island levels are the currency
spent to claim chunks. addon.yml already declares the hard dependency
(depend: Level), which makes BentoBox refuse to load the addon when Level
is absent — but that path runs after onLoad has registered flags, and on
current BentoBox releases the flag listeners then linger with no world
behind them (see 9b8a25f).

onEnable now checks for the Level addon itself: if it is not on the
server, ChunkBlock logs a clear pair of error lines, unregisters its own
flags so no listeners survive, sets its state to DISABLED, and stops
before initializing anything.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Y7xSdVPS5vRu6wqf6XshRq
ci: bump publish-platforms pin to the multipart-JSON fix
The zombie-listener guard added in 9b8a25f only covered onJoin and
onEnterIsland. IslandExitEvent, IslandEnterEvent and FlagSettingChangeEvent
fire globally from other gamemodes too, so exiting an island in another
gamemode still NPE'd through removeBar -> inWorld on the null island
world when ChunkBlock had been dropped for the missing Level dependency.

Replaces the piecemeal checks with a single ready() gate (overworld
exists) that every event handler goes through, and adds a test that fires
all handlers against a world-less addon to keep it that way.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Y7xSdVPS5vRu6wqf6XshRq
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Y7xSdVPS5vRu6wqf6XshRq
@sonarqubecloud

Copy link
Copy Markdown

@tastybento
tastybento merged commit 65878f1 into master Jul 30, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant