[4ca84f6](https://github.com/ViaVersion/ViaVersion/commit/4ca84f6) Fix <1.13 sounds for VB/VR
Technically unused in VV for now, but may also replace some in-code sound mappings later
Added 1.21.9 client support
- Added `log-blocked-joins` config option to log failed join attempts from blocked protocol versions
- The max-pps config options have been revamped (see the config comments for more details)
- The options have been moved into their own `packet-limiter` section and renamed, but still work the same as before
- Added a `packet-size-limiter` section that functions the same, but for packet size
- Fixed manually set values in `velocity-servers` always being removed on restarts
- Fixed desyncs on item dragging in some cases
- Fixed particle handling in enchantment registry elements
- Fixed ViaVersion platform details not being sent on server switches (by criticalcynical)
- Fixed stats mappings in 1.21.5->1.21.6 (by EnZaXD)
- Fixed legacy show_text conversion in 1.21.4->1.21.5 (by EnZaXD)
- Fixed banner custom name conversion in 1.21.4->1.21.5
- Fixed an issue with lock conversion in 1.21->1.21.2
- Fixed disconnects from bad team packets by filtering them in 1.20.3->1.20.5 (by EnZaXD)
- Map "purple" shulker boxes to the visually identical default variant instead of actually purple shulker boxes in 1.12->1.13 (by EnZaXD)
- Fixed occasional errors on player disconnects on older servers and general task handling (by EnZaXD)
- Fixed system messages sent during config state not appearing on <1.13 servers (by RaynLegends)
If you want to get larger version updates early, consider supporting me via https://viaversion.com/donate. See the [previous update notes](https://github.com/ViaVersion/ViaVersion/releases/tag/4.9.3) for more info.
[152e4e7](https://github.com/ViaVersion/ViaVersion/commit/152e4e7) Handle custom name in banner etc. in 1.21.4->1.21.5
Newer clients handle errors gracefully and will parse them okay, but this'll make sure they are properly set
[5a9f040](https://github.com/ViaVersion/ViaVersion/commit/5a9f040) Fix wrong connections being removed when switching servers on proxy platforms (#4576)
[4070ea9](https://github.com/ViaVersion/ViaVersion/commit/4070ea9) Revamp max-pps config
Add a config section for setting max packet size, add a toggle for disabling each tracker fully
- Added `cancel-swing-in-inventory` option for 1.15.2->1.16 inventory swing fix (by EnZaXD)
- Fixed equippable allowed_entities handling
- Fixed attribute modifiers in 1.21.5->1.21.6
- Fixed anticheat flags when respawning with 1.21.2+ clients on older servers (by RK_01)
- Fixed error on picking entities on older Paper servers (by EnZaXD)
- Fixed missing biome name translations in 1.17.1->1.18 (by EnZaXD)
- Fixed a client error on throwing potions on 1.9.4 servers specifically and potion color being lost on 1.8 servers
- Fixed corners not being included in 1.8 chunk-border-fix (by dewgs, EnZaXD)
If you want to get larger version updates early, consider supporting me via https://viaversion.com/donate. See the [previous update notes](https://github.com/ViaVersion/ViaVersion/releases/tag/4.9.3) for more info.
[ff03892](https://github.com/ViaVersion/ViaVersion/commit/ff03892) Fix some directions not being included in chunk-border-fix; Reduce packets sent by checking for needed chunks (#4586)
[6f6dc2c](https://github.com/ViaVersion/ViaVersion/commit/6f6dc2c) Rewrite attribute modifiers automatically via interface
An id change in 1.21.5->1.21.6 was missed
[f612adb](https://github.com/ViaVersion/ViaVersion/commit/f612adb) Rewrite player & display name in player info packet in 1.12.2->1.13 (#4550)
Fixes Tablist plugins on some servers breaking since the game profile name sent is used to determine the scoreboard team which name we rewrite in other packets, also adds missing component rewriter calls to the display names (Not that important given its only translation keys, but we are already here).
[bee45ef](https://github.com/ViaVersion/ViaVersion/commit/bee45ef) Use Cache get instead of Map compute
This may or may not fix concurrency issues from... somewhere (bad plugins/old guava impl?)
Added 1.21.6 client support
- Partially fixed item desyncs in 1.21.4->1.21.5
- This also removed the linked Paper option that caused other (less severe) issues. However, not all item data can easily be handled, so some data on items like custom painting variants may still desync on the client when dragged in an inventory
- Fixed invalid characters in command click events causing client errors in 1.21.4->.5 (by EnZaXD)
- Fixed infinite respawning with 1.21.2+ clients on older servers (by RK_01)
- Fixed boat steering issues on Fabric servers in 1.21->1.21.2 (by EnZaXD)
- Fixed negative damage and repair cost values causing errors in 1.20.3->1.20.5 (by EnZaXD)
- Ignore server-only creative slot lock and map post processing data in 1.20.3->1.20.5 (by EnZaXD)
- Ignore unknown tags in block predicates in 1.20.3->1.20.5 (by EnZaXD)
- Fixed some entity removal checks on respawn in 1.15-1.17 (by dewgs)
- Fixed a regression causing container click errors in 1.8->1.9 (by EnZaXD)
- Fixed non-standard chunk palette data reading of non-empty values with 0 bits (by EnZaXD)
- Various fixes to text component conversion across versions (by kennytv, EnZaXD, ImGxrke)
- Added `suppress-text-component-conversion-warnings` config option to suppress errors during these separetely to other conversion errors
If you want to get larger version updates early, consider supporting me via https://viaversion.com/donate. See the [previous update notes](https://github.com/ViaVersion/ViaVersion/releases/tag/4.9.3) for more info.
[60c6765](https://github.com/ViaVersion/ViaVersion/commit/60c6765) Filter invalid characters in command click events in 1.21.4->.5 (#4528)
Minecraft versions prior to 1.21.4 filter out invalid characters when handling the click event on the clientside while 1.21.5+ validates and throws in the network codec per ExtraCodecs#CHAT_STRING
[3951cff](https://github.com/ViaVersion/ViaVersion/commit/3951cff) Cancel out unmapped (block) ids in HolderSetImpl (#4512)
In VB, mapping data will return -1 for missing block ids (which is for almost all blocks the case). This is made so that VV rewriters can cancel these blocks away nicely (as mostly used in places where it's better to show the user nothing rather than wrong blocks, such as statistics).
[3951cff](https://github.com/ViaVersion/ViaVersion/commit/3951cff) Cancel out unmapped (block) ids in HolderSetImpl (#4512)
In VB, mapping data will return -1 for missing block ids (which is for almost all blocks the case). This is made so that VV rewriters can cancel these blocks away nicely (as mostly used in places where it's better to show the user nothing rather than wrong blocks, such as statistics).
[3951cff](https://github.com/ViaVersion/ViaVersion/commit/3951cff) Cancel out unmapped (block) ids in HolderSetImpl (#4512)
In VB, mapping data will return -1 for missing block ids (which is for almost all blocks the case). This is made so that VV rewriters can cancel these blocks away nicely (as mostly used in places where it's better to show the user nothing rather than wrong blocks, such as statistics).
[ab3927d](https://github.com/ViaVersion/ViaVersion/commit/ab3927d) Implement our own hash writing
This avoids a lot of indirection, wrapping/boxing and data copying while also making sure we can immediately implement them on new snapshots without waiting for a separate (also ever-growing) library.
The HashBuilder is partially copied from MCStructs, everything else was built anew to intentionally stay away from Vanilla's Codec design
[c30e0f4](https://github.com/ViaVersion/ViaVersion/commit/c30e0f4) Split up item rewriter methods even more
Item backups and its restoration processes have to be more carefully placed around Rewritable handling, so the original/restored data stays untouched
[0b5721d](https://github.com/ViaVersion/ViaVersion/commit/0b5721d) Check for non-negative value for damage & repair cost in 1.20.3->.5 (#4491)
In 1.20.5, codecs introduced the non-negative int type which will fail if a value <= 0 is present. In 1.20.4, Mojang gracefully handled negative values
[5bad61e](https://github.com/ViaVersion/ViaVersion/commit/5bad61e) Don't perform length validation on zero bit storage in 1.18 palette type (#4479)
Minecraft has its own ZeroBitStorage type for this case so we don't need to perform the validation, also removed the comments as this is just how our code should work to match Vanilla behaviour (at least for the first one; I did not verify the readValues code)
- Various fixes to text component rewriting in 1.21.4->1.21.5 and 1.20.3->1.20.5 (by kennytv, EnZaXD)
- Fixed the advancement background texture being missing in 1.21.4->1.21.5 (by booky10)
- Send player input every tick when in boat to avoid anti-cheat flagging in 1.21 -> 1.21.2 (by EnZaXD)
If you want to get larger version updates early, consider supporting me via https://viaversion.com/donate. See the [previous update notes](https://github.com/ViaVersion/ViaVersion/releases/tag/4.9.3) for more info.
[dd6a1a7](https://github.com/ViaVersion/ViaVersion/commit/dd6a1a7) Update old version warning to <1.16 servers
The original <1.13 warning was added almost 5 years ago, since then more small issues have come up from newer clients having fundamental changes and server stats on those old versions have dropped even more. That said, ViaVersion will keep working on these servers presumably forever
**1.21.5 client support**
- Fixed custom model data handling in block entities in 1.21.2->1.21.4
- Fixed removed item data components in item hover events in 1.21->1.21.2 and 1.21.2->1.21.4
- Fixed shulker boxes content not being visible in 1.20.3->1.20.5 (by EnZaXD)
- Fixes to item hover event handling in 1.20.3->1.20.5 (by kennytv, EnZaXD)
- Fixed duplicate registry entries causing errors (by EnZaXD)
- Fixed blocks in minecarts in 1.8->1.9 (by EnZaXD)
- Fixed error with 1.9+ clients joining a 1.8 server when ViaVersion installed on Velocity (by EnZaXD)
- Removed consumable blocking sound for 1.21.4 clients on 1.8 servers (by lowercasebtw)
- Note: Item desyncs may occur if you are running a version between 1.17 and 1.21 or don't have ViaVersion running on an up-to-date Paper server
This version also adds custom payload sending to get player protocol version data across platforms (by EnZaXD). If ViaVersion is installed on a proxy (e.g. Velocity or ViaProxy) or the client (e.g. ViaFabricPlus), you *may* be able to get this information by listening to custom payloads ("plugin messages") on any platform within the chain, which can be useful for anti-cheats and other player version-dependent code. See [the wiki](https://github.com/ViaVersion/ViaVersion/wiki/Player-Details-Protocol) for more information. Example JSON data:
```json
{
"platformName": "Velocity",
"platformVersion": "3.1.2",
"version": 760,
"versionName": "1.19.4"
}
```
**Please also note that at some point in the future, ViaVersion will require at least Java 21 to run. If you're already on 17, an update should be trivial.**
If you want to get larger version updates early, consider supporting me via https://viaversion.com/donate. See the [previous update notes](https://github.com/ViaVersion/ViaVersion/releases/tag/4.9.3) for more info.
Adds an optional custom payload protocol which platforms can use to communicate the native version of users across backend servers, the current implementation supports Velocity by sending the player's native version to the backend servers. Platforms may call ConnectionDetails#sendConnectionDetails themselves to ensure the packet getting handled by the server.
[1ca075f](https://github.com/ViaVersion/ViaVersion/commit/1ca075f) Only add minecraft:spit damage type if not sent by the server in 1.20.3->1.20.5 (#4361)
[82373ac](https://github.com/ViaVersion/ViaVersion/commit/82373ac) Add ComponentRewriter#convertLegacyEntityContents, cleanup 1.20.5 rewriter class (#4311)
Moves the value->contents transition for entities to the common rewriter class for VB and cleans up the ComponentRewriter1_20_5 class to use the new handleShowItem
[08b9217](https://github.com/ViaVersion/ViaVersion/commit/08b9217) Fix entity defaults across all protocols (#4312)
Minecraft <= 1.13.2 silently ignores unknown entity type ids and doesn't print any warning, while we currently still track them. Minecraft 1.14+ will spawn a pig if the entity type is invalid while we track ENTITY as wrong type. Both cases can cause various entity data issues where the server sends wrong data for non-existing entities while we still handle it.
[742911a](https://github.com/ViaVersion/ViaVersion/commit/742911a) Use correct entity data types class in Types1_21_4
Fixes painting variants on dropped items
1.21.4 client support and mostly config-related changes and fixes to older server versions!
- Greatly reduced netty byte buf (memory) allocation
- The sword-blocking emulation for 1.20.5+ clients on 1.8 servers can now be disabled via `sword-blocking-via-consumable` (by EnZaXD)
- The `fix-1_21-placement-rotation` config option is now enabled by default (by Pro4D)
- Fixed reading of equippable (by DavyCraft648)
- Fixed reading of armor trim override materials
- Fixed regression in tag sending for 1.20.2 to 1.20.4 clients on older servers
- Fixed recipe book recipe ingredients for newer clients on 1.12 servers and older (by valaphee)
- Fixed block action block id handling across multiple protocols (by valaphee)
- Fixed 1.12->1.13 block connections on snowy grass, mycelium and podzol (by lowercasebtw)
- Fixed dropped items being invisible until entity data is sent in 1.10->1.11 (by EnZaXD)
- Improved 1.21 client enchantment handling on legacy servers (by Pablete1234)
- Fixed `fix-1_21-placement-rotation` not working after changing its value and running /viaversion reload (by EnZaXD)
- Fixed `fix-1_21-placement-rotation` causing some issues with with anti-cheats (by EnZaXD)
Additional notes:
- Custom model data no longer exists in its previous form. If you can, use the item_model data component, else make sure your resource pack is updated to use the new custom model data format and its first range_dispatch float
- Picking blocks will not work for 1.21.4 clients on servers older than about 1.12. Picking entities does not work on servers older than 1.20.4. Both are Paper specific platform fixes and require certain API to be present
If you want to get larger version updates early, consider supporting me via https://viaversion.com/donate. See the [previous update notes](https://github.com/ViaVersion/ViaVersion/releases/tag/4.9.3) for more info.
[2d663db](https://github.com/ViaVersion/ViaVersion/commit/2d663db) Fix 1.12 recipes containing stone as placeholder, improve empty handling in 1.20.5/1.21.2 (#4284)
[6553fc9](https://github.com/ViaVersion/ViaVersion/commit/6553fc9) Only print invalid custom payload channel warnings in debug mode (#4257)
We previously had people complaining about this being an error and not understanding what it means + servers can't do anything about these errors anyway.
[deab6a0](https://github.com/ViaVersion/ViaVersion/commit/deab6a0) Don't allocate bufs in 1.18/1.20 chunk types
Unlike Mojang, we don't sneak a byte array of data outside of the actual packet reading, so there's no reason to not just use the original buffer.
Slicing doesn't allocate anything while also setting the reader index correctly, as also used in the previous types
[76db43c](https://github.com/ViaVersion/ViaVersion/commit/76db43c) Don't copy full transformed buf during every transform
The resulting modified buf is the exact same as before
[f0eab71](https://github.com/ViaVersion/ViaVersion/commit/f0eab71) Pre-size most allocated byte buffers
Also avoids the default allocation size of 256 bytes for bufs that are much smaller than that
Lots of fixes, mostly to edge case data handling, and some more to older versions!
- Fixed items with block predicates causing disconnects for creative mode clients in 1.21->1.21.2 (by EnZaXD)
- Fixed errors from level 0 enchantments in 1.21->1.21.2
- Fixed painting entity data in 1.21->1.21.2
- Fixed opening chest boat inventories causing disconnects in 1.21->1.21.2
- Fixed boat types in 1.21->1.21.2 (by EnZaXD)
- Fixed item_name<->default name priority for items in 1.21->1.21.2 (by EnZaXD)
- Fixed some issues with item hover event displays in 1.20.5 and 1.21.2 (by EnZaXD)
- Fixed handling of empty lock codes in 1.21->1.21.2, usually sent by older servers (by valaphee, EnZaXD, kennytv)
- Fixed possible anticheat issues by dropping idle packets where only horizontal collision changed in 1.21->1.21.2 (by EnZaXD)
- Fixed empty custom data tags sometimes being removed with creative clients on 1.20.5/1.21 (by EnZaXD)
- Send enabled features packet in config phase for clients that have it in 1.19.1->1.19.3 (by EnZaXD)
- Fixed handling of block entity custom names in 1.12->1.13 (by EnZaXD)
- Fixed chunks possibly being invisible on 1.8 servers and older (by RK_01)
- Fixed some edgecase area effect cloud particle errors on older servers
- 1.21.2+ clients on 1.8 servers now get proper sword blocking animations through consumable item data (by RK_01)
If you want to get larger version updates early, consider supporting me via https://viaversion.com/donate. See the [previous update notes](https://github.com/ViaVersion/ViaVersion/releases/tag/4.9.3) for more info.
[b7d37b1](https://github.com/ViaVersion/ViaVersion/commit/b7d37b1) Correctly convert lock code to json instead
The normal codec doesn't serialize components to nbt, but to json strings in a string tag...
[dcf050a](https://github.com/ViaVersion/ViaVersion/commit/dcf050a) Remove unneeded optional item type from Types1_21_2
Was only used in food properties up until 1.21.2 (luckily)
[74b9eb9](https://github.com/ViaVersion/ViaVersion/commit/74b9eb9) Fix boat entity type check
As per usual plugins sending data for untracked entities
Fixes #4222
**1.21.2/3 client support**
- Fixed a possible crash on older servers (thanks to EnZaXD)
- Note that disabling strict-error-handling no longer has any effect on 1.21.2+ clients, affected errors include:
- scoreboard related plugins that remove players from invalid teams, or try to add players to duplicate teams.
- enchantment related plugins registering their custom enchantments/other registry entries multiple times.
- Known issue: Boats visually lose their wood type for 1.21.2+ clients. The fix for this is a bit more complicated and has been postponed to the next release.
If you want to get larger version updates early, consider supporting me via https://viaversion.com/donate. See the [previous update notes](https://github.com/ViaVersion/ViaVersion/releases/tag/4.9.3) for more info.
[50084c1](https://github.com/ViaVersion/ViaVersion/commit/50084c1) Fix tag related issues to prepare for 1.21.2
- Inline tag values in 1.21 enchantments
- Fix TagRewriter addTags if the server doesn't send values for a registry
- Send the tags packet in 1.12->1.13 before the play login packet to fix tracking in 1.20->1.20.2
[0b5fa37](https://github.com/ViaVersion/ViaVersion/commit/0b5fa37) Put title directly into component in 1.8->1.9 bossbar emulation (#4173)
The JsonParser#parseString detection in CommonBoss will detect " " as valid json (JsonNull) and won't wrap it around ComponentUtil#plainToJson like it should, at some point in the future I would like CommonBoss to only accept a JsonElement instance and not raw strings anymore.
[c358c39](https://github.com/ViaVersion/ViaVersion/commit/c358c39) Make clearer distinction between filled and empty data component patch, simplify direct value getting
[fcb4723](https://github.com/ViaVersion/ViaVersion/commit/fcb4723) Add EntityTrackerBase#hasClientEntityId and don't use -1 as not set indicator (#4143)
[7cd5514](https://github.com/ViaVersion/ViaVersion/commit/7cd5514) Add PacketWrapper#sendFutureRaw, cleanup login disconnect handling. (#4129)
Removes the special handling in Protocol1_8To1_9 and always send the correct/expected data by the client in ServerboundBaseProtocol1_7 itself. Also prevent sending the packet through the protocol pipeline since packet/format changes should also be handled inside the base protocol.
[4f66fd7](https://github.com/ViaVersion/ViaVersion/commit/4f66fd7) Go back to fast entity data list iteration and mutation
This is a fairly hot method and the array list cannot be modified outside of the already managed event cancellation and provided extra list
[a993a08](https://github.com/ViaVersion/ViaVersion/commit/a993a08) Only map between different primitive types when explicitly requested
This would otherwise only happen with unsafe type usage
[78abf8b](https://github.com/ViaVersion/ViaVersion/commit/78abf8b) Use RedirectProtocolVersion#getOrigin in InitialBaseProtocol if possible (#4110)
This way, we should be able to get rid of manually adding the base protocol in projects like ViaAprilFools:
https://github.com/ViaVersion/ViaAprilFools/blob/main/common/src/main/java/net/raphimc/viaaprilfools/protocol/s3d_sharewaretov1_14/Protocol3D_SharewareTo1_14.java#L87
[1b03e24](https://github.com/ViaVersion/ViaVersion/commit/1b03e24) Move VV specific item handling out of component<->nbt conversion in 1.20.3->1.20.5 (#4094)
The current code backups the tag in CUSTOM_DATA inside the toStructuredItem function which in VB is used for to server packets which causes bad data, this PR moves the backup logic out to the VV specific handler and also prevents toOldItem logic for using the backup to ever get executed in VB. The counterpart PR will add proper handling for CUSTOM_DATA.
- Partially fixed 1.20.5->1.21 enchantment handling on older/non-Paper servers (by EnZaXD)
- Fixed fast switching armor cancelling sprinting in 1.20.5->1.21
- Fixed handling of custom armor trim patterns and materials in 1.20.3->1.20.5
- Fixed erronous area effect cloud particle handling in 1.20.2->1.20.3
- Fixed an edge case with custom item frame rotation handling in 1.16.4->1.17 (by EnZaXD)
If you want to get larger version updates early, consider supporting me via https://viaversion.com/donate. See the [previous update notes](https://github.com/ViaVersion/ViaVersion/releases/tag/4.9.3) for more info.
[60b3ba6](https://github.com/ViaVersion/ViaVersion/commit/60b3ba6) Include snakeyaml into final jar, delete compat layers (#4070)
Snakeyaml is an untypical library which most Via platforms don't have and also broke in the past with V2, having it directly in the jar like Gson cleans up the build scripts massively, reduces the build time and also doesn't break in the future if they release V3 or any other breaking changes.
[462a103](https://github.com/ViaVersion/ViaVersion/commit/462a103) Only print reload info when needed, add additional log message after shutdown
Thanks to its name and dependency order, ViaVersion will generally be the last plugin to be disabled and has occasionally been blamed for other plugins stalling server shutdown
- Fixed horse and llama inventory issues in 1.20.5->1.21 (by EnZaXD)
- Fixed issues with attributes in 1.20.5->1.21 (by kennytv and EnZaXD)
- Fixed possible kicks from out-of-order-chat in 1.20.3->1.20.5 (by Gegy)
- Fixed shulker box tooltips in 1.20.3->1.20.5 (by EnZaXD)
- Fixed filtered book page handling in 1.20.2->1.20.3 (by EnZaXD)
- "Message not delivered" messages no longer appear in 1.20->1.20.2
- Improved the 1.20.3 crossbow max damage and 1.8 sword blocking fixes for 1.21+ clients (by RK_01)
- Tridents and banner pattern items show the correct 1.20 rarity in 1.20.5->1.21 (by EnZaXD)
- Fixed splash/lingering potions being invisible in 1.19 protocols (by EnZaXD)
- Fixed attribute keeping on respawn for <1.14 clients in 1.16->1.15 (by RK_01)
- Fixed show_item in translation components in 1.11->1.12 (by EnZaXD)
- Slightly improve on 1.10->1.11 fishing hook position desync
- The 1.9 cooldown indicator is now completely hidden in 1.8->1.9 (by lowercasebtw)
- The `minimize-cooldown` has been removed
- Fixed wither and ender dragon bossbars not working in 1.8->1.9 (by EnZaXD)
- Added `cancel-block-sounds` config option to toggle the 1.8 block placement sound fix (by EnZaXD)
If you want to get larger version updates early, consider supporting me via https://viaversion.com/donate. See the [previous update notes](https://github.com/ViaVersion/ViaVersion/releases/tag/4.9.3) for more info.
Most platforms won't ever throw an error and usually ViaVersion shouldn't even load when the server version can't be found. Therefore, I added this bouncer function, so I don't need to try catch my code in ViaLoader/VFP where an exception is never thrown
[1735812](https://github.com/ViaVersion/ViaVersion/commit/1735812) Fix: delay chat acknowledgements instead of spoofing (#3997)
An easy reproduction case is to mute a player using the Social Interactions screen, let them chat, and then send a message. As ViaVersion produces its own acknowledgements, this now does not match with what the client produced and signed its messages with - so the signature will fail verification.
As an alternative, we *always* pass through the same acknowledgement bit set - and for 'spoofed' messages, we reuse the last one that we received. In the case of the chat ack packet with just an offset, we need to hold back the window by at least 20 messages to ensure we don't start making claims about whether the client saw a message that ViaVersion cannot yet make a judgement on.
- Add handling for some movement related enchantments in 1.20.5->1.21. This requires ViaVersion to be placed on a Paper server (also for efficiency to properly work)
- Fixed entity effect colors for world particles in 1.20.3->1.20.5
- Improve item comparison in some cases when the item tag was empty in 1.20.3<->1.20.5 (by Camotoy, AJ-Ferguson)
- Fixed handling of the hardcore/not set gamemodes in 1.8->1.9 (by LeonTG, EnZaXD)
- Backup original book pages for creative mode clients in 1.8->1.9 (by EnZaXD)
If you want to get larger version updates early, consider supporting me via https://viaversion.com/donate. See the [previous update notes](https://github.com/ViaVersion/ViaVersion/releases/tag/4.9.3) for more info.
### Java 17 requirement
- See https://docs.papermc.io/misc/java-install on how to update your Java version
- Even Minecraft 1.8 is *mostly* able to run on Java 17, although for a better experience you should use a fork that fixes smaller issues
- Some older versions require the `Paper.IgnoreJavaVersion` system property to be set (`-DPaper.IgnoreJavaVersion=true` as a startup flag), but run perfectly fine using Java 17
- If all else fails, use the [Java 8 compatibility builds we provide](https://ci.viaversion.com/job/ViaVersion-Java8/) at risk of not receiving support for issues it could cause - you should not make yourself depend on these *too* much, they will generally only be updated on releases
### Other important changes
The main ViaVersion jar no longer supports Bungee and Sponge, they have been moved to separate plugins. Sponge has seen almost no usage and the current Bungee platform is pretty broken due to missing injection points, + Bungee has generally been unusable for weeks after every recent Minecraft update.
- Bungee/Waterfall support has been moved to: https://hangar.papermc.io/ViaVersion/ViaBungee (currently still not working)
- ViaVersion (and other Via plugins if wanted) need to be put into `plugins/ViaVersion/` for ViaBungee to load them
- Sponge support has been moved to: https://modrinth.com/plugin/viasponge
- ViaVersion (and other Via plugins if wanted) need to be put into `config/viaversion/` for ViaSponge to load them
- ProtocolSupport compatibility has been moved to an [addon](https://github.com/ViaVersionAddons/ProtocolSupportCompat), since PS has been dead for a while and VR+VB are generally more usable across versions now
The config option `checkforupdates` has been changed to `check-for-updates`; you will need to toggle the new value manually if you had toggled the old one.
### API changes
- `Type` instances are now held in `Types` to prevent classloading issues
- Packet sending/receiving related methods are no longer spammed with `throws Exception`
- Packet type names, among others, have changed to reflect vanilla names
- For automated mass-replacement of such renames and package changes (mostly for platforms implementing ViaVersion), see https://gist.github.com/kennytv/5bc5bd6efb4c0a07e8a2020f2f2131b7
- Removed a number of deprecated methods
### Fixes and other changes
- Added `handle-invalid-item-count` config option to gracefully handle items with invalid stack sizes in 1.20.3->1.20.5 (by EnZaXD)
- Added `viaversion player <*/playername>` subcommand to view protocol info of a specific player (by EnZaXD)
- Ignore invalid chunk entities in 1.20.3->1.20.5
- Fixed issues with thrown projectiles for 1.20.5 clients on 1.19 servers and older
- Fixed various issues due to missing tags (by RK_01)
- Fixed various block entity tags in 1.20.3->1.20.5 (by EnZaXD)
- Fixed conversion of firework tags without explosions in 1.20.3->120.5 (by EnZaXD)
- Fixed positionless lodestone tracker conversion (by EnZaXD and Pantera07)
- Fixed painting items with specific variant tags in 1.20.3->1.20.5
- Fixed villager trade handling when they contain empty items in 1.20.3->1.20.5
- Fixed various issues in show_item conversion in 1.20.3->1.20.5 (by EnZaXD)
- Fixed items with custom names not being italic sometimes in 1.12.2->1.13 (by EnZaXD)
- Changed logs/warnings to include the relevant version (by EnZaXD)
- Fixed book signing in 1.8->1.9 (by EnZaXD)
- Fixed block place sounds playing twice in 1.8->1.9 (by EnZaXD)
- Small fixes to edge cases in data parsing in various versions (by EnZaXD)
- Backup negative item amounts in 1.10->1.11 for creative mode clients (by EnZaXD)
- Changed `viaversion displayleaks` subcommand to be able to set detection level (by EnZaXD)
... and more
If you want to get larger version updates early, consider supporting me via https://viaversion.com/donate. See the [previous update notes](https://github.com/ViaVersion/ViaVersion/releases/tag/4.9.3) for more info.
[b77d0fe](https://github.com/ViaVersion/ViaVersion/commit/b77d0fe) Remove no longer needed empty item check in entity data
Also fixes bad null values being set there
[842cb8d](https://github.com/ViaVersion/ViaVersion/commit/842cb8d) Change items to not be nullable in 1.20.5+
With the server and client actually having empty checks in many places now, this simplifies empty checks going forward
[a48c3a6](https://github.com/ViaVersion/ViaVersion/commit/a48c3a6) Move Bungee and Sponge platforms to separate plugins
Bungee support is half broken due to not having the same injection points as Velocity and has become less and less stable with every update. The Sponge plugin has been almost entirely unused
[03e8eec](https://github.com/ViaVersion/ViaVersion/commit/03e8eec) Wrap BASE_COLOR, CONTAINER_LOOT and CONTAINER inside block entity tag in 1.20.5->.3 (#3892)
[01589b3](https://github.com/ViaVersion/ViaVersion/commit/01589b3) Always throw on serverbound custom payload errors
Old server versions did suppress exceptions, but that doesn't matter for us
[7d9c6fe](https://github.com/ViaVersion/ViaVersion/commit/7d9c6fe) Fix firework rewriting in 1.20.3->.5 (#3860)
Makes the explosion tag optional like it is in 1.20.4 so the tooltip shows the correct duration when crafting a firework, also fixes the type used for Flight which is byte in 1.20.4
- Fixed entity effect particle and tipped arrow colors in 1.20.4->1.20.5 (by EnZaXD and kennytv)
- Fixed block entity data in items if the id was missing (by EnZaXD and kennytv)
- Fixed incoming 1.20.5 banner handling
- Fixed incoming 1.20.5 player head handling
If you want to get larger version updates early, consider supporting me via https://viaversion.com/donate. See the [previous update notes](https://github.com/ViaVersion/ViaVersion/releases/tag/4.9.3) for more info.
Most of these are bugfixes for 1.20.5 protocol handling
- Various fixes to show_item hover event handling
- Fixed click container button handling (by Gerrygames)
- Fixed block protocols/versions disconnect screen
- Fixed handling of bad registry data (by EnZaXD)
- Pass through invalid command argument types instead of erroring
- Fixed death message handling in 1.8->1.9 (by EnZaXD)
- Changed container type mapping of legacy smithing from a furnace to an anvil in 1.19->1.20 (by Pantera07)
- Paper servers now skip jar remapping of ViaVersion
If you want to get larger version updates on Minecraft releases early, consider supporting me via https://viaversion.com/donate. See the [previous update notes](https://github.com/ViaVersion/ViaVersion/releases/tag/4.9.3) for more info.
[9549a18](https://github.com/ViaVersion/ViaVersion/commit/9549a18) Handle duplicated registry ids in 1.20.3->.5 (#3825)
Minecraft 1.20.4 and earlier silently overrides the previous values if multiple registry elements have the same id (Tested using a Fabric 1.20.4 mod by parsing a registry sent by a server and then printing the parsed objects).
[d691096](https://github.com/ViaVersion/ViaVersion/commit/d691096) Move around types, apply to other enums
This doesn't include ALL abstract types, mostly if they are single-use or not at all relevant to our handling and most likely never will
[c113e19](https://github.com/ViaVersion/ViaVersion/commit/c113e19) Convert plain to json instead of doing component conversion in DeathListener (#3821)
[a77e328](https://github.com/ViaVersion/ViaVersion/commit/a77e328) Put components in entity data through component rewriter
Cursed, but possibly needed
[798b70c](https://github.com/ViaVersion/ViaVersion/commit/798b70c) Be even more defensive about half valid items in hover events
While they aren't particularly useful or intended, they were valid
1.20.5 client support; this one of the largest updates network-content wise, so expect rough edges. I'd also like to thank the wave of [sponsors]([https://github.com/sponsors/kennytv](https://github.com/sponsors/kennytv)) as well as the people that showed understanding for the 3 day delay. If it weren't for the sponsors, this update wouldn't have been even close to being usable already.
#### Important: The ViaVersion update for 1.21 will require Java 17 or above
- While **we will still offer additional magical jars for Java 8 compatibility** on releases for the foreseeable future, you should still make sure your server can run on Java 17 by then
- Even 1.8 servers can run Java 17. Most 1.8 server forks will also have proper support for it
- Some versions have an arbitrary/unnecessary Java version check from Spigot that prevent startup:
- For 1.16 and 1.17, use Paper's `-DPaper.IgnoreJavaVersion=true` startup flag
- For 1.13 to 1.15, use any updated fork that just removes it. An unsafe (!) way of skipping Spigot's check is by using `-Djava.class.version=<supported Java class version>`
#### Fixes to previously added version support
- Added a large number of sanity checks to NBT reading to prevent errors from bad data
- Fixed Entity sound handling in some >1.19 protocols
- Fixed text components that are too long kicking 1.20.3 clients
- Fixed handling of null json entries in text components in 1.20->1.20.2
- Fixed 1.15->1.16 item attribute uuids
- Fixed various issues with text component handling in old protocols (by EnZaXD and RK_01)
- Fixed 1.12->1.13 enderman held block handling
- Fixed lots of text component translation issues in 1.8->1.9 (by EnZaXD)
- Fixed an issue with non-lowercase sounds in 1.8->1.9 (by EnZaXD)
- Ignore errors in custom payload reading in older protocols as per vanilla behaviour (by EnZaXD)
- Fixed an error when creating dumps on Sponge (by EnZaXD)
Also thanks to EnZaXD for lots of aid with 1.20.5, as well as RK_01, DrexHD, and Gerrygames for additional fixes!
If you want to get larger version updates early, consider supporting me via https://viaversion.com/donate. See the [previous update notes](https://github.com/ViaVersion/ViaVersion/releases/tag/4.9.3) for more info.
[a152993](https://github.com/ViaVersion/ViaVersion/commit/a152993) Add UserConnection to item rewriters
Already required for ViaBackwards, later required for ViaVersion as well due to synchronized registry entries in items
[fb434a7](https://github.com/ViaVersion/ViaVersion/commit/fb434a7) Use correct deserialization method in SerializerVersion#toComponent (#3795)
MCStructs has multiple methods for parsing jsons depending on the version, we should use them correctly in our wrapper to support all possible cases of components.
[a99273d](https://github.com/ViaVersion/ViaVersion/commit/a99273d) Always call onMappingDataLoaded in TagRewriter
In case they are needed in the future, so that we don't also have to check whether the different methods are actually called
[fa45f35](https://github.com/ViaVersion/ViaVersion/commit/fa45f35) Handle map related data and skull owners
Co-authored-by: Drex <nicknamedrex@gmail.com>
## Important release schedule change
**Starting 1.20.5, ViaVersion and ViaBackwards will only be released a day or so *after* a Minecraft update** unless the protocol changes of the update were trivial. If you want early-access, usually days or even weeks before the final release, you can subscribe to either:
- [GitHub Sponsors](https://github.com/sponsors/kennytv/sponsorships?sponsor=kennytv&tier_id=385613&preview=false) (preferred option. Use the `/verify` command on this Discord after), or alternatively
- [Patreon](https://www.patreon.com/kennytv/membership) (see the highest tier and make sure to link Patreon to your Discord account under Settings->Connections)
This also includes access to a private repository with the code, which will be pushed to the public repository after the given delay on a Minecraft update.
At the same time however, bug fix patches will be released more regularly, always immediately public, and more of the low-priority issues will be tackled.
Due to the insane pace Mojang has been adding more and more complex technical features since 1.19/1.20, updating ViaVersion and making sure it works well enough has become a lot more time-consuming. Without some extra incentive, I can't really justify putting increasing amounts of free time into these updates, no matter how much I enjoy doing them.
## Changes
- Added sanity checks to item reading across all versions
- Fixed written books in 1.20.2->1.20.3
- Fixed 1.20->1.20.2 tag handling
- Fixed exceptions during client leave on older servers
- Fixed various component conversion issues in multiple versions
- Fixed issues with skins and permanent loading screens on Velocity (by Aeltumn)
Note: Via* on BungeeCord does not work properly at the moment, we recommend using our plugins either on the backend servers or on Velocity instead.
[4e1d4a7](https://github.com/ViaVersion/ViaVersion/commit/4e1d4a7) Small refactors around ProtocolPipeline and concurrent collections
Make concurrency handling in ProtocolPipelineImpl more defensive, as generally the pipeline is expected to never be called from multiple threads. The only case to look out for is pipeline additions during protocol transformation in a base protocol
[5b29ac0](https://github.com/ViaVersion/ViaVersion/commit/5b29ac0) Support config loading from input stream as fallback if URL cannot be acquired (#3647)
[2c9affa](https://github.com/ViaVersion/ViaVersion/commit/2c9affa) Move component conversion into its own class
Remove serialized component type in 1.20.3->1.20.2
[e356a35](https://github.com/ViaVersion/ViaVersion/commit/e356a35) Improve Gradle scripts
Don't create runnable platform jars anymore, since all they really do is increase build time. Also fix texts and Gradle deprecations. Also also publish common with its shadowed configuration, not the plain java components.
[f618cde](https://github.com/ViaVersion/ViaVersion/commit/f618cde) Don't mention Spigot page anymore and move setting to right place in config.yml (#3505)
[c211b10](https://github.com/ViaVersion/ViaVersion/commit/c211b10) Rename NBT and NBT_ARRAY types, add TagType
In theory the nameless compound tag type doesn't exist as it is written as any tag, but in practice is almost always cast and checked for its type, so we keep the extra CompoundTagType (nameless) and add the proper TagType (nameless, any tag) used for components
- Fixes to configuration state handling
- Fixed 1.20->1.20.2 custom potion effects
- Fixed the client's skin layers being disabled on proxied server switches
- Fixed signs not displaying properly for 1.20+ clients on some older versions (by riku6460)
[8a0e187](https://github.com/ViaVersion/ViaVersion/commit/8a0e187) Drop custom payloads with non-alphanumerical brands
For some reason the client errors only if it contains certain characters, needs further investigation. Mojang changed their string writing implementation, though the actual encoding does not seem to have changed, and this error does not occur anywhere else
1.20.2 client support
- Optimize memory allocation for data palette (by Pablete1234)
- Smithing menus in 1.19->1.20 are now mapped to furnaces (by FlorianMichael)
- Added compatibility with Sponge API 10 (by avaruus1)
- Removed 1.9 backwards protocol handling and moved it to ViaBackwards (by FlorianMichael)
- Fixed item display rotation in 1.19->1.20
- Fixed maps with no map ids showing up as empty on 1.17+ (by RaphiMC)
- Fixed handling of null components in more places in 1.18->1.19
- Fixed block place/break event cancellation handling in 1.12->1.13 block connections (by Pablete1234)
- Fixed some 1.8->1.9 movement handling issues (by RaphiMC)
- Configured automated publishing to [Hangar](https://hangar.papermc.io/ViaVersion/ViaVersion) and [Modrinth](https://modrinth.com/plugin/viaversion)
[00625be](https://github.com/ViaVersion/ViaVersion/commit/00625be) Move 1.9 backwards protocols to VB and move Chunk Types to the correct package (#3404)
1.20 client support
* Improved 1.12->1.13 translatable handling
* Fixed >1.18 vibration particle handling
* Fixed 1.12->1.13 redstone blockconnections
* Fixed old expected behavior of entity teleport packets working on the client's entity in 1.19.3->1.19.4 (by RaphiMC)
* Fixed records not stopping in 1.19.3->1.19.4 (by Camotoy)
* Fixed a magical startup error sometimes appearing
* Fixed high CPU usage on Java 8 due to a Java bug (by RaphiMC)