{{relevant guide|Java Edition guides/Bats and Pots}}
{{Dangerous version|Items stored in decorated pots will be deleted after reloading the world.[{{bug|MC-267185||Decorated pots can delete items when reloading the world|Fixed}}]|type=data-loss|version=release|edition=Java}}{{Infobox version
| title = Minecraft 1.20.3
| image = 1.20.3 banner.jpg
| image2 = Java Edition 1.20.3.png
| edition = Java
| type =
| name = [[Bats and Pots]]
| date = December 5, 2023
| jsonhash = 8e62c81cea68ffd1705f0dc81a52b816b511a651
| clienthash = b178a327a96f2cf1c9f98a45e5588d654a3e4369
| clientmap = be76ecc174ea25580bdc9bf335481a5192d9f3b7
| serverhash = 4fb536bfd4a83d61cdbaf684b8d311e66e7d4c49
| servermap = c1cafe916dd8b58ed1fe0564fc8f786885224e62
| prevparent = 1.20
| prev = 1.20.2
| next = 1.20.4
| nextparent = 1.21
}}
{{relevant guide|Java Edition guides/Bats and Pots}}
'''1.20.3''', the retroactive release of '''[[Bats and Pots]]''',[{{tweet|CornerHardMC|1833203939426373917|"Bats and Pots" and "Armored Paws" are both considered "game drops"|September 9, 2024}}][{{tweet|CornerHardMC|1833211870804857139|"Bats and Pots" and "Armored Paws" are game drops we've had thus far, but they'll vary in size and some may be larger in scope|September 9, 2024}}] is a [[game drop]] for ''[[Java Edition]]'' released on December 5, 2023.[{{Mcnet|minecraft-java-edition-1-20-3|Minecraft Java Edition 1.20.3|December 5, 2023}}] It improves [[shield]]s, adds new functionality for [[decorated pot]]s, changes the appearance of bats, adds the {{cmd|tick}} command, changes chat component serialization, and fixes bugs, alongside an experimental toggle for features that would later be included in [[Java Edition 1.21|Tricky Trials]].[{{snap|23w40a|October 4, 2023}}][{{snap|23w41a|October 11, 2023}}]
== Additions ==
=== Command format ===
; {{cmd|tick}}
* A new administrative and debugging command which allows the player to control the ticking flow and measure the performance of the game.
** Requires elevated permissions (admins and above), and so it is not by default available in [[command block]]s and [[data pack]]s.
** Syntaxes:
*** {{cmd|link=none|tick query}}
**** Outputs the current target ticking rate, with information about the tick times performance.
*** {{cmd|link=none|tick rate }}
**** Sets a custom target ticking rate to the specified value. The value rate
must be greater than 1.0
and lower than 10000.0
.
*** {{cmd|link=none|tick freeze}}
**** Freezes all gameplay elements, except for [[player]]s and any [[entity]] a player is [[riding]].
*** {{cmd|link=none|tick step }}
**** Only works when the game is frozen. It runs the game for the specified number of ticks and then freezes the game again.This allows to step through the game a set amount of ticks at a time.
**** The parameter is optional. The default value is 1
.
*** {{cmd|link=none|tick step stop}}
**** Stops the current stepping process, and re-freezes the game.
*** {{cmd|link=none|tick unfreeze}}
**** Unfreezes the game and resumes all gameplay elements.
*** {{cmd|link=none|tick sprint }}
**** Runs the game while ignoring the set ticking target rate for the specified number of ticks. At the end of the sprint, the game resumes the previous ticking target and displays performance information about the tick times while sprinting.
*** {{cmd|link=none|tick sprint stop}}
**** Stops the current {{cmd|link=none|tick sprint}}, and resumes the previous ticking target.
=== General ===
; [[Experiments]]
* Added the "[[Java Edition 1.21|Update 1.21]]" experimental toggle (update_1_21
data pack).
; [[Game rule]]
* Added maxCommandForkCount
, to control the maximum number of forks (contexts) that can be created during one tick. Applies to command blocks and functions. Defaults to 65536
.
* Added playersNetherPortalDefaultDelay
, to control time (in [[game tick]]s) that a player needs to stand in a [[nether portal]] before changing dimensions, while in Survival and Adventure mode. Defaults to 80
.
* Added playersNetherPortalCreativeDelay
, to control time (in game ticks) that a player needs to stand in a nether portal before changing dimensions, while in Creative mode. Defaults to 1
.
* Added projectilesCanBreakBlocks
, to control whether impact projectiles destroy blocks that are destructible by them (i.e. [[chorus flower]]s, [[pointed dripstone]] and [[decorated pot]]s). Defaults to true
.
; [[Loading screen]]
* Added a new screen for handling corrupted level files.
** It gives the player the option to restore a backup, and a quick link to the bug tracker for reporting a bug about it.
; [[Options]]
* Added "Hide Splash Texts" in accessibility options, which allows the [[splash]] in the main menu to be hidden.
; [[options.txt|{{mono|options.txt}}]]
* Added hideSplashTexts
, defaults to false
.
; [[Particles]]
* Added new dust_plume
, gust
, gust_dust
, trial_spawner_detection
and white_smoke
particle types.
; [[Tag]]s
* Added following damage type tag:
** {{cd|#can_break_armor_stand}}: contains {{cd|d=and|player_attack|player_explosion}}.
*** Used for damage types that can incrementally knock down armor stands.
* Added following entity tags:
** {{cd|#can_breathe_under_water}}: contains {{cd|d=and|#undead|axolotl|frog|guardian|elder_guardian|turtle|glow_squid|cod|pufferfish|salmon|squid|tropical_fish|tadpole|armor_stand}}.
*** Used to disable drowning.
** {{cd|#undead}}: contains {{cd|d=and|#skeletons|#zombies|wither|phantom}}.
** {{cd|#zombies}}: contains {{cd|d=and|zombie_horse|zombie|zombie_villager|zombified_piglin|zoglin|drowned|husk}}.
== Changes ==
=== Blocks ===
; [[Decorated pot]]
* Now can store up to a single stack of items.
** [[Hopper]]s, [[minecart with hopper]]s and [[dropper]]s can now insert and/or extract items from them.
** [[Comparator]]s can now read the number of items in them.
** [[Player]]s can interact with them and insert items into them.
*** Player interactions with them cause them to wobble and trigger a vibration frequency of 11.
** They have no GUI, and need to be broken to retrieve their content by players.
* Now can be smashed by projectiles, which cause them to shatter and drop their contents.
* Now has new sounds for breaking, shattering and being stepped on.
* Now can stack up to 64.
* Now appears in the "Redstone" tab of the [[Creative inventory]].
* Now, when blockstate cracked
set to true
, decorated pots always shatter when broken.
* Now can utilize loot tables and read from the LootTable
tag key.
; [[Grass]]
* Renamed "Grass" to "Short Grass".
* The ID has been changed from {{cd|grass}} to {{cd|short_grass}}.
; [[Jigsaw block]]
* Added two new input fields in the edit screen.
** Selection priority
*** When the parent piece is being processed for connections, this controls the order in which this jigsaw block attempts to connect to its target piece.
*** Jigsaws are processed in descending priority order and randomly within the same priority.
** Placement priority
*** When this jigsaw block connects to a piece, this is the order in which that piece is processed for connections in the wider structure.
*** Pieces are processed in descending priority order with the default insertion order breaking ties within the same priority.
** This functionality has been added to support the ability for jigsaw structures to generate branches in a depth-first order, as well as give finer control over ordering of connections.
** All existing jigsaw blocks default their selection and placement priority to 0, resulting in the same behavior as before these two configurable values were introduced.
* Increased maximum value of structure variable size
from 7 to 20.
; [[Monster spawner]]
* Now renders their inner faces when looking inside.
=== Items ===
; [[Arrow]]s
* Now keep their CustomName
after being shot and picked up.
* Special arrows, such as [[spectral arrow]]s, no longer revert to regular arrows when shot and picked up.
; [[Ender pearl]]
* Thrown ender pearls produce a teleportation sound on impact.
; [[Shield]]
* When a player is blocking with a shield, the arm with the shield now follows the direction the player is looking at, when viewed from third person perspective.
* Now blocks damage while the player faces straight up.
=== Mobs ===
; [[Bat]]
* Their model, animations, and texture have been updated.
=== Non-mob entities ===
; General
* The name of them is now shown if looked at and a CustomName
is set, or always displayed if CustomNameVisible
is set, similar to living entities.
=== Command format ===
; [[Function (Java Edition)|Function]]
* {{cmd|function}} command has been changed to better accommodate new {{cmd|return}} command.
* Functions no longer have any result unless they use {{cmd|link=none|return}} or there was an error during lookup or instantiation.
** That means {{cmd|link=none|function}} command no longer returns (or even displays) the number of commands run during execution.
** Error conditions:
*** Calling non-existent function.
*** Calling empty function tag.
*** Macro instantiation failure.
* "Result" in this context means values that would be stored with {{cmd|execute store}}.
* The previous behavior where every command in a function would perform store if a function was called with {{cmd|link=none|execute store ... run ''function''}} is removed.
** That means that a single call to ''function''
stores at most once (zero times if {{cmd|link=none|return}} was not called).
** For function tags with multiple entries, function results are accumulated, but partial results are stored at the end of every function.
* Existing limits for functions have been refined to accommodate new execution rules and prevent a wider range of exploits:
** Limits apply even if run from command line (so it now always behaves as if they were placed in a function).
*** For example, all functions called by {{cmd|link=none|execute as @e run ''function''}} count towards the same limit.
*** Executions from command blocks still count as separate ones.
** Limit maxCommandChainLength
for functions now counts "operations" like:
*** Execution of command for a single context.
*** Execution of a stage in {{cmd|link=none|execute}} (no matter how many contexts were modified).
*** Invocation of function.
** A new limit with game rule maxCommandForkCount
now restricts the total amount of context that can be created by single state of functions like {{cmd|link=none|execute}}.
*** Example: if there are 5 entities in world, {{cmd|link=none|execute as @e}} creates 5 contexts, while {{cmd|link=none|execute as @e at @e}} creates 5*5 = 25 contexts.
; {{cmd|execute}}
* Re-added (if|unless) function
subcommand.
** 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: {{cmd|link=none|execute (if{{!}}unless) function -> [''execute'']}}
** Arguments:
*** function
: The function or tag to run.
** The matching of the result value of the function(s) that run:
*** At least one of the functions must succeed for the match to succeed.
*** A successful call is defined as a function that:
**** Uses the {{cmd|link=none|return}} command to return a value.
**** The return value is not 0.
*** If no functions exited with {{cmd|link=none|return}}, neither if
nor unless
runs.
** It doesn't always fail if all functions had no return.
*** If there were no {{cmd|link=none|return}}s in called functions, if
fails and unless
passes.
*** First {{cmd|link=none|return}} in any of called functions returns (for a single context).
; {{cmd|function}}
* If {{cmd|link=none|function ''''}} runs multiple functions in combination with {{cmd|link=none|return run}}, execution stops after first {{cmd|link=none|return}} in any of the functions.
* A single call to the {{cmd|link=none|function}} command will always have return when run with {{cmd|link=none|return run}}.
** For example, {{cmd|link=none|return run execute ''[split context]'' run function ''''}} always returns after processing the first context.
; {{cmd|return}}
* Re-added run
subcommand: {{cmd|link=none|return run }}.
** This takes the result value from running the specified command
and returns that as the return value of the function.
*** If command did not return any value (like, for example, call to a function without {{cmd|link=none|return}}), {{cmd|link=none|return}} does not execute and function continues execution.
*** If the given command fails, the return value is 0
.
*** In all other aspects, it works like {{cmd|link=none|return}} with a specified return
value.
*** In case of fork (for example {{cmd|link=none|return run execute as @e run ''some_command''}}), the first execution of the command returns.
**** If there are no executions (for example in {{cmd|link=none|return run execute if @e[''something_impossible''] run ''some_command''}}), function does not return and continues execution.
** It always returns.
*** If there are no valid results from returned command, function containing {{cmd|link=none|return run}} fails (i.e. success=0
and result=0
).
** It propagates success value together with results value.
** It also allows storing values, which means {{cmd|link=none|execute store ... run return run ''some_command''}} both stores value and returns it outside function.
* Added new subcommand {{cmd|link=none|return fail}}, to make whole function fail (i.e. return success=0
and result=0
).
; {{cmd|scoreboard}}
* New subcommands for changing the display of specific scoreboard entries in the sidebar:
** {{cmd|link=none|scoreboard objectives modify displayautoupdate (true{{!}}false)}}
*** Determines whether the objective should automatically update on every score update (disabled by default)
** {{cmd|link=none|scoreboard players display name }}
*** Changes the display name of the given scoreboard entries.
** {{cmd|link=none|scoreboard players display name }}
*** Resets the display name of the given scoreboard entries to their default.
** {{cmd|link=none|scoreboard players display numberformat }}
*** Changes the number format of the given scoreboard entries (see below for more information).
** {{cmd|link=none|scoreboard players display numberformat }}
*** Resets the number format of the given scoreboard entries.
** {{cmd|link=none|scoreboard objectives modify numberformat }}
*** Changes the default number format of the given objective (see below for more information).
** {{cmd|link=none|scoreboard objectives modify numberformat}}
*** Resets the default number format of the given objective.
* Number formats:
** {{cd|styled