Armor stands are not damaged by cacti but can be broken by arrows. An armor stand destroyed by an explosion or a firework does not drop as an item. Armor stands in water and lava at the same time are not consumed by the lava.
fixes:
fishing rod crashing in enchantment table
updated more swfs that were not updated in a recent merge
sort costs in ascending order
randomise enchantment seeds for new players
The string identifier for the Elder Guardian entity was set
to `IDS_GUARDIAN_ELDER`. This has been changed to the
consistent identifier `IDS_ELDER_GUARDIAN`.
Additionally, the localization file has been updated to include the
missing string definitions for both `IDS_GUARDIAN` and
`IDS_ELDER_GUARDIAN`
When a new player was whitelisted while they were sitting on the join screen, their next attempt would insta-kick before the world ever loaded, and the retry after that would let them in for roughly 20 seconds before booting them with "connection closed". Two separate bugs were colliding.
The first kick was a stale cancel flag on the client. When the server rejects a join, the "Connecting to host..." screen tears down, and its teardown path fires the cancel callback defensively. That flag would latch on without ever being consumed, so the very first tick of the next join attempt saw it and immediately closed the fresh connection. Clearing the flag when a new join starts prevents this.
The second kick was an orphan on the server. When the first failed join's TCP dropped, its slot got recycled for the next successful join, but the half-built login object from the broken attempt was still in the pending queue. 30 seconds later its "login took too long" timer fired, and the disconnect packet it tried to send was routed to whoever currently held that slot, which was now the new in-world player. It landed on their live socket and kicked them. Telling the game's Socket layer about the TCP drop lets the orphan clean itself up, and refusing to write on an already-closing socket stops any late packet from leaking into the recycled slot.
Resolve merge conflicts across multiple components
Merge and synchronize XML locale changes
Ensure consistency between string resources and localization files
Minor fixes to restore successful builds after merge
- Protect PlayerList and ServerConnection players vectors with critical
sections; all iterations use copy-on-read snapshots to prevent iterator
invalidation during concurrent join/leave
- Add null check on player bounding box in movement validation to prevent
crash when player is removed mid-tick
- Re-validate socket player pointer immediately before SendData to narrow
the TOCTOU race window on disconnect
- Replace inline disconnect cleanup with a queued system drained on the
main tick thread, eliminating the done_cs -> m_playersCS lock inversion
that caused deadlocks under load
- Disable Windows QuickEdit mode at server startup to prevent console
input selection from freezing the process
- Move chunk priority sort behind ServerConnection::sortPlayersByChunkPriority()
to keep the players vector lock-protected
- Prevent payment item from being consumed when submitting unchanged powers
- Reorder ServerPlayer::openBeacon to send ContainerOpenPacket before
addSlotListener so beacon data packets arrive after the client menu is ready
- Add BeaconMenu::broadcastChanges() to continuously sync levels and powers
to clients, matching the pattern FurnaceMenu already uses
- Initialize UIControl_BeaconEffectButton::m_lastState to prevent stale
heap memory from suppressing Iggy ChangeState calls on menu re-entry