steel_registry/data_components/
vanilla_components.rs1use steel_utils::Identifier;
6use text_components::TextComponent;
7
8use super::component_data::ComponentData;
9use super::registry::DataComponentRegistry;
10pub use super::registry::DataComponentType;
11
12pub use super::components::{Equippable, EquippableSlot, ItemEnchantments, Tool, ToolRule};
14
15pub const MAX_STACK_SIZE: DataComponentType<i32> =
16 DataComponentType::new(Identifier::vanilla_static("max_stack_size"));
17
18pub const MAX_DAMAGE: DataComponentType<i32> =
19 DataComponentType::new(Identifier::vanilla_static("max_damage"));
20
21pub const CUSTOM_NAME: DataComponentType<TextComponent> =
22 DataComponentType::new(Identifier::vanilla_static("custom_name"));
23
24pub const ITEM_NAME: DataComponentType<TextComponent> =
25 DataComponentType::new(Identifier::vanilla_static("item_name"));
26
27pub const DAMAGE: DataComponentType<i32> =
28 DataComponentType::new(Identifier::vanilla_static("damage"));
29
30pub const REPAIR_COST: DataComponentType<i32> =
31 DataComponentType::new(Identifier::vanilla_static("repair_cost"));
32
33pub const UNBREAKABLE: DataComponentType<()> =
34 DataComponentType::new(Identifier::vanilla_static("unbreakable"));
35
36pub const TOOL: DataComponentType<Tool> =
37 DataComponentType::new(Identifier::vanilla_static("tool"));
38
39pub const EQUIPPABLE: DataComponentType<Equippable> =
40 DataComponentType::new(Identifier::vanilla_static("equippable"));
41
42pub const GLIDER: DataComponentType<()> =
43 DataComponentType::new(Identifier::vanilla_static("glider"));
44
45pub const CREATIVE_SLOT_LOCK: DataComponentType<()> =
46 DataComponentType::new(Identifier::vanilla_static("creative_slot_lock"));
47
48pub const INTANGIBLE_PROJECTILE: DataComponentType<()> =
49 DataComponentType::new(Identifier::vanilla_static("intangible_projectile"));
50
51pub const ENCHANTMENT_GLINT_OVERRIDE: DataComponentType<bool> =
52 DataComponentType::new(Identifier::vanilla_static("enchantment_glint_override"));
53
54pub const POTION_DURATION_SCALE: DataComponentType<f32> =
55 DataComponentType::new(Identifier::vanilla_static("potion_duration_scale"));
56
57pub const CUSTOM_DATA: DataComponentType<()> =
61 DataComponentType::new(Identifier::vanilla_static("custom_data"));
62
63pub const USE_EFFECTS: DataComponentType<()> =
64 DataComponentType::new(Identifier::vanilla_static("use_effects"));
65
66pub const MINIMUM_ATTACK_CHARGE: DataComponentType<()> =
67 DataComponentType::new(Identifier::vanilla_static("minimum_attack_charge"));
68
69pub const DAMAGE_TYPE: DataComponentType<()> =
70 DataComponentType::new(Identifier::vanilla_static("damage_type"));
71
72pub const ITEM_MODEL: DataComponentType<()> =
73 DataComponentType::new(Identifier::vanilla_static("item_model"));
74
75pub const LORE: DataComponentType<()> = DataComponentType::new(Identifier::vanilla_static("lore"));
76
77pub const RARITY: DataComponentType<()> =
78 DataComponentType::new(Identifier::vanilla_static("rarity"));
79
80pub const ENCHANTMENTS: DataComponentType<ItemEnchantments> =
81 DataComponentType::new(Identifier::vanilla_static("enchantments"));
82
83pub const CAN_PLACE_ON: DataComponentType<()> =
84 DataComponentType::new(Identifier::vanilla_static("can_place_on"));
85
86pub const CAN_BREAK: DataComponentType<()> =
87 DataComponentType::new(Identifier::vanilla_static("can_break"));
88
89pub const ATTRIBUTE_MODIFIERS: DataComponentType<()> =
90 DataComponentType::new(Identifier::vanilla_static("attribute_modifiers"));
91
92pub const CUSTOM_MODEL_DATA: DataComponentType<()> =
93 DataComponentType::new(Identifier::vanilla_static("custom_model_data"));
94
95pub const TOOLTIP_DISPLAY: DataComponentType<()> =
96 DataComponentType::new(Identifier::vanilla_static("tooltip_display"));
97
98pub const TOOLTIP_STYLE: DataComponentType<()> =
99 DataComponentType::new(Identifier::vanilla_static("tooltip_style"));
100
101pub const NOTE_BLOCK_SOUND: DataComponentType<()> =
102 DataComponentType::new(Identifier::vanilla_static("note_block_sound"));
103
104pub const FOOD: DataComponentType<()> = DataComponentType::new(Identifier::vanilla_static("food"));
105
106pub const CONSUMABLE: DataComponentType<()> =
107 DataComponentType::new(Identifier::vanilla_static("consumable"));
108
109pub const USE_REMAINDER: DataComponentType<()> =
110 DataComponentType::new(Identifier::vanilla_static("use_remainder"));
111
112pub const USE_COOLDOWN: DataComponentType<()> =
113 DataComponentType::new(Identifier::vanilla_static("use_cooldown"));
114
115pub const DAMAGE_RESISTANT: DataComponentType<()> =
116 DataComponentType::new(Identifier::vanilla_static("damage_resistant"));
117
118pub const WEAPON: DataComponentType<()> =
119 DataComponentType::new(Identifier::vanilla_static("weapon"));
120
121pub const ATTACK_RANGE: DataComponentType<()> =
122 DataComponentType::new(Identifier::vanilla_static("attack_range"));
123
124pub const ENCHANTABLE: DataComponentType<()> =
125 DataComponentType::new(Identifier::vanilla_static("enchantable"));
126
127pub const REPAIRABLE: DataComponentType<()> =
128 DataComponentType::new(Identifier::vanilla_static("repairable"));
129
130pub const DEATH_PROTECTION: DataComponentType<()> =
131 DataComponentType::new(Identifier::vanilla_static("death_protection"));
132
133pub const BLOCKS_ATTACKS: DataComponentType<()> =
134 DataComponentType::new(Identifier::vanilla_static("blocks_attacks"));
135
136pub const PIERCING_WEAPON: DataComponentType<()> =
137 DataComponentType::new(Identifier::vanilla_static("piercing_weapon"));
138
139pub const KINETIC_WEAPON: DataComponentType<()> =
140 DataComponentType::new(Identifier::vanilla_static("kinetic_weapon"));
141
142pub const SWING_ANIMATION: DataComponentType<()> =
143 DataComponentType::new(Identifier::vanilla_static("swing_animation"));
144
145pub const ADDITIONAL_TRADE_COST: DataComponentType<()> =
146 DataComponentType::new(Identifier::vanilla_static("additional_trade_cost"));
147
148pub const STORED_ENCHANTMENTS: DataComponentType<ItemEnchantments> =
149 DataComponentType::new(Identifier::vanilla_static("stored_enchantments"));
150
151pub const DYE: DataComponentType<()> = DataComponentType::new(Identifier::vanilla_static("dye"));
152
153pub const DYED_COLOR: DataComponentType<()> =
154 DataComponentType::new(Identifier::vanilla_static("dyed_color"));
155
156pub const MAP_COLOR: DataComponentType<()> =
157 DataComponentType::new(Identifier::vanilla_static("map_color"));
158
159pub const MAP_ID: DataComponentType<()> =
160 DataComponentType::new(Identifier::vanilla_static("map_id"));
161
162pub const MAP_DECORATIONS: DataComponentType<()> =
163 DataComponentType::new(Identifier::vanilla_static("map_decorations"));
164
165pub const MAP_POST_PROCESSING: DataComponentType<()> =
166 DataComponentType::new(Identifier::vanilla_static("map_post_processing"));
167
168pub const CHARGED_PROJECTILES: DataComponentType<()> =
169 DataComponentType::new(Identifier::vanilla_static("charged_projectiles"));
170
171pub const BUNDLE_CONTENTS: DataComponentType<()> =
172 DataComponentType::new(Identifier::vanilla_static("bundle_contents"));
173
174pub const POTION_CONTENTS: DataComponentType<()> =
175 DataComponentType::new(Identifier::vanilla_static("potion_contents"));
176
177pub const SUSPICIOUS_STEW_EFFECTS: DataComponentType<()> =
178 DataComponentType::new(Identifier::vanilla_static("suspicious_stew_effects"));
179
180pub const WRITABLE_BOOK_CONTENT: DataComponentType<()> =
181 DataComponentType::new(Identifier::vanilla_static("writable_book_content"));
182
183pub const WRITTEN_BOOK_CONTENT: DataComponentType<()> =
184 DataComponentType::new(Identifier::vanilla_static("written_book_content"));
185
186pub const TRIM: DataComponentType<()> = DataComponentType::new(Identifier::vanilla_static("trim"));
187
188pub const DEBUG_STICK_STATE: DataComponentType<()> =
189 DataComponentType::new(Identifier::vanilla_static("debug_stick_state"));
190
191pub const ENTITY_DATA: DataComponentType<()> =
192 DataComponentType::new(Identifier::vanilla_static("entity_data"));
193
194pub const BUCKET_ENTITY_DATA: DataComponentType<()> =
195 DataComponentType::new(Identifier::vanilla_static("bucket_entity_data"));
196
197pub const BLOCK_ENTITY_DATA: DataComponentType<()> =
198 DataComponentType::new(Identifier::vanilla_static("block_entity_data"));
199
200pub const INSTRUMENT: DataComponentType<()> =
201 DataComponentType::new(Identifier::vanilla_static("instrument"));
202
203pub const PROVIDES_TRIM_MATERIAL: DataComponentType<()> =
204 DataComponentType::new(Identifier::vanilla_static("provides_trim_material"));
205
206pub const OMINOUS_BOTTLE_AMPLIFIER: DataComponentType<()> =
207 DataComponentType::new(Identifier::vanilla_static("ominous_bottle_amplifier"));
208
209pub const JUKEBOX_PLAYABLE: DataComponentType<()> =
210 DataComponentType::new(Identifier::vanilla_static("jukebox_playable"));
211
212pub const PROVIDES_BANNER_PATTERNS: DataComponentType<()> =
213 DataComponentType::new(Identifier::vanilla_static("provides_banner_patterns"));
214
215pub const RECIPES: DataComponentType<()> =
216 DataComponentType::new(Identifier::vanilla_static("recipes"));
217
218pub const LODESTONE_TRACKER: DataComponentType<()> =
219 DataComponentType::new(Identifier::vanilla_static("lodestone_tracker"));
220
221pub const FIREWORK_EXPLOSION: DataComponentType<()> =
222 DataComponentType::new(Identifier::vanilla_static("firework_explosion"));
223
224pub const FIREWORKS: DataComponentType<()> =
225 DataComponentType::new(Identifier::vanilla_static("fireworks"));
226
227pub const PROFILE: DataComponentType<()> =
228 DataComponentType::new(Identifier::vanilla_static("profile"));
229
230pub const BANNER_PATTERNS: DataComponentType<()> =
231 DataComponentType::new(Identifier::vanilla_static("banner_patterns"));
232
233pub const BASE_COLOR: DataComponentType<()> =
234 DataComponentType::new(Identifier::vanilla_static("base_color"));
235
236pub const POT_DECORATIONS: DataComponentType<()> =
237 DataComponentType::new(Identifier::vanilla_static("pot_decorations"));
238
239pub const CONTAINER: DataComponentType<()> =
240 DataComponentType::new(Identifier::vanilla_static("container"));
241
242pub const BLOCK_STATE: DataComponentType<()> =
243 DataComponentType::new(Identifier::vanilla_static("block_state"));
244
245pub const BEES: DataComponentType<()> = DataComponentType::new(Identifier::vanilla_static("bees"));
246
247pub const LOCK: DataComponentType<()> = DataComponentType::new(Identifier::vanilla_static("lock"));
248
249pub const CONTAINER_LOOT: DataComponentType<()> =
250 DataComponentType::new(Identifier::vanilla_static("container_loot"));
251
252pub const BREAK_SOUND: DataComponentType<()> =
253 DataComponentType::new(Identifier::vanilla_static("break_sound"));
254
255pub const VILLAGER_VARIANT: DataComponentType<()> =
257 DataComponentType::new(Identifier::vanilla_static("villager/variant"));
258
259pub const WOLF_VARIANT: DataComponentType<()> =
260 DataComponentType::new(Identifier::vanilla_static("wolf/variant"));
261
262pub const WOLF_SOUND_VARIANT: DataComponentType<()> =
263 DataComponentType::new(Identifier::vanilla_static("wolf/sound_variant"));
264
265pub const WOLF_COLLAR: DataComponentType<()> =
266 DataComponentType::new(Identifier::vanilla_static("wolf/collar"));
267
268pub const FOX_VARIANT: DataComponentType<()> =
269 DataComponentType::new(Identifier::vanilla_static("fox/variant"));
270
271pub const SALMON_SIZE: DataComponentType<()> =
272 DataComponentType::new(Identifier::vanilla_static("salmon/size"));
273
274pub const PARROT_VARIANT: DataComponentType<()> =
275 DataComponentType::new(Identifier::vanilla_static("parrot/variant"));
276
277pub const TROPICAL_FISH_PATTERN: DataComponentType<()> =
278 DataComponentType::new(Identifier::vanilla_static("tropical_fish/pattern"));
279
280pub const TROPICAL_FISH_BASE_COLOR: DataComponentType<()> =
281 DataComponentType::new(Identifier::vanilla_static("tropical_fish/base_color"));
282
283pub const TROPICAL_FISH_PATTERN_COLOR: DataComponentType<()> =
284 DataComponentType::new(Identifier::vanilla_static("tropical_fish/pattern_color"));
285
286pub const MOOSHROOM_VARIANT: DataComponentType<()> =
287 DataComponentType::new(Identifier::vanilla_static("mooshroom/variant"));
288
289pub const RABBIT_VARIANT: DataComponentType<()> =
290 DataComponentType::new(Identifier::vanilla_static("rabbit/variant"));
291
292pub const PIG_VARIANT: DataComponentType<()> =
293 DataComponentType::new(Identifier::vanilla_static("pig/variant"));
294
295pub const PIG_SOUND_VARIANT: DataComponentType<()> =
296 DataComponentType::new(Identifier::vanilla_static("pig/sound_variant"));
297
298pub const COW_VARIANT: DataComponentType<()> =
299 DataComponentType::new(Identifier::vanilla_static("cow/variant"));
300
301pub const COW_SOUND_VARIANT: DataComponentType<()> =
302 DataComponentType::new(Identifier::vanilla_static("cow/sound_variant"));
303
304pub const CHICKEN_VARIANT: DataComponentType<()> =
305 DataComponentType::new(Identifier::vanilla_static("chicken/variant"));
306
307pub const CHICKEN_SOUND_VARIANT: DataComponentType<()> =
308 DataComponentType::new(Identifier::vanilla_static("chicken/sound_variant"));
309
310pub const ZOMBIE_NAUTILUS_VARIANT: DataComponentType<()> =
311 DataComponentType::new(Identifier::vanilla_static("zombie_nautilus/variant"));
312
313pub const FROG_VARIANT: DataComponentType<()> =
314 DataComponentType::new(Identifier::vanilla_static("frog/variant"));
315
316pub const HORSE_VARIANT: DataComponentType<()> =
317 DataComponentType::new(Identifier::vanilla_static("horse/variant"));
318
319pub const PAINTING_VARIANT: DataComponentType<()> =
320 DataComponentType::new(Identifier::vanilla_static("painting/variant"));
321
322pub const LLAMA_VARIANT: DataComponentType<()> =
323 DataComponentType::new(Identifier::vanilla_static("llama/variant"));
324
325pub const AXOLOTL_VARIANT: DataComponentType<()> =
326 DataComponentType::new(Identifier::vanilla_static("axolotl/variant"));
327
328pub const CAT_VARIANT: DataComponentType<()> =
329 DataComponentType::new(Identifier::vanilla_static("cat/variant"));
330
331pub const CAT_SOUND_VARIANT: DataComponentType<()> =
332 DataComponentType::new(Identifier::vanilla_static("cat/sound_variant"));
333
334pub const CAT_COLLAR: DataComponentType<()> =
335 DataComponentType::new(Identifier::vanilla_static("cat/collar"));
336
337pub const SHEEP_COLOR: DataComponentType<()> =
338 DataComponentType::new(Identifier::vanilla_static("sheep/color"));
339
340pub const SHULKER_COLOR: DataComponentType<()> =
341 DataComponentType::new(Identifier::vanilla_static("shulker/color"));
342
343macro_rules! register_stub {
346 ($registry:expr, $key:expr) => {{
347 fn network_reader(cursor: &mut std::io::Cursor<&[u8]>) -> std::io::Result<ComponentData> {
348 let _ = cursor;
350 Ok(ComponentData::Todo)
351 }
352
353 fn network_writer(data: &ComponentData, _writer: &mut Vec<u8>) -> std::io::Result<()> {
354 let _ = data;
356 Ok(())
357 }
358
359 fn nbt_reader(_tag: simdnbt::borrow::NbtTag) -> Option<ComponentData> {
360 Some(ComponentData::Todo)
361 }
362
363 fn nbt_writer(_data: &ComponentData) -> simdnbt::owned::NbtTag {
364 simdnbt::owned::NbtTag::Compound(simdnbt::owned::NbtCompound::new())
365 }
366
367 $registry.register_dynamic(
368 $key,
369 crate::data_components::ComponentDataDiscriminant::Todo,
370 network_reader,
371 network_writer,
372 nbt_reader,
373 nbt_writer,
374 );
375 }};
376}
377
378fn varint_reader(cursor: &mut std::io::Cursor<&[u8]>) -> std::io::Result<ComponentData> {
380 use steel_utils::{codec::VarInt, serial::ReadFrom};
381 let value = VarInt::read(cursor)?;
382 Ok(ComponentData::I32(value.0))
383}
384
385fn varint_writer(data: &ComponentData, writer: &mut Vec<u8>) -> std::io::Result<()> {
387 use steel_utils::{codec::VarInt, serial::WriteTo};
388 if let ComponentData::I32(v) = data {
389 VarInt(*v).write(writer)
390 } else {
391 Err(std::io::Error::other("Component type mismatch"))
392 }
393}
394
395pub fn register_vanilla_data_components(registry: &mut DataComponentRegistry) {
400 use crate::data_components::ComponentDataDiscriminant;
401
402 register_stub!(registry, CUSTOM_DATA.key.clone());
405 registry.register_custom_network(
407 MAX_STACK_SIZE,
408 ComponentDataDiscriminant::I32,
409 varint_reader,
410 varint_writer,
411 );
412 registry.register_custom_network(
414 MAX_DAMAGE,
415 ComponentDataDiscriminant::I32,
416 varint_reader,
417 varint_writer,
418 );
419 registry.register_custom_network(
421 DAMAGE,
422 ComponentDataDiscriminant::I32,
423 varint_reader,
424 varint_writer,
425 );
426 registry.register(UNBREAKABLE, ComponentDataDiscriminant::Empty);
428 register_stub!(registry, USE_EFFECTS.key.clone());
430 registry.register(CUSTOM_NAME, ComponentDataDiscriminant::TextComponent);
432 register_stub!(registry, MINIMUM_ATTACK_CHARGE.key.clone());
434 register_stub!(registry, DAMAGE_TYPE.key.clone());
436 registry.register(ITEM_NAME, ComponentDataDiscriminant::TextComponent);
438 register_stub!(registry, ITEM_MODEL.key.clone());
440 register_stub!(registry, LORE.key.clone());
442 register_stub!(registry, RARITY.key.clone());
444 registry.register(ENCHANTMENTS, ComponentDataDiscriminant::Enchantments);
446 register_stub!(registry, CAN_PLACE_ON.key.clone());
448 register_stub!(registry, CAN_BREAK.key.clone());
450 register_stub!(registry, ATTRIBUTE_MODIFIERS.key.clone());
452 register_stub!(registry, CUSTOM_MODEL_DATA.key.clone());
454 register_stub!(registry, TOOLTIP_DISPLAY.key.clone());
456 registry.register_custom_network(
458 REPAIR_COST,
459 ComponentDataDiscriminant::I32,
460 varint_reader,
461 varint_writer,
462 );
463 registry.register(CREATIVE_SLOT_LOCK, ComponentDataDiscriminant::Empty);
465 registry.register(ENCHANTMENT_GLINT_OVERRIDE, ComponentDataDiscriminant::Bool);
467 registry.register(INTANGIBLE_PROJECTILE, ComponentDataDiscriminant::Empty);
469 register_stub!(registry, FOOD.key.clone());
471 register_stub!(registry, CONSUMABLE.key.clone());
473 register_stub!(registry, USE_REMAINDER.key.clone());
475 register_stub!(registry, USE_COOLDOWN.key.clone());
477 register_stub!(registry, DAMAGE_RESISTANT.key.clone());
479 registry.register(TOOL, ComponentDataDiscriminant::Tool);
481 register_stub!(registry, WEAPON.key.clone());
483 register_stub!(registry, ATTACK_RANGE.key.clone());
485 register_stub!(registry, ENCHANTABLE.key.clone());
487 registry.register(EQUIPPABLE, ComponentDataDiscriminant::Equippable);
489 register_stub!(registry, REPAIRABLE.key.clone());
491 registry.register(GLIDER, ComponentDataDiscriminant::Empty);
493 register_stub!(registry, TOOLTIP_STYLE.key.clone());
495 register_stub!(registry, DEATH_PROTECTION.key.clone());
497 register_stub!(registry, BLOCKS_ATTACKS.key.clone());
499 register_stub!(registry, PIERCING_WEAPON.key.clone());
501 register_stub!(registry, KINETIC_WEAPON.key.clone());
503 register_stub!(registry, SWING_ANIMATION.key.clone());
505 register_stub!(registry, ADDITIONAL_TRADE_COST.key.clone());
507 registry.register(STORED_ENCHANTMENTS, ComponentDataDiscriminant::Enchantments);
509 register_stub!(registry, DYE.key.clone());
511 register_stub!(registry, DYED_COLOR.key.clone());
513 register_stub!(registry, MAP_COLOR.key.clone());
515 register_stub!(registry, MAP_ID.key.clone());
517 register_stub!(registry, MAP_DECORATIONS.key.clone());
519 register_stub!(registry, MAP_POST_PROCESSING.key.clone());
521 register_stub!(registry, CHARGED_PROJECTILES.key.clone());
523 register_stub!(registry, BUNDLE_CONTENTS.key.clone());
525 register_stub!(registry, POTION_CONTENTS.key.clone());
527 registry.register(POTION_DURATION_SCALE, ComponentDataDiscriminant::Float);
529 register_stub!(registry, SUSPICIOUS_STEW_EFFECTS.key.clone());
531 register_stub!(registry, WRITABLE_BOOK_CONTENT.key.clone());
533 register_stub!(registry, WRITTEN_BOOK_CONTENT.key.clone());
535 register_stub!(registry, TRIM.key.clone());
537 register_stub!(registry, DEBUG_STICK_STATE.key.clone());
539 register_stub!(registry, ENTITY_DATA.key.clone());
541 register_stub!(registry, BUCKET_ENTITY_DATA.key.clone());
543 register_stub!(registry, BLOCK_ENTITY_DATA.key.clone());
545 register_stub!(registry, INSTRUMENT.key.clone());
547 register_stub!(registry, PROVIDES_TRIM_MATERIAL.key.clone());
549 register_stub!(registry, OMINOUS_BOTTLE_AMPLIFIER.key.clone());
551 register_stub!(registry, JUKEBOX_PLAYABLE.key.clone());
553 register_stub!(registry, PROVIDES_BANNER_PATTERNS.key.clone());
555 register_stub!(registry, RECIPES.key.clone());
557 register_stub!(registry, LODESTONE_TRACKER.key.clone());
559 register_stub!(registry, FIREWORK_EXPLOSION.key.clone());
561 register_stub!(registry, FIREWORKS.key.clone());
563 register_stub!(registry, PROFILE.key.clone());
565 register_stub!(registry, NOTE_BLOCK_SOUND.key.clone());
567 register_stub!(registry, BANNER_PATTERNS.key.clone());
569 register_stub!(registry, BASE_COLOR.key.clone());
571 register_stub!(registry, POT_DECORATIONS.key.clone());
573 register_stub!(registry, CONTAINER.key.clone());
575 register_stub!(registry, BLOCK_STATE.key.clone());
577 register_stub!(registry, BEES.key.clone());
579 register_stub!(registry, LOCK.key.clone());
581 register_stub!(registry, CONTAINER_LOOT.key.clone());
583 register_stub!(registry, BREAK_SOUND.key.clone());
585 register_stub!(registry, VILLAGER_VARIANT.key.clone());
587 register_stub!(registry, WOLF_VARIANT.key.clone());
589 register_stub!(registry, WOLF_SOUND_VARIANT.key.clone());
591 register_stub!(registry, WOLF_COLLAR.key.clone());
593 register_stub!(registry, FOX_VARIANT.key.clone());
595 register_stub!(registry, SALMON_SIZE.key.clone());
597 register_stub!(registry, PARROT_VARIANT.key.clone());
599 register_stub!(registry, TROPICAL_FISH_PATTERN.key.clone());
601 register_stub!(registry, TROPICAL_FISH_BASE_COLOR.key.clone());
603 register_stub!(registry, TROPICAL_FISH_PATTERN_COLOR.key.clone());
605 register_stub!(registry, MOOSHROOM_VARIANT.key.clone());
607 register_stub!(registry, RABBIT_VARIANT.key.clone());
609 register_stub!(registry, PIG_VARIANT.key.clone());
611 register_stub!(registry, PIG_SOUND_VARIANT.key.clone());
613 register_stub!(registry, COW_VARIANT.key.clone());
615 register_stub!(registry, COW_SOUND_VARIANT.key.clone());
617 register_stub!(registry, CHICKEN_VARIANT.key.clone());
619 register_stub!(registry, CHICKEN_SOUND_VARIANT.key.clone());
621 register_stub!(registry, ZOMBIE_NAUTILUS_VARIANT.key.clone());
623 register_stub!(registry, FROG_VARIANT.key.clone());
625 register_stub!(registry, HORSE_VARIANT.key.clone());
627 register_stub!(registry, PAINTING_VARIANT.key.clone());
629 register_stub!(registry, LLAMA_VARIANT.key.clone());
631 register_stub!(registry, AXOLOTL_VARIANT.key.clone());
633 register_stub!(registry, CAT_VARIANT.key.clone());
635 register_stub!(registry, CAT_SOUND_VARIANT.key.clone());
637 register_stub!(registry, CAT_COLLAR.key.clone());
639 register_stub!(registry, SHEEP_COLOR.key.clone());
641 register_stub!(registry, SHULKER_COLOR.key.clone());
643}