Mining levels are used by blocks to determine the strength of the tools required to successfully harvest them.
+ *
All tool materials have an assigned mining level. If a tool's mining level is equal to or greater than the block's,
+ * the tool will apply its efficiency bonus and the block will drop its loot table.
+ *
Blocks without mining levels, or items that aren't tools, use {@link MiningLevels#HAND}.
+ *
+ * @see net.minecraft.item.ToolMaterial#getMiningLevel() ToolMaterial#getMiningLevel
+ */
+public final class MiningLevels {
+ /**
+ * Blocks with this level do not require a tool to harvest.
+ *
This is the default level for blocks and items.
+ */
+ public static final int HAND = -1;
+
+ /**
+ * Blocks with this level require a Wooden tool or better to harvest.
+ *
In addition to Wooden Tools, Golden Tools also use this level.
+ */
+ public static final int WOOD = 0;
+
+ /**
+ * Blocks with this level require a Stone tool or better to harvest.
+ */
+ public static final int STONE = 1;
+
+ /**
+ * Blocks with this level require an Iron tool or better to harvest.
+ */
+ public static final int IRON = 2;
+
+ /**
+ * Blocks with this level require a Diamond tool or better to harvest.
+ */
+ public static final int DIAMOND = 3;
+
+ /**
+ * Blocks with this level require a Netherite tool or better to harvest.
+ */
+ public static final int NETHERITE = 4;
+
+ private MiningLevels() {
+ }
+}
diff --git a/src/main/kotlin/net/fabricmc/yarn/constants/ParrotVariants.java b/src/main/kotlin/net/fabricmc/yarn/constants/ParrotVariants.java
new file mode 100644
index 0000000..c1341f9
--- /dev/null
+++ b/src/main/kotlin/net/fabricmc/yarn/constants/ParrotVariants.java
@@ -0,0 +1,16 @@
+/*
+ * This file is free for everyone to use under the Creative Commons Zero license.
+ */
+
+package net.fabricmc.yarn.constants;
+
+public final class ParrotVariants {
+ public static final int RED_AND_BLUE = 0;
+ public static final int BLUE = 1;
+ public static final int GREEN = 2;
+ public static final int YELLOW_AND_BLUE = 3;
+ public static final int GRAY = 4;
+
+ private ParrotVariants() {
+ }
+}
diff --git a/src/main/kotlin/net/fabricmc/yarn/constants/RabbitTypes.java b/src/main/kotlin/net/fabricmc/yarn/constants/RabbitTypes.java
new file mode 100644
index 0000000..580c09d
--- /dev/null
+++ b/src/main/kotlin/net/fabricmc/yarn/constants/RabbitTypes.java
@@ -0,0 +1,18 @@
+/*
+ * This file is free for everyone to use under the Creative Commons Zero license.
+ */
+
+package net.fabricmc.yarn.constants;
+
+public final class RabbitTypes {
+ public static final int BROWN = 0;
+ public static final int ALBINO = 1;
+ public static final int BLACK = 2;
+ public static final int SPOTTED = 3;
+ public static final int GOLDEN = 4;
+ public static final int SALT_AND_PEPPER = 5;
+ public static final int KILLER_BUNNY = 99;
+
+ private RabbitTypes() {
+ }
+}
diff --git a/src/main/resources/entities_metadata_mappings.json b/src/main/resources/entities_metadata_mappings.json
index af98a4d..d9695f6 100644
--- a/src/main/resources/entities_metadata_mappings.json
+++ b/src/main/resources/entities_metadata_mappings.json
@@ -8,7 +8,7 @@
"SILENT": "ENTITY_SILENT",
"NO_GRAVITY": "ENTITY_NO_GRAVITY",
"POSE": "ENTITY_POSE",
- "DATA_TICKS_FROZEN": "ENTITY_TICKS_FROZEN"
+ "FROZEN_TICKS": "ENTITY_TICKS_FROZEN"
}
},
"LivingEntity": {
@@ -18,7 +18,7 @@
"POTION_SWIRLS_COLOR": "LIVING_ENTITY_EFFECT_COLOR",
"POTION_SWIRLS_AMBIENT": "LIVING_ENTITY_EFFECT_AMBIENCE",
"STUCK_ARROW_COUNT": "LIVING_ENTITY_ARROW_COUNT",
- "DATA_STINGER_COUNT_ID": "LIVING_ENTITY_ABSORPTION_HEARTS",
+ "STINGER_COUNT": "LIVING_ENTITY_ABSORPTION_HEARTS",
"SLEEPING_POSITION": "LIVING_ENTITY_BED_POSITION"
}
},
@@ -30,6 +30,7 @@
"ZombieEntity": {
"data": {
"BABY": "ZOMBIE_IS_BABY",
+ "ZOMBIE_TYPE": "ZOMBIE_SPECIAL_TYPE",
"field_7427": "ZOMBIE_SPECIAL_TYPE",
"CONVERTING_IN_WATER": "ZOMBIE_DROWNING_CONVERSION"
}
@@ -73,6 +74,12 @@
"BLOCK_POS": "FALLING_BLOCK_SPAWN_POSITION"
}
},
+ "PersistentProjectileEntity": {
+ "data": {
+ "PROJECTILE_FLAGS": "ABSTRACT_ARROW_FLAGS",
+ "PIERCE_LEVEL": "ABSTRACT_ARROW_PIERCE_LEVEL"
+ }
+ },
"ProjectileEntity": {
"data": {
"PROJECTILE_FLAGS": "ABSTRACT_ARROW_FLAGS",
@@ -83,12 +90,14 @@
"FishingBobberEntity": {
"data": {
"HOOK_ENTITY_ID": "FISHING_HOOK_HOOKED_ENTITY",
- "DATA_BITING": "FISHING_HOOK_CATCHABLE"
+ "DATA_BITING": "FISHING_HOOK_CATCHABLE",
+ "CAUGHT_FISH": "FISHING_HOOK_CATCHABLE"
}
},
"TridentEntity": {
"data": {
"LOYALTY": "THROWN_TRIDENT_LOYALTY_LEVEL",
+ "ENCHANTED": "THROWN_TRIDENT_FOIL",
"ID_FOIL": "THROWN_TRIDENT_FOIL"
}
},
@@ -109,6 +118,12 @@
"SHOW_BOTTOM": "END_CRYSTAL_SHOW_BOTTOM"
}
},
+ "EndCrystalEntity": {
+ "data": {
+ "BEAM_TARGET": "END_CRYSTAL_BEAM_TARGET",
+ "SHOW_BOTTOM": "END_CRYSTAL_SHOW_BOTTOM"
+ }
+ },
"WitherSkullEntity": {
"data": {
"CHARGED": "WITHER_SKULL_DANGEROUS"
@@ -121,6 +136,13 @@
"SHOT_AT_ANGLE": "FIREWORK_ROCKET_ENTITY_SHOT_AT_ANGLE"
}
},
+ "FireworkRocketEntity": {
+ "data": {
+ "ITEM": "FIREWORK_ROCKET_ENTITY_ITEM",
+ "SHOOTER_ENTITY_ID": "FIREWORK_ROCKET_ENTITY_ATTACHED_ENTITY",
+ "SHOT_AT_ANGLE": "FIREWORK_ROCKET_ENTITY_SHOT_AT_ANGLE"
+ }
+ },
"ItemFrameEntity": {
"data": {
"ITEM_STACK": "ITEM_FRAME_ITEM",
@@ -183,8 +205,10 @@
"LlamaEntity": {
"data": {
"ATTR_STRENGTH": "LLAMA_STRENGTH",
+ "STRENGTH": "LLAMA_STRENGTH",
"CARPET_COLOR": "LLAMA_CARPET_COLOR",
- "ATTR_VARIANT": "LLAMA_VARIANT"
+ "ATTR_VARIANT": "LLAMA_VARIANT",
+ "VARIANT": "LLAMA_VARIANT"
}
},
"CatEntity": {
@@ -236,12 +260,14 @@
},
"ParrotEntity": {
"data": {
- "ATTR_VARIANT": "PARROT_VARIANT"
+ "ATTR_VARIANT": "PARROT_VARIANT",
+ "VARIANT": "PARROT_VARIANT"
}
},
"PigEntity": {
"data": {
"SADDLED": "PIG_HAS_SADDLE",
+ "BOOST_TIME": "PIG_BOOST_TIME",
"field_6815": "PIG_BOOST_TIME"
}
},
@@ -290,6 +316,7 @@
"BEGGING": "WOLF_IS_BEGGING",
"COLLAR_COLOR": "WOLF_COLLAR_COLOR",
"DATA_REMAINING_ANGER_TIME": "WOLF_ANGER_TIME",
+ "ANGER_TIME": "WOLF_ANGER_TIME",
"WOLF_HEALTH": "WOLF_HEALTH"
}
},
@@ -328,7 +355,7 @@
"data": {
"CARRIED_BLOCK": "ENDERMAN_CARRIED_BLOCK",
"ANGRY": "ENDERMAN_IS_SCREAMING",
- "DATA_STARED_AT": "ENDERMAN_IS_STARRING"
+ "PROVOKED": "ENDERMAN_IS_STARRING"
}
},
"SpellcastingIllagerEntity": {
@@ -396,6 +423,11 @@
"HEAD_ROLLING_TIME_LEFT": "ABSTRACT_VILLAGER_UNHAPPY_TIMER"
}
},
+ "MerchantEntity": {
+ "data": {
+ "HEAD_ROLLING_TIME_LEFT": "ABSTRACT_VILLAGER_UNHAPPY_TIMER"
+ }
+ },
"VillagerEntity": {
"data": {
"VILLAGER_DATA": "VILLAGER_VILLAGER_DATA"
@@ -406,6 +438,11 @@
"ITEM": "THROWN_EYE_OF_ENDER_ITEM"
}
},
+ "EyeOfEnderEntity": {
+ "data": {
+ "ITEM": "THROWN_EYE_OF_ENDER_ITEM"
+ }
+ },
"ThrownPotionEntity": {
"data": {
"ITEM_STACK": "THROWN_POTION_ITEM"
@@ -436,5 +473,59 @@
"data": {
"LIT": "MINECART_FURNACE_HAS_FUEL"
}
+ },
+ "BeeEntity": {
+ "data": {
+ "STATUS_TRACKER": "BEE_FLAGS",
+ "ANGER": "BEE_REMAINING_ANGER_TIME"
+ }
+ },
+ "HoglinEntity": {
+ "data": {
+ "IMMUNE_TO_ZOMBIFICATION": "HOGLIN_IMMUNE_TO_ZOMBIFICATION",
+ "BABY": "HOGLIN_IS_BABY"
+ }
+ },
+ "AbstractPiglinEntity": {
+ "data": {
+ "IMMUNE_TO_ZOMBIFICATION": "ABSTRACT_PIGLIN_IMMUNE_TO_ZOMBIFICATION"
+ }
+ },
+ "PiglinEntity": {
+ "data": {
+ "BABY": "PIGLIN_IS_BABY",
+ "CHARGING": "PIGLIN_IS_CHARGING_CROSSBOW",
+ "DANCING": "PIGLIN_IS_DANCING",
+ "IMMUNE_TO_ZOMBIFICATION": "PIGLIN_IMMUNE_TO_ZOMBIFICATION"
+ }
+ },
+ "ZoglinEntity": {
+ "data": {
+ "BABY": "ZOGLIN_IS_BABY"
+ }
+ },
+ "StriderEntity": {
+ "data": {
+ "BOOST_TIME": "STRIDER_TIME_TO_BOOST",
+ "COLD": "STRIDER_IS_SUFFOCATING",
+ "SADDLED": "STRIDER_HAS_SADDLE"
+ }
+ },
+ "AxolotlEntity": {
+ "data": {
+ "VARIANT": "AXOLOTL_VARIANT",
+ "PLAYING_DEAD": "AXOLOTL_PLAYING_DEAD",
+ "FROM_BUCKET": "AXOLOTL_FROM_BUCKET"
+ }
+ },
+ "GlowSquidEntity": {
+ "data": {
+ "DARK_TICKS_REMAINING": "GLOW_SQUID_DARK_TICKS_REMAINING"
+ }
+ },
+ "SkeletonEntity": {
+ "data": {
+ "CONVERTING": "SKELETON_STRAY_FREEZE_CONVERTING"
+ }
}
}