User:ManosSef/Sandbox/Fake Minecraft Info/Java Edition 1.20/Technical

In 1.20, damage types are data-driven, which means that data packs can edit existing ones or add more.

Namespaced format
Damage types have now been made namespaced. This means that their ID's are now written in. As a result, these changes happened:

File hierarchy
This is the default file hierarchy for damage types in data packs.
 * data
 * minecraft
 * damage_types
 * cactus.json
 * drown.json
 * fly_into_wall.json
 * explosion.json
 * short_fall.json
 * stalagmite.json
 * anvil.json
 * falling_block.json
 * falling_stalactite.json
 * in_fire.json
 * on_fire.json
 * lava.json
 * lightning_bolt.json
 * hot_floor.json
 * magic.json
 * starve.json
 * in_wall.json
 * cramming.json
 * sweet_berry_bush.json
 * out_of_world.json
 * wither.json
 * dragon_breath.json
 * dryout.json
 * freeze.json
 * generic.json
 * bad_respawn_point.json
 * long_fall.json
 * player.json
 * mob.json
 * indirect_mob.json
 * arrow.json
 * fireball.json
 * thrown.json
 * explosion.player.json
 * fireworks.json
 * indirect_magic.json
 * sting.json
 * wither_skull.json
 * thorns.json
 * trident.json

File format

 * The root tag.
 * : The type of damage type. Can be for environmental damage,  for damage only caused by players,  for damage caused by players or mobs,  for damage caused by players or mobs using a projectile or any other intervening entity,  for damage using the fall damage system,  for damage imitating the bad respawn point damage type, or  for a custom damage type.
 * : What the damage source predicate should return for this damage type. Each tag listed below must be specified if "true" is intended, and can be omitted if "false" is intended.
 * Other tags (see below)
 * Other tags (see below)
 * Other tags (see below)
 * Other tags (see below)
 * Other tags (see below)
 * Other tags (see below)
 * Other tags (see below)
 * Other tags (see below)
 * Other tags (see below)

The rest of the tags are determined by the type.
 * minecraft:environment
 * : Settings for player or mob checking.
 * : Whether player or mob checking is enabled.
 * : If the player check succeeds, whether renamed item checking is enabled. Ignored if "value" is false.
 * minecraft:player
 * : Whether item checking is enabled.
 * minecraft:entity
 * : Whether item checking is enabled.
 * minecraft:indirect_entity
 * : Whether item checking is enabled.
 * : What happens if the intervening entity does not have an owner.
 * : The action to perform when no player or mob caused the damage. Can be to set the  variable to the projectile or  to simulate another damage type.
 * : The damage type to simulate. Must exist if "action" is set to, and ignored if not. Note that if the simulated damage type is an indirect entity damage type, the has to set the player/mob variable to the projectile, because simulating another damage subtype is pointless.
 * minecraft:long_fall
 * No tags
 * minecraft:bad_respawn_point
 * No tags
 * minecraft:custom
 * : All command arguments to check for translation variables or variants of death messages.
 * : An argument. is its name, which should only contain lowercase letters, numbers, underscores and hyphens.
 * : A valid argument type.
 * : Whether this argument is not needed to be specified. If false, this argument is needed for the basic death message. If true, setting this argument results in a variant of the death message.
 * : If "optional" is false, not specifying this argument sets the argument to the value of this tag. If this tag is nonexistent, the argument must be specified. Must not exist if "optional" is true.
 * : What should be appended to the raw translation string of the death message to make it a variant of it, if the argument is specified. Must not exist if "optional" is false. Can be "name" to set it to the of the argument or "value" to set it to its value.
 * : The properties to be applied to this argument. The contents of this tag depend on "type".
 * For type "brigadier:integer", "brigadier:long", "brigadier:float", "brigadier:double":
 * : The minimum value.
 * : The maximum value.
 * For type "brigadier:string":
 * : The type of this string argument. Can be, , or.
 * : All possible values. If not present then everything is a possible value.
 * For type "minecraft:entity":
 * : The amount of entities that can be selected. Can be or.
 * : The target entity type. Can be or.
 * For type "minecraft:resource_location":
 * : The type of registry.
 * For type "minecraft:score_holder":
 * : The amount of score holders that can be selected. Can be or.