Список изменений
Update Notes: v1.7.1 → v1.7.2
Commands consolidated under /tr
Every command (/trgui, /gui, /timer, /reset, /trconfig,
/twitchqueue, /queue, /cleardeath, /zmd) is replaced by a single
/tr <subcommand> command (alias /twitchrandomizer), with tab completion
for every subcommand:
/tr gui
/tr event [by:<name>]
/tr timer <start|stop|resume|reset>
/tr reset [confirm|force]
/tr config ...
/tr queue add <amount> [username]
/tr cleardeath
/tr zmd reset
Permission nodes (twitchrandomizer.reset, .timer, .queue, etc.) are
unchanged — only the typed command syntax changes.
Live world reset, no more restarts
/tr reset (and the GUI reset button) used to delete the world folders on
disk and then restart or shut down the server, relying on the next boot to
recreate everything from scratch. On Minecraft 26.1+ this silently broke:
Paper moved all world data (including custom worlds created via
WorldCreator) into a dimensions/ subfolder nested inside the primary
world, so the old code was deleting and restoring the wrong paths — a
seed-reset would quietly produce an empty new world instead of the prepared
one.
The reset now happens live, without touching the server process:
- The plugin creates a separate
challenge_world(+_nether/_the_end) on first start. This is the world that's actually played and reset. - The server's real default world (
level-namefromserver.properties) is never deleted — Bukkit hard-refuses to unload world index 0 at runtime regardless of version, so it now serves as a permanent "hub" that players are briefly parked in during a reset. - On
/tr reset confirm, players in the challenge world are teleported to the hub (teleportAsync, so the move is guaranteed complete before continuing), the challenge world is unloaded and deleted — its real on-disk folder is read fromWorld#getWorldFolder()rather than guessed, so this keeps working whether Minecraft still uses the classic top-level world folders (1.21.x) or the newer nesteddimensions/layout (26.1+) — then recreated with a fresh seed, and players are teleported back in.
Player state is now fully reset too
Previously only permanent-hearts was reset, so a player who hadn't died
kept their inventory, potion effects, and any hunger-clubs cap into the new
seed. /tr reset now also:
- Clears every online player's inventory (main, armor, offhand).
- Removes all active potion effects.
- Restores max health/hunger back to full (and clears the hunger-clubs cap).
- Stops the timer (like a manual
/tr timer stop) instead of leaving it running — the elapsed time itself is still kept, only cleared manually via the Misc menu, same as before.
Timer, queue, and death counts are intentionally left untouched, as before.
Death screen during reset
If a player was still on the death screen when a reset happened, their
Respawn button would silently do nothing once their old challenge world got
unloaded, forcing them to disconnect and reconnect just to play again — and
since vanilla auto-respawns disconnected-while-dead players before
PlayerJoinEvent even fires, they'd rejoin stuck in Spectator forever (the
old code unconditionally re-forced Spectator on every respawn).
/tr reset now aborts immediately - with a title and a chat message naming
the player - if anyone is still on the death screen, instead of touching
their world out from under them. Run it again once they've respawned. This
check runs both when the command is typed and again right before the actual
world teardown, closing the same race for anyone who dies during the
confirmation window in between. A reset "epoch" counter (bumped every time
a reset completes) also lets the respawn handler tell whether a reset
happened since a player died, in case they still manage to disconnect/
reconnect mid-death-screen for some other reason - if so, they're released
to Survival instead of being re-spectated.
Removed
- The BungeeCord fallback-server transfer and
restart-on-reset/Bukkit.shutdown()flow — no longer needed since the server never restarts for a reset. reset.fallback_server,reset.transfer_wait_ticks,restart-on-reset, and the unusedreset.randomize_seedconfig keys.- The pre-generation step (
pregenerated_*worlds created just before a restart) — no longer needed since the new world is generated fresh in place during the reset itself.
New config key
reset:
confirm_window_seconds: 30
title_lead_ticks: 40
challenge-world: "challenge_world"
challenge-world sets the base name for the world that gets played and
reset. Existing installs upgrading from an older version will have their
actual default world (world) treated as the challenge world's old
location — since that world is never deleted by the new code, nothing is
lost, but you'll want to move players into the new challenge_world once
after updating (e.g. via /tp) so future resets affect the world they're
actually playing in.
Spectator respawn at death location
With challenge.auto_spectator_on_death on, dying always respawned you at
the world spawn before you got switched to Spectator, instead of somewhere
you could actually watch the run from. You now respawn at your own death
location instead - unless a reset happened while you were dead, in which
case you're still sent to the new challenge world as before.
Per-player death tracking
In addition to the existing total death/tries counter, each online player's
own death count is now tracked for the session. Whenever any player dies, a
per-player breakdown (e.g. "Deaths PlayerOne: 1", "Deaths PlayerTwo: 0") is
posted to chat for everyone, localized per viewer. Cleared together with the
total counter via /tr cleardeath or on Ender Dragon kill.
Bug fixes
- Hunger Clubs regen fix — Removing hunger drumsticks no longer blocks
natural health regeneration entirely. Vanilla only regenerates health once
foodLevel >= 18; a reduced hunger cap below that threshold now drives its own manual regeneration instead of silently disabling healing. - Timer pause now actually freezes time — Pausing the timer previously
only stopped random block ticks and mob AI; the day/night cycle and
weather kept progressing regardless.
doDaylightCycleanddoWeatherCycleare now frozen (and restored) alongside it. - No damage while paused — The same protection cancelled damage to mobs but explicitly let players still hurt each other (and take fall/ environmental damage) while the timer was paused. Players are now just as invulnerable as everything else while paused.
- Mob spawn spread fix — The
spawn_mobsevent no longer clusters mobs on top of or inside the player. They now spawn spread in a circle 2.5–5.5 blocks away. - Skyblock fix — Only the triggering player was teleported to safety before the surrounding chunks got cleared to air; any other nearby player would fall through when their ground disappeared. All online players in that world are now teleported to the middle of the remaining chunk first.
- TNT Rain warning extended — The countdown before TNT minecarts start falling is now 10 seconds instead of 5, giving players more time to react.
- Floor is Lava / Slippery Ground shortened — Both events could
previously last up to 3 minutes (
max_seconds: 180). Default and hard cap are now 60 seconds, regardless of whatmax_secondsis set to inconfig.yml. structure_teleport/rare End teleport used the wrong world — Both looked for their destination in the hardcoded hub world names (world,world_nether,world_the_end) left over from before the world-reset rework, instead of the actualchallenge_worldthe run happens in. Both now resolve the configured challenge world dynamically.- Twitch queue dispatch fix — The Twitch/queue dispatcher enqueues raw
command lines (from subs, bits,
!test,/tr queue add, etc.) and runs them viaBukkit.dispatchCommand. It still referenced the old standalone/randomeventcommand, which no longer exists after the/trconsolidation, so queued events silently vanished instead of triggering. Now dispatchestr event .... - Plugin version display fix —
plugin.yml'sversionfield was a hardcoded literal instead of a build placeholder, so the in-game plugin list always showed an outdated version regardless of what was actually built/released. It now always reflects the real build version.

