Minecraft Snapshot Changes featured

All Minecraft Snapshot 23W31A Changes Listed

Trade changes ahead!

While Bedrock is considered the “main’ Minecraft version nowadays, it doesn’t mean that Java can’t get a few goodies here and there. The experimental 23W31A Snapshot for Minecraft Java brings a few important changes to how Wandering Traders, Villagers and Librarians work, removing certain early-game exploits in the process. Take a look at them below.

Recommended Videos

Villagers and Librarians Changes in Minecraft Snapshot 23W31A

These changes are not officially in the main game yet and are only applied if you launch the most recent Java Snapshot version through your Minecraft Launcher. You also have to turn these features on when creating a new world to experience the changes. They will later roll into the Bedrock Beta and, eventually, find their way into the 1.20.2 version when it’s finally released.

Now players have to find a Librarian in a specific Biome if they want to get a certain Enchantment out of them. Some powerful Enchantments require finding a Master Librarian instead of a mere novice. You can build a new village in your desired Biome to increase your chances, but that’s a lot of extra work compared to before.

Minecraft Snapshot Changes Librarian
Image via Mojang

On the other side, the Wandering Trader now has a wider asset of items in his stock (like Logs and pickaxes) and will also buy certain items from the player, making it a way more interesting choice from now on. 

Minecraft Snapshot Changes Wandering Trader
Image via Mojang

Related: How to Enable Chunk Borders in Minecraft Bedrock Edition

Another trade-related change is that if you heal a zombie Villager, it will only provide a big discount on its shop once. Turning it back into a zombie and healing again won’t make the discount come back, so it’s a one-time wonder now.

As for another non-related but important change, Diamonds are now easier to find in the Deepslate regions! They’re still a rare sight nonetheless, but reaching the depths should be slightly more rewarding now.

All Changes in the Minecraft Snapshot 23W31A Snapshot 

Here’s a complete list with all of the changes if you want to see them yourself. There are tons of technical changes down the line, but the most important ones are shown right off the bat.

Librarian Changes

  • Librarians from different biomes now sell different Enchanted Books
  • Each village biome has one special enchantment that is only available from Master Librarians with full XP
  • This means that players must visit all seven village biomes to get the full set of villager enchantments
  • There are two secret village biomes where villages do not generate
    • A player must build these villages to access their trades!
  • Some enchantments have been removed from village trading and must be found in other ways

Wandering Trader Changes

  • Wandering Traders now have lower prices and have a higher amount of each item in stock
  • Wandering Traders now sell Logs
  • Wandering Traders can now buy many items, instead of only selling


  • Diamond Ore is now generated more frequently in the Deepslate layers of the Overworld
  • Curing a Zombie Villager now only gives a big discount the first time
    • There is no longer a bonus discount for reinfecting and curing the same Villager multiple times
  • Barrier blocks can now be waterlogged by players in Creative mode
    • Water cannot be placed in them or taken out by non-direct interactions such as Dispensers
  • Players will no longer be able to crouch while riding vehicles
  • Chorus Flower no longer provides support for hanging or standing blocks

Technical Changes

  • The resource pack version is now 16
  • The data pack version is now 16
  • History of used commands is now saved and accessible across worlds
  • Optimized the way chunks are sent to clients to allow players with low-bandwidth internet connections to play on multiplayer servers
  • Added support for multi-version packs
  • Changed network protocol to allow for more data-driven content in the future
  • Added new log-ips option to server.properties
  • Added validation for symbolic links in datapacks and resource packs
  • When hitboxes are displayed through F3+B, entities that have a passenger will display the passenger’s attachment point

Command History

  • The last 50 commands that you sent in chat will be remembered across game sessions
  • You can access the command and chat history by pressing up or down arrows in the chat
  • Regular chat is only persisted within the same game session (leaving a server or world clears them)
  • Recent commands are stored in command_history.txt in the game folder

Chunk Sending Optimization

  • Chunks are no longer sent over the network to the client in one big continuous batch
  • They are instead sent in smaller batches depending on the available bandwidth. This means that:
    • Clients with extremely low-bandwidth connections will not time out while loading the world
    • Clients with low-bandwidth connections can interact with the world while some chunks are still loading
  • Only chunks within the client’s render distance are now sent

Multi-version Packs

New features have been added to datapacks and resource packs to allow creation of packs that are compatible with multiple versions of game.

Pack Metadata

  • Pack metadata now includes an optional field supported_formats which describes a range for pack formats that this pack supports
    • Examples: 16, [16,17], {“min_inclusive”: 16, “max_inclusive”: 17}
  • pack_format field is still required and its format remains unchanged, to allow older game versions to read pack data
    • If supported_formats is present, it must contain the value declared in pack_format
    • Note: since this new information is ignored by older versions of the game, they will always see a “normal”, single-version pack, without any extended compatibility


  • Packs can now contain overlay directories (“overlays”)
  • Overlays are sub-packs applied over the “normal” contents of a pack
    • These directories have the same layout as the top-level pack, including the assets and data directories
    • Overlays can be applied if they support the client’s pack format
    • Overlays can add and replace files, but not remove them
      • For example, if the overlay foo is applied, the file foo/assets/minecraft/textures/bar.png will replace contents of assets/minecraft/textures/bar.png
    • pack.mcmeta and pack.png are ignored in overlay directories
  • New section called overlays have been added to pack metadata
    • It contains an entries field, containing a list of overlays
    • Every overlay entry has two fields:
      • formats – range of supported formats
      • directory – overlay directory (allowed characters: a-z, 0-9, _ and -)
  • Order of application: overlays are stacked from the bottom to top of the list
    • For example, if a pack has two overlays: “entries”: [{“directory”:”A”, …}, {“directory”:”B”, …}], the game will first look in B, then A and then in the top pack directory

Network Protocol

As part of ongoing work towards more data-driven features, the network protocol has been changed to include a new configuration phase.

  • Configuration phase automatically starts after login phase (i.e. after client account has been verified) and lasts until the player joins the world (play phase)
  • Clients can stay in configuration phase indefinitely – it’s up to server to release it to the world
  • Servers can also request clients to re-enter the configuration phase after it has entered the play phase
    • Other players will see such clients as disconnected
  • Users in configuration phase will not be visible on the player list
  • Actions allowed in configuration phase (moved from play phase)
    • Configuration of data-driven registries
    • Configuration of enabled features
  • Actions shared between configuration and play phases:
    • Application of server resource packs
    • Update of tags
    • Exchange of custom packets
    • Ping and keep-alive packets
  • The server will now negotiate resource pack in the configuration phase
    • This means that the player will no longer be in world when answering prompts and reloading resources


  • New option: log-ips (default true)
    • When set to false, will prevent player IPs from being included in the log when players join the game

Symbolic Link Validation

To improve safety, the game will now also detect symbolic links used inside data- and resource packs.

  • This feature expands on symbolic link validation in worlds added in the previous release
  • The game will now warn users if a pack added via drag and drop contains disallowed symbolic links
  • Packs containing disallowed symbolic links will not be visible in UI and commands
  • Additionally, directories and files that are not recognized as packs will no longer be copied via drag and drop
  • For a detailed explanation, see this help article


  • Added a button to the Telemetry Data Collection Screen that links to the Microsoft Privacy Statement

Resource Pack Version 16

  • The process of upgrading your pack can be assisted by using this automated Slicer tool
  • All textures containing multiple sprites in a sheet for GUI have been split into individual sprites under textures/gui/sprites (automated by Slicer tool)
  • All textures in the realms namespace have been moved into the minecraft namespace (automated by Slicer tool)
  • villager2.png has been renamed to villager.png (automated by Slicer tool)
  • icon/trial_available and realm_status/expires_soon GUI sprites are animated with .mcmeta declarations instead of individual sprites (automated by Slicer tool)
  • The bundle tooltip background is now drawn as a nine-sliced sprite
  • The icons for the Accessibility, Language, Realms News buttons have been split from their underlying button texture
  • The Realms Invite button is now drawn as an overlay on the normal button texture
    • The highlighted texture state for this button has been removed
  • The highlighted states for Realms invitation number icons have been removed
  • The exclamation marks on the notification\more.png have been removed

GUI Sprite Sheet

  • Sprites used in GUI drawing have been split into individual sprite files instead of larger sprite sheets
    • For example, widgets/button.png and widgets/button_highlighted.png have been split from widgets.png
  • Each sprite can now be individually overriden by a resource pack instead of replacing the entire sheet
  • Sprites are loaded into the gui atlas from the textures/gui/sprites directory

GUI Sprite .mcmeta

  • Any sprite can now be animated using .mcmeta files, similar to other atlases
    • icon/trial_available and realm_status/expires_soon are now animated this way
  • Sprites in the gui atlas can now configure scaling behavior through a new gui section in .mcmeta files
    • For example, button textures must be scaled based on how big the button should be
    • The gui section in .mcmeta contains one scaling field:
      • type: one of: stretch (default), tile, or nine_slice
      • When stretch, the sprite will be stretched across the desired space
        • No additional fields need to be defined
      • When tile, the sprite will be repeated across the desired space, starting from the top-left
        • width: number of pixels for this sprite to cover on-screen across its width
        • height: number of pixels for this sprite to cover on-screen across its height
      • When nine_slice, the sprite will be sliced into 4 corners, 4 edges, and 1 center slice, which will be tiled across the desired space
        • width: number of pixels for this sprite to cover on-screen across its width
        • height: number of pixels for this sprite to cover on-screen across its height
        • border: the size in pixels that the border slices should cover on-screen, one of:
          • Constant integer for uniform border size on all sides
          • Object containing left, top, right, and bottom

Data Pack Version 16

  • Gamerule randomTickSpeed now affects the rate of accumulation of snow and ice the same way it affects crops and other blocks affected by random ticking
  • Added a random command
  • New form of the execute command: execute if function
  • New form of the return command: return run
  • Added support for function macros
  • Changed Display entities post-teleport interpolation
  • Added new attribute generic.max_absorption
  • Renamed belowName value in display slot argument in scoreboard command to below_name
  • Game event changes
  • New tags

The matching of the result value of the function(s) that run:

  • At least one of the functions must succeeed for the match to succeed
  • A succeessful call is defined as a function that:
    • Uses the return command to return a value
    • The return value is not 0


  • A single backslash \ as the last non-whitespace character of a line now allows a command to be continued on the next line
    • Leading and trailing whitespace of the following line are stripped before appending


Functions can now contain macro lines, making them Function Macros.

  • Any line beginning with $ (as the first non-space character) marks a macro line
  • A macro line also contains one or more substitutions in the form of $(variable)
  • When calling a function macro a compound with data for all argument variables must be provided
Calling Function Macros

The function command has new forms:

function <id> <compound>

function <id> with <data source> [<path>]

New Arguments:

  • compound: A data compound, enclosed in {}
  • data source: A data source specification, like what could already be used for data get
  • path: An NBT path specification


  • The data source and path must specify a compound data entry
  • The compound must contain one entry for each variable used in the macro
  • More data may be present in the compound and if so is ignored
  • Calling a non-macro function with a data compound is silently ignored
  • When a macro is called, the values provided are substituted in place of the variable specifications and the resulting commands are executed
  • Any syntax errors in the lines resulting from variable substitution result in the entire function call being skipped

And those are all the changes applied in this Snapshot! They won’t be implemented in the main servers for a while as we don’t have any date for the next update yet, but there’s definitely a lot of fun stuff to do in the game currently. It has a long history of great updates, after all.

Prima Games is supported by our audience. When you purchase through links on our site, we may earn a small affiliate commission. Learn more about our Affiliate Policy
Image of Patrick Souza
Patrick Souza
Patrick has been working for Prima since 2022 and joined as a Staff Writer in 2023. He's been interested in gaming journalism since college, and that was the path he took once he had his degree in hands. Diligently ignores his ever-growing backlog to keep raiding in Final Fantasy XIV, exploring in Genshin Impact or replaying some of his favorite RPGs from time to time. Loves tackling hard challenges in games, but his cats are still the hardest bosses he could ask for.