
I was personally quite convinced that the game was already perfect, but it seems that our developers disagree. We are now releasing the first snapshot for Minecraft 1.20.2!
This snapshot brings changes to Diamond Ore generation, the ability to waterlog Barriers, and a change to Villager curing. It also brings a new Experimental Toggle that updates Villager trading, which we are eager to hear your feedback on. As well as a big batch of bug fixes, you will find a whole lot of technical features and changes in this snapshot, including new commands, function macros, persistent command history, network performance improvements, and much more.
Happy mining!
This snapshot introduces a new experimental Feature Toggle that updates the Wandering Trader and Librarian trades. You must turn on this Feature Toggle in the Experiments Menu when creating a new world if you want to test the new trades. You can find more information about Feature Toggles here.
As this is an experiment, we would really appreciate your feedback as work continues and to help us decide on the future direction for Villager trades. Visit this link to share your thoughts!
Before these changes, players could get any village enchantment from any Librarian. A novice Librarian could sell the best enchantment in the game! For some players, this felt too random and made trading feel overpowered when compared to using the Enchanting Table or searching for Enchanted Books in structures.
With the new rules, Librarians from different biomes sell different enchantments, and each village biome has one enchantment that is only sold by master Librarians.
Players will have to work towards getting the best trades instead of relying on random chance. We hope this makes Librarian trading more interesting and skillful, while also revealing some clues about their history of each village type through the enchantments that are sold there.
Some players felt that the Wandering Trader had unfair prices and didn't sell many useful items. We have lowered their prices, added more trades and increased the amounts available. The Wandering Trader will also now buy useful items from players, so it's possible to help them on their journey by giving them supplies even if you don't feel like buying anything.
In this snapshot, we have increased the amount of Diamond Ore found in the deepest parts of the world. Our goal is to make it more rewarding to mine for Diamonds in the Deepslate layers. We want your feedback on this! Please try out your favorite mining technique and let us know how it feels on this feedback site.
log-ips option to server.propertiescommand_history.txt in the game folderNew features have been added to datapacks and resource packs to allow creation of packs that are compatible with multiple versions of game.
supported_formats which describes a range for pack formats that this pack supports16, [16,17], {"min_inclusive": 16, "max_inclusive":assets and data directoriesfoo is applied, the file foo/assets/minecraft/textures/bar.png will replace contents of assets/minecraft/textures/bar.pngAs part of ongoing work towards more data-driven features, the network protocol has been changed to include a new configuration phase.
server.properties#log-ips (default true)false, will prevent player IPs from being included in the log when players join the gameTo improve safety, the game will now also detect symbolic links used inside data- and resource packs.
textures/gui/sprites (automated by Slicer tool)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)widgets/button.png and widgets/button_highlighted.png have been split from widgets.pnggui atlas from the textures/gui/sprites directory.mcmeta files, similar to other atlasesicon/trial_available and realm_status/expires_soon are now animated this waygui atlas can now configure scaling behavior through a new gui section in filesrandomTickSpeed now affects the rate of accumulation of snow and ice the same way it affects crops and other blocks affected by random tickingrandom commandexecute command: execute if functionreturn command: random#A new command for randomizing values and controlling random sequences. The value and roll forms can be used to draw a random value. In the case of roll, the resulting value is also shown in chat for all players.
Syntax:
random value|roll <range> [<sequenceId>]
random reset *|<sequenceId> [<seed>] [<includeWorldSeed>
Parameters:
range: A range of values to randomize between, inclusivelysequenceId: The name of a random sequence to sample or resetseed: A seed to use for the random sequence after resetincludeWorldSeed: A boolean [default: true] specifying whether to include the world seed when seeding the sequenceBy default, all sequences are seeded as 0, true, true. Using * instead of a sequence ID resets all sequences and sets the default parameters.
If no seed is specified, the sequence resets to the default parameters.
Note that random value|roll <range> used without a sequence id is available to non-operator players.
execute if function#A new execute sub-command that runs a function or function tag and matches the return value(s). If a tag is given, all functions run regardless of the results of prior functions. Syntax:
execute if|unless function <function> <continuation>
Parameters:
function: The function or tag to runThe matching of the result value of the function(s) that run:
return command to return a valuereturn run#A new form of the return command is now available, return run. Syntax:
return run <command>
This takes the result value from running the specified command and returns that as the return value of the function. In all other aspects, it works like return with a specified return value.
If the given command fails, the return value is 0.
\ as the last non-whitespace character of a line now allows a command to be continued on the next lineFunctions can now contain macro lines, making them Function Macros.
$ (as the first non-space character) marks a macro line$(variable)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 getpath: An NBT path specificationNotes:
Using a macro means commands must be re-evaulated after variable substitution. This has an extra cost compared to running pre-parsed functions.
Regular commands (non-macro lines) are still pre-parsed. Only commands with variable substitutions in them are parsed when a macro is called and the game will attempt to cache the result of a certain parameter set being used in a call.
This makes repeated calls with the same parameter set cheaper than new calls with different parameters, but an overhead still remains compared to regular functions. Note that only the values references by macro as parameters are included in this cache, so any extra data in the provided compound is ignored.
teleport_duration0 means that updates are applied immediately1 means that the display entity will move from current position to the updated one over one tickgeneric.max_absorptiongeneric.max_absorption acts similar to generic.max_health, but instead of being the upper bound for Health, it is the upper bound for AbsorptionAmountabsorption increases as well as fills the to the max when appliedentity_roar and entity_shake game events have been removed and replaced with entity_action game eventno_knockback damage type tag which causes knockback to not be caused by the damage itselfnon_controlling_rider to represent entities that don't override their vehicles movement controlconcrete_powder block tag for Concrete Powder blockscamel_sand_step_sound_blocks block tag for blocks that produce entity.camel.step_sand soundpack_format field is still required and its format remains unchanged, to allow older game versions to read pack datasupported_formats is present, it must contain the value declared in pack_formatpack.mcmeta and pack.png are ignored in overlay directoriesoverlays have been added to pack metadataentries field, containing a list of overlaysformats - range of supported formatsdirectory - overlay directory (allowed characters: a-z, 0-9, _ and -)"entries": [{"directory":"A", ...}, {"directory":"B", ...}], the game will first look in B, then A and then in the top pack directoryicon/trial_availablerealm_status/expires_soon.mcmetanotification\more.png have been removed.mcmetagui section in .mcmeta contains one scaling field:type: one of: stretch (default), tile, or nine_slicestretch, the sprite will be stretched across the desired spacetile, the sprite will be repeated across the desired space, starting from the top-leftwidth: number of pixels for this sprite to cover on-screen across its widthheight: number of pixels for this sprite to cover on-screen across its heightnine_slice, the sprite will be sliced into 4 corners, 4 edges, and 1 center slice, which will be tiled across the desired spacewidth: number of pixels for this sprite to cover on-screen across its widthheight: number of pixels for this sprite to cover on-screen across its heightborder: the size in pixels that the border slices should cover on-screen, one of:left, , , and generic.max_absorptionbelowName value in display slot argument in scoreboard command to below_namefalseincludeSequenceId: A boolean [default: true] specifying whether to include the sequence ID when seeding the sequencefalse means all sequences will evaluate to the same regardless of which name they havegeneric.max_absorptionAbsorptionAmounttoprightbottom