From eada923c5353f2ac40386df336048930a502607c Mon Sep 17 00:00:00 2001 From: bconlon <67203206+bconlon1@users.noreply.github.com> Date: Fri, 15 Sep 2023 21:19:36 -0700 Subject: [PATCH] feat: 1.20.1 (#1685) --- .circleci/continue_config.yml | 4 +- .github/workflows/trigger-build.yml | 2 +- build.gradle | 8 +- docs/CHANGELOG.md | 327 -------- docs/CREDITS.txt | 10 + docs/README.md | 10 +- gradle.properties | 6 +- .../0164a9e83927622ad492ab881424439b3f361cdf | 2 +- .../0f202e000d40347127b33b6edbbb29689b8cbf86 | 4 +- .../0fe122e549a2e3aeeca535edbc3649f31121d28e | 2 +- .../103d9f3f36b01595f1aa5172191e60eff02e6924 | 4 +- .../1742123cf955ee7ecf092ba55decb836aa65bc2c | 5 +- .../201562cc5cd18b504c6c9e32f9399e466b1b8cf1 | 2 +- .../22b50738883487d1ef1961d9e5ff26fe1c21b339 | 10 +- .../232d7dc54f63e89526c247ba29265b5afad0215c | 6 +- .../27361c9f93b2c74f19780f93ccf4ad52b49349af | 2 +- .../59eb3dbb5f86130e09b3c62d89b9525ee01cf52d | 382 ++++----- .../735031f3addf80804addae5e3f53249900116f1e | 2 +- .../8c612d57ec52f747b666a8d00c73628b9773ba1d | 4 +- .../93ef46d8e2a70c25df1652217c68bb7a1c161142 | 387 ++++++++- .../9fb1092f32d4fcbf9e061ffd718d4ec689c6c95e | 622 +++++++------- .../c622617f6fabf890a00b9275cd5f643584a8a2c8 | 4 +- .../e5c5eb35b4ba40351ecb7d9f04c3527f2f5779b0 | 58 +- .../feecd04c25d277e5de10185e187a010c8d7228ee | 2 +- .../blockstates/skyroot_hanging_sign.json | 7 + .../skyroot_wall_hanging_sign.json | 7 + .../resources/assets/aether/lang/en_us.json | 7 +- .../models/block/skyroot_hanging_sign.json | 5 + .../aether/models/item/chainmail_gloves.json | 62 ++ .../item/chainmail_gloves_amethyst_trim.json | 7 + .../item/chainmail_gloves_copper_trim.json | 7 + .../item/chainmail_gloves_diamond_trim.json | 7 + .../item/chainmail_gloves_emerald_trim.json | 7 + .../item/chainmail_gloves_gold_trim.json | 7 + .../item/chainmail_gloves_iron_trim.json | 7 + .../item/chainmail_gloves_lapis_trim.json | 7 + .../item/chainmail_gloves_netherite_trim.json | 7 + .../item/chainmail_gloves_quartz_trim.json | 7 + .../item/chainmail_gloves_redstone_trim.json | 7 + .../aether/models/item/diamond_gloves.json | 62 ++ .../item/diamond_gloves_amethyst_trim.json | 7 + .../item/diamond_gloves_copper_trim.json | 7 + .../item/diamond_gloves_diamond_trim.json | 7 + .../item/diamond_gloves_emerald_trim.json | 7 + .../models/item/diamond_gloves_gold_trim.json | 7 + .../models/item/diamond_gloves_iron_trim.json | 7 + .../item/diamond_gloves_lapis_trim.json | 7 + .../item/diamond_gloves_netherite_trim.json | 7 + .../item/diamond_gloves_quartz_trim.json | 7 + .../item/diamond_gloves_redstone_trim.json | 7 + .../aether/models/item/golden_gloves.json | 62 ++ .../item/golden_gloves_amethyst_trim.json | 7 + .../item/golden_gloves_copper_trim.json | 7 + .../item/golden_gloves_diamond_trim.json | 7 + .../item/golden_gloves_emerald_trim.json | 7 + .../models/item/golden_gloves_gold_trim.json | 7 + .../models/item/golden_gloves_iron_trim.json | 7 + .../models/item/golden_gloves_lapis_trim.json | 7 + .../item/golden_gloves_netherite_trim.json | 7 + .../item/golden_gloves_quartz_trim.json | 7 + .../item/golden_gloves_redstone_trim.json | 7 + .../aether/models/item/gravitite_boots.json | 62 ++ .../item/gravitite_boots_amethyst_trim.json | 7 + .../item/gravitite_boots_copper_trim.json | 7 + .../item/gravitite_boots_diamond_trim.json | 7 + .../item/gravitite_boots_emerald_trim.json | 7 + .../item/gravitite_boots_gold_trim.json | 7 + .../item/gravitite_boots_iron_trim.json | 7 + .../item/gravitite_boots_lapis_trim.json | 7 + .../item/gravitite_boots_netherite_trim.json | 7 + .../item/gravitite_boots_quartz_trim.json | 7 + .../item/gravitite_boots_redstone_trim.json | 7 + .../models/item/gravitite_chestplate.json | 62 ++ .../gravitite_chestplate_amethyst_trim.json | 7 + .../gravitite_chestplate_copper_trim.json | 7 + .../gravitite_chestplate_diamond_trim.json | 7 + .../gravitite_chestplate_emerald_trim.json | 7 + .../item/gravitite_chestplate_gold_trim.json | 7 + .../item/gravitite_chestplate_iron_trim.json | 7 + .../item/gravitite_chestplate_lapis_trim.json | 7 + .../gravitite_chestplate_netherite_trim.json | 7 + .../gravitite_chestplate_quartz_trim.json | 7 + .../gravitite_chestplate_redstone_trim.json | 7 + .../aether/models/item/gravitite_gloves.json | 62 ++ .../item/gravitite_gloves_amethyst_trim.json | 7 + .../item/gravitite_gloves_copper_trim.json | 7 + .../item/gravitite_gloves_diamond_trim.json | 7 + .../item/gravitite_gloves_emerald_trim.json | 7 + .../item/gravitite_gloves_gold_trim.json | 7 + .../item/gravitite_gloves_iron_trim.json | 7 + .../item/gravitite_gloves_lapis_trim.json | 7 + .../item/gravitite_gloves_netherite_trim.json | 7 + .../item/gravitite_gloves_quartz_trim.json | 7 + .../item/gravitite_gloves_redstone_trim.json | 7 + .../aether/models/item/gravitite_helmet.json | 62 ++ .../item/gravitite_helmet_amethyst_trim.json | 7 + .../item/gravitite_helmet_copper_trim.json | 7 + .../item/gravitite_helmet_diamond_trim.json | 7 + .../item/gravitite_helmet_emerald_trim.json | 7 + .../item/gravitite_helmet_gold_trim.json | 7 + .../item/gravitite_helmet_iron_trim.json | 7 + .../item/gravitite_helmet_lapis_trim.json | 7 + .../item/gravitite_helmet_netherite_trim.json | 7 + .../item/gravitite_helmet_quartz_trim.json | 7 + .../item/gravitite_helmet_redstone_trim.json | 7 + .../models/item/gravitite_leggings.json | 62 ++ .../gravitite_leggings_amethyst_trim.json | 7 + .../item/gravitite_leggings_copper_trim.json | 7 + .../item/gravitite_leggings_diamond_trim.json | 7 + .../item/gravitite_leggings_emerald_trim.json | 7 + .../item/gravitite_leggings_gold_trim.json | 7 + .../item/gravitite_leggings_iron_trim.json | 7 + .../item/gravitite_leggings_lapis_trim.json | 7 + .../gravitite_leggings_netherite_trim.json | 7 + .../item/gravitite_leggings_quartz_trim.json | 7 + .../gravitite_leggings_redstone_trim.json | 7 + .../aether/models/item/iron_gloves.json | 62 ++ .../item/iron_gloves_amethyst_trim.json | 7 + .../models/item/iron_gloves_copper_trim.json | 7 + .../models/item/iron_gloves_diamond_trim.json | 7 + .../models/item/iron_gloves_emerald_trim.json | 7 + .../models/item/iron_gloves_gold_trim.json | 7 + .../models/item/iron_gloves_iron_trim.json | 7 + .../models/item/iron_gloves_lapis_trim.json | 7 + .../item/iron_gloves_netherite_trim.json | 7 + .../models/item/iron_gloves_quartz_trim.json | 7 + .../item/iron_gloves_redstone_trim.json | 7 + .../aether/models/item/leather_gloves.json | 62 ++ .../item/leather_gloves_amethyst_trim.json | 8 + .../item/leather_gloves_copper_trim.json | 8 + .../item/leather_gloves_diamond_trim.json | 8 + .../item/leather_gloves_emerald_trim.json | 8 + .../models/item/leather_gloves_gold_trim.json | 8 + .../models/item/leather_gloves_iron_trim.json | 8 + .../item/leather_gloves_lapis_trim.json | 8 + .../item/leather_gloves_netherite_trim.json | 8 + .../item/leather_gloves_quartz_trim.json | 8 + .../item/leather_gloves_redstone_trim.json | 8 + .../aether/models/item/neptune_boots.json | 62 ++ .../item/neptune_boots_amethyst_trim.json | 7 + .../item/neptune_boots_copper_trim.json | 7 + .../item/neptune_boots_diamond_trim.json | 7 + .../item/neptune_boots_emerald_trim.json | 7 + .../models/item/neptune_boots_gold_trim.json | 7 + .../models/item/neptune_boots_iron_trim.json | 7 + .../models/item/neptune_boots_lapis_trim.json | 7 + .../item/neptune_boots_netherite_trim.json | 7 + .../item/neptune_boots_quartz_trim.json | 7 + .../item/neptune_boots_redstone_trim.json | 7 + .../models/item/neptune_chestplate.json | 62 ++ .../neptune_chestplate_amethyst_trim.json | 7 + .../item/neptune_chestplate_copper_trim.json | 7 + .../item/neptune_chestplate_diamond_trim.json | 7 + .../item/neptune_chestplate_emerald_trim.json | 7 + .../item/neptune_chestplate_gold_trim.json | 7 + .../item/neptune_chestplate_iron_trim.json | 7 + .../item/neptune_chestplate_lapis_trim.json | 7 + .../neptune_chestplate_netherite_trim.json | 7 + .../item/neptune_chestplate_quartz_trim.json | 7 + .../neptune_chestplate_redstone_trim.json | 7 + .../aether/models/item/neptune_gloves.json | 62 ++ .../item/neptune_gloves_amethyst_trim.json | 7 + .../item/neptune_gloves_copper_trim.json | 7 + .../item/neptune_gloves_diamond_trim.json | 7 + .../item/neptune_gloves_emerald_trim.json | 7 + .../models/item/neptune_gloves_gold_trim.json | 7 + .../models/item/neptune_gloves_iron_trim.json | 7 + .../item/neptune_gloves_lapis_trim.json | 7 + .../item/neptune_gloves_netherite_trim.json | 7 + .../item/neptune_gloves_quartz_trim.json | 7 + .../item/neptune_gloves_redstone_trim.json | 7 + .../aether/models/item/neptune_helmet.json | 62 ++ .../item/neptune_helmet_amethyst_trim.json | 7 + .../item/neptune_helmet_copper_trim.json | 7 + .../item/neptune_helmet_diamond_trim.json | 7 + .../item/neptune_helmet_emerald_trim.json | 7 + .../models/item/neptune_helmet_gold_trim.json | 7 + .../models/item/neptune_helmet_iron_trim.json | 7 + .../item/neptune_helmet_lapis_trim.json | 7 + .../item/neptune_helmet_netherite_trim.json | 7 + .../item/neptune_helmet_quartz_trim.json | 7 + .../item/neptune_helmet_redstone_trim.json | 7 + .../aether/models/item/neptune_leggings.json | 62 ++ .../item/neptune_leggings_amethyst_trim.json | 7 + .../item/neptune_leggings_copper_trim.json | 7 + .../item/neptune_leggings_diamond_trim.json | 7 + .../item/neptune_leggings_emerald_trim.json | 7 + .../item/neptune_leggings_gold_trim.json | 7 + .../item/neptune_leggings_iron_trim.json | 7 + .../item/neptune_leggings_lapis_trim.json | 7 + .../item/neptune_leggings_netherite_trim.json | 7 + .../item/neptune_leggings_quartz_trim.json | 7 + .../item/neptune_leggings_redstone_trim.json | 7 + .../aether/models/item/netherite_gloves.json | 62 ++ .../item/netherite_gloves_amethyst_trim.json | 7 + .../item/netherite_gloves_copper_trim.json | 7 + .../item/netherite_gloves_diamond_trim.json | 7 + .../item/netherite_gloves_emerald_trim.json | 7 + .../item/netherite_gloves_gold_trim.json | 7 + .../item/netherite_gloves_iron_trim.json | 7 + .../item/netherite_gloves_lapis_trim.json | 7 + .../item/netherite_gloves_netherite_trim.json | 7 + .../item/netherite_gloves_quartz_trim.json | 7 + .../item/netherite_gloves_redstone_trim.json | 7 + .../aether/models/item/obsidian_boots.json | 62 ++ .../item/obsidian_boots_amethyst_trim.json | 7 + .../item/obsidian_boots_copper_trim.json | 7 + .../item/obsidian_boots_diamond_trim.json | 7 + .../item/obsidian_boots_emerald_trim.json | 7 + .../models/item/obsidian_boots_gold_trim.json | 7 + .../models/item/obsidian_boots_iron_trim.json | 7 + .../item/obsidian_boots_lapis_trim.json | 7 + .../item/obsidian_boots_netherite_trim.json | 7 + .../item/obsidian_boots_quartz_trim.json | 7 + .../item/obsidian_boots_redstone_trim.json | 7 + .../models/item/obsidian_chestplate.json | 62 ++ .../obsidian_chestplate_amethyst_trim.json | 7 + .../item/obsidian_chestplate_copper_trim.json | 7 + .../obsidian_chestplate_diamond_trim.json | 7 + .../obsidian_chestplate_emerald_trim.json | 7 + .../item/obsidian_chestplate_gold_trim.json | 7 + .../item/obsidian_chestplate_iron_trim.json | 7 + .../item/obsidian_chestplate_lapis_trim.json | 7 + .../obsidian_chestplate_netherite_trim.json | 7 + .../item/obsidian_chestplate_quartz_trim.json | 7 + .../obsidian_chestplate_redstone_trim.json | 7 + .../aether/models/item/obsidian_gloves.json | 62 ++ .../item/obsidian_gloves_amethyst_trim.json | 7 + .../item/obsidian_gloves_copper_trim.json | 7 + .../item/obsidian_gloves_diamond_trim.json | 7 + .../item/obsidian_gloves_emerald_trim.json | 7 + .../item/obsidian_gloves_gold_trim.json | 7 + .../item/obsidian_gloves_iron_trim.json | 7 + .../item/obsidian_gloves_lapis_trim.json | 7 + .../item/obsidian_gloves_netherite_trim.json | 7 + .../item/obsidian_gloves_quartz_trim.json | 7 + .../item/obsidian_gloves_redstone_trim.json | 7 + .../aether/models/item/obsidian_helmet.json | 62 ++ .../item/obsidian_helmet_amethyst_trim.json | 7 + .../item/obsidian_helmet_copper_trim.json | 7 + .../item/obsidian_helmet_diamond_trim.json | 7 + .../item/obsidian_helmet_emerald_trim.json | 7 + .../item/obsidian_helmet_gold_trim.json | 7 + .../item/obsidian_helmet_iron_trim.json | 7 + .../item/obsidian_helmet_lapis_trim.json | 7 + .../item/obsidian_helmet_netherite_trim.json | 7 + .../item/obsidian_helmet_quartz_trim.json | 7 + .../item/obsidian_helmet_redstone_trim.json | 7 + .../aether/models/item/obsidian_leggings.json | 62 ++ .../item/obsidian_leggings_amethyst_trim.json | 7 + .../item/obsidian_leggings_copper_trim.json | 7 + .../item/obsidian_leggings_diamond_trim.json | 7 + .../item/obsidian_leggings_emerald_trim.json | 7 + .../item/obsidian_leggings_gold_trim.json | 7 + .../item/obsidian_leggings_iron_trim.json | 7 + .../item/obsidian_leggings_lapis_trim.json | 7 + .../obsidian_leggings_netherite_trim.json | 7 + .../item/obsidian_leggings_quartz_trim.json | 7 + .../item/obsidian_leggings_redstone_trim.json | 7 + .../aether/models/item/phoenix_boots.json | 62 ++ .../item/phoenix_boots_amethyst_trim.json | 7 + .../item/phoenix_boots_copper_trim.json | 7 + .../item/phoenix_boots_diamond_trim.json | 7 + .../item/phoenix_boots_emerald_trim.json | 7 + .../models/item/phoenix_boots_gold_trim.json | 7 + .../models/item/phoenix_boots_iron_trim.json | 7 + .../models/item/phoenix_boots_lapis_trim.json | 7 + .../item/phoenix_boots_netherite_trim.json | 7 + .../item/phoenix_boots_quartz_trim.json | 7 + .../item/phoenix_boots_redstone_trim.json | 7 + .../models/item/phoenix_chestplate.json | 62 ++ .../phoenix_chestplate_amethyst_trim.json | 7 + .../item/phoenix_chestplate_copper_trim.json | 7 + .../item/phoenix_chestplate_diamond_trim.json | 7 + .../item/phoenix_chestplate_emerald_trim.json | 7 + .../item/phoenix_chestplate_gold_trim.json | 7 + .../item/phoenix_chestplate_iron_trim.json | 7 + .../item/phoenix_chestplate_lapis_trim.json | 7 + .../phoenix_chestplate_netherite_trim.json | 7 + .../item/phoenix_chestplate_quartz_trim.json | 7 + .../phoenix_chestplate_redstone_trim.json | 7 + .../aether/models/item/phoenix_gloves.json | 62 ++ .../item/phoenix_gloves_amethyst_trim.json | 7 + .../item/phoenix_gloves_copper_trim.json | 7 + .../item/phoenix_gloves_diamond_trim.json | 7 + .../item/phoenix_gloves_emerald_trim.json | 7 + .../models/item/phoenix_gloves_gold_trim.json | 7 + .../models/item/phoenix_gloves_iron_trim.json | 7 + .../item/phoenix_gloves_lapis_trim.json | 7 + .../item/phoenix_gloves_netherite_trim.json | 7 + .../item/phoenix_gloves_quartz_trim.json | 7 + .../item/phoenix_gloves_redstone_trim.json | 7 + .../aether/models/item/phoenix_helmet.json | 62 ++ .../item/phoenix_helmet_amethyst_trim.json | 7 + .../item/phoenix_helmet_copper_trim.json | 7 + .../item/phoenix_helmet_diamond_trim.json | 7 + .../item/phoenix_helmet_emerald_trim.json | 7 + .../models/item/phoenix_helmet_gold_trim.json | 7 + .../models/item/phoenix_helmet_iron_trim.json | 7 + .../item/phoenix_helmet_lapis_trim.json | 7 + .../item/phoenix_helmet_netherite_trim.json | 7 + .../item/phoenix_helmet_quartz_trim.json | 7 + .../item/phoenix_helmet_redstone_trim.json | 7 + .../aether/models/item/phoenix_leggings.json | 62 ++ .../item/phoenix_leggings_amethyst_trim.json | 7 + .../item/phoenix_leggings_copper_trim.json | 7 + .../item/phoenix_leggings_diamond_trim.json | 7 + .../item/phoenix_leggings_emerald_trim.json | 7 + .../item/phoenix_leggings_gold_trim.json | 7 + .../item/phoenix_leggings_iron_trim.json | 7 + .../item/phoenix_leggings_lapis_trim.json | 7 + .../item/phoenix_leggings_netherite_trim.json | 7 + .../item/phoenix_leggings_quartz_trim.json | 7 + .../item/phoenix_leggings_redstone_trim.json | 7 + .../models/item/skyroot_hanging_sign.json | 6 + .../aether/models/item/valkyrie_gloves.json | 62 ++ .../item/valkyrie_gloves_amethyst_trim.json | 7 + .../item/valkyrie_gloves_copper_trim.json | 7 + .../item/valkyrie_gloves_diamond_trim.json | 7 + .../item/valkyrie_gloves_emerald_trim.json | 7 + .../item/valkyrie_gloves_gold_trim.json | 7 + .../item/valkyrie_gloves_iron_trim.json | 7 + .../item/valkyrie_gloves_lapis_trim.json | 7 + .../item/valkyrie_gloves_netherite_trim.json | 7 + .../item/valkyrie_gloves_quartz_trim.json | 7 + .../item/valkyrie_gloves_redstone_trim.json | 7 + .../aether/models/item/zanite_boots.json | 62 ++ .../item/zanite_boots_amethyst_trim.json | 7 + .../models/item/zanite_boots_copper_trim.json | 7 + .../item/zanite_boots_diamond_trim.json | 7 + .../item/zanite_boots_emerald_trim.json | 7 + .../models/item/zanite_boots_gold_trim.json | 7 + .../models/item/zanite_boots_iron_trim.json | 7 + .../models/item/zanite_boots_lapis_trim.json | 7 + .../item/zanite_boots_netherite_trim.json | 7 + .../models/item/zanite_boots_quartz_trim.json | 7 + .../item/zanite_boots_redstone_trim.json | 7 + .../aether/models/item/zanite_chestplate.json | 62 ++ .../item/zanite_chestplate_amethyst_trim.json | 7 + .../item/zanite_chestplate_copper_trim.json | 7 + .../item/zanite_chestplate_diamond_trim.json | 7 + .../item/zanite_chestplate_emerald_trim.json | 7 + .../item/zanite_chestplate_gold_trim.json | 7 + .../item/zanite_chestplate_iron_trim.json | 7 + .../item/zanite_chestplate_lapis_trim.json | 7 + .../zanite_chestplate_netherite_trim.json | 7 + .../item/zanite_chestplate_quartz_trim.json | 7 + .../item/zanite_chestplate_redstone_trim.json | 7 + .../aether/models/item/zanite_gloves.json | 62 ++ .../item/zanite_gloves_amethyst_trim.json | 7 + .../item/zanite_gloves_copper_trim.json | 7 + .../item/zanite_gloves_diamond_trim.json | 7 + .../item/zanite_gloves_emerald_trim.json | 7 + .../models/item/zanite_gloves_gold_trim.json | 7 + .../models/item/zanite_gloves_iron_trim.json | 7 + .../models/item/zanite_gloves_lapis_trim.json | 7 + .../item/zanite_gloves_netherite_trim.json | 7 + .../item/zanite_gloves_quartz_trim.json | 7 + .../item/zanite_gloves_redstone_trim.json | 7 + .../aether/models/item/zanite_helmet.json | 62 ++ .../item/zanite_helmet_amethyst_trim.json | 7 + .../item/zanite_helmet_copper_trim.json | 7 + .../item/zanite_helmet_diamond_trim.json | 7 + .../item/zanite_helmet_emerald_trim.json | 7 + .../models/item/zanite_helmet_gold_trim.json | 7 + .../models/item/zanite_helmet_iron_trim.json | 7 + .../models/item/zanite_helmet_lapis_trim.json | 7 + .../item/zanite_helmet_netherite_trim.json | 7 + .../item/zanite_helmet_quartz_trim.json | 7 + .../item/zanite_helmet_redstone_trim.json | 7 + .../aether/models/item/zanite_leggings.json | 62 ++ .../item/zanite_leggings_amethyst_trim.json | 7 + .../item/zanite_leggings_copper_trim.json | 7 + .../item/zanite_leggings_diamond_trim.json | 7 + .../item/zanite_leggings_emerald_trim.json | 7 + .../item/zanite_leggings_gold_trim.json | 7 + .../item/zanite_leggings_iron_trim.json | 7 + .../item/zanite_leggings_lapis_trim.json | 7 + .../item/zanite_leggings_netherite_trim.json | 7 + .../item/zanite_leggings_quartz_trim.json | 7 + .../item/zanite_leggings_redstone_trim.json | 7 + .../aether/advancements/aether_sleep.json | 3 +- .../data/aether/advancements/black_moa.json | 3 +- .../aether/advancements/blue_aercloud.json | 3 +- .../aether/advancements/bronze_dungeon.json | 3 +- .../data/aether/advancements/craft_altar.json | 3 +- .../advancements/enchanted_gravitite.json | 3 +- .../aether/advancements/enter_aether.json | 3 +- .../aether/advancements/gold_dungeon.json | 3 +- .../aether/advancements/gravitite_armor.json | 3 +- .../data/aether/advancements/hammer_loot.json | 3 +- .../aether/advancements/ice_accessory.json | 3 +- .../data/aether/advancements/icestone.json | 3 +- .../aether/advancements/incubate_moa.json | 3 +- .../data/aether/advancements/lance_loot.json | 3 +- .../data/aether/advancements/loreception.json | 3 +- .../data/aether/advancements/mount_phyg.json | 3 +- .../aether/advancements/obsidian_armor.json | 3 +- .../data/aether/advancements/obtain_egg.json | 37 +- .../aether/advancements/obtain_petal.json | 3 +- .../aether/advancements/phoenix_armor.json | 3 +- .../data/aether/advancements/read_lore.json | 3 +- .../recipes/building_blocks/aerogel_slab.json | 3 +- ...erogel_slab_from_aerogel_stonecutting.json | 3 +- .../building_blocks/aerogel_stairs.json | 3 +- ...ogel_stairs_from_aerogel_stonecutting.json | 3 +- .../building_blocks/ambrosium_block.json | 3 +- .../recipes/building_blocks/angelic_slab.json | 3 +- ..._slab_from_angelic_stone_stonecutting.json | 3 +- .../building_blocks/angelic_stairs.json | 3 +- ...tairs_from_angelic_stone_stonecutting.json | 3 +- ...from_light_angelic_stone_stonecutting.json | 3 +- ...ngelic_stone_from_pillar_stonecutting.json | 3 +- ...ic_stone_from_pillar_top_stonecutting.json | 3 +- .../blue_aercloud_freezing.json | 3 +- .../building_blocks/blue_ice_freezing.json | 3 +- .../recipes/building_blocks/carved_slab.json | 3 +- ...d_slab_from_carved_stone_stonecutting.json | 3 +- .../building_blocks/carved_stairs.json | 3 +- ...stairs_from_carved_stone_stonecutting.json | 3 +- ..._stone_from_sentry_stone_stonecutting.json | 3 +- .../crystal_leaves_freezing.json | 3 +- .../enchanted_gravitite_enchanting.json | 3 +- .../golden_aercloud_enchanting.json | 3 +- .../building_blocks/golden_oak_wood.json | 3 +- .../building_blocks/hellfire_slab.json | 3 +- ...slab_from_hellfire_stone_stonecutting.json | 3 +- .../building_blocks/hellfire_stairs.json | 3 +- ...airs_from_hellfire_stone_stonecutting.json | 3 +- ...rom_light_hellfire_stone_stonecutting.json | 3 +- .../building_blocks/holystone_brick_slab.json | 3 +- ...ab_from_holystone_bricks_stonecutting.json | 3 +- ...rick_slab_from_holystone_stonecutting.json | 3 +- .../holystone_brick_stairs.json | 3 +- ...rs_from_holystone_bricks_stonecutting.json | 3 +- ...ck_stairs_from_holystone_stonecutting.json | 3 +- .../building_blocks/holystone_bricks.json | 3 +- ...ne_bricks_from_holystone_stonecutting.json | 3 +- .../building_blocks/holystone_slab.json | 3 +- ...tone_slab_from_holystone_stonecutting.json | 3 +- .../building_blocks/holystone_stairs.json | 3 +- ...ne_stairs_from_holystone_stonecutting.json | 3 +- .../ice_from_bucket_freezing.json | 3 +- .../building_blocks/icestone_slab.json | 3 +- ...stone_slab_from_icestone_stonecutting.json | 3 +- .../building_blocks/icestone_stairs.json | 3 +- ...one_stairs_from_icestone_stonecutting.json | 3 +- ...stone_from_angelic_stone_stonecutting.json | 3 +- ...tone_from_hellfire_stone_stonecutting.json | 3 +- .../building_blocks/mossy_holystone_slab.json | 3 +- ...lab_from_mossy_holystone_stonecutting.json | 3 +- .../mossy_holystone_stairs.json | 3 +- ...irs_from_mossy_holystone_stonecutting.json | 3 +- .../mossy_holystone_with_moss.json | 3 +- .../mossy_holystone_with_vine.json | 3 +- .../obsidian_from_bucket_freezing.json | 3 +- .../building_blocks/packed_ice_freezing.json | 3 +- ...illar_from_angelic_stone_stonecutting.json | 3 +- .../pillar_from_pillar_top_stonecutting.json | 3 +- ...r_top_from_angelic_stone_stonecutting.json | 3 +- .../pillar_top_from_pillar_stonecutting.json | 3 +- .../quicksoil_glass_enchanting.json | 3 +- ..._stone_from_carved_stone_stonecutting.json | 3 +- .../building_blocks/skyroot_bookshelf.json | 3 +- .../building_blocks/skyroot_planks.json | 3 +- .../recipes/building_blocks/skyroot_slab.json | 3 +- .../building_blocks/skyroot_stairs.json | 3 +- .../recipes/building_blocks/skyroot_wood.json | 3 +- .../stripped_skyroot_wood.json | 3 +- .../recipes/building_blocks/zanite_block.json | 3 +- .../recipes/combat/blue_cape_blue_wool.json | 3 +- .../recipes/combat/blue_cape_cyan_wool.json | 3 +- .../combat/blue_cape_light_blue_wool.json | 3 +- .../recipes/combat/bow_repairing.json | 3 +- .../combat/chainmail_boots_repairing.json | 3 +- .../chainmail_chestplate_repairing.json | 3 +- .../combat/chainmail_gloves_repairing.json | 3 +- .../combat/chainmail_helmet_repairing.json | 3 +- .../combat/chainmail_leggings_repairing.json | 3 +- .../combat/diamond_boots_repairing.json | 3 +- .../combat/diamond_chestplate_repairing.json | 3 +- .../recipes/combat/diamond_gloves.json | 3 +- .../combat/diamond_gloves_repairing.json | 3 +- .../combat/diamond_helmet_repairing.json | 3 +- .../combat/diamond_leggings_repairing.json | 3 +- .../combat/diamond_sword_repairing.json | 3 +- .../combat/golden_boots_repairing.json | 3 +- .../combat/golden_chestplate_repairing.json | 3 +- .../recipes/combat/golden_dart.json | 3 +- .../recipes/combat/golden_dart_shooter.json | 3 +- .../recipes/combat/golden_gloves.json | 3 +- .../combat/golden_gloves_repairing.json | 3 +- .../combat/golden_helmet_repairing.json | 3 +- .../combat/golden_leggings_repairing.json | 3 +- .../recipes/combat/golden_pendant.json | 3 +- .../recipes/combat/golden_ring.json | 3 +- .../combat/golden_sword_repairing.json | 3 +- .../recipes/combat/gravitite_boots.json | 3 +- .../combat/gravitite_boots_repairing.json | 3 +- .../recipes/combat/gravitite_chestplate.json | 3 +- .../gravitite_chestplate_repairing.json | 3 +- .../recipes/combat/gravitite_gloves.json | 3 +- .../combat/gravitite_gloves_repairing.json | 3 +- .../recipes/combat/gravitite_helmet.json | 3 +- .../combat/gravitite_helmet_repairing.json | 3 +- .../recipes/combat/gravitite_leggings.json | 3 +- .../combat/gravitite_leggings_repairing.json | 3 +- .../recipes/combat/gravitite_sword.json | 3 +- .../combat/gravitite_sword_repairing.json | 3 +- .../recipes/combat/holystone_sword.json | 3 +- .../combat/holystone_sword_repairing.json | 3 +- .../recipes/combat/iron_boots_repairing.json | 3 +- .../combat/iron_chestplate_repairing.json | 3 +- .../recipes/combat/iron_gloves.json | 3 +- .../recipes/combat/iron_gloves_repairing.json | 3 +- .../recipes/combat/iron_helmet_repairing.json | 3 +- .../combat/iron_leggings_repairing.json | 3 +- .../recipes/combat/iron_pendant.json | 3 +- .../recipes/combat/iron_ring.json | 3 +- .../recipes/combat/iron_sword_repairing.json | 3 +- .../combat/leather_boots_repairing.json | 3 +- .../combat/leather_chestplate_repairing.json | 3 +- .../recipes/combat/leather_gloves.json | 3 +- .../combat/leather_gloves_repairing.json | 3 +- .../combat/leather_helmet_repairing.json | 3 +- .../combat/leather_leggings_repairing.json | 3 +- .../combat/netherite_boots_repairing.json | 3 +- .../netherite_chestplate_repairing.json | 3 +- .../combat/netherite_gloves_repairing.json | 3 +- .../combat/netherite_gloves_smithing.json | 3 +- .../combat/netherite_helmet_repairing.json | 3 +- .../combat/netherite_leggings_repairing.json | 3 +- .../combat/netherite_sword_repairing.json | 3 +- .../recipes/combat/poison_dart.json | 3 +- .../recipes/combat/poison_dart_shooter.json | 3 +- .../advancements/recipes/combat/red_cape.json | 3 +- .../recipes/combat/shield_repairing.json | 3 +- .../combat/skyroot_iron_vanilla_shield.json | 3 +- .../recipes/combat/skyroot_sword.json | 3 +- .../combat/skyroot_sword_repairing.json | 3 +- .../combat/skyroot_zanite_vanilla_shield.json | 3 +- .../recipes/combat/stone_sword_repairing.json | 3 +- .../recipes/combat/white_cape.json | 3 +- .../combat/wood_zanite_vanilla_shield.json | 3 +- .../combat/wooden_sword_repairing.json | 3 +- .../recipes/combat/yellow_cape.json | 3 +- .../recipes/combat/zanite_boots.json | 3 +- .../combat/zanite_boots_repairing.json | 3 +- .../recipes/combat/zanite_chestplate.json | 3 +- .../combat/zanite_chestplate_repairing.json | 3 +- .../recipes/combat/zanite_gloves.json | 3 +- .../combat/zanite_gloves_repairing.json | 3 +- .../recipes/combat/zanite_helmet.json | 3 +- .../combat/zanite_helmet_repairing.json | 3 +- .../recipes/combat/zanite_leggings.json | 3 +- .../combat/zanite_leggings_repairing.json | 3 +- .../recipes/combat/zanite_pendant.json | 3 +- .../combat/zanite_pendant_repairing.json | 3 +- .../recipes/combat/zanite_ring.json | 3 +- .../recipes/combat/zanite_ring_repairing.json | 3 +- .../recipes/combat/zanite_sword.json | 3 +- .../combat/zanite_sword_repairing.json | 3 +- .../recipes/decorations/aerogel_wall.json | 3 +- ...erogel_wall_from_aerogel_stonecutting.json | 3 +- .../recipes/decorations/altar.json | 3 +- .../recipes/decorations/ambrosium_torch.json | 3 +- .../recipes/decorations/angelic_wall.json | 3 +- ..._wall_from_angelic_stone_stonecutting.json | 3 +- .../recipes/decorations/carved_wall.json | 3 +- ...d_wall_from_carved_stone_stonecutting.json | 3 +- .../recipes/decorations/freezer.json | 3 +- .../decorations/gravitite_jukebox.json | 3 +- .../recipes/decorations/hellfire_wall.json | 3 +- ...wall_from_hellfire_stone_stonecutting.json | 3 +- .../decorations/holystone_brick_wall.json | 3 +- ...ll_from_holystone_bricks_stonecutting.json | 3 +- ...rick_wall_from_holystone_stonecutting.json | 3 +- .../decorations/holystone_stonecutter.json | 3 +- .../recipes/decorations/holystone_wall.json | 3 +- ...tone_wall_from_holystone_stonecutting.json | 3 +- .../recipes/decorations/icestone_wall.json | 3 +- ...stone_wall_from_icestone_stonecutting.json | 3 +- .../recipes/decorations/incubator.json | 3 +- .../decorations/mossy_holystone_wall.json | 3 +- ...all_from_mossy_holystone_stonecutting.json | 3 +- .../decorations/quicksoil_glass_pane.json | 3 +- .../recipes/decorations/skyroot_barrel.json | 3 +- .../recipes/decorations/skyroot_bed.json | 3 +- .../recipes/decorations/skyroot_beehive.json | 3 +- .../skyroot_cartography_table.json | 3 +- .../recipes/decorations/skyroot_chest.json | 3 +- .../decorations/skyroot_crafting_table.json | 3 +- .../recipes/decorations/skyroot_fence.json | 3 +- .../decorations/skyroot_fletching_table.json | 3 +- .../skyroot_gravitite_jukebox.json | 3 +- .../decorations/skyroot_grindstone.json | 3 +- .../skyroot_hanging_sign.json} | 13 +- .../recipes/decorations/skyroot_jukebox.json | 3 +- .../recipes/decorations/skyroot_loom.json | 3 +- .../recipes/decorations/skyroot_sign.json | 3 +- .../decorations/skyroot_smithing_table.json | 3 +- .../food/enchanted_berry_enchanting.json | 3 +- .../food/healing_stone_enchanting.json | 3 +- .../recipes/food/moa_egg_cake.json | 3 +- .../recipes/food/moa_egg_pumpkin_pie.json | 3 +- .../food/skyroot_milk_bucket_cake.json | 3 +- .../skyroot_milk_bucket_moa_egg_cake.json | 3 +- .../incubation/black_moa_incubation.json | 3 +- .../incubation/blue_moa_incubation.json | 3 +- .../incubation/white_moa_incubation.json | 3 +- .../aether_gold_nugget_from_blasting.json | 3 +- .../aether_gold_nugget_from_smelting.json | 3 +- .../aether_iron_nugget_from_blasting.json | 3 +- .../aether_iron_nugget_from_smelting.json | 3 +- .../recipes/misc/aether_tune_enchanting.json | 3 +- .../ambrosium_shard_from_ambrosium_block.json | 3 +- .../misc/ambrosium_shard_from_blasting.json | 3 +- .../misc/ambrosium_shard_from_smelting.json | 3 +- .../recipes/misc/book_of_lore.json | 3 +- .../recipes/misc/chinchilla_enchanting.json | 3 +- .../misc/enchanted_dart_enchanting.json | 3 +- .../enchanted_dart_shooter_enchanting.json | 3 +- .../recipes/misc/flower_to_purple_dye.json | 3 +- .../recipes/misc/flower_to_white_dye.json | 3 +- .../recipes/misc/high_freezing.json | 3 +- .../misc/ice_pendant_from_freezing.json | 3 +- .../recipes/misc/ice_ring_from_freezing.json | 3 +- .../misc/remedy_bucket_enchanting.json | 3 +- .../recipes/misc/skyroot_bucket.json | 3 +- .../recipes/misc/skyroot_stick.json | 3 +- .../misc/zanite_gemstone_from_blasting.json | 3 +- .../misc/zanite_gemstone_from_smelting.json | 3 +- .../zanite_gemstone_from_zanite_block.json | 3 +- .../recipes/redstone/holystone_button.json | 3 +- .../redstone/holystone_pressure_plate.json | 3 +- .../recipes/redstone/skyroot_button.json | 3 +- .../recipes/redstone/skyroot_door.json | 3 +- .../recipes/redstone/skyroot_fence_gate.json | 3 +- .../recipes/redstone/skyroot_lectern.json | 3 +- .../recipes/redstone/skyroot_note_block.json | 3 +- .../recipes/redstone/skyroot_piston.json | 3 +- .../redstone/skyroot_pressure_plate.json | 3 +- .../recipes/redstone/skyroot_trapdoor.json | 3 +- .../redstone/skyroot_tripwire_hook.json | 3 +- .../recipes/redstone/swet_slime_block.json | 3 +- .../recipes/redstone/swet_sticky_piston.json | 3 +- .../recipes/tools/aether_saddle.json | 3 +- .../recipes/tools/cold_parachute.json | 3 +- .../recipes/tools/diamond_axe_repairing.json | 3 +- .../recipes/tools/diamond_hoe_repairing.json | 3 +- .../tools/diamond_pickaxe_repairing.json | 3 +- .../tools/diamond_shovel_repairing.json | 3 +- .../recipes/tools/fishing_rod_repairing.json | 3 +- .../recipes/tools/golden_axe_repairing.json | 3 +- .../recipes/tools/golden_hoe_repairing.json | 3 +- .../recipes/tools/golden_parachute.json | 3 +- .../tools/golden_pickaxe_repairing.json | 3 +- .../tools/golden_shovel_repairing.json | 3 +- .../recipes/tools/gravitite_axe.json | 3 +- .../tools/gravitite_axe_repairing.json | 3 +- .../recipes/tools/gravitite_hoe.json | 3 +- .../tools/gravitite_hoe_repairing.json | 3 +- .../recipes/tools/gravitite_pickaxe.json | 3 +- .../tools/gravitite_pickaxe_repairing.json | 3 +- .../recipes/tools/gravitite_shovel.json | 3 +- .../tools/gravitite_shovel_repairing.json | 3 +- .../recipes/tools/holystone_axe.json | 3 +- .../tools/holystone_axe_repairing.json | 3 +- .../recipes/tools/holystone_hoe.json | 3 +- .../tools/holystone_hoe_repairing.json | 3 +- .../recipes/tools/holystone_pickaxe.json | 3 +- .../tools/holystone_pickaxe_repairing.json | 3 +- .../recipes/tools/holystone_shovel.json | 3 +- .../tools/holystone_shovel_repairing.json | 3 +- .../recipes/tools/iron_axe_repairing.json | 3 +- .../recipes/tools/iron_hoe_repairing.json | 3 +- .../recipes/tools/iron_pickaxe_repairing.json | 3 +- .../recipes/tools/iron_shovel_repairing.json | 3 +- .../recipes/tools/nature_staff.json | 3 +- .../tools/netherite_axe_repairing.json | 3 +- .../tools/netherite_hoe_repairing.json | 3 +- .../tools/netherite_pickaxe_repairing.json | 3 +- .../tools/netherite_shovel_repairing.json | 3 +- .../recipes/tools/skyroot_axe.json | 3 +- .../recipes/tools/skyroot_axe_repairing.json | 3 +- .../recipes/tools/skyroot_hoe.json | 3 +- .../recipes/tools/skyroot_hoe_repairing.json | 3 +- .../recipes/tools/skyroot_pickaxe.json | 3 +- .../tools/skyroot_pickaxe_repairing.json | 3 +- .../recipes/tools/skyroot_shovel.json | 3 +- .../tools/skyroot_shovel_repairing.json | 3 +- .../recipes/tools/stone_axe_repairing.json | 3 +- .../recipes/tools/stone_hoe_repairing.json | 3 +- .../tools/stone_pickaxe_repairing.json | 3 +- .../recipes/tools/stone_shovel_repairing.json | 3 +- .../advancements/recipes/tools/swet_lead.json | 3 +- .../recipes/tools/wooden_axe_repairing.json | 3 +- .../recipes/tools/wooden_hoe_repairing.json | 3 +- .../tools/wooden_pickaxe_repairing.json | 3 +- .../tools/wooden_shovel_repairing.json | 3 +- .../recipes/tools/zanite_axe.json | 3 +- .../recipes/tools/zanite_axe_repairing.json | 3 +- .../recipes/tools/zanite_hoe.json | 3 +- .../recipes/tools/zanite_hoe_repairing.json | 3 +- .../recipes/tools/zanite_pickaxe.json | 3 +- .../tools/zanite_pickaxe_repairing.json | 3 +- .../recipes/tools/zanite_shovel.json | 3 +- .../tools/zanite_shovel_repairing.json | 3 +- .../recipes/transportation/skyroot_boat.json | 3 +- .../transportation/skyroot_chest_boat.json | 3 +- .../data/aether/advancements/regen_stone.json | 3 +- .../aether/advancements/silver_dungeon.json | 3 +- .../data/aether/advancements/the_aether.json | 3 +- .../aether/advancements/valkyrie_hoe.json | 39 +- .../aether/advancements/valkyrie_loot.json | 3 +- .../data/aether/advancements/zanite.json | 3 +- .../aether/advancements/zephyr_hammer.json | 3 +- .../aether/loot_modifiers/remove_seeds.json | 2 +- .../advancements/enter_aether.json | 3 +- .../aether/loot_tables/blocks/aerogel.json | 3 +- .../loot_tables/blocks/aerogel_slab.json | 3 +- .../loot_tables/blocks/aerogel_stairs.json | 3 +- .../loot_tables/blocks/aerogel_wall.json | 3 +- .../loot_tables/blocks/aether_dirt.json | 3 +- .../loot_tables/blocks/aether_dirt_path.json | 3 +- .../loot_tables/blocks/aether_farmland.json | 3 +- .../blocks/aether_grass_block.json | 3 +- .../loot_tables/blocks/aether_portal.json | 3 +- .../data/aether/loot_tables/blocks/altar.json | 3 +- .../loot_tables/blocks/ambrosium_block.json | 3 +- .../loot_tables/blocks/ambrosium_ore.json | 3 +- .../loot_tables/blocks/ambrosium_torch.json | 3 +- .../blocks/ambrosium_wall_torch.json | 3 +- .../loot_tables/blocks/angelic_slab.json | 3 +- .../loot_tables/blocks/angelic_stairs.json | 3 +- .../loot_tables/blocks/angelic_stone.json | 3 +- .../loot_tables/blocks/angelic_wall.json | 3 +- .../aether/loot_tables/blocks/berry_bush.json | 3 +- .../loot_tables/blocks/berry_bush_stem.json | 3 +- .../loot_tables/blocks/blue_aercloud.json | 3 +- .../blocks/boss_doorway_angelic_stone.json | 3 +- .../blocks/boss_doorway_carved_stone.json | 3 +- .../blocks/boss_doorway_hellfire_stone.json | 3 +- .../boss_doorway_light_angelic_stone.json | 3 +- .../boss_doorway_light_hellfire_stone.json | 3 +- .../blocks/boss_doorway_sentry_stone.json | 3 +- .../loot_tables/blocks/carved_slab.json | 3 +- .../loot_tables/blocks/carved_stairs.json | 3 +- .../loot_tables/blocks/carved_stone.json | 3 +- .../loot_tables/blocks/carved_wall.json | 3 +- .../loot_tables/blocks/chest_mimic.json | 3 +- .../loot_tables/blocks/cold_aercloud.json | 3 +- .../blocks/crystal_fruit_leaves.json | 7 +- .../loot_tables/blocks/crystal_leaves.json | 5 +- .../blocks/decorated_holiday_leaves.json | 5 +- .../blocks/enchanted_aether_grass_block.json | 3 +- .../blocks/enchanted_gravitite.json | 3 +- .../aether/loot_tables/blocks/freezer.json | 3 +- .../loot_tables/blocks/frosted_ice.json | 3 +- .../loot_tables/blocks/golden_aercloud.json | 3 +- .../loot_tables/blocks/golden_oak_leaves.json | 9 +- .../loot_tables/blocks/golden_oak_log.json | 3 +- .../blocks/golden_oak_sapling.json | 3 +- .../loot_tables/blocks/golden_oak_wood.json | 3 +- .../loot_tables/blocks/gravitite_ore.json | 3 +- .../loot_tables/blocks/hellfire_slab.json | 3 +- .../loot_tables/blocks/hellfire_stairs.json | 3 +- .../loot_tables/blocks/hellfire_stone.json | 3 +- .../loot_tables/blocks/hellfire_wall.json | 3 +- .../loot_tables/blocks/holiday_leaves.json | 5 +- .../aether/loot_tables/blocks/holystone.json | 3 +- .../blocks/holystone_brick_slab.json | 3 +- .../blocks/holystone_brick_stairs.json | 3 +- .../blocks/holystone_brick_wall.json | 3 +- .../loot_tables/blocks/holystone_bricks.json | 3 +- .../loot_tables/blocks/holystone_button.json | 3 +- .../blocks/holystone_pressure_plate.json | 3 +- .../loot_tables/blocks/holystone_slab.json | 3 +- .../loot_tables/blocks/holystone_stairs.json | 3 +- .../loot_tables/blocks/holystone_wall.json | 3 +- .../aether/loot_tables/blocks/icestone.json | 3 +- .../loot_tables/blocks/icestone_slab.json | 3 +- .../loot_tables/blocks/icestone_stairs.json | 3 +- .../loot_tables/blocks/icestone_wall.json | 3 +- .../aether/loot_tables/blocks/incubator.json | 3 +- .../blocks/light_angelic_stone.json | 3 +- .../blocks/light_hellfire_stone.json | 3 +- .../blocks/locked_angelic_stone.json | 3 +- .../blocks/locked_carved_stone.json | 3 +- .../blocks/locked_hellfire_stone.json | 3 +- .../blocks/locked_light_angelic_stone.json | 3 +- .../blocks/locked_light_hellfire_stone.json | 3 +- .../blocks/locked_sentry_stone.json | 3 +- .../loot_tables/blocks/mossy_holystone.json | 3 +- .../blocks/mossy_holystone_slab.json | 3 +- .../blocks/mossy_holystone_stairs.json | 3 +- .../blocks/mossy_holystone_wall.json | 3 +- .../aether/loot_tables/blocks/pillar.json | 3 +- .../aether/loot_tables/blocks/pillar_top.json | 3 +- .../loot_tables/blocks/potted_berry_bush.json | 3 +- .../blocks/potted_berry_bush_stem.json | 3 +- .../blocks/potted_golden_oak_sapling.json | 3 +- .../blocks/potted_purple_flower.json | 3 +- .../blocks/potted_skyroot_sapling.json | 3 +- .../blocks/potted_white_flower.json | 3 +- .../aether/loot_tables/blocks/present.json | 3 +- .../loot_tables/blocks/purple_flower.json | 3 +- .../aether/loot_tables/blocks/quicksoil.json | 3 +- .../loot_tables/blocks/quicksoil_glass.json | 3 +- .../blocks/quicksoil_glass_pane.json | 3 +- .../loot_tables/blocks/sentry_stone.json | 3 +- .../loot_tables/blocks/skyroot_bed.json | 3 +- .../loot_tables/blocks/skyroot_bookshelf.json | 3 +- .../loot_tables/blocks/skyroot_button.json | 3 +- .../loot_tables/blocks/skyroot_door.json | 3 +- .../loot_tables/blocks/skyroot_fence.json | 3 +- .../blocks/skyroot_fence_gate.json | 3 +- .../blocks/skyroot_hanging_sign.json | 21 + .../loot_tables/blocks/skyroot_leaves.json | 7 +- .../loot_tables/blocks/skyroot_log.json | 3 +- .../loot_tables/blocks/skyroot_planks.json | 3 +- .../blocks/skyroot_pressure_plate.json | 3 +- .../loot_tables/blocks/skyroot_sapling.json | 3 +- .../loot_tables/blocks/skyroot_sign.json | 3 +- .../loot_tables/blocks/skyroot_slab.json | 3 +- .../loot_tables/blocks/skyroot_stairs.json | 3 +- .../loot_tables/blocks/skyroot_trapdoor.json | 3 +- .../blocks/skyroot_wall_hanging_sign.json | 21 + .../loot_tables/blocks/skyroot_wood.json | 3 +- .../blocks/stripped_skyroot_log.json | 3 +- .../blocks/stripped_skyroot_wood.json | 3 +- .../aether/loot_tables/blocks/sun_altar.json | 3 +- .../blocks/trapped_angelic_stone.json | 3 +- .../blocks/trapped_carved_stone.json | 3 +- .../blocks/trapped_hellfire_stone.json | 3 +- .../blocks/trapped_light_angelic_stone.json | 3 +- .../blocks/trapped_light_hellfire_stone.json | 3 +- .../blocks/trapped_sentry_stone.json | 3 +- .../loot_tables/blocks/treasure_chest.json | 3 +- .../treasure_doorway_angelic_stone.json | 3 +- .../blocks/treasure_doorway_carved_stone.json | 3 +- .../treasure_doorway_hellfire_stone.json | 3 +- .../treasure_doorway_light_angelic_stone.json | 3 +- ...treasure_doorway_light_hellfire_stone.json | 3 +- .../blocks/treasure_doorway_sentry_stone.json | 3 +- .../loot_tables/blocks/unstable_obsidian.json | 3 +- .../loot_tables/blocks/white_flower.json | 3 +- .../loot_tables/blocks/zanite_block.json | 3 +- .../aether/loot_tables/blocks/zanite_ore.json | 3 +- .../chests/dungeon/bronze/bronze_dungeon.json | 3 +- .../dungeon/bronze/bronze_dungeon_disc.json | 3 +- .../bronze/bronze_dungeon_gummies.json | 3 +- .../dungeon/bronze/bronze_dungeon_loot.json | 3 +- .../bronze/bronze_dungeon_neptune.json | 3 +- .../dungeon/bronze/bronze_dungeon_reward.json | 3 +- .../dungeon/bronze/bronze_dungeon_trash.json | 3 +- .../bronze/bronze_dungeon_treasure.json | 3 +- .../dungeon/gold/gold_dungeon_reward.json | 3 +- .../dungeon/gold/gold_dungeon_treasure.json | 3 +- .../chests/dungeon/silver/silver_dungeon.json | 3 +- .../silver/silver_dungeon_cape_config.json | 3 +- .../dungeon/silver/silver_dungeon_disc.json | 3 +- .../silver/silver_dungeon_gravitite.json | 3 +- .../silver/silver_dungeon_gummies.json | 3 +- .../dungeon/silver/silver_dungeon_loot.json | 3 +- .../dungeon/silver/silver_dungeon_reward.json | 3 +- .../dungeon/silver/silver_dungeon_trash.json | 3 +- .../silver/silver_dungeon_treasure.json | 3 +- .../silver/silver_dungeon_valkyrie.json | 3 +- .../loot_tables/chests/ruined_portal.json | 3 +- .../loot_tables/entities/aechor_plant.json | 3 +- .../aether/loot_tables/entities/aerbunny.json | 3 +- .../aether/loot_tables/entities/aerwhale.json | 3 +- .../loot_tables/entities/blue_swet.json | 3 +- .../loot_tables/entities/cockatrice.json | 3 +- .../loot_tables/entities/evil_whirlwind.json | 3 +- .../loot_tables/entities/fire_minion.json | 3 +- .../loot_tables/entities/flying_cow.json | 3 +- .../loot_tables/entities/golden_swet.json | 3 +- .../aether/loot_tables/entities/mimic.json | 3 +- .../data/aether/loot_tables/entities/moa.json | 3 +- .../aether/loot_tables/entities/phyg.json | 3 +- .../aether/loot_tables/entities/sentry.json | 3 +- .../aether/loot_tables/entities/sheepuff.json | 3 +- .../loot_tables/entities/sheepuff/black.json | 3 +- .../loot_tables/entities/sheepuff/blue.json | 3 +- .../loot_tables/entities/sheepuff/brown.json | 3 +- .../loot_tables/entities/sheepuff/cyan.json | 3 +- .../loot_tables/entities/sheepuff/gray.json | 3 +- .../loot_tables/entities/sheepuff/green.json | 3 +- .../entities/sheepuff/light_blue.json | 3 +- .../entities/sheepuff/light_gray.json | 3 +- .../loot_tables/entities/sheepuff/lime.json | 3 +- .../entities/sheepuff/magenta.json | 3 +- .../loot_tables/entities/sheepuff/orange.json | 3 +- .../loot_tables/entities/sheepuff/pink.json | 3 +- .../loot_tables/entities/sheepuff/purple.json | 3 +- .../loot_tables/entities/sheepuff/red.json | 3 +- .../loot_tables/entities/sheepuff/white.json | 3 +- .../loot_tables/entities/sheepuff/yellow.json | 3 +- .../aether/loot_tables/entities/slider.json | 3 +- .../loot_tables/entities/sun_spirit.json | 3 +- .../aether/loot_tables/entities/valkyrie.json | 3 +- .../loot_tables/entities/valkyrie_queen.json | 3 +- .../loot_tables/entities/whirlwind.json | 3 +- .../aether/loot_tables/entities/zephyr.json | 3 +- .../selectors/evil_whirlwind_junk.json | 3 +- .../loot_tables/selectors/whirlwind_junk.json | 3 +- .../stripping/strip_golden_oak.json | 3 +- .../old_netherite_gloves_smithing.json | 12 - .../data/aether/recipes/skyroot_bed.json | 2 +- .../aether/recipes/skyroot_hanging_sign.json | 23 + .../data/aether/trim_material/gravitite.json | 9 + .../data/aether/trim_material/zanite.json | 9 + .../tags/blocks/ceiling_hanging_signs.json | 5 + .../blocks/enchantment_power_provider.json | 5 + .../minecraft/tags/blocks/mineable/axe.json | 2 + .../tags/blocks/sniffer_diggable_block.json | 7 + .../minecraft/tags/blocks/stone_buttons.json | 5 + .../tags/blocks/sword_efficient.json | 6 + .../tags/blocks/wall_hanging_signs.json | 5 + .../minecraft/tags/items/hanging_signs.json | 5 + .../minecraft/tags/items/stone_buttons.json | 5 + .../minecraft/tags/items/trim_materials.json | 6 + .../minecraft/tags/items/trimmable_armor.json | 35 + src/generated/resources/pack.mcmeta | 3 +- .../java/com/aetherteam/aether/Aether.java | 64 +- .../aether/advancement/IncubationTrigger.java | 10 +- .../aether/advancement/LoreTrigger.java | 10 +- .../aetherteam/aether/block/AetherBlocks.java | 123 +-- .../aetherteam/aether/block/Floatable.java | 4 +- .../block/construction/AetherFarmBlock.java | 6 +- .../SkyrootCeilingHangingSignBlock.java | 19 + .../SkyrootWallHangingSignBlock.java | 19 + .../dispenser/AetherDispenseBehaviors.java | 94 ++- .../block/miscellaneous/FloatingBlock.java | 8 +- .../miscellaneous/UnstableObsidianBlock.java | 4 - .../block/portal/AetherPortalBlock.java | 10 +- .../block/portal/AetherPortalForcer.java | 8 +- .../aether/block/portal/PortalSoundUtil.java | 2 +- .../AbstractAetherFurnaceBlockEntity.java | 2 +- .../blockentity/AetherBlockEntityTypes.java | 3 + .../blockentity/IncubatorBlockEntity.java | 9 +- .../SkyrootHangingSignBlockEntity.java | 17 + .../blockentity/TreasureChestBlockEntity.java | 68 +- .../aether/capability/AetherCapabilities.java | 7 + .../capability/accessory/MobAccessory.java | 25 + .../accessory/MobAccessoryCapability.java | 72 ++ .../item/DroppedItemCapability.java | 2 +- .../lightning/LightningTrackerCapability.java | 2 +- .../player/AetherPlayerCapability.java | 32 +- .../aether/client/AetherMusicManager.java | 4 +- .../event/hooks/DimensionClientHooks.java | 8 +- .../aether/client/event/hooks/GuiHooks.java | 44 +- .../client/event/hooks/HandRenderHooks.java | 9 +- .../client/event/hooks/WorldPreviewHooks.java | 2 +- .../client/event/listeners/GuiListener.java | 19 +- .../event/listeners/WorldPreviewListener.java | 2 +- .../gui/component/customization/ColorBox.java | 6 +- .../customization/InactiveImageButton.java | 14 +- .../dialogue/DialogueAnswerComponent.java | 15 +- .../dialogue/DialogueChoiceComponent.java | 9 +- .../component/inventory/AccessoryButton.java | 10 +- .../component/inventory/LorePageButton.java | 15 +- .../gui/component/menu/AetherMenuButton.java | 16 +- .../gui/component/menu/DynamicMenuButton.java | 6 +- .../gui/component/skins/ChangeSkinButton.java | 11 +- .../gui/component/skins/PatreonButton.java | 13 +- .../gui/component/skins/RefreshButton.java | 13 +- .../screen/ValkyrieQueenDialogueScreen.java | 16 +- .../AbstractAetherFurnaceScreen.java | 16 +- .../inventory/AbstractRecipeBookScreen.java | 20 +- .../screen/inventory/AccessoriesScreen.java | 59 +- .../gui/screen/inventory/IncubatorScreen.java | 16 +- .../gui/screen/inventory/LoreBookScreen.java | 68 +- .../gui/screen/inventory/SunAltarScreen.java | 16 +- .../screen/menu/AetherModUpdateIndicator.java | 14 +- .../gui/screen/menu/AetherTitleScreen.java | 68 +- .../gui/screen/menu/TitleScreenBehavior.java | 23 +- .../screen/menu/VanillaLeftTitleScreen.java | 78 +- .../perks/AetherCustomizationsScreen.java | 15 +- .../gui/screen/perks/MoaSkinsScreen.java | 114 ++- .../client/renderer/AetherModelLayers.java | 4 + .../client/renderer/AetherOverlays.java | 84 +- .../client/renderer/AetherRenderers.java | 40 +- .../renderer/accessory/GlovesRenderer.java | 63 +- .../accessory/ShieldOfRepulsionRenderer.java | 70 +- .../accessory/layer/ArmorStandCapeLayer.java | 75 ++ .../accessory/layer/EntityAccessoryLayer.java | 57 ++ .../renderer/accessory/model/CapeModel.java | 55 ++ .../renderer/accessory/model/GlovesModel.java | 15 +- .../renderer/entity/AerbunnyRenderer.java | 2 +- .../entity/FloatingBlockRenderer.java | 2 +- .../entity/LightningKnifeRenderer.java | 2 +- .../renderer/entity/model/BipedBirdModel.java | 16 +- .../level/AetherSkyRenderEffects.java | 2 +- .../player/layer/PlayerWingsLayer.java | 6 +- .../aether/command/AetherTimeCommand.java | 6 +- .../aether/command/EternalDayCommand.java | 4 +- .../command/PlayerCapabilityCommand.java | 2 +- .../command/SunAltarWhitelistCommand.java | 14 +- .../command/WorldPreviewFixCommand.java | 2 +- .../generators/AetherAdvancementData.java | 9 +- .../data/generators/AetherBlockStateData.java | 1 + .../data/generators/AetherItemModelData.java | 73 +- .../data/generators/AetherLanguageData.java | 35 +- .../generators/AetherLootModifierData.java | 2 +- .../data/generators/AetherRecipeData.java | 18 +- .../data/generators/AetherRegistrySets.java | 4 +- .../data/generators/loot/AetherBlockLoot.java | 3 + .../generators/tags/AetherBlockTagData.java | 13 + .../tags/AetherDamageTypeTagData.java | 2 +- .../generators/tags/AetherItemTagData.java | 37 + .../providers/AetherBlockStateProvider.java | 13 +- .../providers/AetherItemModelProvider.java | 34 + .../{ => registries}/AetherDamageTypes.java | 22 +- .../registries/AetherTrimMaterials.java | 40 + .../aether/effect/InebriationEffect.java | 8 +- .../aether/effect/RemedyEffect.java | 2 +- .../aether/entity/AetherBossMob.java | 14 +- .../aetherteam/aether/entity/EntityUtil.java | 8 +- .../aether/entity/MountableMob.java | 4 +- .../aetherteam/aether/entity/NotGrounded.java | 2 +- .../ai/controller/FallingMoveControl.java | 2 +- .../entity/ai/goal/BeeGrowBerryBushGoal.java | 6 +- .../entity/ai/goal/EatAetherGrassGoal.java | 20 +- .../ai/goal/FallingRandomStrollGoal.java | 2 +- .../entity/ai/goal/FoxEatBerryBushGoal.java | 12 +- .../aether/entity/ai/goal/MoaFollowGoal.java | 2 +- .../entity/block/FloatingBlockEntity.java | 64 +- .../aether/entity/block/TntPresent.java | 10 +- .../entity/miscellaneous/CloudMinion.java | 12 +- .../entity/miscellaneous/Parachute.java | 10 +- .../miscellaneous/SkyrootBoatBehavior.java | 6 +- .../entity/monster/AbstractWhirlwind.java | 22 +- .../aether/entity/monster/AechorPlant.java | 14 +- .../aether/entity/monster/Cockatrice.java | 14 +- .../aether/entity/monster/EvilWhirlwind.java | 2 +- .../entity/monster/PassiveWhirlwind.java | 4 +- .../aether/entity/monster/Swet.java | 34 +- .../aether/entity/monster/Zephyr.java | 8 +- .../monster/dungeon/AbstractValkyrie.java | 20 +- .../entity/monster/dungeon/FireMinion.java | 4 +- .../aether/entity/monster/dungeon/Mimic.java | 6 +- .../aether/entity/monster/dungeon/Sentry.java | 8 +- .../entity/monster/dungeon/Valkyrie.java | 6 +- .../entity/monster/dungeon/boss/Slider.java | 12 +- .../monster/dungeon/boss/SunSpirit.java | 36 +- .../monster/dungeon/boss/ValkyrieQueen.java | 42 +- .../dungeon/boss/ai/AvoidObstacles.java | 4 +- .../monster/dungeon/boss/ai/Collide.java | 4 +- .../entity/monster/dungeon/boss/ai/Crush.java | 10 +- .../aether/entity/passive/Aerbunny.java | 26 +- .../aether/entity/passive/Aerwhale.java | 16 +- .../aether/entity/passive/FlyingCow.java | 2 +- .../aetherteam/aether/entity/passive/Moa.java | 28 +- .../entity/passive/MountableAnimal.java | 14 +- .../aether/entity/passive/Sheepuff.java | 21 +- .../aether/entity/passive/WingedAnimal.java | 4 +- .../entity/projectile/ZephyrSnowball.java | 16 +- .../projectile/crystal/AbstractCrystal.java | 14 +- .../projectile/crystal/CloudCrystal.java | 6 +- .../projectile/crystal/FireCrystal.java | 12 +- .../entity/projectile/crystal/IceCrystal.java | 10 +- .../projectile/crystal/ThunderCrystal.java | 12 +- .../projectile/crystal/WeaknessDamage.java | 4 +- .../entity/projectile/dart/AbstractDart.java | 8 +- .../projectile/weapon/HammerProjectile.java | 34 +- .../weapon/ThrownLightningKnife.java | 6 +- .../aether/event/hooks/AbilityHooks.java | 24 +- .../aether/event/hooks/CapabilityHooks.java | 6 +- .../aether/event/hooks/DimensionHooks.java | 16 +- .../aether/event/hooks/EntityHooks.java | 403 ++++++++- .../event/listeners/EntityListener.java | 41 + .../abilities/ToolAbilityListener.java | 2 +- .../AbstractPlacementBanRecipeCategory.java | 12 +- .../AbstractAetherCookingRecipeCategory.java | 10 +- .../item/AltarRepairRecipeCategory.java | 12 +- .../item/EnchantingRecipeCategory.java | 12 +- .../item/FreezingRecipeCategory.java | 12 +- .../item/IncubationRecipeCategory.java | 10 +- .../inventory/container/LoreInventory.java | 2 +- .../menu/AbstractAetherFurnaceMenu.java | 2 +- .../inventory/menu/AccessoriesMenu.java | 31 +- .../aether/inventory/menu/IncubatorMenu.java | 2 +- .../menu/slot/IncubatorItemSlot.java | 2 +- .../aether/item/AetherCreativeTabs.java | 792 +++++++++--------- .../aetherteam/aether/item/AetherItems.java | 18 +- .../aetherteam/aether/item/EquipmentUtil.java | 43 +- .../abilities/FreezingAccessory.java | 4 +- .../abilities/ShieldOfRepulsionAccessory.java | 4 +- .../abilities/SlowFallAccessory.java | 2 +- .../cape/InvisibilityCloakItem.java | 6 +- .../item/accessories/gloves/GlovesItem.java | 30 +- .../accessories/gloves/GoldGlovesItem.java | 3 +- .../accessories/gloves/LeatherGlovesItem.java | 3 +- .../accessories/gloves/ZaniteGlovesItem.java | 3 +- .../abilities/armor/GravititeArmor.java | 2 +- .../combat/abilities/armor/PhoenixArmor.java | 8 +- .../combat/abilities/armor/ValkyrieArmor.java | 2 +- .../abilities/weapon/GravititeWeapon.java | 2 +- .../abilities/weapon/HolystoneWeapon.java | 2 +- .../item/combat/loot/CandyCaneSwordItem.java | 2 +- .../item/combat/loot/CloudStaffItem.java | 4 +- .../item/combat/loot/HolySwordItem.java | 4 +- .../item/combat/loot/LightningSwordItem.java | 4 +- .../item/combat/loot/PigSlayerItem.java | 6 +- .../item/miscellaneous/ParachuteItem.java | 2 +- .../aether/mixin/AetherMixinHooks.java | 132 ++- .../client/AbstractClientPlayerMixin.java | 15 +- .../mixins/client/AdvancementToastMixin.java | 8 +- .../mixins/client/BossHealthOverlayMixin.java | 2 +- .../mixins/client/ConnectScreenMixin.java | 5 +- .../mixin/mixins/client/ElytraLayerMixin.java | 51 ++ .../mixins/client/SmithingScreenMixin.java | 64 ++ .../mixins/client/accessor/GuiAccessor.java | 5 - .../client/accessor/TitleScreenAccessor.java | 6 +- .../mixins/common/AbstractArrowMixin.java | 4 +- .../mixin/mixins/common/ArmorStandMixin.java | 44 + .../aether/mixin/mixins/common/MobMixin.java | 60 ++ .../mixins/common/ModelBuilderMixin.java | 31 + .../mixin/mixins/common/PlayerMixin.java | 2 +- .../clientbound/AetherTravelPacket.java | 3 +- .../packet/clientbound/CloudMinionPacket.java | 2 +- .../packet/clientbound/HealthResetPacket.java | 2 +- .../packet/clientbound/MoaInteractPacket.java | 2 +- .../clientbound/RemountAerbunnyPacket.java | 2 +- .../packet/clientbound/SetVehiclePacket.java | 4 +- .../clientbound/ZephyrSnowballHitPacket.java | 2 +- .../serverbound/AerbunnyPuffPacket.java | 2 +- .../packet/serverbound/ClearItemPacket.java | 2 +- .../HammerProjectileLaunchPacket.java | 4 +- .../packet/serverbound/LoreExistsPacket.java | 2 +- .../serverbound/NpcPlayerInteractPacket.java | 2 +- .../packet/serverbound/StepHeightPacket.java | 2 +- .../serverbound/SunAltarUpdatePacket.java | 2 +- .../aether/perk/data/ClientPerkData.java | 2 +- .../world/feature/AetherLakeFeature.java | 8 +- .../world/processor/DoubleDropsProcessor.java | 4 +- .../GlowstonePortalAgeProcessor.java | 14 +- .../processor/HolystoneReplaceProcessor.java | 6 +- .../world/processor/NoReplaceProcessor.java | 4 +- .../world/processor/SurfaceRuleProcessor.java | 10 +- .../processor/VerticalGradientProcessor.java | 6 +- .../structure/SilverDungeonStructure.java | 2 +- src/main/resources/META-INF/mods.toml | 10 +- src/main/resources/aether.mixins.json | 5 + .../entity/mobs/cockatrice/cockatrice.png | Bin 5255 -> 5451 bytes .../mobs/cockatrice/cockatrice_emissive.png | Bin 4540 -> 562 bytes .../textures/entity/mobs/moa/black_moa.png | Bin 5160 -> 4980 bytes .../textures/entity/mobs/moa/blue_moa.png | Bin 5447 -> 5728 bytes .../textures/entity/mobs/moa/classic_moa.png | Bin 5517 -> 5775 bytes .../aether/textures/entity/mobs/moa/mos.png | Bin 5213 -> 5297 bytes .../textures/entity/mobs/moa/raptor.png | Bin 3107 -> 6242 bytes .../mobs/moa/skins/arctic_moa/arctic_moa.png | Bin 5443 -> 5586 bytes .../moa/skins/boko_yellow/boko_yellow.png | Bin 6003 -> 6287 bytes .../skins/boko_yellow/boko_yellow_saddle.png | Bin 1657 -> 1660 bytes .../skins/cockatrice_moa/cockatrice_moa.png | Bin 5250 -> 5572 bytes .../cockatrice_moa_emissive.png | Bin 479 -> 538 bytes .../skins/crookjaw_purple/crookjaw_purple.png | Bin 6107 -> 6361 bytes .../crookjaw_purple_emissive.png | Bin 493 -> 562 bytes .../moa/skins/gharrix_red/gharrix_red.png | Bin 5672 -> 5820 bytes .../moa/skins/halcian_pink/halcian_pink.png | Bin 6230 -> 6418 bytes .../moa/skins/phoenix_moa/phoenix_moa.png | Bin 7847 -> 8050 bytes .../phoenix_moa/phoenix_moa_emissive.png | Bin 407 -> 441 bytes .../mobs/moa/skins/sentry_moa/sentry_moa.png | Bin 6712 -> 6900 bytes .../skins/sentry_moa/sentry_moa_emissive.png | Bin 665 -> 695 bytes .../skins/tivalier_green/tivalier_green.png | Bin 5604 -> 5843 bytes .../moa/skins/valkyrie_moa/valkyrie_moa.png | Bin 5576 -> 5785 bytes .../valkyrie_moa/valkyrie_moa_saddle.png | Bin 1424 -> 1386 bytes .../textures/entity/mobs/moa/white_moa.png | Bin 5141 -> 5134 bytes .../textures/entity/signs/hanging/skyroot.png | Bin 0 -> 1030 bytes .../chest/lootr/treasure_chest_opened.png | Bin 0 -> 2272 bytes .../chest/lootr/treasure_chest_unopened.png | Bin 0 -> 2230 bytes .../textures/gui/hanging_signs/skyroot.png | Bin 0 -> 395 bytes .../miscellaneous/skyroot_hanging_sign.png | Bin 0 -> 406 bytes .../textures/{gui/slots => slot}/cape.png | Bin .../textures/{gui/slots => slot}/gloves.png | Bin .../textures/{gui/slots => slot}/misc.png | Bin .../textures/{gui/slots => slot}/pendant.png | Bin .../textures/{gui/slots => slot}/ring.png | Bin .../textures/{gui/slots => slot}/shield.png | Bin .../trims/color_palettes/gravitite.png | Bin 0 -> 143 bytes .../textures/trims/color_palettes/zanite.png | Bin 0 -> 143 bytes .../textures/trims/items/gloves_trim.png | Bin 0 -> 215 bytes .../assets/minecraft/atlases/armor_trims.json | 46 + .../assets/minecraft/atlases/blocks.json | 23 + .../aether/curios/entities/humanoids.json | 4 + .../data/aether/curios/entities/player.json | 4 + .../data/aether/curios/entities/stand.json | 4 + .../aether/curios/slots/aether_accessory.json | 5 + .../data/aether/curios/slots/aether_cape.json | 4 + .../aether/curios/slots/aether_gloves.json | 4 + .../aether/curios/slots/aether_pendant.json | 4 + .../data/aether/curios/slots/aether_ring.json | 5 + .../aether/curios/slots/aether_shield.json | 4 + .../{curios_tags => accessories}/pack.png | Bin .../curios/curios/entities/humanoids.json | 4 + .../data/curios/curios/entities/player.json | 4 + .../data/curios/curios/entities/stand.json | 4 + .../data/curios/curios/slots/charm.json | 3 + .../data/curios/curios/slots/ring.json | 3 + .../curios/tags/items/aether_accessory.json | 0 .../data/curios/tags/items/aether_cape.json | 0 .../data/curios/tags/items/aether_gloves.json | 0 .../curios/tags/items/aether_pendant.json | 0 .../data/curios/tags/items/aether_ring.json | 0 .../data/curios/tags/items/aether_shield.json | 0 .../data/curios/tags/items/back.json | 0 .../data/curios/tags/items/body.json | 0 .../data/curios/tags/items/charm.json | 0 .../data/curios/tags/items/hands.json | 0 .../data/curios/tags/items/necklace.json | 0 .../data/curios/tags/items/ring.json | 0 .../resources/packs/curios_override/pack.png | Bin 0 -> 2208 bytes update.json | 8 + 1216 files changed, 9775 insertions(+), 3283 deletions(-) create mode 100644 src/generated/resources/assets/aether/blockstates/skyroot_hanging_sign.json create mode 100644 src/generated/resources/assets/aether/blockstates/skyroot_wall_hanging_sign.json create mode 100644 src/generated/resources/assets/aether/models/block/skyroot_hanging_sign.json create mode 100644 src/generated/resources/assets/aether/models/item/chainmail_gloves_amethyst_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/chainmail_gloves_copper_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/chainmail_gloves_diamond_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/chainmail_gloves_emerald_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/chainmail_gloves_gold_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/chainmail_gloves_iron_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/chainmail_gloves_lapis_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/chainmail_gloves_netherite_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/chainmail_gloves_quartz_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/chainmail_gloves_redstone_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/diamond_gloves_amethyst_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/diamond_gloves_copper_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/diamond_gloves_diamond_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/diamond_gloves_emerald_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/diamond_gloves_gold_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/diamond_gloves_iron_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/diamond_gloves_lapis_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/diamond_gloves_netherite_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/diamond_gloves_quartz_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/diamond_gloves_redstone_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/golden_gloves_amethyst_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/golden_gloves_copper_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/golden_gloves_diamond_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/golden_gloves_emerald_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/golden_gloves_gold_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/golden_gloves_iron_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/golden_gloves_lapis_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/golden_gloves_netherite_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/golden_gloves_quartz_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/golden_gloves_redstone_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/gravitite_boots_amethyst_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/gravitite_boots_copper_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/gravitite_boots_diamond_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/gravitite_boots_emerald_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/gravitite_boots_gold_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/gravitite_boots_iron_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/gravitite_boots_lapis_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/gravitite_boots_netherite_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/gravitite_boots_quartz_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/gravitite_boots_redstone_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/gravitite_chestplate_amethyst_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/gravitite_chestplate_copper_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/gravitite_chestplate_diamond_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/gravitite_chestplate_emerald_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/gravitite_chestplate_gold_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/gravitite_chestplate_iron_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/gravitite_chestplate_lapis_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/gravitite_chestplate_netherite_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/gravitite_chestplate_quartz_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/gravitite_chestplate_redstone_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/gravitite_gloves_amethyst_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/gravitite_gloves_copper_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/gravitite_gloves_diamond_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/gravitite_gloves_emerald_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/gravitite_gloves_gold_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/gravitite_gloves_iron_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/gravitite_gloves_lapis_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/gravitite_gloves_netherite_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/gravitite_gloves_quartz_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/gravitite_gloves_redstone_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/gravitite_helmet_amethyst_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/gravitite_helmet_copper_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/gravitite_helmet_diamond_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/gravitite_helmet_emerald_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/gravitite_helmet_gold_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/gravitite_helmet_iron_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/gravitite_helmet_lapis_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/gravitite_helmet_netherite_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/gravitite_helmet_quartz_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/gravitite_helmet_redstone_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/gravitite_leggings_amethyst_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/gravitite_leggings_copper_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/gravitite_leggings_diamond_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/gravitite_leggings_emerald_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/gravitite_leggings_gold_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/gravitite_leggings_iron_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/gravitite_leggings_lapis_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/gravitite_leggings_netherite_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/gravitite_leggings_quartz_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/gravitite_leggings_redstone_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/iron_gloves_amethyst_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/iron_gloves_copper_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/iron_gloves_diamond_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/iron_gloves_emerald_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/iron_gloves_gold_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/iron_gloves_iron_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/iron_gloves_lapis_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/iron_gloves_netherite_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/iron_gloves_quartz_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/iron_gloves_redstone_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/leather_gloves_amethyst_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/leather_gloves_copper_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/leather_gloves_diamond_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/leather_gloves_emerald_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/leather_gloves_gold_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/leather_gloves_iron_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/leather_gloves_lapis_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/leather_gloves_netherite_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/leather_gloves_quartz_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/leather_gloves_redstone_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/neptune_boots_amethyst_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/neptune_boots_copper_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/neptune_boots_diamond_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/neptune_boots_emerald_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/neptune_boots_gold_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/neptune_boots_iron_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/neptune_boots_lapis_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/neptune_boots_netherite_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/neptune_boots_quartz_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/neptune_boots_redstone_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/neptune_chestplate_amethyst_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/neptune_chestplate_copper_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/neptune_chestplate_diamond_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/neptune_chestplate_emerald_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/neptune_chestplate_gold_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/neptune_chestplate_iron_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/neptune_chestplate_lapis_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/neptune_chestplate_netherite_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/neptune_chestplate_quartz_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/neptune_chestplate_redstone_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/neptune_gloves_amethyst_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/neptune_gloves_copper_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/neptune_gloves_diamond_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/neptune_gloves_emerald_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/neptune_gloves_gold_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/neptune_gloves_iron_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/neptune_gloves_lapis_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/neptune_gloves_netherite_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/neptune_gloves_quartz_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/neptune_gloves_redstone_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/neptune_helmet_amethyst_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/neptune_helmet_copper_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/neptune_helmet_diamond_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/neptune_helmet_emerald_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/neptune_helmet_gold_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/neptune_helmet_iron_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/neptune_helmet_lapis_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/neptune_helmet_netherite_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/neptune_helmet_quartz_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/neptune_helmet_redstone_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/neptune_leggings_amethyst_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/neptune_leggings_copper_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/neptune_leggings_diamond_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/neptune_leggings_emerald_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/neptune_leggings_gold_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/neptune_leggings_iron_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/neptune_leggings_lapis_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/neptune_leggings_netherite_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/neptune_leggings_quartz_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/neptune_leggings_redstone_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/netherite_gloves_amethyst_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/netherite_gloves_copper_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/netherite_gloves_diamond_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/netherite_gloves_emerald_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/netherite_gloves_gold_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/netherite_gloves_iron_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/netherite_gloves_lapis_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/netherite_gloves_netherite_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/netherite_gloves_quartz_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/netherite_gloves_redstone_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/obsidian_boots_amethyst_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/obsidian_boots_copper_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/obsidian_boots_diamond_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/obsidian_boots_emerald_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/obsidian_boots_gold_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/obsidian_boots_iron_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/obsidian_boots_lapis_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/obsidian_boots_netherite_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/obsidian_boots_quartz_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/obsidian_boots_redstone_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/obsidian_chestplate_amethyst_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/obsidian_chestplate_copper_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/obsidian_chestplate_diamond_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/obsidian_chestplate_emerald_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/obsidian_chestplate_gold_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/obsidian_chestplate_iron_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/obsidian_chestplate_lapis_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/obsidian_chestplate_netherite_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/obsidian_chestplate_quartz_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/obsidian_chestplate_redstone_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/obsidian_gloves_amethyst_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/obsidian_gloves_copper_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/obsidian_gloves_diamond_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/obsidian_gloves_emerald_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/obsidian_gloves_gold_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/obsidian_gloves_iron_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/obsidian_gloves_lapis_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/obsidian_gloves_netherite_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/obsidian_gloves_quartz_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/obsidian_gloves_redstone_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/obsidian_helmet_amethyst_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/obsidian_helmet_copper_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/obsidian_helmet_diamond_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/obsidian_helmet_emerald_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/obsidian_helmet_gold_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/obsidian_helmet_iron_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/obsidian_helmet_lapis_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/obsidian_helmet_netherite_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/obsidian_helmet_quartz_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/obsidian_helmet_redstone_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/obsidian_leggings_amethyst_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/obsidian_leggings_copper_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/obsidian_leggings_diamond_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/obsidian_leggings_emerald_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/obsidian_leggings_gold_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/obsidian_leggings_iron_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/obsidian_leggings_lapis_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/obsidian_leggings_netherite_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/obsidian_leggings_quartz_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/obsidian_leggings_redstone_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/phoenix_boots_amethyst_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/phoenix_boots_copper_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/phoenix_boots_diamond_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/phoenix_boots_emerald_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/phoenix_boots_gold_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/phoenix_boots_iron_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/phoenix_boots_lapis_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/phoenix_boots_netherite_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/phoenix_boots_quartz_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/phoenix_boots_redstone_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/phoenix_chestplate_amethyst_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/phoenix_chestplate_copper_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/phoenix_chestplate_diamond_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/phoenix_chestplate_emerald_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/phoenix_chestplate_gold_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/phoenix_chestplate_iron_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/phoenix_chestplate_lapis_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/phoenix_chestplate_netherite_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/phoenix_chestplate_quartz_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/phoenix_chestplate_redstone_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/phoenix_gloves_amethyst_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/phoenix_gloves_copper_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/phoenix_gloves_diamond_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/phoenix_gloves_emerald_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/phoenix_gloves_gold_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/phoenix_gloves_iron_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/phoenix_gloves_lapis_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/phoenix_gloves_netherite_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/phoenix_gloves_quartz_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/phoenix_gloves_redstone_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/phoenix_helmet_amethyst_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/phoenix_helmet_copper_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/phoenix_helmet_diamond_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/phoenix_helmet_emerald_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/phoenix_helmet_gold_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/phoenix_helmet_iron_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/phoenix_helmet_lapis_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/phoenix_helmet_netherite_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/phoenix_helmet_quartz_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/phoenix_helmet_redstone_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/phoenix_leggings_amethyst_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/phoenix_leggings_copper_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/phoenix_leggings_diamond_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/phoenix_leggings_emerald_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/phoenix_leggings_gold_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/phoenix_leggings_iron_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/phoenix_leggings_lapis_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/phoenix_leggings_netherite_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/phoenix_leggings_quartz_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/phoenix_leggings_redstone_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/skyroot_hanging_sign.json create mode 100644 src/generated/resources/assets/aether/models/item/valkyrie_gloves_amethyst_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/valkyrie_gloves_copper_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/valkyrie_gloves_diamond_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/valkyrie_gloves_emerald_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/valkyrie_gloves_gold_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/valkyrie_gloves_iron_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/valkyrie_gloves_lapis_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/valkyrie_gloves_netherite_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/valkyrie_gloves_quartz_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/valkyrie_gloves_redstone_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/zanite_boots_amethyst_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/zanite_boots_copper_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/zanite_boots_diamond_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/zanite_boots_emerald_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/zanite_boots_gold_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/zanite_boots_iron_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/zanite_boots_lapis_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/zanite_boots_netherite_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/zanite_boots_quartz_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/zanite_boots_redstone_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/zanite_chestplate_amethyst_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/zanite_chestplate_copper_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/zanite_chestplate_diamond_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/zanite_chestplate_emerald_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/zanite_chestplate_gold_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/zanite_chestplate_iron_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/zanite_chestplate_lapis_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/zanite_chestplate_netherite_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/zanite_chestplate_quartz_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/zanite_chestplate_redstone_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/zanite_gloves_amethyst_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/zanite_gloves_copper_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/zanite_gloves_diamond_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/zanite_gloves_emerald_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/zanite_gloves_gold_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/zanite_gloves_iron_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/zanite_gloves_lapis_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/zanite_gloves_netherite_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/zanite_gloves_quartz_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/zanite_gloves_redstone_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/zanite_helmet_amethyst_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/zanite_helmet_copper_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/zanite_helmet_diamond_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/zanite_helmet_emerald_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/zanite_helmet_gold_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/zanite_helmet_iron_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/zanite_helmet_lapis_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/zanite_helmet_netherite_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/zanite_helmet_quartz_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/zanite_helmet_redstone_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/zanite_leggings_amethyst_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/zanite_leggings_copper_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/zanite_leggings_diamond_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/zanite_leggings_emerald_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/zanite_leggings_gold_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/zanite_leggings_iron_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/zanite_leggings_lapis_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/zanite_leggings_netherite_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/zanite_leggings_quartz_trim.json create mode 100644 src/generated/resources/assets/aether/models/item/zanite_leggings_redstone_trim.json rename src/generated/resources/data/aether/advancements/recipes/{combat/old_netherite_gloves_smithing.json => decorations/skyroot_hanging_sign.json} (66%) create mode 100644 src/generated/resources/data/aether/loot_tables/blocks/skyroot_hanging_sign.json create mode 100644 src/generated/resources/data/aether/loot_tables/blocks/skyroot_wall_hanging_sign.json delete mode 100644 src/generated/resources/data/aether/recipes/old_netherite_gloves_smithing.json create mode 100644 src/generated/resources/data/aether/recipes/skyroot_hanging_sign.json create mode 100644 src/generated/resources/data/aether/trim_material/gravitite.json create mode 100644 src/generated/resources/data/aether/trim_material/zanite.json create mode 100644 src/generated/resources/data/minecraft/tags/blocks/ceiling_hanging_signs.json create mode 100644 src/generated/resources/data/minecraft/tags/blocks/enchantment_power_provider.json create mode 100644 src/generated/resources/data/minecraft/tags/blocks/sniffer_diggable_block.json create mode 100644 src/generated/resources/data/minecraft/tags/blocks/stone_buttons.json create mode 100644 src/generated/resources/data/minecraft/tags/blocks/sword_efficient.json create mode 100644 src/generated/resources/data/minecraft/tags/blocks/wall_hanging_signs.json create mode 100644 src/generated/resources/data/minecraft/tags/items/hanging_signs.json create mode 100644 src/generated/resources/data/minecraft/tags/items/stone_buttons.json create mode 100644 src/generated/resources/data/minecraft/tags/items/trim_materials.json create mode 100644 src/generated/resources/data/minecraft/tags/items/trimmable_armor.json create mode 100644 src/main/java/com/aetherteam/aether/block/construction/SkyrootCeilingHangingSignBlock.java create mode 100644 src/main/java/com/aetherteam/aether/block/construction/SkyrootWallHangingSignBlock.java create mode 100644 src/main/java/com/aetherteam/aether/blockentity/SkyrootHangingSignBlockEntity.java create mode 100644 src/main/java/com/aetherteam/aether/capability/accessory/MobAccessory.java create mode 100644 src/main/java/com/aetherteam/aether/capability/accessory/MobAccessoryCapability.java create mode 100644 src/main/java/com/aetherteam/aether/client/renderer/accessory/layer/ArmorStandCapeLayer.java create mode 100644 src/main/java/com/aetherteam/aether/client/renderer/accessory/layer/EntityAccessoryLayer.java create mode 100644 src/main/java/com/aetherteam/aether/client/renderer/accessory/model/CapeModel.java rename src/main/java/com/aetherteam/aether/data/resources/{ => registries}/AetherDamageTypes.java (79%) create mode 100644 src/main/java/com/aetherteam/aether/data/resources/registries/AetherTrimMaterials.java create mode 100644 src/main/java/com/aetherteam/aether/mixin/mixins/client/ElytraLayerMixin.java create mode 100644 src/main/java/com/aetherteam/aether/mixin/mixins/client/SmithingScreenMixin.java create mode 100644 src/main/java/com/aetherteam/aether/mixin/mixins/common/ArmorStandMixin.java create mode 100644 src/main/java/com/aetherteam/aether/mixin/mixins/common/MobMixin.java create mode 100644 src/main/java/com/aetherteam/aether/mixin/mixins/common/ModelBuilderMixin.java create mode 100644 src/main/resources/assets/aether/textures/entity/signs/hanging/skyroot.png create mode 100644 src/main/resources/assets/aether/textures/entity/tiles/chest/lootr/treasure_chest_opened.png create mode 100644 src/main/resources/assets/aether/textures/entity/tiles/chest/lootr/treasure_chest_unopened.png create mode 100644 src/main/resources/assets/aether/textures/gui/hanging_signs/skyroot.png create mode 100644 src/main/resources/assets/aether/textures/item/miscellaneous/skyroot_hanging_sign.png rename src/main/resources/assets/aether/textures/{gui/slots => slot}/cape.png (100%) rename src/main/resources/assets/aether/textures/{gui/slots => slot}/gloves.png (100%) rename src/main/resources/assets/aether/textures/{gui/slots => slot}/misc.png (100%) rename src/main/resources/assets/aether/textures/{gui/slots => slot}/pendant.png (100%) rename src/main/resources/assets/aether/textures/{gui/slots => slot}/ring.png (100%) rename src/main/resources/assets/aether/textures/{gui/slots => slot}/shield.png (100%) create mode 100644 src/main/resources/assets/aether/textures/trims/color_palettes/gravitite.png create mode 100644 src/main/resources/assets/aether/textures/trims/color_palettes/zanite.png create mode 100644 src/main/resources/assets/aether/textures/trims/items/gloves_trim.png create mode 100644 src/main/resources/assets/minecraft/atlases/armor_trims.json create mode 100644 src/main/resources/packs/accessories/data/aether/curios/entities/humanoids.json create mode 100644 src/main/resources/packs/accessories/data/aether/curios/entities/player.json create mode 100644 src/main/resources/packs/accessories/data/aether/curios/entities/stand.json create mode 100644 src/main/resources/packs/accessories/data/aether/curios/slots/aether_accessory.json create mode 100644 src/main/resources/packs/accessories/data/aether/curios/slots/aether_cape.json create mode 100644 src/main/resources/packs/accessories/data/aether/curios/slots/aether_gloves.json create mode 100644 src/main/resources/packs/accessories/data/aether/curios/slots/aether_pendant.json create mode 100644 src/main/resources/packs/accessories/data/aether/curios/slots/aether_ring.json create mode 100644 src/main/resources/packs/accessories/data/aether/curios/slots/aether_shield.json rename src/main/resources/packs/{curios_tags => accessories}/pack.png (100%) create mode 100644 src/main/resources/packs/curios_override/data/curios/curios/entities/humanoids.json create mode 100644 src/main/resources/packs/curios_override/data/curios/curios/entities/player.json create mode 100644 src/main/resources/packs/curios_override/data/curios/curios/entities/stand.json create mode 100644 src/main/resources/packs/curios_override/data/curios/curios/slots/charm.json create mode 100644 src/main/resources/packs/curios_override/data/curios/curios/slots/ring.json rename src/main/resources/packs/{curios_tags => curios_override}/data/curios/tags/items/aether_accessory.json (100%) rename src/main/resources/packs/{curios_tags => curios_override}/data/curios/tags/items/aether_cape.json (100%) rename src/main/resources/packs/{curios_tags => curios_override}/data/curios/tags/items/aether_gloves.json (100%) rename src/main/resources/packs/{curios_tags => curios_override}/data/curios/tags/items/aether_pendant.json (100%) rename src/main/resources/packs/{curios_tags => curios_override}/data/curios/tags/items/aether_ring.json (100%) rename src/main/resources/packs/{curios_tags => curios_override}/data/curios/tags/items/aether_shield.json (100%) rename src/main/resources/packs/{curios_tags => curios_override}/data/curios/tags/items/back.json (100%) rename src/main/resources/packs/{curios_tags => curios_override}/data/curios/tags/items/body.json (100%) rename src/main/resources/packs/{curios_tags => curios_override}/data/curios/tags/items/charm.json (100%) rename src/main/resources/packs/{curios_tags => curios_override}/data/curios/tags/items/hands.json (100%) rename src/main/resources/packs/{curios_tags => curios_override}/data/curios/tags/items/necklace.json (100%) rename src/main/resources/packs/{curios_tags => curios_override}/data/curios/tags/items/ring.json (100%) create mode 100644 src/main/resources/packs/curios_override/pack.png create mode 100644 update.json diff --git a/.circleci/continue_config.yml b/.circleci/continue_config.yml index 9c72c7a4b3..6f7ee74654 100644 --- a/.circleci/continue_config.yml +++ b/.circleci/continue_config.yml @@ -6,10 +6,10 @@ orbs: parameters: artifact-name: type: string - default: aether-1.19.4-1.0.0-beta.6-forge.jar + default: aether-1.20.1-1.0.0-beta.6-neoforge.jar deploy-branch: type: string - default: 1.19.4-develop + default: 1.20.1-develop allow-deploy-and-discord-publish: type: boolean default: false diff --git a/.github/workflows/trigger-build.yml b/.github/workflows/trigger-build.yml index 11821d2e1d..a7f0db7539 100644 --- a/.github/workflows/trigger-build.yml +++ b/.github/workflows/trigger-build.yml @@ -16,7 +16,7 @@ on: remote_branch: description: 'GitHub branch that the pull request is merging from' required: true - default: '1.19.4-develop' + default: '1.20.1-develop' type: string jobs: diff --git a/build.gradle b/build.gradle index 3b7752cbbd..504462061e 100644 --- a/build.gradle +++ b/build.gradle @@ -85,7 +85,7 @@ dependencies { implementation fg.deobf("com.aetherteam.nitrogen:nitrogen_internals:${project.nitrogen_version}") implementation fg.deobf("com.aetherteam.cumulus:cumulus_menus:${project.cumulus_version}") - implementation fg.deobf("top.theillusivec4.curios:curios-forge:${project.curios_version}") + implementation fg.deobf("top.theillusivec4.curios:curios-forge:${project.curios_version}+${project.mc_version}") compileOnly fg.deobf("top.theillusivec4.caelus:caelus-forge:${project.caelus_version}") @@ -106,9 +106,9 @@ dependencies { jarJar.pin(it, "${project.cumulus_version}") } - jarJar fg.deobf("top.theillusivec4.curios:curios-forge:${project.curios_version}") { + jarJar fg.deobf("top.theillusivec4.curios:curios-forge:${project.curios_version}+${project.mc_version}") { jarJar.ranged(it, "[${project.curios_version},)") - jarJar.pin(it, "${project.curios_version}") + jarJar.pin(it, "${project.curios_version}+${project.mc_version}") } compileOnly "mezz.jei:jei-${project.mc_version}-common:${project.jei_version}" @@ -219,7 +219,7 @@ modrinth { gameVersions = ["${project.mc_version}"] loaders = ["neoforge"] dependencies { - embedded.version "curios", "${project.curios_version}" + embedded.version "curios", "${project.curios_version}+${project.mc_version}" // embedded.version "cumulus", "${project.cumulus_version}" } } diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 1a1e6c0630..e69de29bb2 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -1,327 +0,0 @@ -# The Aether - Forge - 1.19.4-1.0.0-beta.6 - -***This beta contains breaking changes; addons will have to update accordingly to be compatible.*** - -Additions - -- Add a new Moa Skins GUI accessible from a button with a crown icon in the Aether's accessories menu. This is where donator skins for Moas can be applied. - - Although the GUI is implemented, the linking for donator accounts is not fully implemented yet and may not function for some players. It will be fully functional by release. -- Add a Patreon and Discord link message. This will only show up once per all worlds within a game instance (e.g. a Prism Launcher instance, the Minecraft Launcher instance tied to `.minecraft`, etc.) to minimize intrusiveness. -- Add Ruined Aether Portals, which can be enabled by selecting the "Aether Ruined Portals" data pack on world creation. -- Add a new Remedy status effect, which functions the same as how using remedy items like White Apples worked previously, except the player will be immune to Inebriation while the effect is active on top of being cured of it when the item is used. -- Add gloves to vanilla loot tables with a random chance to replace armor items. -- Add a recipe for crafting a Lectern with a Skyroot Bookshelf. -- Add the "Aether Temporary Freezing" data pack as an option when creating a world. -- Add a config option to allow for spawning in the Aether dimension upon world creation. -- Add a config option to make Berry Bushes function like Sweet Berry Bushes. -- Add a new block tag `non_bronze_dungeon_spawnable` for data pack or addon developers to prevent Bronze Dungeons from generating in certain blocks. -- Add support for modifying the fuel for Altars, Freezers, and Incubators using CraftTweaker scripting. -- Add support for extinguishing Supplementaries' Copper Lanterns in the Aether dimension. -- Add a custom menu API, which will also be released as a separate mod in the future. -- Add numerous JavaDocs throughout the source code for developers. -- Update uk_ua translation. -- Update tok translation. - -Changes - -- Finish a codebase cleanup that was started before beta.1. This has introduced breaking changes. -- Make joining and exiting worlds loaded by the world preview feature much faster. -- Change the distribution of Gravitite Ore to be triangular as opposed to uniform, matching ore distribution changes to vanilla in 1.18. This makes Gravitite Ore slightly more common and also be able to generate with slightly larger veins (2-4 blocks instead of 1-2 blocks). -- Move Neptune Armor from the Silver Dungeon treasure loot table into the Bronze Dungeon treasure loot table for better accuracy to b1.7.3 implementation. The armor has been rebalanced accordingly to be between iron and diamond tier. -- Rebalance the vanilla tool debuff in the Aether to be less harsh. Tools efficiency will only be decreased to the same speed as mining by hand at minimum. -- Rebalance the Hammer of Kingbdogz' projectile to have a shorter cooldown, increased damage, and greater speed. -- Rebalance dart projectiles to have a greater speed. -- Change Icestone to have a delay for refreezing blocks that are broken by the player. -- Make neighboring Aerogel-type blocks fully see-through, similar to Glass blocks. -- Increase the opacity of Blue and Golden Aerclouds in the b1.7.3 resource pack. -- Change the Nature Staff item name from green to white. -- Change the Invisibility Cloak's attack detection for projectiles to be based on projectile hit instead of projectile shoot. -- Increase the follow speed of Cloud Minions proportional to the speed of the player. -- Make Cloud Crystals damage Fire Minions. -- Disallow players from mounting Swets that are partially dissolved. -- Allow Aechor Plants to be mounted in Boats and Minecarts. -- Destroy Fire Crystals once the Sun Spirit dies. -- Prevent Bronze Dungeons from generating in water. -- Make the drop bonuses from Enchanted Aether Grass data-driven using Forge's global loot modifier system. -- Make the Gold Dungeon island's grass dependent on the biome, for addons and data packs that use different surface grass. -- Allow height ranges for dungeon generation to be modified with data packs. -- Allow the creative menu tooltips for what dungeon a loot item can be found in to be data-driven using tags. -- Change boss names to be generated using the entity's RNG instead of a unique RNG. -- Change protection of `AetherNoiseBuilders#aetherSurfaceRules` from `private` to `public`. -- Change protection of methods in `HandRenderHooks` from `private` to `public`. -- Remove mixin config. - -Fixes - -- Fix the Aether logo in the mod's title screen being resized improperly by GUI scaling. -- Fix the "Minecraft (Left)" title screen not shifting the logo to the left. -- Fix world corruption issues when loading the same world using world preview from two Minecraft instances at the same time. -- Fix the world preview panorama being tied to framerate. -- Fix the world preview panorama not being adjustable with the accessibility option for panorama scroll speed. -- Fix the world preview panorama not having the correct camera position. -- Fix the world preview attempting to reload the world when it shouldn't. -- Fix the world preview sometimes not displaying when it should. -- Fix aether5.ogg not playing. -- Fix high and chinchilla not playing. -- Fix the mining speed for Holystone Brick Slabs being incorrect. -- Fix placing too many Aerogel Stairs causing world loading issues. -- Fix obtaining Holystone Bricks and dungeon blocks unlocking Stone Brick-related recipes. -- Fix the overlays for special dungeon blocks sometimes breaking after swapping resource packs. -- Fix dungeon keys being consumed even when opening Treasure Chests in creative. -- Fix mobs targeting the player from much farther distances than they should be. -- Fix rare boss despawning. -- Fix a crash caused by bosses trying to break blocks without a dungeon. -- Fix an exploit with trapdoors allowing the player to not be reachable by the Slider. -- Fix an exploit with the Slider getting stuck in a corner in multiplayer after a player dies. -- Fix Aerwhales not being affected by Leads. -- Fix Swets becoming too small without dying when dissolving in water. -- Fix Swets sometimes jittering when first mounting. -- Fix Swets jittering too fast when on a Slime Block. -- Fix rare crashes from Moas. -- Fix Moas only playing their wing flap noise when mounted. -- Fix Aerbunnies' pathfinding getting them stuck on blocks and unable able to land. -- FIx Aerbunnies being afraid of the player for too long. -- Fix Aechor Plant eye height not scaling with size. -- Fix the multiplayer mount desync issue, again, maybe. -- Fix clipping exploit using parachutes. -- Fix the Hammer of Kingbdogz' projectiles not always damaging mobs. -- Fix TNT not properly launching from Blue Aerclouds if moving too fast. -- Fix projectiles sliding across Aerclouds instead of sticking like they should. -- Fix Firework Rockets disabling the Invisibility Cloak. -- Fix crystal projectiles not being properly centered to their hitbox. -- Fix Aether Grass Blocks created by lake features not having double drops. -- Fix Aerwhales animation for pitch rotation not being smooth. -- Fix the Zephyr's animation for shooting Snowballs not being synced with when the Snowball is shot. -- Fix the Slider's damage tilt speed being too slow. -- Fix the default hand model not being properly positioned in first-person when wearing the Shield of Repulsion. -- Fix capitalization inconsistencies for trivia and lore entries. -- Fix locked dungeon blocks not being in dungeon block tags. -- Fix the Silver Dungeon loot tables being in the Bronze Dungeon data path. -- Fix the `aether:moa_type` registry not appearing in `registryAccess`. -- Fix indicators added by Jade overlapping with the Aether's boss bars. -- Fix Chest Mimics showing up as Chests instead of Loot Chests in Jade indicators when Lootr is installed. - -# The Aether - Forge - 1.19.4-1.0.0-beta.5.1 - -Fixes - -- Fix mobs not targeting players. - -# The Aether - Forge - 1.19.4-1.0.0-beta.5 - -Additions - -- Add config option for disabling the Aether's accessories menu and using Curios' menu instead. -- Add block breaking behavior to the Valkyrie Queen. -- Add renewability method for Holystone. -- Add keybind `V` to toggle the Invisibility Cloak's ability. -- Add Randomium support with blacklist tag. -- Add recipes for Moa Eggs to work as eggs in crafting. -- Add missing lore entry for Skyroot Wood. -- Add new tags for accessories: `#accessories_capes`, `#accessories_gloves`, `#accessories_miscellaneous`, `#accessories_pendants`, `#accessories_rings`, `#accessories_shields`. Addon developers should use these instead of Curios' tags. -- Add `RecipeType` field to `ItemUseConversionEvent`. -- Update uk_ua translation. -- Update ms_my translation. -- Update ja_jp translation. -- Update pl_pl translation. -- Update zh_cn translation. -- Update tok translation. -- Update en_ud translation. -- Update lol_us translation. - -Changes - -- Change the Pillar Top model to be multi-directional. -- Allow Presents to be dropped with silk touch. -- Decrease default Moa hitbox size. -- Decrease Moa hitbox when sitting and when a baby. -- Decrease Cockatrice hitbox size. -- Improve Moa entity targetting. -- Disallow projectiles shot by the player from being bounced by their Shield of Repulsion. -- Remove the Golden Feather from Silver Dungeon loot by default. -- Update texture colors for Golden Gummy Swet and Golden Parachute. -- Move some recipes out of the `minecraft` data directory into the `aether` data directory. - -Fixes - -- Fix Bronze Dungeon boss rooms being able to overlap. -- Fix Bronze Dungeons being able to spawn far out of terrain. -- Fix pickaxes losing more durability to the Slider than they should. -- Fix the Slider playing walking sounds. -- Fix Silver Dungeon chests breaking on generation. -- Fix bone meal not growing Purple Flowers on Aether Grass Blocks. -- Fix some entities like TNT not being launched by Blue Aerclouds. -- Fix critical hits not working with slow falling entities and accessories. -- Fix Valkyrie Armor allowing clipping through blocks. -- Fix Valkyrie Armor wing animation speed. -- Fix the tool debuff in the Aether not working while underwater. -- Fix issues with falling out of the Aether while flying. -- Fix Flying Cow health being greater than it should be. -- Fix Hammer of Kingbdogz projectiles following player motion when they shouldn't. -- Fix Hammer of Kingbdogz projectile impact particles not always spawning. -- Fix incorrect lore entry for Stripped Skyroot Wood. -- Fix capitalization in various lore entries. -- Fix Netherite Gloves not being craftable with the 1.20 experimental data pack. -- Fix some animations playing when the game is paused. -- Fix `ItemUseConversionEvent` being called more than it should. - -# The Aether - Forge - 1.19.4-1.0.0-beta.4 - -Additions - -- Add JEI recipe support for displaying in-world recipes (e.g. freezing liquids with Icestone). -- Add equipment debuffs for non-Aether weapons and armor. -- Add stonecutting recipes for Icestone. -- Add smelting and blasting recipes for iron and gold accessories into nuggets. -- Add config option to make the Invisibility Cloak temporarily render the player's equipment after they attack, to make the accessory more balanced in PVP. -- Add config option for the duration of the Invisibility Cloak's temporary equipment rendering. -- Add sound event for Aechor Plants being hurt to make the sound customizable with resource packs. -- Add `EggLayEvent` for addon developers to modify Moa egg laying behavior. -- Add constructors for accessory classes that take `ResourceLocations`s instead of `String`s, allowing addon developers to use their own mod IDs for accessory textures. - -Changes - -- Change Gravitite to generate more exposed at lower y-levels and generate higher up but with less exposure. -- Allow only items dropped deliberately or from death to fall out of the Aether. -- Change attacking with the Invisibility Cloak to cause more mobs in the surrounding area to notice you. -- Update colorblind Aercloud textures. -- Increase the mining speed buff of Zanite Accessories. -- Include the Golden Feather in Silver Dungeon loot by default. -- Reduce the vertical speeds for Neptune Armor with Depth Strider to be less extreme. -- Prevent baby Moas from targetting mobs. -- Prevent the player from using blocks with inventories (e.g. Crafting Tables or Chests) when holding an item or block that can't be placed in the Aether. -- Prevent Ice Accessories from freezing liquid source blocks. -- Reduce music file size. -- Switch to having most of the Aether's config options be configurable per-world. -- Remove the slim and non-sleeve variants of Glove models to simplify their implementation. -- Remove config option for Ice Acessories being able to temporarily freeze liquids; this will return in the future as an official datapack. -- Remove translations temporarily. We are in the process of translation review after switching to a new translation service; translations will return by release. - -Fixes - -- Fix Blue Aerclouds interrupting Elytra flight. -- Fix Fortune not working on Berry Bushes. -- Fix Quicksoil still rarely causing crashes from spinning in boats. -- Fix rare multiplayer desync between client and server when dismounting mobs. -- Fix Sheepuffs not being able to be sheared with dispensers. -- Fix bosses and other unintentional mobs being able to be hooked with fishing rods. -- Fix Aechor Plants being able to jump. -- Fix Valkyries only teleporting on regular dungeon blocks isntead of locked dungeon blocks. -- Fix Skyroot Buckets not using a tag for their crafting material. -- Fix Aerwhales becoming invisible at the edge of the player's screen. -- Fix flight exploits with accessories, Aerbunnies, and Slow Falling Potions. -- Fix a missing slab on Silver Dungeon staircases. -- Fix Carved Stairs lore entry referring to Sentry Stone instead of Carved Stone. -- Fix Aercloud generation code randomizing blockstates in datapacks. -- Fix addons not being able to use non-Aether mod IDs with the Aether's language data generator. -- Fix incompatibilites with Cape rendering and other mods that modify capes. -- Fix some accessory modifier tooltips being unlocalized with addons. - -# The Aether - Forge - 1.19.4-1.0.0-beta.3 - -Additions - -- Add enchanting recipe in Altar for Golden Aerclouds. -- Add Name Tags to Silver Dungeon loot. -- Add damage type tag `is_cold` for damage that affects the Sun Spirit. -- Add configuration options for the position of the Accessories menu button in various screens. -- Add configuration option to disable the Accessories menu button. -- Update de_de translation. -- Update en_ud translation. - -Changes - -- Changed Ice accessories and Icestone to no longer affect waterlogged blocks. -- Allow pressing the key for opening the Accessories menu to also work for closing various other menus. -- Updated Candy Cane lore to be more accurate. -- Decrease chance of Zanite accessories losing durability, making them last twice as long. -- Removed the default inclusion of Aether accessories in Curios tags due to compatibility issues; an official datapack will be made available on release for this. - -Fixes - -- Fix softlock crash with mounts on servers. -- Fix mobs not properly respecting spawning categories. -- Fix Moas not avoiding dangerous blocks when following players. -- Fix Quicksoil not working after fixing a related crash in a previous build. -- Fix issues with Valkyrie Armor checking for ground collision. -- Fix issues with Aerclouds not being detected as ground in various instances. -- Fix Skyroot Buttons and Skyroot Pressure Plates not working as Furnace fuel. -- Fix Aether pickaxes not giving the proper amount of drops from Amethyst Clusters. -- Fix players being able to sleep in the Aether during thunderstorms while eternal day is active. -- Fix issues with item deletion by Thunder Crystals. -- Fix Moas targetting Swets ridden by players. -- Fix crosshair flickering when falling with an Aerbunny equipped. -- Fix Sun Altar slider moving off the screen. -- Fix Whirlwinds getting stuck in vertical corners. -- Fix inconsistent duration of the Slider's hit recoil after being damaged. -- Fix Cloud Minions riding in boats. -- Fix desync with falling out of Aether biomes in the Overworld. -- Fix certain water and lava-related behavior not applying to modded fluids. -- Fix missing localization for Fire Crystal and Ice Crystal projectiles. -- Fix players not being able to throw items by clicking outside of the Accessories menu window. -- Fix the material tag for crafting Skyroot tools not being used for buckets. -- Fix null error logged by Sun Altars and Treasure Chests. -- Fix debug logging being left in where it shouldn't. - -# The Aether - Forge - 1.19.4-1.0.0-beta.2 - -Additions - -- Add internal resource pack for colorblind accessibility for Aercloud textures. -- Add Jade compatibility for dungeon block tooltips. -- Add Lootr compatibility for Chest Mimics. -- Add recipe for Cakes using Skyroot Milk Buckets. -- Add tags for crafting Skyroot Sticks and Skyroot Tools. -- Make Moas immune to Inebriation. -- Make Moas be able to target and attack Aechor Plants and Swets. -- Make Frogs spawn as their cold variant in the Aether. -- Update zh_cn translation. -- Update uk_ua translation. - -Changes - -- Make Moas follow players by default after dismounting. -- Increase walking speed for Moas. -- Increase Moas vertical falling speed and decrease their horizontal flight speed when not mounted. -- Balance spawnrates for Swets, Aechor Plants, Cockatrices, and Zephyrs. -- Allow items to fall out of the Aether. -- Make the hotkey for Gravitite Armor's ability be spacebar by default. -- Make Sheepuffs retain their wool color after being sheared. -- Disallow Aechor Plants being able to be launched by Gravitite Swords. - -Fixes - -- Fix Aerwhales and Zephyrs spawning indoors. -- Fix Cockatrices spawning during thunderstorms when they shouldn't. -- Fix Holystone Tools dropping Ambrosium from blocks without hardness. -- Fix Curios' "Toggle Visibility" tooltip for accessory slot visibility buttons getting stuck on the screen and preventing clicking. -- Fix Music Discs not reducing volume with distance. -- Fix duplication exploits with Skyroot Tools' double drops ability. -- Fix Neptune Armor not applying a boost for downwards swimming speed. -- Fix the the "Debuff non-Aether tools" config not properly working on servers. -- Fix The Aether breaking other mods' custom banner patterns. -- Fix kelp causing Sliders to crash. -- Fix spinning too fast in boats on Quicksoil causing a crash. -- Fix the Silver Dungeon's cloud bed not having double drops from Skyroot Tools. -- Fix biome names not being localized for minimap mods. -- Fix mounts not being able to be dismounted in water. -- Fix Swets being squished with NoAI. -- Fix Blue Aerclouds not properly restoring Moa jumps. -- Fix z-fighting on Valkyrie model. -- Fix mounts not being able to be dismounted in minecarts. -- Fix Whirlwind item spawning sound not being localized. -- Fix mounts getting stopped midair on Blue Aerclouds. -- Fix aether1 and aether2 music files being named incorrectly according to the OST. -- Fix loot tables not using the forge:shears tag. -- Fix jump desyncs on servers with Valkyrie Armor's ability. -- Fix Valkyrie Armor not resetting flight in water. -- Fix Valkyrie Armor trying to activate flight in water. -- Fix Whirlwinds being able to ride boats. -- Fix Zanite accessories losing durability from blocks without hardness. -- Fix glove durability going down based on amount of enemies hurt. -- Fix various Aether entities not appearing translucent when invisible in spectator mode. -- Fix various Aether entities not receiving knockback on death. - -# The Aether - Forge - 1.19.4-1.0.0-beta.1 - -The Aether has undergone a full code rewrite between 1.12.2 and 1.19.4. A full changelog of everything that has been fixed and improved will be ready for full release, but as of beta we do not have one yet. For more information about the changes, you can ask around our Discord at https://discord.gg/aethermod. diff --git a/docs/CREDITS.txt b/docs/CREDITS.txt index a242c11030..c2956bf32b 100644 --- a/docs/CREDITS.txt +++ b/docs/CREDITS.txt @@ -18,6 +18,9 @@ baguchan: - Fixes to the Dart layer renderers. - Fixes to Whirlwinds getting stuck vertically. +Camotoy +- Help with porting to 1.20.1. + carl-vbn: - Fixes to a rare Moa crash. @@ -64,6 +67,9 @@ Kelvin285 kodadacod - Implementation of the Skyroot Chest Boat programmer art. +MehVahdJukaar +- Updated the support for extinguishing Copper Lanterns. + saintselect - Integration for JEI. - Converting entity audio files from stereo to mono. @@ -76,5 +82,9 @@ StonedCoal: - Implementation of the Aether's main menu. - Fixes to the Aerbunny. +Toranktto +- Fixes to missing recipe categories breaking servers on 1.19.2. + Zepalesque - Fixes to the Slider. +- Changes to EggLayEvent to use ItemStack. diff --git a/docs/README.md b/docs/README.md index c84c616aaf..1cd4b59e76 100644 --- a/docs/README.md +++ b/docs/README.md @@ -28,9 +28,9 @@ If you're interested in sponsoring the Aether project or The Aether Team, please [![Modrinth Version](https://img.shields.io/modrinth/game-versions/YhmgMVyu?color=00AF5C&label=latest&logo=modrinth&last=true)](https://modrinth.com/mod/aether) [![CurseForge Downloads](http://cf.way2muchnoise.eu/255308.svg)](https://www.curseforge.com/minecraft/mc-mods/aether) [![CurseForge Version](http://cf.way2muchnoise.eu/versions/255308_latest.svg)](https://www.curseforge.com/minecraft/mc-mods/aether) -[![CircleCI](https://circleci.com/gh/The-Aether-Team/The-Aether/tree/1.19.4-develop.svg?style=shield)](https://app.circleci.com/pipelines/github/The-Aether-Team/The-Aether?branch=1.19.4-develop) +[![CircleCI](https://circleci.com/gh/The-Aether-Team/The-Aether/tree/1.20.1-develop.svg?style=shield)](https://app.circleci.com/pipelines/github/The-Aether-Team/The-Aether?branch=1.20.1-develop) ### Release builds -The Aether has relatively stable beta builds available for release for 1.19.4 on [Modrinth](https://modrinth.com/mod/aether) and [CurseForge](https://www.curseforge.com/minecraft/mc-mods/aether). A full 1.0.0 release will be coming soon. +The Aether has relatively stable beta builds available for release for 1.20.1 on [Modrinth](https://modrinth.com/mod/aether) and [CurseForge](https://www.curseforge.com/minecraft/mc-mods/aether). A full 1.0.0 release will be coming soon. ### Bleeding edge builds If you’re feeling a bit more adventurous or wish to help test the in-development versions, we provide **bleeding edge builds** which are produced on [CircleCI](https://app.circleci.com/pipelines/github/The-Aether-Team/The-Aether). These builds are created for every new commit and contain the latest available code. We do not recommend users treat these builds as releases, as they are unfinished and may contain serious issues. If you wish to download these builds, check out [this guide](https://github.com/The-Aether-Team/The-Aether/wiki/CircleCI-Guide). @@ -94,13 +94,13 @@ dependencies { If you're running into bugs or other problems, feel free to open an issue on our [issue tracker](https://github.com/The-Aether-Team/The-Aether/issues). When doing so, make sure to use one of the provided templates and fill out all the requested information. Make sure to keep your issue's description clear and concise. Your issue's title should also be easy to digest, giving our developers and reporters a good idea of what's wrong without including too many details. Failure to follow any of the above may result in your issue being closed. ## :wrench: Contribute to the project -Looking to contribute to the project? We ask that you read over our [Contributor's Guide](https://github.com/The-Aether-Team/The-Aether/blob/1.19.4-develop/docs/CONTRIBUTING.md) for more details as well as our [Contributor License Agreement (CLA)](https://github.com/The-Aether-Team/The-Aether/blob/1.19.4-develop/docs/AGREEMENT.md) before getting started. +Looking to contribute to the project? We ask that you read over our [Contributor's Guide](https://github.com/The-Aether-Team/The-Aether/blob/1.20.1-develop/docs/CONTRIBUTING.md) for more details as well as our [Contributor License Agreement (CLA)](https://github.com/The-Aether-Team/The-Aether/blob/1.20.1-develop/docs/AGREEMENT.md) before getting started. Not sure what to help with? Take a look at our issue tracker for some ideas! [Here's a quick link](https://github.com/The-Aether-Team/The-Aether/labels/status%2Fhelp-wanted) which shows all the currently open issues that we'd love some help on. ## :scroll: License information [![Asset license (Unlicensed)](https://img.shields.io/badge/assets%20license-All%20Rights%20Reserved-red.svg?style=flat-square)](https://en.wikipedia.org/wiki/All_rights_reserved) -[![Code license (LGPL v3.0)](https://img.shields.io/badge/code%20license-LGPL%20v3.0-green.svg?style=flat-square)](https://github.com/The-Aether-Team/The-Aether/blob/1.19.4-develop/LICENSE.txt) +[![Code license (LGPL v3.0)](https://img.shields.io/badge/code%20license-LGPL%20v3.0-green.svg?style=flat-square)](https://github.com/The-Aether-Team/The-Aether/blob/1.20.1-develop/LICENSE.txt) If you're wanting to create a gameplay video/review, extension or addon, parody, or any other fan work of your own for The Aether, go for it! We love seeing the content our community creates, and we hope to make it as welcoming as possible for everyone. We ask however that you please don't advertise using our brand (our specific logo assets, team name, official social media posts). @@ -150,7 +150,7 @@ The Aether is available in these languages thanks to the following contributors: If you are interested in contributing translations to The Aether, check out our [Crowdin](https://translate.aether.devaether.com/) and our [Discord](https://discord.gg/aethermod)! If you have contributed translations in the past and your name is missing from the above list, please contact us. ### :hammer: Contributions -All of our code contribution credits can be found [here](https://github.com/The-Aether-Team/The-Aether/blob/1.19.4-develop/docs/CREDITS.txt). If you contributed to the project and do not see your name, please contact us. +All of our code contribution credits can be found [here](https://github.com/The-Aether-Team/The-Aether/blob/1.20.1-develop/docs/CREDITS.txt). If you contributed to the project and do not see your name, please contact us. ### :file_folder: Dependencies The Aether would not be possible without the features provided by the APIs and libraries it implements. Thanks goes to: diff --git a/gradle.properties b/gradle.properties index 2ad604d568..8453b68b7f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -13,9 +13,9 @@ mappings=2023.08.20-1.20.1 # Dependencies mixinextras_version=0.2.0-beta.9 -nitrogen_version=1.20.1-0.1.0-neoforge -cumulus_version=1.20.1-0.1.0-neoforge -curios_version=5.3.1+1.20.1 +nitrogen_version=1.20.1-0.1.2-neoforge +cumulus_version=1.20.1-0.1.2-neoforge +curios_version=5.3.1 caelus_version=3.1.0+1.20 jei_version=15.2.0.27 crafttweaker_version=1.20.1:14.0.14 diff --git a/src/generated/resources/.cache/0164a9e83927622ad492ab881424439b3f361cdf b/src/generated/resources/.cache/0164a9e83927622ad492ab881424439b3f361cdf index 0b9a187acc..fc334ea35c 100644 --- a/src/generated/resources/.cache/0164a9e83927622ad492ab881424439b3f361cdf +++ b/src/generated/resources/.cache/0164a9e83927622ad492ab881424439b3f361cdf @@ -1,4 +1,4 @@ -// 1.19.4 2023-05-16T17:35:58.4796734 Tags for minecraft:damage_type mod id aether +// 1.20.1 2023-09-08T18:52:14.5081418 Tags for minecraft:damage_type mod id aether 349770fa7a71d7f6c642e562b1052607ed17b73d data/aether/tags/damage_type/is_cold.json 476b0d58a4b22583f5e50634bea23b5679f23bc6 data/minecraft/tags/damage_type/bypasses_armor.json c1433810244ba27b66a343ff3535634d43410c04 data/minecraft/tags/damage_type/damages_helmet.json diff --git a/src/generated/resources/.cache/0f202e000d40347127b33b6edbbb29689b8cbf86 b/src/generated/resources/.cache/0f202e000d40347127b33b6edbbb29689b8cbf86 index 6578ed1c47..b91bc38d67 100644 --- a/src/generated/resources/.cache/0f202e000d40347127b33b6edbbb29689b8cbf86 +++ b/src/generated/resources/.cache/0f202e000d40347127b33b6edbbb29689b8cbf86 @@ -1,2 +1,2 @@ -// 1.19.4 2023-03-18T18:15:21.7456046 Pack Metadata -5b87466069a84d8c94263d5e8c554c429dcdbfed pack.mcmeta +// 1.20.1 2023-09-08T18:52:14.5711421 Pack Metadata +1a67ca6fa0b2acc4b2db8da8693f2a705fa1a2de pack.mcmeta diff --git a/src/generated/resources/.cache/0fe122e549a2e3aeeca535edbc3649f31121d28e b/src/generated/resources/.cache/0fe122e549a2e3aeeca535edbc3649f31121d28e index 246cf394a4..4c4710d821 100644 --- a/src/generated/resources/.cache/0fe122e549a2e3aeeca535edbc3649f31121d28e +++ b/src/generated/resources/.cache/0fe122e549a2e3aeeca535edbc3649f31121d28e @@ -1,4 +1,4 @@ -// 1.19.4 2023-07-27T16:10:52.4867647 Tags for minecraft:entity_type mod id aether +// 1.20.1 2023-09-08T21:57:30.0174912 Tags for minecraft:entity_type mod id aether b3a379df5d7bd0f9d26800bb985a7acba83143fe data/aether/tags/entity_types/deflectable_projectiles.json 0830aa859642688f0ce9dbf68ec5710f92d7f5d6 data/aether/tags/entity_types/fire_mob.json 215c49d40f7275befd0abd1d7d7c0e72c8b2a912 data/aether/tags/entity_types/ignore_invisibility.json diff --git a/src/generated/resources/.cache/103d9f3f36b01595f1aa5172191e60eff02e6924 b/src/generated/resources/.cache/103d9f3f36b01595f1aa5172191e60eff02e6924 index c86a851bd1..130aa21dec 100644 --- a/src/generated/resources/.cache/103d9f3f36b01595f1aa5172191e60eff02e6924 +++ b/src/generated/resources/.cache/103d9f3f36b01595f1aa5172191e60eff02e6924 @@ -1,4 +1,4 @@ -// 1.19.4 2023-09-04T17:26:10.6352949 Registries +// 1.20.1 2023-09-13T22:38:55.7260259 Registries 25d924fdac4392adb88fe3b6aa2c23420f6fb4f9 data/aether/damage_type/armor_piercing_attack.json 03d6a63bae7e4458c11da22471bf0f8b5051023c data/aether/damage_type/cloud_crystal.json 024fc58ce3f33e1542dfe59582a4da47cc178764 data/aether/damage_type/crush.json @@ -10,6 +10,8 @@ cd680f6ec731971e2aefe28c7fb4c793a2923fa8 data/aether/damage_type/ice_crystal.jso 5ccd8e14aae581e4975827ff44b4e37760211a39 data/aether/damage_type/thunder_crystal.json f5deced101d2299e370ac067f29b5b355f28e634 data/aether/dimension/the_aether.json 5655d4cd818dbc73a0baa2590d80dd274f85927d data/aether/dimension_type/the_aether.json +68202c4f994624d4f02991a97d8aafaccc3aaf7a data/aether/trim_material/gravitite.json +191264061b6e368ec29ad4c90a7cc0dd748d8e24 data/aether/trim_material/zanite.json 8a9aa7a2e0f167dc02e52cb3b5a7233015af53e3 data/aether/worldgen/biome/skyroot_forest.json 0e1e4e3b5ec8215f23178baf66e4d28e4e948ab8 data/aether/worldgen/biome/skyroot_grove.json 8f28fbf7233bd64f8615eb48f497412447091e84 data/aether/worldgen/biome/skyroot_meadow.json diff --git a/src/generated/resources/.cache/1742123cf955ee7ecf092ba55decb836aa65bc2c b/src/generated/resources/.cache/1742123cf955ee7ecf092ba55decb836aa65bc2c index f8f20b5f94..63500f4643 100644 --- a/src/generated/resources/.cache/1742123cf955ee7ecf092ba55decb836aa65bc2c +++ b/src/generated/resources/.cache/1742123cf955ee7ecf092ba55decb836aa65bc2c @@ -1,4 +1,4 @@ -// 1.19.4 2023-06-09T21:46:48.3356012 Block States: aether +// 1.20.1 2023-09-14T15:32:59.2589219 Block States: aether 79cb0c0ea34a92e86b03080a209cb60f268cb31e assets/aether/blockstates/aerogel.json 28f7eea22b621bda459b2328c2252cdebe0bcdb9 assets/aether/blockstates/aerogel_slab.json 0866f96b2339b894ff4c8a01aebb3d87103eb0fb assets/aether/blockstates/aether_dirt.json @@ -95,6 +95,7 @@ e8539f9de046e03c644e1d5213185507155aab81 assets/aether/blockstates/skyroot_butto 3d4fc85f12a399f3d53e5f672b10d7cd41738ecf assets/aether/blockstates/skyroot_door.json f001b8c8d046c742f5cd37f226b28c3b87e481e8 assets/aether/blockstates/skyroot_fence.json 8c307e5b3c469d3a57ce0cc64d27b8f9716159f7 assets/aether/blockstates/skyroot_fence_gate.json +f6c7650dbfdb4583feae074bdfc113697f4e3b54 assets/aether/blockstates/skyroot_hanging_sign.json 55451162e1954ca09b0c98b7b77d95de7b63d52a assets/aether/blockstates/skyroot_leaves.json a1b4f23a041e5ef10872a6f43755bf43adbd2a2f assets/aether/blockstates/skyroot_log.json 543e38493b28057483702ecc046a5768d26d2aec assets/aether/blockstates/skyroot_planks.json @@ -104,6 +105,7 @@ e16faf6e1c145d0e897bc87da29af25746e9dfe2 assets/aether/blockstates/skyroot_sign. 82f313bdf9780bfb0abddc886d8a1d9a3b8fd1cc assets/aether/blockstates/skyroot_slab.json b6429904de100e77c282abda12d7c0b76478ec4a assets/aether/blockstates/skyroot_stairs.json 75272138798ef82d34cc56fa30de06b383df5658 assets/aether/blockstates/skyroot_trapdoor.json +f6c7650dbfdb4583feae074bdfc113697f4e3b54 assets/aether/blockstates/skyroot_wall_hanging_sign.json e16faf6e1c145d0e897bc87da29af25746e9dfe2 assets/aether/blockstates/skyroot_wall_sign.json 19ef02f3c8414c03febf96eba63ea952f0795ca9 assets/aether/blockstates/skyroot_wood.json 78d3f2b583bd6d28078544b47ed7e351aa763325 assets/aether/blockstates/stripped_skyroot_log.json @@ -281,6 +283,7 @@ d1d80c9cdc15dbf85a3caa64e9ec5bc9dce7c49d assets/aether/models/block/skyroot_fenc e403b1e469d9f1d3d0d2e8cc8df156af3fe90003 assets/aether/models/block/skyroot_fence_gate_wall_open.json 4ea0326bb82b8b3cb4e834e02f777636c4e22bb9 assets/aether/models/block/skyroot_fence_post.json de7d79f81cd7938fc64427e7cb6237af805f6999 assets/aether/models/block/skyroot_fence_side.json +7c26d16c8f0c960d395c4ee9e5919990bbc491db assets/aether/models/block/skyroot_hanging_sign.json ece47b7e40279e0e8d0c7f738073c1ff4f79aaed assets/aether/models/block/skyroot_leaves.json ef844674183755ce829053eecb73a33f7e85fc88 assets/aether/models/block/skyroot_log.json 359271fe5377cc3edbeefe2efe8e1a3535ebc1ce assets/aether/models/block/skyroot_log_horizontal.json diff --git a/src/generated/resources/.cache/201562cc5cd18b504c6c9e32f9399e466b1b8cf1 b/src/generated/resources/.cache/201562cc5cd18b504c6c9e32f9399e466b1b8cf1 index 5d30305ce3..b75d857afb 100644 --- a/src/generated/resources/.cache/201562cc5cd18b504c6c9e32f9399e466b1b8cf1 +++ b/src/generated/resources/.cache/201562cc5cd18b504c6c9e32f9399e466b1b8cf1 @@ -1,2 +1,2 @@ -// 1.19.4 2023-03-18T15:59:38.7221603 Tags for minecraft:worldgen/structure mod id aether +// 1.20.1 2023-09-08T18:52:14.5701436 Tags for minecraft:worldgen/structure mod id aether 33ff3c45ed33469da0ca8bc68728d91d60f1057c data/aether/tags/worldgen/structure/dungeons.json diff --git a/src/generated/resources/.cache/22b50738883487d1ef1961d9e5ff26fe1c21b339 b/src/generated/resources/.cache/22b50738883487d1ef1961d9e5ff26fe1c21b339 index 56f038bb11..117701c349 100644 --- a/src/generated/resources/.cache/22b50738883487d1ef1961d9e5ff26fe1c21b339 +++ b/src/generated/resources/.cache/22b50738883487d1ef1961d9e5ff26fe1c21b339 @@ -1,4 +1,4 @@ -// 1.19.4 2023-09-06T17:50:18.4392757 Tags for minecraft:block mod id aether +// 1.20.1 2023-09-14T16:50:26.0516459 Tags for minecraft:block mod id aether fc9b66cee900f1b4f341fcec6da19eb45d575f43 data/aether/tags/blocks/aechor_plant_spawnable_on.json 7f0ca5740d7eeb3d83a96088ad6c30a672b55609 data/aether/tags/blocks/aerclouds.json 16a15f0767946dfa61ee9dfb544a3aeb3439340c data/aether/tags/blocks/aerogel.json @@ -47,16 +47,18 @@ fd01915c57cee8effe17fe38cbedcefa19a98fb3 data/forge/tags/blocks/stone.json a838c2bd53ede04f2a9ee61012c93d721871dce4 data/minecraft/tags/blocks/beds.json e0ba7d52232d1fe3b13741279e0a983fd3a2d816 data/minecraft/tags/blocks/bee_growables.json 06c36eccc17ac624e3be0a84e7eb42a94eb9c4ec data/minecraft/tags/blocks/buttons.json +7b309889aa4e92af4df62936f4a36677e23c52d3 data/minecraft/tags/blocks/ceiling_hanging_signs.json e7909d515ff024fd14d135aeb5e292dc775903d7 data/minecraft/tags/blocks/convertable_to_mud.json 2d0b4f3c1574160c79cacf5e6b7cb64b056908b8 data/minecraft/tags/blocks/dirt.json a00b76037fde7105059470ed988f4651c8b25a2c data/minecraft/tags/blocks/dragon_immune.json +01f606af3f58ae6c9742c9c6e927e787256e6274 data/minecraft/tags/blocks/enchantment_power_provider.json ee6af189f3abd5cc155e83023432af66f8abf538 data/minecraft/tags/blocks/enderman_holdable.json 0bba5a874905f77d759a35126765746aff21acf2 data/minecraft/tags/blocks/fence_gates.json 0117fd9b7b40b0e02aa3498f00e7b329ecbe6d40 data/minecraft/tags/blocks/flower_pots.json 3549a6c0791821524c9419a608b6af0de62b3530 data/minecraft/tags/blocks/impermeable.json c158a789ed632738e5986dfbd21ff2bba9511d9b data/minecraft/tags/blocks/leaves.json c365c56c9363907f546b5d4778b8608912fa27c9 data/minecraft/tags/blocks/logs_that_burn.json -eb7be1f416f5bb92b93b5e42d2f34e3235aedf49 data/minecraft/tags/blocks/mineable/axe.json +cbdf3c7a0ffd01a973135b741156c4fc58d72ed4 data/minecraft/tags/blocks/mineable/axe.json ad19c87e369a437df6d6d6950246efb6ad8c99c4 data/minecraft/tags/blocks/mineable/hoe.json 7f367b779cfc58b29b82b07b1e767cb06994c22e data/minecraft/tags/blocks/mineable/pickaxe.json cebe2140981a986c200ca3dbd83933ff732046a2 data/minecraft/tags/blocks/mineable/shovel.json @@ -71,11 +73,15 @@ af3c295b85cf6b6b265eacda66de70b6f5ac09dc data/minecraft/tags/blocks/needs_iron_t b830e607f8f1f40961d24f70f71b34ede14bfb3e data/minecraft/tags/blocks/slabs.json 6b8be3d5114ac4f45dbfff26c82216c0b54ed097 data/minecraft/tags/blocks/small_flowers.json d3af8c97e70c279b7712d20a4391e1829f2a660c data/minecraft/tags/blocks/snaps_goat_horn.json +5cb681c7db44272f3d64870f460636e25b231e26 data/minecraft/tags/blocks/sniffer_diggable_block.json 193ad729a0f9ff9a88afc7626cec0c4a2d12c73c data/minecraft/tags/blocks/snow_layer_cannot_survive_on.json 457cae0b6a74abc669c26ef099149e7149ff70bb data/minecraft/tags/blocks/stairs.json ef0249e5296febb809f365800a45d4fb24f13322 data/minecraft/tags/blocks/standing_signs.json +4d7b80f2ef2b39b61d876d350bd10e8291ddbe0e data/minecraft/tags/blocks/stone_buttons.json +ccf625a058ff363066ce123e9421fdd37414c296 data/minecraft/tags/blocks/sword_efficient.json 2d0b4f3c1574160c79cacf5e6b7cb64b056908b8 data/minecraft/tags/blocks/valid_spawn.json 8a35a44c0a25f20d1ebd014a96d33cf7359a7555 data/minecraft/tags/blocks/walls.json +55ca07d0275a47a4ae006193d82b2025a0b7b378 data/minecraft/tags/blocks/wall_hanging_signs.json db8a532d4765955ab920abfa56fa18b7bad5900b data/minecraft/tags/blocks/wall_post_override.json ac91036fd2f5f2e4ca494586ad538b2fb467f56a data/minecraft/tags/blocks/wall_signs.json a8998a288a879cb5ffe96f3d45cbd69d9d50d863 data/minecraft/tags/blocks/wither_immune.json diff --git a/src/generated/resources/.cache/232d7dc54f63e89526c247ba29265b5afad0215c b/src/generated/resources/.cache/232d7dc54f63e89526c247ba29265b5afad0215c index 46f27c8672..7769ce5b0d 100644 --- a/src/generated/resources/.cache/232d7dc54f63e89526c247ba29265b5afad0215c +++ b/src/generated/resources/.cache/232d7dc54f63e89526c247ba29265b5afad0215c @@ -1,4 +1,4 @@ -// 1.19.4 2023-08-31T19:31:43.6225938 Tags for minecraft:item mod id aether +// 1.20.1 2023-09-15T11:02:30.8011398 Tags for minecraft:item mod id aether 688ae9828b941d1f6760e1e9d3126fac6b99608c data/aether/tags/items/accepted_music_discs.json b1ab124000a7da5fa5e186c46b51223391f132d9 data/aether/tags/items/accessories.json 99e752628cab3cfc3a63a53fa4d137f0f7f03936 data/aether/tags/items/accessories_capes.json @@ -105,6 +105,7 @@ a838c2bd53ede04f2a9ee61012c93d721871dce4 data/minecraft/tags/items/beds.json 041c4417a18df60eb724a8acde8db524fa8bfba5 data/minecraft/tags/items/chest_boats.json 33397c0e49ca28fad45a2f4fc1a5ceb3a01edfbd data/minecraft/tags/items/cluster_max_harvestables.json 252219f81f3abde4bdebe512332bb483fefab9da data/minecraft/tags/items/fox_food.json +7b309889aa4e92af4df62936f4a36677e23c52d3 data/minecraft/tags/items/hanging_signs.json 475cdcff955b16a53107d126242e25d0e2e6babb data/minecraft/tags/items/hoes.json c158a789ed632738e5986dfbd21ff2bba9511d9b data/minecraft/tags/items/leaves.json c365c56c9363907f546b5d4778b8608912fa27c9 data/minecraft/tags/items/logs_that_burn.json @@ -117,8 +118,11 @@ ef0249e5296febb809f365800a45d4fb24f13322 data/minecraft/tags/items/signs.json b830e607f8f1f40961d24f70f71b34ede14bfb3e data/minecraft/tags/items/slabs.json 6b8be3d5114ac4f45dbfff26c82216c0b54ed097 data/minecraft/tags/items/small_flowers.json 457cae0b6a74abc669c26ef099149e7149ff70bb data/minecraft/tags/items/stairs.json +4d7b80f2ef2b39b61d876d350bd10e8291ddbe0e data/minecraft/tags/items/stone_buttons.json 336a5cf28e3a807615f25965e0a90c7bf33dd3ac data/minecraft/tags/items/stone_crafting_materials.json 5d4a9617f9199aa91aa4d20684b2c262120a033d data/minecraft/tags/items/swords.json +dc318e3e18f8b4695a067cda64b8a6e40287a2c2 data/minecraft/tags/items/trimmable_armor.json +62f7c5ff85d3739e0a50b0a194fb5f1dc443c6a9 data/minecraft/tags/items/trim_materials.json 8a35a44c0a25f20d1ebd014a96d33cf7359a7555 data/minecraft/tags/items/walls.json 408d0a90592bca40b0849df41dceac63c321fbd0 data/minecraft/tags/items/wooden_buttons.json f89b40a0ae36918c862701b814a6a66446f31ed4 data/minecraft/tags/items/wooden_doors.json diff --git a/src/generated/resources/.cache/27361c9f93b2c74f19780f93ccf4ad52b49349af b/src/generated/resources/.cache/27361c9f93b2c74f19780f93ccf4ad52b49349af index 19a6b4f9d0..c735501e86 100644 --- a/src/generated/resources/.cache/27361c9f93b2c74f19780f93ccf4ad52b49349af +++ b/src/generated/resources/.cache/27361c9f93b2c74f19780f93ccf4ad52b49349af @@ -1,2 +1,2 @@ -// 1.19.4 2023-03-18T15:59:38.7241556 Tags for minecraft:fluid mod id aether +// 1.20.1 2023-09-08T18:52:14.5781449 Tags for minecraft:fluid mod id aether c9ae54a7510073b17edf82f7591e14bdb2c51837 data/aether/tags/fluids/allowed_bucket_pickup.json diff --git a/src/generated/resources/.cache/59eb3dbb5f86130e09b3c62d89b9525ee01cf52d b/src/generated/resources/.cache/59eb3dbb5f86130e09b3c62d89b9525ee01cf52d index 1d27d58ede..c5a595363f 100644 --- a/src/generated/resources/.cache/59eb3dbb5f86130e09b3c62d89b9525ee01cf52d +++ b/src/generated/resources/.cache/59eb3dbb5f86130e09b3c62d89b9525ee01cf52d @@ -1,190 +1,192 @@ -// 1.19.4 2023-09-05T17:42:48.0227514 Loot Tables -d025471306910ea35dcf85d28fc188182a1b3c8d data/aether/loot_tables/advancements/enter_aether.json -96aec873b17d2a5aed2a22fe094efa32b8d54645 data/aether/loot_tables/blocks/aerogel.json -ffdecdc23fdf03314c666c6d8638f7f44bdbcc8b data/aether/loot_tables/blocks/aerogel_slab.json -f428b49f4b0312b26270aa33c8f6456b89ac387d data/aether/loot_tables/blocks/aerogel_stairs.json -e4dbcab828bb1c527a36f28476674a7141952ff5 data/aether/loot_tables/blocks/aerogel_wall.json -7ec1143de026336b701dc2f0bc82d5e92f776c31 data/aether/loot_tables/blocks/aether_dirt.json -08b7298ae4953ae360c006550cf08d96bbe3d965 data/aether/loot_tables/blocks/aether_dirt_path.json -08b7298ae4953ae360c006550cf08d96bbe3d965 data/aether/loot_tables/blocks/aether_farmland.json -9d447cdfc575498a6c857a2c5a599c8f0f8d97a4 data/aether/loot_tables/blocks/aether_grass_block.json -1d4929d7d6176f60e5ea991a577527ed251ef375 data/aether/loot_tables/blocks/aether_portal.json -55176b29a34cf3a06ae32e16ddd6309029b99150 data/aether/loot_tables/blocks/altar.json -f108d2613ac3e21c58d2245082a250929c59aec7 data/aether/loot_tables/blocks/ambrosium_block.json -a17e74dbf32e992b871e0798eb498292c270f06b data/aether/loot_tables/blocks/ambrosium_ore.json -832dccf5a216d6855172137183fcfc80cbe0d846 data/aether/loot_tables/blocks/ambrosium_torch.json -832dccf5a216d6855172137183fcfc80cbe0d846 data/aether/loot_tables/blocks/ambrosium_wall_torch.json -54264d4dd9a5fecaedc99388b9b4b45bb8520766 data/aether/loot_tables/blocks/angelic_slab.json -d6ab159d767f8b5591a29da3f1e6e674ca96de2b data/aether/loot_tables/blocks/angelic_stairs.json -c6fa40b8f4c6090d949b5006deed5809600ede91 data/aether/loot_tables/blocks/angelic_stone.json -725033b18efe98990e89b5adf80a871549e88297 data/aether/loot_tables/blocks/angelic_wall.json -b3096d0d42faa835d60d87a6a4634f5c9ab07ff4 data/aether/loot_tables/blocks/berry_bush.json -43fed59caef30ed669337807c1808a0d4c33395e data/aether/loot_tables/blocks/berry_bush_stem.json -3c5c73ce4c3d84594ec85f3f9d45a15f77b8eda3 data/aether/loot_tables/blocks/blue_aercloud.json -1d4929d7d6176f60e5ea991a577527ed251ef375 data/aether/loot_tables/blocks/boss_doorway_angelic_stone.json -1d4929d7d6176f60e5ea991a577527ed251ef375 data/aether/loot_tables/blocks/boss_doorway_carved_stone.json -1d4929d7d6176f60e5ea991a577527ed251ef375 data/aether/loot_tables/blocks/boss_doorway_hellfire_stone.json -1d4929d7d6176f60e5ea991a577527ed251ef375 data/aether/loot_tables/blocks/boss_doorway_light_angelic_stone.json -1d4929d7d6176f60e5ea991a577527ed251ef375 data/aether/loot_tables/blocks/boss_doorway_light_hellfire_stone.json -1d4929d7d6176f60e5ea991a577527ed251ef375 data/aether/loot_tables/blocks/boss_doorway_sentry_stone.json -ceea8fd6ae9b2dd007c3612bd52a4cf6ef3a589e data/aether/loot_tables/blocks/carved_slab.json -4afee1d7022c562586c130d7e29f557271f9487a data/aether/loot_tables/blocks/carved_stairs.json -e0ee5881d425fc92516a6a5f4b358c1de179cbb8 data/aether/loot_tables/blocks/carved_stone.json -44e82a5fc56ea56bd38e9ae7ca4811146de45c3c data/aether/loot_tables/blocks/carved_wall.json -1d4929d7d6176f60e5ea991a577527ed251ef375 data/aether/loot_tables/blocks/chest_mimic.json -a16f9cbfeadabb9e6c2e8ed7c91fd17600d9537a data/aether/loot_tables/blocks/cold_aercloud.json -2265fa78c208cc420febf9e0a8cbc2ddf5516eda data/aether/loot_tables/blocks/crystal_fruit_leaves.json -14f59b93f281b7bb0d0f22d65aaeccbb101b4be4 data/aether/loot_tables/blocks/crystal_leaves.json -30c138d83465af7b7ccea4f00c924d8fe8e8dc03 data/aether/loot_tables/blocks/decorated_holiday_leaves.json -8d8073b64d679edfc5807f69dc6e605e89b97116 data/aether/loot_tables/blocks/enchanted_aether_grass_block.json -e7dd3076149db8ad39ea29ea18fa92629c655240 data/aether/loot_tables/blocks/enchanted_gravitite.json -2765f1b6c4c298a5bf1bbcdc4c673efb573ce627 data/aether/loot_tables/blocks/freezer.json -1d4929d7d6176f60e5ea991a577527ed251ef375 data/aether/loot_tables/blocks/frosted_ice.json -33c7f5b77e576fc80c4694550e9d21d214402393 data/aether/loot_tables/blocks/golden_aercloud.json -d87b01010532f17df1a152f49a005ba2995183c8 data/aether/loot_tables/blocks/golden_oak_leaves.json -fa88f4c82809908b9747554316bd220df4813fdd data/aether/loot_tables/blocks/golden_oak_log.json -39dab6228c398004e6eb10c4be067779995e3125 data/aether/loot_tables/blocks/golden_oak_sapling.json -e0676a159d4b5669c4541e3b8a53424dc3fceeec data/aether/loot_tables/blocks/golden_oak_wood.json -f967a96a7e233107857136bd52a7128da76089c5 data/aether/loot_tables/blocks/gravitite_ore.json -096f72844d325c0fb474eea0f11a910683d06370 data/aether/loot_tables/blocks/hellfire_slab.json -cbc3fb3a3766eef0e267efcae14f68f4beb991ec data/aether/loot_tables/blocks/hellfire_stairs.json -19d34d39404a38737a5dfdceb452d03ce0a87447 data/aether/loot_tables/blocks/hellfire_stone.json -71c2dca6991829c42cdb80e19d8eee48200ef1d9 data/aether/loot_tables/blocks/hellfire_wall.json -2ec1f8602d4690cd04c9bc27fecf94dd90b18a26 data/aether/loot_tables/blocks/holiday_leaves.json -79deca1b81a28a777fd5fdea98a797ab3ae2ff4a data/aether/loot_tables/blocks/holystone.json -55dac0b82e3254167cd0e58330e673947f7baa44 data/aether/loot_tables/blocks/holystone_bricks.json -e61bb0fb22a7797507fa466f1786671c133baa0d data/aether/loot_tables/blocks/holystone_brick_slab.json -ad19af6454a6f77e72c3f496dd3854c3797ec5e9 data/aether/loot_tables/blocks/holystone_brick_stairs.json -8059f85cfd0f3cb2b35c3021cdb8ef928be266f7 data/aether/loot_tables/blocks/holystone_brick_wall.json -10f246dcf4434028b08e52b5d52f881dcda12f90 data/aether/loot_tables/blocks/holystone_button.json -6161f683aa3c6ee8b09c6f9243c47cd9a1d218d9 data/aether/loot_tables/blocks/holystone_pressure_plate.json -fbddd14e2d0b5c0c1949ccdd530c864eeee43bb0 data/aether/loot_tables/blocks/holystone_slab.json -19445a7637c874397e9fdbd61113147497ee1208 data/aether/loot_tables/blocks/holystone_stairs.json -ba4349dd2a2110053ddd804eb78220a26d3871c3 data/aether/loot_tables/blocks/holystone_wall.json -3bcff71f1a7b02703487a6c9ab9809fa95defa61 data/aether/loot_tables/blocks/icestone.json -734200de15a86ebbe65c6f67f87217a67a124739 data/aether/loot_tables/blocks/icestone_slab.json -82148b76ff3c5e3eb6d7da40be4492bf763237ec data/aether/loot_tables/blocks/icestone_stairs.json -eb198e1bd0b4dc7cbc6b9b06a280286c02c90b7e data/aether/loot_tables/blocks/icestone_wall.json -7cf775b7b64772bed140c89a668ff3f534674c13 data/aether/loot_tables/blocks/incubator.json -b6661dce95629db6de24db7d675a1f90d7d0857e data/aether/loot_tables/blocks/light_angelic_stone.json -3c5039ccfe8124de5d9ae2298ab3b306333dcbe5 data/aether/loot_tables/blocks/light_hellfire_stone.json -1d4929d7d6176f60e5ea991a577527ed251ef375 data/aether/loot_tables/blocks/locked_angelic_stone.json -1d4929d7d6176f60e5ea991a577527ed251ef375 data/aether/loot_tables/blocks/locked_carved_stone.json -1d4929d7d6176f60e5ea991a577527ed251ef375 data/aether/loot_tables/blocks/locked_hellfire_stone.json -1d4929d7d6176f60e5ea991a577527ed251ef375 data/aether/loot_tables/blocks/locked_light_angelic_stone.json -1d4929d7d6176f60e5ea991a577527ed251ef375 data/aether/loot_tables/blocks/locked_light_hellfire_stone.json -1d4929d7d6176f60e5ea991a577527ed251ef375 data/aether/loot_tables/blocks/locked_sentry_stone.json -c3c3508118863eb6beac76316d357cf8008b28f7 data/aether/loot_tables/blocks/mossy_holystone.json -f001d11c8b9b8813440cd03be55a0773d44bcaa8 data/aether/loot_tables/blocks/mossy_holystone_slab.json -0db134b35ded7124496b26bf2c98d63427c07dae data/aether/loot_tables/blocks/mossy_holystone_stairs.json -e78c405edb419bb3cf3a1b5c33fa0ae3b4ad5eea data/aether/loot_tables/blocks/mossy_holystone_wall.json -8617489ea89245e07f51cd7ea4699b7c0ba4510c data/aether/loot_tables/blocks/pillar.json -642819c399ee0c6e7c74adc36bfdfefc8164511b data/aether/loot_tables/blocks/pillar_top.json -ffbf5b91053e4bf26053c8059fb8c82869b65569 data/aether/loot_tables/blocks/potted_berry_bush.json -ecb5fc73c6a2ecfe4421c9e11d4002527c096e67 data/aether/loot_tables/blocks/potted_berry_bush_stem.json -a2bcad40febb0f2bf330833aff57eef851ef4a2c data/aether/loot_tables/blocks/potted_golden_oak_sapling.json -f279f89c89220390ddd48f5011b07dc8a93bb27b data/aether/loot_tables/blocks/potted_purple_flower.json -689f99c1e0ad9b833cf85e53e3219d132df0076c data/aether/loot_tables/blocks/potted_skyroot_sapling.json -1f8e7240f2dbbb387f0ccc30bdb818d74293c87d data/aether/loot_tables/blocks/potted_white_flower.json -a7b21600ca663580859323c8fd42ca4050f7e532 data/aether/loot_tables/blocks/present.json -54c57453d6e970c1e1e3841721dc4bbcded64eac data/aether/loot_tables/blocks/purple_flower.json -15bf8e1577c8369ea675c88c86de4606b6d644ea data/aether/loot_tables/blocks/quicksoil.json -42e3b7aed6c6593242957e91a34d51348b01a617 data/aether/loot_tables/blocks/quicksoil_glass.json -ed06fadf433da90ef1d69993de67e602f05bc9c1 data/aether/loot_tables/blocks/quicksoil_glass_pane.json -c7fafa93cd699e71c8d4caf523bae0cee655bc4f data/aether/loot_tables/blocks/sentry_stone.json -8cc379966cdf278f69dac9d0519a81437dde526a data/aether/loot_tables/blocks/skyroot_bed.json -9ff86a491f718e4dadb2f83c7dced014809afd7e data/aether/loot_tables/blocks/skyroot_bookshelf.json -6186fb742aea4d5c5ff34a3aaf9dc04e540a701c data/aether/loot_tables/blocks/skyroot_button.json -e06120a24befb0418dedfab331ddd0590bdcb043 data/aether/loot_tables/blocks/skyroot_door.json -f2a57194deebc011e7fec8dede1723e5259bd5d9 data/aether/loot_tables/blocks/skyroot_fence.json -3c4afe89e1f9b68ac39b0cadebcf44a5481a544e data/aether/loot_tables/blocks/skyroot_fence_gate.json -782fa6df8132318cbea3b6e324532de4c5bf4073 data/aether/loot_tables/blocks/skyroot_leaves.json -666a65358ef31021f47a3b02486b2428aab07f90 data/aether/loot_tables/blocks/skyroot_log.json -61295fa7caad280d5f3f383b98c1c74087542eda data/aether/loot_tables/blocks/skyroot_planks.json -c0b5276ee094971fdc32079996ad59e271f4f824 data/aether/loot_tables/blocks/skyroot_pressure_plate.json -cfc73fcb394ffee4a7d2a7f275e1a2111bad1e05 data/aether/loot_tables/blocks/skyroot_sapling.json -2eb428e24a58e27978ab977b4d7bc447d78a2427 data/aether/loot_tables/blocks/skyroot_sign.json -9732ddcf88a60dabc65899f339263996676c6fac data/aether/loot_tables/blocks/skyroot_slab.json -85cd64805a006540ff2183eb1e5178b3e024be22 data/aether/loot_tables/blocks/skyroot_stairs.json -71a989e5344b53a5c3e24361e1e657914d688c83 data/aether/loot_tables/blocks/skyroot_trapdoor.json -c676bceba0fe3663247b0147e93a3a40c84936f2 data/aether/loot_tables/blocks/skyroot_wood.json -1227c1918690907d66e6aa33368b50cc5c2b4745 data/aether/loot_tables/blocks/stripped_skyroot_log.json -b02ecb8ce6bb9dacad9515006a448d17c65bcab2 data/aether/loot_tables/blocks/stripped_skyroot_wood.json -99ffc1e2ef6f76b385d92eb314d8595f688e9d5d data/aether/loot_tables/blocks/sun_altar.json -1d4929d7d6176f60e5ea991a577527ed251ef375 data/aether/loot_tables/blocks/trapped_angelic_stone.json -1d4929d7d6176f60e5ea991a577527ed251ef375 data/aether/loot_tables/blocks/trapped_carved_stone.json -1d4929d7d6176f60e5ea991a577527ed251ef375 data/aether/loot_tables/blocks/trapped_hellfire_stone.json -1d4929d7d6176f60e5ea991a577527ed251ef375 data/aether/loot_tables/blocks/trapped_light_angelic_stone.json -1d4929d7d6176f60e5ea991a577527ed251ef375 data/aether/loot_tables/blocks/trapped_light_hellfire_stone.json -1d4929d7d6176f60e5ea991a577527ed251ef375 data/aether/loot_tables/blocks/trapped_sentry_stone.json -b2e96bcc4793823ca06fd2cc099e06de50ed7638 data/aether/loot_tables/blocks/treasure_chest.json -1d4929d7d6176f60e5ea991a577527ed251ef375 data/aether/loot_tables/blocks/treasure_doorway_angelic_stone.json -1d4929d7d6176f60e5ea991a577527ed251ef375 data/aether/loot_tables/blocks/treasure_doorway_carved_stone.json -1d4929d7d6176f60e5ea991a577527ed251ef375 data/aether/loot_tables/blocks/treasure_doorway_hellfire_stone.json -1d4929d7d6176f60e5ea991a577527ed251ef375 data/aether/loot_tables/blocks/treasure_doorway_light_angelic_stone.json -1d4929d7d6176f60e5ea991a577527ed251ef375 data/aether/loot_tables/blocks/treasure_doorway_light_hellfire_stone.json -1d4929d7d6176f60e5ea991a577527ed251ef375 data/aether/loot_tables/blocks/treasure_doorway_sentry_stone.json -1d4929d7d6176f60e5ea991a577527ed251ef375 data/aether/loot_tables/blocks/unstable_obsidian.json -3d38ae738dd87b3c150772f1fc6134f05c8c5e60 data/aether/loot_tables/blocks/white_flower.json -025ba998abc1c5871345d309e55a23e3ffd5dbb9 data/aether/loot_tables/blocks/zanite_block.json -9b732a4fc2bdcdd492d43070a1247062a5c481a3 data/aether/loot_tables/blocks/zanite_ore.json -c2ba8a63488031f27c7d6bba810e8ffb33b2c8bc data/aether/loot_tables/chests/dungeon/bronze/bronze_dungeon.json -894ca08648c03d959954b0691262570bf5d9cb2e data/aether/loot_tables/chests/dungeon/bronze/bronze_dungeon_disc.json -70d17ec4a529c574c667b24ed557cb32bdf98ffe data/aether/loot_tables/chests/dungeon/bronze/bronze_dungeon_gummies.json -a11711acd8bc5fd9a9d5d746fc2a337290e121ff data/aether/loot_tables/chests/dungeon/bronze/bronze_dungeon_loot.json -823a34216821e227fda0192e98eeb00e4e34b72d data/aether/loot_tables/chests/dungeon/bronze/bronze_dungeon_neptune.json -c95b199a94a354377cc8df5b43890892ba5e3bec data/aether/loot_tables/chests/dungeon/bronze/bronze_dungeon_reward.json -010ac3b3a17532d633586f08d4d8f7385cf8d1a7 data/aether/loot_tables/chests/dungeon/bronze/bronze_dungeon_trash.json -0ac5b7d128ec858f8f20f15f3c708d642ebb8987 data/aether/loot_tables/chests/dungeon/bronze/bronze_dungeon_treasure.json -fe74c493e64c6895a815c12813dd4c91d71259c7 data/aether/loot_tables/chests/dungeon/gold/gold_dungeon_reward.json -4beb246866f187046efdcc951b29f47f4b104556 data/aether/loot_tables/chests/dungeon/gold/gold_dungeon_treasure.json -38b1089b326531bc04800c4d9aabc03350f100cd data/aether/loot_tables/chests/dungeon/silver/silver_dungeon.json -3a73944f0e6eccac3942cae3e38c3bd4488cbb82 data/aether/loot_tables/chests/dungeon/silver/silver_dungeon_cape_config.json -c1dabc90d155741838b84fb983a11d2d7e0974fd data/aether/loot_tables/chests/dungeon/silver/silver_dungeon_disc.json -bb910804a40268edfd9084d596e35bc7d9001b83 data/aether/loot_tables/chests/dungeon/silver/silver_dungeon_gravitite.json -f3e111a054362e2c739860793f35094b6f909806 data/aether/loot_tables/chests/dungeon/silver/silver_dungeon_gummies.json -f6b71f3cc3d0413017eb3f72d397df28207cb526 data/aether/loot_tables/chests/dungeon/silver/silver_dungeon_loot.json -b1371b8b9502081e328598828693168ee9d3a4b1 data/aether/loot_tables/chests/dungeon/silver/silver_dungeon_reward.json -509fcc4c3ed95d67346dad14ed6bfecc9c13386a data/aether/loot_tables/chests/dungeon/silver/silver_dungeon_trash.json -3079e254072e05046d8c4883e6a803fc6c3c0779 data/aether/loot_tables/chests/dungeon/silver/silver_dungeon_treasure.json -1d9641db1436b4e086312ce1e517fd39316d7b44 data/aether/loot_tables/chests/dungeon/silver/silver_dungeon_valkyrie.json -1defa43797c412e010e74dc72660cb433b80a2c4 data/aether/loot_tables/chests/ruined_portal.json -df0825811c297a2490f3108da95334235f829324 data/aether/loot_tables/entities/aechor_plant.json -8d9ec859066d8908362d317ef37e9d2bdbfc9cce data/aether/loot_tables/entities/aerbunny.json -ef017fe8afbc1e704a7cfb4818ece7ba018f9c91 data/aether/loot_tables/entities/aerwhale.json -1d87258e63116b1c0a457bd02b4393d364c433d9 data/aether/loot_tables/entities/blue_swet.json -f0df2c8495e0e2e2a2974cc392a9ad0114afa562 data/aether/loot_tables/entities/cockatrice.json -ef017fe8afbc1e704a7cfb4818ece7ba018f9c91 data/aether/loot_tables/entities/evil_whirlwind.json -ef017fe8afbc1e704a7cfb4818ece7ba018f9c91 data/aether/loot_tables/entities/fire_minion.json -b3e043ecfa0733d67680357cd56e8be483feb26f data/aether/loot_tables/entities/flying_cow.json -ed7e3587e60283c4caf8b844ecf06662957f479f data/aether/loot_tables/entities/golden_swet.json -aea54ac7bb086bdd57ca70018046ed3f1466d77f data/aether/loot_tables/entities/mimic.json -f0df2c8495e0e2e2a2974cc392a9ad0114afa562 data/aether/loot_tables/entities/moa.json -857a042d657e1cb9855316bf57bd4f2b9da4db38 data/aether/loot_tables/entities/phyg.json -ea2831f7a842c1c36445f1f072c9e5712c7c45d0 data/aether/loot_tables/entities/sentry.json -1f93f3aa1d8f13a01284f226fa5c86f8e6c2507f data/aether/loot_tables/entities/sheepuff.json -e376d689fc1604471a5ca48a42a8e24f02ea67df data/aether/loot_tables/entities/sheepuff/black.json -24c41257dd127d86fe9236fc69e92a3597563ecc data/aether/loot_tables/entities/sheepuff/blue.json -074e3319bfa8a6c41ca3de4936540ce5ddf2b548 data/aether/loot_tables/entities/sheepuff/brown.json -6d34725c0ac684c3719f6c38dff343e0d4c93f8f data/aether/loot_tables/entities/sheepuff/cyan.json -f321544566b766aedb2c13d541ee0964f3ae859b data/aether/loot_tables/entities/sheepuff/gray.json -86a7a159e6e7f2e6de1827a46fb7604d2381ee26 data/aether/loot_tables/entities/sheepuff/green.json -9781d13de472c8212c8b6324c04503ba9f9ec53f data/aether/loot_tables/entities/sheepuff/light_blue.json -35dfe9345553ef477c8162941f8c57e57a35e86f data/aether/loot_tables/entities/sheepuff/light_gray.json -60fd14f803ceb4767c6df48aabbafb8e0d00931c data/aether/loot_tables/entities/sheepuff/lime.json -f8d58502ed0f4bf07b866229972c68e2f70b759c data/aether/loot_tables/entities/sheepuff/magenta.json -ac45d0a60441e26b17922f02ff2d843bb106cba0 data/aether/loot_tables/entities/sheepuff/orange.json -94ccd708b7e30ba64a06caa55abefcf333fef07e data/aether/loot_tables/entities/sheepuff/pink.json -ad98befa66667293ed0a27422ec7cc1835b2fb68 data/aether/loot_tables/entities/sheepuff/purple.json -60edabaa892b5ba3808bac820532045e3f84bbd4 data/aether/loot_tables/entities/sheepuff/red.json -4faf444eeb3dd7f28cda15a911f56a5367b50ee2 data/aether/loot_tables/entities/sheepuff/white.json -3b0e201e9d16f2e0eff23cd7b36e023ba9a1a72c data/aether/loot_tables/entities/sheepuff/yellow.json -a9c67b47e0556720d3e240870e651fadf7242e29 data/aether/loot_tables/entities/slider.json -9c94cbc81b55cbd3e7de7f70f284011c376dc6a1 data/aether/loot_tables/entities/sun_spirit.json -9e4ecaa2cd33edd4484569823c0924f729d39ce2 data/aether/loot_tables/entities/valkyrie.json -8e267b22d9f609c074879de93c81d347f3c5e21c data/aether/loot_tables/entities/valkyrie_queen.json -ef017fe8afbc1e704a7cfb4818ece7ba018f9c91 data/aether/loot_tables/entities/whirlwind.json -6c23285f715832ff60c8a44557a88fc725cec0b7 data/aether/loot_tables/entities/zephyr.json -d95f56736ab0bb1de8a301451892772aaebf64dc data/aether/loot_tables/selectors/evil_whirlwind_junk.json -26ffb89facc96442309fe03658e96dc78e02b0ec data/aether/loot_tables/selectors/whirlwind_junk.json -e71c7d2a73557fdbb098bbfcdb658cb9ed2902c0 data/aether/loot_tables/stripping/strip_golden_oak.json +// 1.20.1 2023-09-14T15:11:25.2268751 Loot Tables +6fd07ff3ea848d0b3b26cbf2b2d5c37dd5dc8b9a data/aether/loot_tables/advancements/enter_aether.json +a2337d3e3c05d3efabc3f907351bfe480fd09caa data/aether/loot_tables/blocks/aerogel.json +cb18a05b606bd3951085b27c35172c0e9867f0b0 data/aether/loot_tables/blocks/aerogel_slab.json +5ee47e9d9c365fe3349c9c2fbd189b4be0f59d0c data/aether/loot_tables/blocks/aerogel_stairs.json +8decda96a5b33958999bddeaf114843896074114 data/aether/loot_tables/blocks/aerogel_wall.json +dafd7e53d410ab2e9c9208f8317b5be67b61a58b data/aether/loot_tables/blocks/aether_dirt.json +39f9cbd8fcb2ce2c6c9900abc41a205aba25b6e3 data/aether/loot_tables/blocks/aether_dirt_path.json +8b9df47e38daaf1f85c66f5bc7afe4ef8bdc655b data/aether/loot_tables/blocks/aether_farmland.json +2a5f7828b026f93fc16cc124a6f4a39bae849b70 data/aether/loot_tables/blocks/aether_grass_block.json +41dab5272ac58a021ef1ad7df632c7aa83226ae9 data/aether/loot_tables/blocks/aether_portal.json +894213e5b4e24153f1d62d192cd15b8e4e0eff5d data/aether/loot_tables/blocks/altar.json +c1eddc87f6eddb88c5eb10ba31dee1ab3f7f4425 data/aether/loot_tables/blocks/ambrosium_block.json +ef73404114ae303b88aa9b7b09274d8c9a9ef52a data/aether/loot_tables/blocks/ambrosium_ore.json +9b8941d6d7dc0a81717c731607567e2715cb8a81 data/aether/loot_tables/blocks/ambrosium_torch.json +86e53de0981495d8410e337c88bb33d9447f7522 data/aether/loot_tables/blocks/ambrosium_wall_torch.json +b4889a4bea0ca5dbfa285e19c65018c9b28e64fa data/aether/loot_tables/blocks/angelic_slab.json +2e94f1ab6582f3ae513f526a39a85e2fac6a3898 data/aether/loot_tables/blocks/angelic_stairs.json +7455fa93340a117e082aaf6d6d6a61e70207567a data/aether/loot_tables/blocks/angelic_stone.json +38631e823ad349c16a294c0292b005e62dfd5d46 data/aether/loot_tables/blocks/angelic_wall.json +4c5b8d69f689c5f582a9f53f8a9b8f00557ff190 data/aether/loot_tables/blocks/berry_bush.json +8bd255ec76bc69d08191280df6b10205f4b35c51 data/aether/loot_tables/blocks/berry_bush_stem.json +e2a1c096b143367ce2bc5248654e0440219acd1e data/aether/loot_tables/blocks/blue_aercloud.json +4456968e01300ae8b75f0589c27d56fc4bcc054c data/aether/loot_tables/blocks/boss_doorway_angelic_stone.json +39168106b1ee63b73ba21dfcaeeb72806296f283 data/aether/loot_tables/blocks/boss_doorway_carved_stone.json +a51633ca4a004a79be39d414ae98585e8b71c771 data/aether/loot_tables/blocks/boss_doorway_hellfire_stone.json +a465bce524e71ec72a19aa761ef8edf3faa26e56 data/aether/loot_tables/blocks/boss_doorway_light_angelic_stone.json +8086da1baa4ffb40dde26e9b00787b4c671b4e72 data/aether/loot_tables/blocks/boss_doorway_light_hellfire_stone.json +569b35f2dd8cb1b1c1d1fbf76d682fd539485cd6 data/aether/loot_tables/blocks/boss_doorway_sentry_stone.json +c90ce85128ce430ba13112c55757bcf1c2c280d4 data/aether/loot_tables/blocks/carved_slab.json +891e8eb1f7fc92ded539e3c57a3a567a767f2864 data/aether/loot_tables/blocks/carved_stairs.json +eb685c0253d72563884bc3bf5c8199b50d64847f data/aether/loot_tables/blocks/carved_stone.json +a5698f4f8ff6be939be089e4195d8a133c8e1060 data/aether/loot_tables/blocks/carved_wall.json +0dadef755b35872f8135c2fc6526b7a617c5d009 data/aether/loot_tables/blocks/chest_mimic.json +e6d337bb0059a2d922a014116f97625cf1ee6921 data/aether/loot_tables/blocks/cold_aercloud.json +316dca6e52f0430d689d6a6a38b8124416ec5261 data/aether/loot_tables/blocks/crystal_fruit_leaves.json +0b38093858215486bbebac9488e5d046d90194b5 data/aether/loot_tables/blocks/crystal_leaves.json +c72318426a184c3c1daa3129d0e36f286fc02fa6 data/aether/loot_tables/blocks/decorated_holiday_leaves.json +0f801168da30e37aa5cec6c2c013b834e97e7db4 data/aether/loot_tables/blocks/enchanted_aether_grass_block.json +7866ef5c229840e20180692b69f549070fc17cb8 data/aether/loot_tables/blocks/enchanted_gravitite.json +351362ddb620e30b4e47e1af6daec6eea116b0ef data/aether/loot_tables/blocks/freezer.json +bf9ec38718594467633ca9589f8d34c062a6f859 data/aether/loot_tables/blocks/frosted_ice.json +22159bec635063017ed85f1562276571f64d65a8 data/aether/loot_tables/blocks/golden_aercloud.json +272e4715d885a1b406747a059c65ff6d18a60737 data/aether/loot_tables/blocks/golden_oak_leaves.json +b844ea1e8b830bfb722f2d8687ca6614d7d1b06f data/aether/loot_tables/blocks/golden_oak_log.json +a4b92275d3ebf2b566efe2af9e844fda4c4b9549 data/aether/loot_tables/blocks/golden_oak_sapling.json +8d65e290ec062cacf96dd4f23cd58fddea91e245 data/aether/loot_tables/blocks/golden_oak_wood.json +715d320d5b05f6c297db9b9dd1bcabcb75337cfb data/aether/loot_tables/blocks/gravitite_ore.json +8eaab95e8647eba72fc9e6a8e649c81d81e9ee4f data/aether/loot_tables/blocks/hellfire_slab.json +efcf3d551123db8096a1b65cc404fb1b23ae3ebd data/aether/loot_tables/blocks/hellfire_stairs.json +6cfb9bf2a797cfa92f2bb5f78a7ff419c4c16547 data/aether/loot_tables/blocks/hellfire_stone.json +0412c1b9b4033ec5cdb0b7f131013452e65dd668 data/aether/loot_tables/blocks/hellfire_wall.json +a9666c22184ddf7ab3f5858b5946f39df1ce9984 data/aether/loot_tables/blocks/holiday_leaves.json +e6c09564cd42b870f9199301c7e64fca6977e6a1 data/aether/loot_tables/blocks/holystone.json +8c560b219d6e28882dd13a2ef3caa25c18e5b48b data/aether/loot_tables/blocks/holystone_bricks.json +3473115ecda0a3527d91ba2ffaf4ee76f8e9cb6d data/aether/loot_tables/blocks/holystone_brick_slab.json +3ca14c1eba80859161fe3476c4ef2e628e4afb3c data/aether/loot_tables/blocks/holystone_brick_stairs.json +084bfa9f3c7897d600c48425c508d90c2d451366 data/aether/loot_tables/blocks/holystone_brick_wall.json +873e61186ed472188670ca569ea9f85bc1de0572 data/aether/loot_tables/blocks/holystone_button.json +7bddc5af16bcd72054ad87c8e2665f17bfd3f96e data/aether/loot_tables/blocks/holystone_pressure_plate.json +2ef0f98d132a2784906b3d2c562a28030437d26f data/aether/loot_tables/blocks/holystone_slab.json +6e56051f8e528f633a5bfa8febe8fffc2e339f06 data/aether/loot_tables/blocks/holystone_stairs.json +49784cf78d7587587c646e1566f3d18453cd67df data/aether/loot_tables/blocks/holystone_wall.json +d3c934a687f421570ed701bcac247e0bfe5e8a63 data/aether/loot_tables/blocks/icestone.json +a0dee42e286f3126fac0aa664247627a7d7d41f0 data/aether/loot_tables/blocks/icestone_slab.json +424a0fca4a5025b526f4e63a7398d13813191110 data/aether/loot_tables/blocks/icestone_stairs.json +eb255e4b67dc73b4242897cc5e38cbed63798e82 data/aether/loot_tables/blocks/icestone_wall.json +3630df425c4729e6b554979044b6a9ace738b723 data/aether/loot_tables/blocks/incubator.json +c24351863bef66da742492b3f8b9cc49f0eb9674 data/aether/loot_tables/blocks/light_angelic_stone.json +1ad8684c5fcfb48472324198d3b6d656618fa6c6 data/aether/loot_tables/blocks/light_hellfire_stone.json +82f5b09577df17881a1e5873a6bd775a79768e9d data/aether/loot_tables/blocks/locked_angelic_stone.json +6e3227a9de108fff9df9d15cdbdca9f65f81ebb2 data/aether/loot_tables/blocks/locked_carved_stone.json +746fe1d5fd7f41f7156fdd4c21dd18f892bd135c data/aether/loot_tables/blocks/locked_hellfire_stone.json +1e786ed3289edf957bbcc821b9d628c5878ac2cd data/aether/loot_tables/blocks/locked_light_angelic_stone.json +0e07ac5fc135f8443fbb2970d8c2257de6f4f9ba data/aether/loot_tables/blocks/locked_light_hellfire_stone.json +af0dae9e0e221b0a6d65eca990d948dcac191a59 data/aether/loot_tables/blocks/locked_sentry_stone.json +ff752250bbb5388d969fca1fbbd34406f3a2bfdb data/aether/loot_tables/blocks/mossy_holystone.json +29141bacb80ff6a1bd95f0d7c0c66dc8abbbeb7f data/aether/loot_tables/blocks/mossy_holystone_slab.json +1c5425d580b582b38fdd8bf667a142d4d2e206c2 data/aether/loot_tables/blocks/mossy_holystone_stairs.json +8d2835c3ccb952ab04cdbe0d6fde9fa00ef1685d data/aether/loot_tables/blocks/mossy_holystone_wall.json +21da1ed7becec3b29df8ef816eae7524a440ba79 data/aether/loot_tables/blocks/pillar.json +72ad5e023d57afc9e1bbbef785d88e88e2c396eb data/aether/loot_tables/blocks/pillar_top.json +8b7aca6e404c0bf05de80693d0802c7f6ea9c587 data/aether/loot_tables/blocks/potted_berry_bush.json +a01ea93f18929dd2b36d777181ed9478908c4d29 data/aether/loot_tables/blocks/potted_berry_bush_stem.json +de871218836fcb0a38a9c5a6491cd15b154ba789 data/aether/loot_tables/blocks/potted_golden_oak_sapling.json +f5bd1574981c205c3ebd6aa87e404f3f331e7dfa data/aether/loot_tables/blocks/potted_purple_flower.json +21cc31117552c4b01b82f66b5159ffd5c756d1ad data/aether/loot_tables/blocks/potted_skyroot_sapling.json +a2fa4c6dabf4db654182e15c0195cb6ca524bbeb data/aether/loot_tables/blocks/potted_white_flower.json +84458c3ce049649a2e3746901c05a25033cdc8eb data/aether/loot_tables/blocks/present.json +c8a1e7333d4f10118f1b8550fcbee37d1f75a7e2 data/aether/loot_tables/blocks/purple_flower.json +129cef49383db7f9eb6c4e8eec9b19bc75cccee4 data/aether/loot_tables/blocks/quicksoil.json +c734b486b49ffe5ae0dcf4125ba90f478c0d62ae data/aether/loot_tables/blocks/quicksoil_glass.json +298276a30032b850a0721bc0a93664b859496ee4 data/aether/loot_tables/blocks/quicksoil_glass_pane.json +0b8b2fa5c9d6f97301c17b87d3e9b1712f9593ec data/aether/loot_tables/blocks/sentry_stone.json +316f29319dfc0b86d7ffc6ce6d36bd898e175eb1 data/aether/loot_tables/blocks/skyroot_bed.json +d9af0aaa1dfa628229bb94ffd68e7cbe4c25bf07 data/aether/loot_tables/blocks/skyroot_bookshelf.json +49d2fd490a90640c99954f8cc3a4c4fed62abce9 data/aether/loot_tables/blocks/skyroot_button.json +453a652b13faf915b1f2628e35cab12cefdb9477 data/aether/loot_tables/blocks/skyroot_door.json +639f35e4f95497627bce3e30ceb2ecf8f2aa9004 data/aether/loot_tables/blocks/skyroot_fence.json +5c463a846d8a3ac1baf067d7ca75aad5879fa41d data/aether/loot_tables/blocks/skyroot_fence_gate.json +4496d7681a918396cb46b9d030d06918a31a6c6c data/aether/loot_tables/blocks/skyroot_hanging_sign.json +5a5916a5628f138a18441a9c2a1c20ef48092e24 data/aether/loot_tables/blocks/skyroot_leaves.json +bae7317ea3619908a85059d9f4672ec7ec8b362b data/aether/loot_tables/blocks/skyroot_log.json +68b540975cca577d45fbbb2894d0d4b2e676c0a9 data/aether/loot_tables/blocks/skyroot_planks.json +068fca10325baa4122be4633ab870e63e2742608 data/aether/loot_tables/blocks/skyroot_pressure_plate.json +35ec635dd2ec5aaa780ae608fff0c4050373aa24 data/aether/loot_tables/blocks/skyroot_sapling.json +5b362d622f76be29ad471c8b0a20c523908d00e2 data/aether/loot_tables/blocks/skyroot_sign.json +42c687a49597629a46abf2b88ede9b86ab08ac47 data/aether/loot_tables/blocks/skyroot_slab.json +4bac4a5179eb8874aa72df19c6b09896dfbf0d06 data/aether/loot_tables/blocks/skyroot_stairs.json +c08b5149b95b5a98eff4438eda97c29350c0c112 data/aether/loot_tables/blocks/skyroot_trapdoor.json +5a18637d40ecdd9c80eeabebba12b96fe4c2afcd data/aether/loot_tables/blocks/skyroot_wall_hanging_sign.json +65d5b9396757d08c4c4ca8c157e0927d339623da data/aether/loot_tables/blocks/skyroot_wood.json +0d6d6f4dc5359edad99af4e22a9d040bb2097d75 data/aether/loot_tables/blocks/stripped_skyroot_log.json +93ca175c433ccd83045ce5483f6dc09a1b0f014e data/aether/loot_tables/blocks/stripped_skyroot_wood.json +430d22176d3624005e2f529b0cc25de3e3f2e723 data/aether/loot_tables/blocks/sun_altar.json +e8fa1a6e34414890f3326e0636d135d6a41ad577 data/aether/loot_tables/blocks/trapped_angelic_stone.json +6366df97d881e91ecbc0031b2828e23a5fb0cf2a data/aether/loot_tables/blocks/trapped_carved_stone.json +16039477d32da4066b16deef5220dc92c084f7ed data/aether/loot_tables/blocks/trapped_hellfire_stone.json +af6bdc13eba1a9e2e2d24785ef48544ecfd57444 data/aether/loot_tables/blocks/trapped_light_angelic_stone.json +d073f4901d9be76d42a05e597d99525649167544 data/aether/loot_tables/blocks/trapped_light_hellfire_stone.json +b3fe66f49fb6d781b0832ccf019e66d4d3f41ca9 data/aether/loot_tables/blocks/trapped_sentry_stone.json +bc8bcc82e529e9703d7a53eb1944702d6eb82a15 data/aether/loot_tables/blocks/treasure_chest.json +e8f7b8c4f5688a6aa1936428bb70b0312b9e80cf data/aether/loot_tables/blocks/treasure_doorway_angelic_stone.json +0f76700e128c276979f77d3ef598ae2abed5e09d data/aether/loot_tables/blocks/treasure_doorway_carved_stone.json +919177a5f5e3b3d10ca47085a6caa28da698f3e6 data/aether/loot_tables/blocks/treasure_doorway_hellfire_stone.json +46bc528c3d66353017cc7f179c83eabfd183bace data/aether/loot_tables/blocks/treasure_doorway_light_angelic_stone.json +8755824f4690b13bd6b3c07cd78ccb8e10a3d643 data/aether/loot_tables/blocks/treasure_doorway_light_hellfire_stone.json +df1a31ca9e4a9802085fed3644bf77c6f181d7c0 data/aether/loot_tables/blocks/treasure_doorway_sentry_stone.json +aebb8f6fff5ea30bc0b9529f5b7bc9465211df90 data/aether/loot_tables/blocks/unstable_obsidian.json +c25bc4429e6fdc93e2539e5ea00e725cd0be1e96 data/aether/loot_tables/blocks/white_flower.json +e65fda4782be9ad19f115cb31ac72385ff429ea3 data/aether/loot_tables/blocks/zanite_block.json +aa76016edd2b965b0c6c06eaaecb9123cbc1503c data/aether/loot_tables/blocks/zanite_ore.json +0e4ba4e6b5c0cf6ceca673b930b21ba30c7a8af1 data/aether/loot_tables/chests/dungeon/bronze/bronze_dungeon.json +9a2115a6837fbd12af8fd387546638f2ca1a52eb data/aether/loot_tables/chests/dungeon/bronze/bronze_dungeon_disc.json +ace4a9e2cb46d872c43430c9c859ff6fa0a6d8cc data/aether/loot_tables/chests/dungeon/bronze/bronze_dungeon_gummies.json +a1b60e449be97bda514ff546733eb09e3259c1cb data/aether/loot_tables/chests/dungeon/bronze/bronze_dungeon_loot.json +22900fede72d4f2f6d456e83b7f680ce274e38e4 data/aether/loot_tables/chests/dungeon/bronze/bronze_dungeon_neptune.json +9a38be52bb1aeba35899f1f215b2e4d68465e84f data/aether/loot_tables/chests/dungeon/bronze/bronze_dungeon_reward.json +ce433ef9d921e6d8773b3429fee5a40a3b87cfdf data/aether/loot_tables/chests/dungeon/bronze/bronze_dungeon_trash.json +c7848d2cce1e02df4fbb4838109c3b490514f4a8 data/aether/loot_tables/chests/dungeon/bronze/bronze_dungeon_treasure.json +a48566c3c74d316e869050234d0fc9445d886bf1 data/aether/loot_tables/chests/dungeon/gold/gold_dungeon_reward.json +5a34c1b604b4e16c9da78cb4d717be88fc9b44a3 data/aether/loot_tables/chests/dungeon/gold/gold_dungeon_treasure.json +3e5e72488de4103fd240ba39ba8bfd9aa6d31bf1 data/aether/loot_tables/chests/dungeon/silver/silver_dungeon.json +6e27bddd9f4e80e3efc91324d7ba18083619616b data/aether/loot_tables/chests/dungeon/silver/silver_dungeon_cape_config.json +0cb74325d4b98dc49cdfa507e687f6afd2f61da8 data/aether/loot_tables/chests/dungeon/silver/silver_dungeon_disc.json +0146875b9dce2e003df9f9084d2637d3b1699cdb data/aether/loot_tables/chests/dungeon/silver/silver_dungeon_gravitite.json +6bc2f51a0cb40c1e7a412e3c68b846fb6ce9f545 data/aether/loot_tables/chests/dungeon/silver/silver_dungeon_gummies.json +cbf8360760aaef4daabfd42c907be741624aba97 data/aether/loot_tables/chests/dungeon/silver/silver_dungeon_loot.json +8b0bec6d6219cfaac3a3fa6d6567a566eba25ece data/aether/loot_tables/chests/dungeon/silver/silver_dungeon_reward.json +74e573527add15e8bb0b243b8c20bd9e27153280 data/aether/loot_tables/chests/dungeon/silver/silver_dungeon_trash.json +40b25903cd71608972f622308b7e40366caf5753 data/aether/loot_tables/chests/dungeon/silver/silver_dungeon_treasure.json +ab660476ed9f351e31cdbcf46da9ab67cc85f61b data/aether/loot_tables/chests/dungeon/silver/silver_dungeon_valkyrie.json +b06568b63c19bb42b1f24f05f56de224b6929893 data/aether/loot_tables/chests/ruined_portal.json +c5e853ba61527c3d5a6f8a6562f17e72993d0ed2 data/aether/loot_tables/entities/aechor_plant.json +877172a9d58e9fd14dfad8bc22269a526804ae8f data/aether/loot_tables/entities/aerbunny.json +8351b834ecab91755a3f372e0966af22ab41d23a data/aether/loot_tables/entities/aerwhale.json +451e8450983bdc02da471c6ab814a5b332366621 data/aether/loot_tables/entities/blue_swet.json +d392baf8a1671991fa45ddbbc8610803e83b6995 data/aether/loot_tables/entities/cockatrice.json +5a148bdd76e3ec8685a473b5e1d315eb090443a6 data/aether/loot_tables/entities/evil_whirlwind.json +ed0a143569dfd5dff4d1d80e14dbeda5b28bd6f1 data/aether/loot_tables/entities/fire_minion.json +650879ac68be5931676e274cda96f26c358ef65c data/aether/loot_tables/entities/flying_cow.json +2d0ce4a3cc8aeb67635b0db6930f175e6d2da1a8 data/aether/loot_tables/entities/golden_swet.json +5ffe450c4a7a5e0e6016b071ba152c1d27e97e18 data/aether/loot_tables/entities/mimic.json +9eacfba9f7ba15bd0ef449d8a25b251e96cc370f data/aether/loot_tables/entities/moa.json +f46e6a140ca62218de348fbec97d9e4cfcd36fc7 data/aether/loot_tables/entities/phyg.json +02447937e1034b9b557044eb230aa4ff5fd9bc3f data/aether/loot_tables/entities/sentry.json +d4c548fc059cea13ce13549ef7ab4c3f042439eb data/aether/loot_tables/entities/sheepuff.json +d13481d1fef78ad5edef1347a3a37a3196be6513 data/aether/loot_tables/entities/sheepuff/black.json +91de4646f3c146ff84588a8bffedeb3b94bb03d2 data/aether/loot_tables/entities/sheepuff/blue.json +bd7712a80af4fbc2ddacf7252e74e3bf3e094d9a data/aether/loot_tables/entities/sheepuff/brown.json +72f0aa574c8af007e01ce5d0f1429b611414a77b data/aether/loot_tables/entities/sheepuff/cyan.json +799dd31e71f060f7acf3564875ade0c98d3c03da data/aether/loot_tables/entities/sheepuff/gray.json +2bd1dde439cf2f8ac36ebf17a9cc64d9bf03e3da data/aether/loot_tables/entities/sheepuff/green.json +98ae2cc8e2f5e65df267ec160f5e939e6f4d13d3 data/aether/loot_tables/entities/sheepuff/light_blue.json +60a63532982f34f1fa9120cfa26564509d533a40 data/aether/loot_tables/entities/sheepuff/light_gray.json +2a62c5b0713467a68b6ef0a88b1b98613b986399 data/aether/loot_tables/entities/sheepuff/lime.json +efa449fdcf5c224aeb6394d1c19c9e105e5267ba data/aether/loot_tables/entities/sheepuff/magenta.json +4cdb1af9e46353949ead61fda23e802d12745a2a data/aether/loot_tables/entities/sheepuff/orange.json +77d77fc430a54760be9fa8f3fabf854c65d8e8b8 data/aether/loot_tables/entities/sheepuff/pink.json +2d9a8905fd369c70aaa297ae9f0f810d63d19e98 data/aether/loot_tables/entities/sheepuff/purple.json +6a57a6ac0823d5853fbb520afa84b64c8ee7314e data/aether/loot_tables/entities/sheepuff/red.json +29b283ad8da39bad93fd478dbaa8be93635bc0d3 data/aether/loot_tables/entities/sheepuff/white.json +778d6c80805e12acebcd69f8f6ac8dbe4a889628 data/aether/loot_tables/entities/sheepuff/yellow.json +7b5a4803c2cc9621769a3dafdc408a66eb6581be data/aether/loot_tables/entities/slider.json +12b2e541b47534cc901914484f7a31622ecfb7e1 data/aether/loot_tables/entities/sun_spirit.json +4cdd8a2671c6522cbf42096a064c2e61e95a63ab data/aether/loot_tables/entities/valkyrie.json +8a129b42c8c91019023d694f435deeebe2460a76 data/aether/loot_tables/entities/valkyrie_queen.json +1d3b7cc719b972865c3f0f93807b0e1d4d2beb5f data/aether/loot_tables/entities/whirlwind.json +7ef1ebb92c28764add37681af72025231ea1bd11 data/aether/loot_tables/entities/zephyr.json +c9ba2c2f6b17b710a29c4ecbcdeafbf35f74fac8 data/aether/loot_tables/selectors/evil_whirlwind_junk.json +5491243c76c89f1cff42f6464ebd7ca2e7718787 data/aether/loot_tables/selectors/whirlwind_junk.json +927efb16033d3a15f7c678d027ec2be336eaadc3 data/aether/loot_tables/stripping/strip_golden_oak.json diff --git a/src/generated/resources/.cache/735031f3addf80804addae5e3f53249900116f1e b/src/generated/resources/.cache/735031f3addf80804addae5e3f53249900116f1e index b3c582959d..ce55f40263 100644 --- a/src/generated/resources/.cache/735031f3addf80804addae5e3f53249900116f1e +++ b/src/generated/resources/.cache/735031f3addf80804addae5e3f53249900116f1e @@ -1,2 +1,2 @@ -// 1.19.4 2023-05-28T13:42:16.0594962 Sound Definitions +// 1.20.1 2023-09-08T18:52:14.6221426 Sound Definitions 5d5050690b1b1557d43b8d65f631e5974866c49a assets/aether/sounds.json diff --git a/src/generated/resources/.cache/8c612d57ec52f747b666a8d00c73628b9773ba1d b/src/generated/resources/.cache/8c612d57ec52f747b666a8d00c73628b9773ba1d index e5837d231c..41d65b8a82 100644 --- a/src/generated/resources/.cache/8c612d57ec52f747b666a8d00c73628b9773ba1d +++ b/src/generated/resources/.cache/8c612d57ec52f747b666a8d00c73628b9773ba1d @@ -1,4 +1,4 @@ -// 1.19.4 2023-09-05T17:42:48.0317532 Global Loot Modifiers : aether +// 1.20.1 2023-09-08T18:52:14.5731408 Global Loot Modifiers : aether 09b253d9321c1d9f192a40b16483f85c39b96b75 data/aether/loot_modifiers/double_drops.json 285e0ac500bdf69974bfac3b7c0a1a33a430ed15 data/aether/loot_modifiers/enchanted_grass_berry_bush.json 47b182d37eede49bd687595bad8acb8f17238519 data/aether/loot_modifiers/gloves_loot_chain.json @@ -8,5 +8,5 @@ c91f1f3dab4241ff03930b59a70c5ae0d20103a0 data/aether/loot_modifiers/gloves_loot_ d37a4a85084a210c08946033b23eea2a8e148b79 data/aether/loot_modifiers/gloves_loot_leather.json 1d0f3d8f0000113acd76843a59c8ec127b654d25 data/aether/loot_modifiers/gloves_loot_netherite.json bef2c642d1e9edfcac4f9d3301e51bf6cab20e4c data/aether/loot_modifiers/pig_drops.json -57f1a7642250141784a6ed47e848a4861fe5a54b data/aether/loot_modifiers/remove_seeds.json +13fcf89b6db624f5823b2cb436d7124e68bb4a99 data/aether/loot_modifiers/remove_seeds.json 41e604e7c808e2a9facbcdd481e3f9b13846118d data/forge/loot_modifiers/global_loot_modifiers.json diff --git a/src/generated/resources/.cache/93ef46d8e2a70c25df1652217c68bb7a1c161142 b/src/generated/resources/.cache/93ef46d8e2a70c25df1652217c68bb7a1c161142 index 3994844a76..bcab457706 100644 --- a/src/generated/resources/.cache/93ef46d8e2a70c25df1652217c68bb7a1c161142 +++ b/src/generated/resources/.cache/93ef46d8e2a70c25df1652217c68bb7a1c161142 @@ -1,4 +1,4 @@ -// 1.19.4 2023-07-25T20:01:08.7287666 Item Models: aether +// 1.20.1 2023-09-15T16:24:50.5106891 Item Models: aether 88dbeab79e0017737773db746d2e719a21fdb198 assets/aether/models/item/aechor_petal.json 63ec6c618a3a23eab4cab9c52d7d3250de9b516e assets/aether/models/item/aechor_plant_spawn_egg.json 63ec6c618a3a23eab4cab9c52d7d3250de9b516e assets/aether/models/item/aerbunny_spawn_egg.json @@ -45,7 +45,17 @@ dc98f564fe0ec6d4ea481be792c3706b1613eef2 assets/aether/models/item/carved_slab.j 6b8f193e0f674dcbd217cbaaab48050f767e0391 assets/aether/models/item/carved_stairs.json 43a4d3e76d9e21f0f28a4280d484e9ae90b79ccf assets/aether/models/item/carved_stone.json 8f155c49f48ba1123da76a11e59e1dbb68ff3865 assets/aether/models/item/carved_wall.json -2ca10ae235db037bf61587b67e856b343ef3e892 assets/aether/models/item/chainmail_gloves.json +2040e0f0235b1a83248b00fcbb36fa6a4147a816 assets/aether/models/item/chainmail_gloves.json +c15e6e51f71ba9c8e28d4185684b0310df43534a assets/aether/models/item/chainmail_gloves_amethyst_trim.json +a904c05b372ebeaffcc252fa9d29ad3f606e71c7 assets/aether/models/item/chainmail_gloves_copper_trim.json +ca70bea139aab54705f91b0648c7ce25eb7b61bc assets/aether/models/item/chainmail_gloves_diamond_trim.json +f6273c16d45e7b320cc2655bc8c81d8080fa9fa6 assets/aether/models/item/chainmail_gloves_emerald_trim.json +34e037c222cc03f79ea2c0ad856691904c9c50ae assets/aether/models/item/chainmail_gloves_gold_trim.json +8ce82999a59e018f759054bfe03de7659ba4961a assets/aether/models/item/chainmail_gloves_iron_trim.json +7b5657a2993ce72374ce408b95a7bb5c505e20c8 assets/aether/models/item/chainmail_gloves_lapis_trim.json +9c626b500c58fa71c278842571a110fe461285f1 assets/aether/models/item/chainmail_gloves_netherite_trim.json +9d063babac2909eaf450f3faae7c5d4def8fb0ab assets/aether/models/item/chainmail_gloves_quartz_trim.json +4ce4c07a3b09894afc16c9dcb309e646a90b7584 assets/aether/models/item/chainmail_gloves_redstone_trim.json f6caba399494a58683561699d72ad1cc86e3d339 assets/aether/models/item/chest_mimic.json 79f0613371e2d8e68ab695fb9f334c5b06cb954a assets/aether/models/item/cloud_staff.json 63ec6c618a3a23eab4cab9c52d7d3250de9b516e assets/aether/models/item/cockatrice_spawn_egg.json @@ -54,7 +64,17 @@ f6caba399494a58683561699d72ad1cc86e3d339 assets/aether/models/item/chest_mimic.j 0beb43548545a5e15fd4af0be78dc90f79e41338 assets/aether/models/item/crystal_fruit_leaves.json 0e642b18a2ed4529fc9a160debaeefcdf291161a assets/aether/models/item/crystal_leaves.json db6bc1f861aa81951f6a987c6399db01f804bd06 assets/aether/models/item/decorated_holiday_leaves.json -5a283d4edba03eff5665e83d84000f23cde7364b assets/aether/models/item/diamond_gloves.json +a4596e5d967bdbe6779da40a79c078b17aff4919 assets/aether/models/item/diamond_gloves.json +eac79d4da25dec2785ca8ffa1584e4febb444834 assets/aether/models/item/diamond_gloves_amethyst_trim.json +3863b62cfe2becefcea1886daa8226ce9ae1339c assets/aether/models/item/diamond_gloves_copper_trim.json +74a42ceae5df6f564a90cf63fc114d8abe8490e2 assets/aether/models/item/diamond_gloves_diamond_trim.json +05d17fe65a89118daf98c5fc54d56a7b18c63fa5 assets/aether/models/item/diamond_gloves_emerald_trim.json +a5c402aa8a8cf86cc6f4f93aa68a577f2d439691 assets/aether/models/item/diamond_gloves_gold_trim.json +6972e75cc0b2e29b342e5b60e742da27ac8d781f assets/aether/models/item/diamond_gloves_iron_trim.json +7200cd067901761de9c49c7ca2e654878df410f3 assets/aether/models/item/diamond_gloves_lapis_trim.json +7cdf3fc08c5c1bcb2c878ff37541212a9a6564ba assets/aether/models/item/diamond_gloves_netherite_trim.json +7e459f9f2220e80c31b1edec1dddad25c120fea6 assets/aether/models/item/diamond_gloves_quartz_trim.json +9ff48bbc6ba99a60fa22e2b30a28919ba5898a42 assets/aether/models/item/diamond_gloves_redstone_trim.json 9be2fe9b37c245c27dbc1a9377599a37e7acbab2 assets/aether/models/item/enchanted_aether_grass_block.json b308641dfbed4086ed60f81d2739fd7f9debb89e assets/aether/models/item/enchanted_berry.json eb4b69c305f87ca647ad03c6465c7686a9b9e58c assets/aether/models/item/enchanted_dart.json @@ -71,7 +91,17 @@ e6a93fe6cd2541c5fd1bbcbed023c627bfa2ac12 assets/aether/models/item/golden_aerclo b3c7bef4591ceccc542961dc9aba4010396bed2e assets/aether/models/item/golden_dart.json 655b04d4e13dcc55f2eae32fcdad4463b0c4ae1a assets/aether/models/item/golden_dart_shooter.json 262b796e66344dd73605e0307afcfd52f03e69f2 assets/aether/models/item/golden_feather.json -33ee39e54a0c819b618a9dc26dbe299e5119496a assets/aether/models/item/golden_gloves.json +ad11b71fe6e6296701695b39863927455db4e123 assets/aether/models/item/golden_gloves.json +7bcc1339884ecf6315e66dd8ceec86b84fc585c8 assets/aether/models/item/golden_gloves_amethyst_trim.json +9f6e456a8e187d2c28323e00cfa846ad42fa65ce assets/aether/models/item/golden_gloves_copper_trim.json +4a84bab618f9ba4544339386f392aa3f0f166d27 assets/aether/models/item/golden_gloves_diamond_trim.json +edb8b1cc4d4b680893ed06496afda179809bca21 assets/aether/models/item/golden_gloves_emerald_trim.json +0c880a8ab648453af592076bf25d7754cdfc1264 assets/aether/models/item/golden_gloves_gold_trim.json +e9346fcf03f1122ceb066b8d71ca99694efdbb80 assets/aether/models/item/golden_gloves_iron_trim.json +e5d49760691fe4f1454f67eeea80126231be5c7d assets/aether/models/item/golden_gloves_lapis_trim.json +2bbe984ceee355f35a9f71a5a2e6b73b5c13b0f0 assets/aether/models/item/golden_gloves_netherite_trim.json +4d4cebc0904bd67efe81b97f00f0d9dd30091f4c assets/aether/models/item/golden_gloves_quartz_trim.json +927624c9617c515c39983e996d90b9d647554e93 assets/aether/models/item/golden_gloves_redstone_trim.json a52dd313f711b081b24e7d81caf92a5651cc9af3 assets/aether/models/item/golden_gummy_swet.json 0620e9dc010a48d6b4bd897a9440298c04918cc3 assets/aether/models/item/golden_oak_leaves.json 547a6202a4e3e37b7cd2f900cf35d176d29cd2f5 assets/aether/models/item/golden_oak_log.json @@ -83,12 +113,62 @@ e3772254275d9748bdf986f6d8579ecc05015697 assets/aether/models/item/golden_ring.j 63ec6c618a3a23eab4cab9c52d7d3250de9b516e assets/aether/models/item/golden_swet_spawn_egg.json d297a0b44e26161e8d10861f605095441cbcde58 assets/aether/models/item/gold_dungeon_key.json 39ec937a62ab72c3a65cfb21ed00e267b108ab46 assets/aether/models/item/gravitite_axe.json -b8ef7d5bd207fe89143c7f6e7b84f9fc4e103fad assets/aether/models/item/gravitite_boots.json -49a462e0840dfcb3221f9bc8826bd20f5f53f0c4 assets/aether/models/item/gravitite_chestplate.json -f77ebba13ba5b5023828e9bcfdb0ddf9af454b0b assets/aether/models/item/gravitite_gloves.json -6eb2e5373c917ded9569af7c96a67da1ea0ed5e1 assets/aether/models/item/gravitite_helmet.json +35e96073ea21e0c1e1d9bafd3139625ee45e8b1d assets/aether/models/item/gravitite_boots.json +de29b1729664b88305debc6528fd27616abb1928 assets/aether/models/item/gravitite_boots_amethyst_trim.json +5696a3c1f544c1deed1b38081bd45790ab2b4d8e assets/aether/models/item/gravitite_boots_copper_trim.json +d4bdfca8016396624a96abde9c4e673f6a79026a assets/aether/models/item/gravitite_boots_diamond_trim.json +2a2bb09e10344222214010b50c75c14e93dde29e assets/aether/models/item/gravitite_boots_emerald_trim.json +079020e525433c187400e4eba3b362abe941a8a3 assets/aether/models/item/gravitite_boots_gold_trim.json +8a3f40ec8460b8eeefe36eaf4e15b961070739de assets/aether/models/item/gravitite_boots_iron_trim.json +504c45f2c49cfc705add7c8954c5f0ef9f428956 assets/aether/models/item/gravitite_boots_lapis_trim.json +8170518b98a7a505605c0d21e7e4c38f1dc8a5b2 assets/aether/models/item/gravitite_boots_netherite_trim.json +c9e2a7ce368b153d12812b67ff7e1c12b1166c57 assets/aether/models/item/gravitite_boots_quartz_trim.json +7bfe062859c12dccbbe64f541e5f709b1f107d82 assets/aether/models/item/gravitite_boots_redstone_trim.json +29b23ba205328b6c61a503277b657385b049ad5d assets/aether/models/item/gravitite_chestplate.json +7ec54adfcdc3591b7ef61189a50b928a75a920a6 assets/aether/models/item/gravitite_chestplate_amethyst_trim.json +3e8f0921ff6682f689a157d1598c13198af8ec5d assets/aether/models/item/gravitite_chestplate_copper_trim.json +5c3a0bb8b219160acc16bd2e4a605ec3d7ac7d8a assets/aether/models/item/gravitite_chestplate_diamond_trim.json +8a79c67aba279596e529c349f16932f65230a181 assets/aether/models/item/gravitite_chestplate_emerald_trim.json +07c3ce9c4dbca08e1e2f9cb1b902efaf52779bce assets/aether/models/item/gravitite_chestplate_gold_trim.json +f3d44d2ef8bedde9546f9dc6ad4d8cc8fee3f563 assets/aether/models/item/gravitite_chestplate_iron_trim.json +902dc3119f78018d2ec6a2eec48e53adc773c2b9 assets/aether/models/item/gravitite_chestplate_lapis_trim.json +6a12fa24ea738d06f1de3377b5cdba4ee6ea9bb7 assets/aether/models/item/gravitite_chestplate_netherite_trim.json +810a63de1877d8f7f620b2d2b7c6a5a1e2b57261 assets/aether/models/item/gravitite_chestplate_quartz_trim.json +7f61ce3ba59232bb7097799497c795b92073dd5c assets/aether/models/item/gravitite_chestplate_redstone_trim.json +01a5418de338da86add90c1c77546a3f47895005 assets/aether/models/item/gravitite_gloves.json +98749ec3452a613b4552208bf6bebba6e118b932 assets/aether/models/item/gravitite_gloves_amethyst_trim.json +b2ed7f637f6f2626a3e265b2ce853de902f79bb4 assets/aether/models/item/gravitite_gloves_copper_trim.json +caae1dd30b76c06780229e8867e840b2fc906a0c assets/aether/models/item/gravitite_gloves_diamond_trim.json +a0f95ebc7d4b8b87db052293ed10250dffdda499 assets/aether/models/item/gravitite_gloves_emerald_trim.json +a141dffa5f9f2fb59ad50f363f657cc14a16b290 assets/aether/models/item/gravitite_gloves_gold_trim.json +ea82240ed4255f6d346d2a4e0cf0b7adae155b0f assets/aether/models/item/gravitite_gloves_iron_trim.json +0437cc167a22d2f1394e3a7dfad659bbb123187e assets/aether/models/item/gravitite_gloves_lapis_trim.json +75a4ae929e93bf5548f02cee1c0d0f5ba64bcdae assets/aether/models/item/gravitite_gloves_netherite_trim.json +ae2359825f31810473d2cb73821a0ebb0e091a81 assets/aether/models/item/gravitite_gloves_quartz_trim.json +203bb935375414fa038868d97046aca6e410629f assets/aether/models/item/gravitite_gloves_redstone_trim.json +97b7b29bdc0b46fe0e2bac5bb356e5167de18aea assets/aether/models/item/gravitite_helmet.json +d2c8e959be9f154740db54a438195b79d59caf83 assets/aether/models/item/gravitite_helmet_amethyst_trim.json +2061deb9370b98470a48243212265fb1e3a5899a assets/aether/models/item/gravitite_helmet_copper_trim.json +5beb44d8e8a4fcf957df47872906ac59ca4f6c8d assets/aether/models/item/gravitite_helmet_diamond_trim.json +0cbf900fcc5ceaa60817e9d33c5725a49346c00e assets/aether/models/item/gravitite_helmet_emerald_trim.json +a67e9d124ae48576a55bc9a9bef9e60b8844ffb5 assets/aether/models/item/gravitite_helmet_gold_trim.json +c8a72c9b6d36b3b38ed10adcbe36c7819a0800ce assets/aether/models/item/gravitite_helmet_iron_trim.json +ee6eaa8bab34dc7921241591e1b841a0c064fe7c assets/aether/models/item/gravitite_helmet_lapis_trim.json +78fafff77d74b69d13145c007e0b83cd57aeea49 assets/aether/models/item/gravitite_helmet_netherite_trim.json +8449c941a65ee730807d3634fc9a58b5df6e1e2e assets/aether/models/item/gravitite_helmet_quartz_trim.json +c92b01fb88eba4a96c7d19b8ea5a880d458421de assets/aether/models/item/gravitite_helmet_redstone_trim.json 2b1afa9a8174eff11ffce53519301d3f71462007 assets/aether/models/item/gravitite_hoe.json -5381acca1fd8823d60ccc63f2ae95ad72b980121 assets/aether/models/item/gravitite_leggings.json +cd230d95011275a009e7eea3fbdf975fe0555679 assets/aether/models/item/gravitite_leggings.json +a398fb8db192da93268950a2b8689a8e716c5d95 assets/aether/models/item/gravitite_leggings_amethyst_trim.json +8c93cdfd94225a7ff84f13f3506fa3b98755930a assets/aether/models/item/gravitite_leggings_copper_trim.json +7f18911f9d95b21ecd52b19dcbd56b0572d057ab assets/aether/models/item/gravitite_leggings_diamond_trim.json +09ddd374b7ab117c7be5c874db337f2d22fe71de assets/aether/models/item/gravitite_leggings_emerald_trim.json +c7b0e277e5416ba8c54aaf6871b35fff83d909d5 assets/aether/models/item/gravitite_leggings_gold_trim.json +62cc01c99fbeccfdd34de5d87550de8f87c6b740 assets/aether/models/item/gravitite_leggings_iron_trim.json +474934fdee0040ebe52dc50d3d1c81c3a55ddf42 assets/aether/models/item/gravitite_leggings_lapis_trim.json +5177319393e32a7db88aa4327e56a664a726b6da assets/aether/models/item/gravitite_leggings_netherite_trim.json +6a4e21125ae91624d2c89bac18c036a38586bef7 assets/aether/models/item/gravitite_leggings_quartz_trim.json +e7de455597c087a8a89539581b11b200ada662dd assets/aether/models/item/gravitite_leggings_redstone_trim.json 2eb34633e2bccc6226bca518862f2f34cdde8818 assets/aether/models/item/gravitite_ore.json 12324bf1ab0c596dd6a67d3c4fed81e40e188565 assets/aether/models/item/gravitite_pickaxe.json 6016c9ef1d7b071969bc7bef8e7a8b5e1732cda5 assets/aether/models/item/gravitite_shovel.json @@ -127,10 +207,30 @@ ebdced37fa721572d79522c596d9641c407f6c3b assets/aether/models/item/icestone_wall e221be02d2e36dab16a4007800502b8c87faf699 assets/aether/models/item/incubator.json ee1bb9de31abd4267f148740a5f97998da2a89a7 assets/aether/models/item/invisibility_cloak.json 35b997e55f2fc4d048f0a6e1b35463dba35c5906 assets/aether/models/item/iron_bubble.json -f17bedc793c58d99fc950f78238bd660703afa73 assets/aether/models/item/iron_gloves.json +5c435dccfb17d5dd407589de8383cea82941bca1 assets/aether/models/item/iron_gloves.json +a03874e444f65557c67e8cc3382fcdc6902d74b0 assets/aether/models/item/iron_gloves_amethyst_trim.json +a97f3f92c2bbf95731446b2b1e230338ee339c3d assets/aether/models/item/iron_gloves_copper_trim.json +c4ba740d9e6d4dfa8e0399401ec27c923bd9b45e assets/aether/models/item/iron_gloves_diamond_trim.json +3a23e175158dfe6e18304c75de795bab1ee5ae74 assets/aether/models/item/iron_gloves_emerald_trim.json +eac107dd8cca16411e676af27a8b8f1da67b4abf assets/aether/models/item/iron_gloves_gold_trim.json +39a94a94a2a316857b359ea5c9e90ea4c78c23b8 assets/aether/models/item/iron_gloves_iron_trim.json +3f8b38e624825feb1961c2070ca139873072e4ff assets/aether/models/item/iron_gloves_lapis_trim.json +8f4857b09a7d8a3dc1728370d0af5f5f4fc56187 assets/aether/models/item/iron_gloves_netherite_trim.json +f8b6998806ef52402a4e23d26db3b165233ba5e1 assets/aether/models/item/iron_gloves_quartz_trim.json +bc683347eca1ebc45adaa03aa5500d6326efd107 assets/aether/models/item/iron_gloves_redstone_trim.json c2d0568c3579d68fe7d2ae0a8a319128e0c3aaff assets/aether/models/item/iron_pendant.json 89244bfd71856cf30039ed865f56a89012c617a0 assets/aether/models/item/iron_ring.json -3387db939258167e1228ff0b6914210f192ea970 assets/aether/models/item/leather_gloves.json +30ce7e6f7c5d5bf45d9893d2cfb114367a02b9f2 assets/aether/models/item/leather_gloves.json +b68a281fd6336a5f1cb2a466b9e150336aaad7d5 assets/aether/models/item/leather_gloves_amethyst_trim.json +95657b9e7d4fb09ff0259b57b704c7b8e302f7d7 assets/aether/models/item/leather_gloves_copper_trim.json +fb148a3c5972ca3253e5850802e1086ae6468108 assets/aether/models/item/leather_gloves_diamond_trim.json +2a3bea91d4937d11597a54bdcb7763aaa823ae5e assets/aether/models/item/leather_gloves_emerald_trim.json +14b3d1449f5ff8c067ecda1591060b7fc4931b55 assets/aether/models/item/leather_gloves_gold_trim.json +b4d64d7a56779263ab3c512815b38136274c65db assets/aether/models/item/leather_gloves_iron_trim.json +9d006fe4b5f710502c29a284aa050fc71268ea74 assets/aether/models/item/leather_gloves_lapis_trim.json +0da8b6a5c9829303f17f0daff77de0175eda303b assets/aether/models/item/leather_gloves_netherite_trim.json +1664669a3566dd2084f7377cdffdd9d118334939 assets/aether/models/item/leather_gloves_quartz_trim.json +fd3babbe03f8adceff43b96fa323509f6115dec4 assets/aether/models/item/leather_gloves_redstone_trim.json 9d62148859594590572dbce907972ab6f52f7f76 assets/aether/models/item/life_shard.json 88265d4da821b0de63b5b0058fb45c0c68173311 assets/aether/models/item/lightning_knife.json 4d27cd7eb2bbf7e9e5a7151751e13a7d03b1da0c assets/aether/models/item/lightning_sword.json @@ -153,26 +253,186 @@ efdafb22ff9ce0550d5de3490f93d7e5d246fe4f assets/aether/models/item/mossy_holysto 9c6ed4e747204a8beb5115b0429c9aa97583606b assets/aether/models/item/music_disc_chinchilla.json 55d686cff90f5dfc9d48adfcd47b299e5ce4876c assets/aether/models/item/music_disc_high.json 902b04b2a7f9c6e8e1f4ec322698902ab4f714b6 assets/aether/models/item/nature_staff.json -f115500cefe2f7db2716be8476bfdbb085159345 assets/aether/models/item/neptune_boots.json -73a3cc2ad59c8a11882916065f992aa256e7109c assets/aether/models/item/neptune_chestplate.json -1a38aaa2b483b37ed2221fcb12d25e8ba2453dbc assets/aether/models/item/neptune_gloves.json -f069608dbee7d1a370cb16e02458d3725f0b575e assets/aether/models/item/neptune_helmet.json -84c078986e1c52dca02b55f85cda46ced952ffe6 assets/aether/models/item/neptune_leggings.json -c0cd6b25f7ebdbc45dbc37d243172d0b369e44a7 assets/aether/models/item/netherite_gloves.json -0c36a5fb8fba2471ff744669f928a788f9fca961 assets/aether/models/item/obsidian_boots.json -5e5be9c54607c85f9f7bc2a4f3cce262a01a9d77 assets/aether/models/item/obsidian_chestplate.json -08b53e487684f11520333fa3aa77bcacb8f2bf94 assets/aether/models/item/obsidian_gloves.json -34d4c2afbe4264b9aced2a49ab6f3eaf1e843abf assets/aether/models/item/obsidian_helmet.json -2b1dae06763aaa8f1a25c74fe0603ddcd7870361 assets/aether/models/item/obsidian_leggings.json -ce36088001c845e491c83178e35be39fafffcfc6 assets/aether/models/item/phoenix_boots.json +36c15419034da6a31b0c614a644933fdd9850184 assets/aether/models/item/neptune_boots.json +49058b98168eade344783960a139e108ae98062a assets/aether/models/item/neptune_boots_amethyst_trim.json +8e6f996d47129f0a7b9f771af200876b956815bb assets/aether/models/item/neptune_boots_copper_trim.json +ec91d824b1c5d017389f3e8f4834df5991d8639e assets/aether/models/item/neptune_boots_diamond_trim.json +40f214aaf9f170d7e1a31f18d0d41c37424ef560 assets/aether/models/item/neptune_boots_emerald_trim.json +220d74b176552e0674eaf8a8620dc33d81ec1fff assets/aether/models/item/neptune_boots_gold_trim.json +bea6ce66402feed11c496c53ac7eb2333b685642 assets/aether/models/item/neptune_boots_iron_trim.json +17bce1394ee5e21b0717b373ef090d0188f6b361 assets/aether/models/item/neptune_boots_lapis_trim.json +1764068a6cf5f4fa060c38787004e2e9d23d9ccf assets/aether/models/item/neptune_boots_netherite_trim.json +bf6d25114369836f40e71ac37a0b0d228ba1b9a0 assets/aether/models/item/neptune_boots_quartz_trim.json +82a9161b2b5adc27e50993e4965be5473afad1b9 assets/aether/models/item/neptune_boots_redstone_trim.json +13cf446a619c104cdde11964dfd1acf7a2d357d8 assets/aether/models/item/neptune_chestplate.json +74e5cf75db8d1b75d0aba9a760ab3cb54b61cd63 assets/aether/models/item/neptune_chestplate_amethyst_trim.json +9fffe7b819d97714674d1978923b8426c3f53f90 assets/aether/models/item/neptune_chestplate_copper_trim.json +24868a75ae87cae2d7d7459689ed628cbc7e256f assets/aether/models/item/neptune_chestplate_diamond_trim.json +a429531cc627a44e1554f0a91d6a4f2a4a0cccf6 assets/aether/models/item/neptune_chestplate_emerald_trim.json +308f03e3de691164d5ec70e5c49d777376f8c8a4 assets/aether/models/item/neptune_chestplate_gold_trim.json +d0c710df9b5997ccec2159e490e4cba657aaac94 assets/aether/models/item/neptune_chestplate_iron_trim.json +6ed4f56a64f53b90a4fabe5bcaa75451368ab552 assets/aether/models/item/neptune_chestplate_lapis_trim.json +f26f0a3ca45bc2e055db6fb456b2ff7ef6eb530a assets/aether/models/item/neptune_chestplate_netherite_trim.json +48593b88fcdc7c38b7e80303456f161d0c84d912 assets/aether/models/item/neptune_chestplate_quartz_trim.json +823a03a7f2777cff02b64322242eb1e37e33a58f assets/aether/models/item/neptune_chestplate_redstone_trim.json +5005f2425b5248b2fb4eb9edd34eacbfa952f7ca assets/aether/models/item/neptune_gloves.json +372e2e5b25d84b99e393605bfe222f36d5836904 assets/aether/models/item/neptune_gloves_amethyst_trim.json +deba6129ba3cce970c78a07cdcb783c8c7566850 assets/aether/models/item/neptune_gloves_copper_trim.json +55298d699eda40736d18e4c30b90a1b916603eff assets/aether/models/item/neptune_gloves_diamond_trim.json +319c7091fdc523355125e294b07e0b268e8bbc98 assets/aether/models/item/neptune_gloves_emerald_trim.json +05c77bdd8347c29c25d0855ab3d8fc8295fb03bb assets/aether/models/item/neptune_gloves_gold_trim.json +1c6deb49b6b31692f93a2daebaf0b3778a26e963 assets/aether/models/item/neptune_gloves_iron_trim.json +e7e377d2a976d68d536ac3aab1b1ecd2f3127a74 assets/aether/models/item/neptune_gloves_lapis_trim.json +e424c7658bca0b2011b2ed4de4ca9e35b953e5f1 assets/aether/models/item/neptune_gloves_netherite_trim.json +7f3be4b621496e04062a5195c99b4d4be0d597f0 assets/aether/models/item/neptune_gloves_quartz_trim.json +6a6b1040e9ab77a6988e06ae0472839435bff521 assets/aether/models/item/neptune_gloves_redstone_trim.json +79b97215a2e3212c7ad1e833aa98033b36dd19b4 assets/aether/models/item/neptune_helmet.json +874eaa49bc494a32b471eb21762e995c99691508 assets/aether/models/item/neptune_helmet_amethyst_trim.json +bbf00bef5d0481ff5c25221cdd7abda5670e1eee assets/aether/models/item/neptune_helmet_copper_trim.json +7e337c800c6f4baa140cf9f83d10984cfc3d6fe2 assets/aether/models/item/neptune_helmet_diamond_trim.json +1ace2b87d5d3b87090661b672ca8acd4c5a9e278 assets/aether/models/item/neptune_helmet_emerald_trim.json +fda2f2fd2bd3cdfe8a3495632d3728e60df57477 assets/aether/models/item/neptune_helmet_gold_trim.json +e28163a3c8403b14cd3ff195c3207aab2abbd8d9 assets/aether/models/item/neptune_helmet_iron_trim.json +cf2cb44539f29c2c24bb90293422cc4b68a5cf33 assets/aether/models/item/neptune_helmet_lapis_trim.json +01976f926e92e6e09a16f3d86b71a44c6ab2d3ab assets/aether/models/item/neptune_helmet_netherite_trim.json +6939c46eda04e34515d75bc00e6446959ab99bd9 assets/aether/models/item/neptune_helmet_quartz_trim.json +64f5798e650d919f07221e66436e5937a14026a5 assets/aether/models/item/neptune_helmet_redstone_trim.json +818afd9eb5321449f03ad399d4a5ea7548d2fe63 assets/aether/models/item/neptune_leggings.json +6ba2135fe473f2eba25c88e761339a42d0a173a4 assets/aether/models/item/neptune_leggings_amethyst_trim.json +ca3ed212b80f0f2f91d0b13af1f9f2c5847cfb5b assets/aether/models/item/neptune_leggings_copper_trim.json +be8a9d1fee16e649a1c081b8536705bb8661d043 assets/aether/models/item/neptune_leggings_diamond_trim.json +6f88055111056e06cc5026a5676fc1c661697238 assets/aether/models/item/neptune_leggings_emerald_trim.json +ca1b0bb50d10cc55eec5a5f1ef9d57a250b6205c assets/aether/models/item/neptune_leggings_gold_trim.json +ff526dd0b724c036af21594968d70f285ee2b7b8 assets/aether/models/item/neptune_leggings_iron_trim.json +9a179c06f7d6313206e453e5fb221fa14ae3926c assets/aether/models/item/neptune_leggings_lapis_trim.json +a72a7763daf419300593515af2722e31b2cb075b assets/aether/models/item/neptune_leggings_netherite_trim.json +2eb52f3fdf8fedd106a6c1abdc2a0398d9501250 assets/aether/models/item/neptune_leggings_quartz_trim.json +6908d8eb4a4a76d8dfde6baf2337f4c45458b118 assets/aether/models/item/neptune_leggings_redstone_trim.json +59aa54f3d78af4f5dcab4b6c9622f4120af661b0 assets/aether/models/item/netherite_gloves.json +3d4113aaf5a731938634c3e8536f6e7c98a30060 assets/aether/models/item/netherite_gloves_amethyst_trim.json +0d4dc6c5f724fb7ea219270060491cdf2ec1a1b5 assets/aether/models/item/netherite_gloves_copper_trim.json +81a9e4b321ee946a2c571ff66081da9219e1ed55 assets/aether/models/item/netherite_gloves_diamond_trim.json +7a80905708e3b4e63455786456fbea75b5f45587 assets/aether/models/item/netherite_gloves_emerald_trim.json +359b6a8454b0c42e21ba642034f6216e2cf67b04 assets/aether/models/item/netherite_gloves_gold_trim.json +cb86afbb354059bcfec7cd939a17905941757c9d assets/aether/models/item/netherite_gloves_iron_trim.json +c59b8761df2794f355371ab96fa4685da191c907 assets/aether/models/item/netherite_gloves_lapis_trim.json +68bdad67afa891036f0b7c57b67891c4b80023c2 assets/aether/models/item/netherite_gloves_netherite_trim.json +09e96a89963f96517fcc1ec26d163f9e50bac2da assets/aether/models/item/netherite_gloves_quartz_trim.json +e303c0223d70fa059e6183b83181971424299c74 assets/aether/models/item/netherite_gloves_redstone_trim.json +c24b53b184613c05dd3f769cf2876b3b6f012a8e assets/aether/models/item/obsidian_boots.json +a1f910e42904fdf51953fb86057af04d2e065e4d assets/aether/models/item/obsidian_boots_amethyst_trim.json +012bc1ac1549ca49c4ed854bb307c27d80a0107d assets/aether/models/item/obsidian_boots_copper_trim.json +0b3aea70d5eb61ef4ac9690c59e9bfdd3e9b2d29 assets/aether/models/item/obsidian_boots_diamond_trim.json +9cbe59d4753b11ac7466be075184d61c4591261f assets/aether/models/item/obsidian_boots_emerald_trim.json +30aeaaa3f6079e0dbb37db506e3f14729520032a assets/aether/models/item/obsidian_boots_gold_trim.json +877d9a12d4e70507ad047b6c21dcabc3aea3f0d6 assets/aether/models/item/obsidian_boots_iron_trim.json +16e8306457384b52872d175cd02ecd909324e025 assets/aether/models/item/obsidian_boots_lapis_trim.json +2fbbc95ddd08e3de0e5764312259fd2287dda1ce assets/aether/models/item/obsidian_boots_netherite_trim.json +4e666e1ea6348b2b21f88265f104d1b67ce82f9e assets/aether/models/item/obsidian_boots_quartz_trim.json +360af0af4b956983f2fdfd82323fea5e946e3588 assets/aether/models/item/obsidian_boots_redstone_trim.json +77a784e2135ef08f34a9e0efd98f49ec387f7844 assets/aether/models/item/obsidian_chestplate.json +532c1190319d74f3698864b4175857e990e8ffae assets/aether/models/item/obsidian_chestplate_amethyst_trim.json +d2d1d4b40d96b4dc7d697905fba09b804e13c360 assets/aether/models/item/obsidian_chestplate_copper_trim.json +ec7d164c04b607a9323115613303254c9bdaa9e5 assets/aether/models/item/obsidian_chestplate_diamond_trim.json +175e67c3122f0da6f8ce3c838831a83055038b15 assets/aether/models/item/obsidian_chestplate_emerald_trim.json +e56902832ffde6a6f99cbef3ce15a63973427c9b assets/aether/models/item/obsidian_chestplate_gold_trim.json +7ac38cc0a8d9c3f66adfc0fd1c0650d6beff3ad9 assets/aether/models/item/obsidian_chestplate_iron_trim.json +75726ce0c60e5498255e6783d8e2899f2a756423 assets/aether/models/item/obsidian_chestplate_lapis_trim.json +6d437d34394a2047331b9b08a3947c8eeeb2f4cd assets/aether/models/item/obsidian_chestplate_netherite_trim.json +8a27f5899acc837bf9387da44a836edb6c52eabd assets/aether/models/item/obsidian_chestplate_quartz_trim.json +7ed94a2504c6147dd0f09e747891212e5f9a9eb7 assets/aether/models/item/obsidian_chestplate_redstone_trim.json +a5b3e16b0ad27505d47d0782ce1995340bba62d8 assets/aether/models/item/obsidian_gloves.json +84528f47a7c3ede3af3f38a1eedc59ea8027bea1 assets/aether/models/item/obsidian_gloves_amethyst_trim.json +7f03be605984814026a77cb81c1bd700a66a42c0 assets/aether/models/item/obsidian_gloves_copper_trim.json +b071716e1d9cf848b59850071f0d0bf6f6d50c54 assets/aether/models/item/obsidian_gloves_diamond_trim.json +986c5d613c3123e780a81eefdf182d91d9073835 assets/aether/models/item/obsidian_gloves_emerald_trim.json +141388da96cc387a70e24b7a57c8a06843a807e1 assets/aether/models/item/obsidian_gloves_gold_trim.json +6f3c6ca003327786df3a75294fb225d0d57ee288 assets/aether/models/item/obsidian_gloves_iron_trim.json +9a4068d6a12869fd7a10ec3e28e27261a3e8b22b assets/aether/models/item/obsidian_gloves_lapis_trim.json +a99af16ddee40625019edc9f07da55bbc62a1235 assets/aether/models/item/obsidian_gloves_netherite_trim.json +ceff861218f0ceee4f7d21e6cb45a44f661e4ff0 assets/aether/models/item/obsidian_gloves_quartz_trim.json +ebf0183cf31f61af478031773f9da7d20a3801a2 assets/aether/models/item/obsidian_gloves_redstone_trim.json +cae6b390b4aa1fce80a12df62e3cf7ceccb2c275 assets/aether/models/item/obsidian_helmet.json +697132e37ff4ac2ad1313fd669a02926e53e1b11 assets/aether/models/item/obsidian_helmet_amethyst_trim.json +136e3fec9c431c410c97ac10dab9ae3692358e7e assets/aether/models/item/obsidian_helmet_copper_trim.json +ff1a09d76e5b12c3580d1f3de0b35cc058ba6be6 assets/aether/models/item/obsidian_helmet_diamond_trim.json +c25d4f09ea55cc56119b1f60d7fad3a1ea29501f assets/aether/models/item/obsidian_helmet_emerald_trim.json +a3ac942ad09c2a3e64d26337d580ff4f3cff2a48 assets/aether/models/item/obsidian_helmet_gold_trim.json +4aceeb240dec700ca90016bb319ced110aab2eec assets/aether/models/item/obsidian_helmet_iron_trim.json +47af930983f0e282ce71ae97ba7d643af1f63d81 assets/aether/models/item/obsidian_helmet_lapis_trim.json +2c7029312093cd18361586e24c6ade37de09d137 assets/aether/models/item/obsidian_helmet_netherite_trim.json +7fb990e63e480fb6e87123e345f65b11c8bb7e67 assets/aether/models/item/obsidian_helmet_quartz_trim.json +697eda08b4e85dba2ea9b574a7f513e8f08bad6e assets/aether/models/item/obsidian_helmet_redstone_trim.json +a84be71a842d7725c2a60c0c717bfc305f944fa9 assets/aether/models/item/obsidian_leggings.json +13da8d6f86d43fdd7121d274772d7068300a95f6 assets/aether/models/item/obsidian_leggings_amethyst_trim.json +b13eaad7a3b8b43177c7410621fcae673c5d2ad9 assets/aether/models/item/obsidian_leggings_copper_trim.json +d383a39f80ebb76076f08054571e47b857f72266 assets/aether/models/item/obsidian_leggings_diamond_trim.json +055311ec30e1ece2d60ef5bb9ae62a6f158c7022 assets/aether/models/item/obsidian_leggings_emerald_trim.json +bcc58837bc86662ebc38c335ed8cd2f94ce23dcd assets/aether/models/item/obsidian_leggings_gold_trim.json +95013d5348960adae3220c90eaaf72907057288e assets/aether/models/item/obsidian_leggings_iron_trim.json +8d5426bcfd3d003ace6b6579a86ae2aaf1b3b797 assets/aether/models/item/obsidian_leggings_lapis_trim.json +6214ccca6c7138b72f6671a68758a9595b78089f assets/aether/models/item/obsidian_leggings_netherite_trim.json +3a06ca74e6c7f84698155175d21c9b1f61b2fdf9 assets/aether/models/item/obsidian_leggings_quartz_trim.json +17f81fb63247ba54bd254c48902ddcad82891952 assets/aether/models/item/obsidian_leggings_redstone_trim.json +ca7c284cacf8c92b3069aad021d7ba7597a63b5f assets/aether/models/item/phoenix_boots.json +949c9f1d44d8426302abb8ae8be8cd1851857d5f assets/aether/models/item/phoenix_boots_amethyst_trim.json +a2a06293c6992dc48d1decd5d413a2ee2e95d0d8 assets/aether/models/item/phoenix_boots_copper_trim.json +b81e195c0ec6fd88b4286d7529c9c12079459791 assets/aether/models/item/phoenix_boots_diamond_trim.json +9004747147b77d102805391e1998ed69b5d8ce9c assets/aether/models/item/phoenix_boots_emerald_trim.json +67f0c879ffcb1236193ea93c50dac48552ce41aa assets/aether/models/item/phoenix_boots_gold_trim.json +b5de1b36c81fc4cb4e90d120feeba945663013f3 assets/aether/models/item/phoenix_boots_iron_trim.json +d46183d46fbedb851afc2b4b64bbb2847e569d4a assets/aether/models/item/phoenix_boots_lapis_trim.json +443b19ec4a4db4e9f30579043bd5b23a6298c0c0 assets/aether/models/item/phoenix_boots_netherite_trim.json +a2f54380382073cd99852cbde3ec5b53f4ad3d08 assets/aether/models/item/phoenix_boots_quartz_trim.json +de47b3ff2e6f62aa392557ec090788bdf8e8489c assets/aether/models/item/phoenix_boots_redstone_trim.json 9bc75581546e3718bcab1b8517efee680d0539fa assets/aether/models/item/phoenix_bow.json d67f6f3d0b9ae617731a1d868768ca7d726dafad assets/aether/models/item/phoenix_bow_pulling_0.json 2c617b7967c62ed79d55296689855911482f8ef3 assets/aether/models/item/phoenix_bow_pulling_1.json c6c7ed09343832a8b35b7768de91612fc7090495 assets/aether/models/item/phoenix_bow_pulling_2.json -ce893a121380c7de68901366dc93ef659a7f5848 assets/aether/models/item/phoenix_chestplate.json -ade1fe02681491cfdcb34af350cc0be35ec38e58 assets/aether/models/item/phoenix_gloves.json -4f8d75856ee4c36e1aac45747fabd15e387e0632 assets/aether/models/item/phoenix_helmet.json -8612444d91bda209311512b4c2043ba10d4ecb70 assets/aether/models/item/phoenix_leggings.json +23fbbec359311b5353d79689fdb453d753ffab15 assets/aether/models/item/phoenix_chestplate.json +a3299fd305f633fbf810fdaf329a6c2a939f31ac assets/aether/models/item/phoenix_chestplate_amethyst_trim.json +81698a071a5a5f741f42c3e46ab510106caa82e2 assets/aether/models/item/phoenix_chestplate_copper_trim.json +360ef64bfb354fc19ddeef8e08148bf65bfca9ba assets/aether/models/item/phoenix_chestplate_diamond_trim.json +13914e5378fd778dc51dbcb492a446103e72d3b9 assets/aether/models/item/phoenix_chestplate_emerald_trim.json +91c5418b1f98a751a73d76259cba7dcd173f13e6 assets/aether/models/item/phoenix_chestplate_gold_trim.json +d8422ca65323f6ba31d97c74086365252a37098f assets/aether/models/item/phoenix_chestplate_iron_trim.json +de84f7717416147bf3c821284fecba1947feadea assets/aether/models/item/phoenix_chestplate_lapis_trim.json +4c5ca2a2384030579431ecafe6bc83f3d794d46a assets/aether/models/item/phoenix_chestplate_netherite_trim.json +73067dff33e16a57d182402f001056ff529bbe18 assets/aether/models/item/phoenix_chestplate_quartz_trim.json +ac916edd7e257396e291faf18379ff33827be696 assets/aether/models/item/phoenix_chestplate_redstone_trim.json +2001c0063912856823b476a1f93b70a93f6cc954 assets/aether/models/item/phoenix_gloves.json +f959e46fa6598ebb1275dc66e96bcd698e112e22 assets/aether/models/item/phoenix_gloves_amethyst_trim.json +1b3387935c99aaa8ed4819db08dc51f06bca6db3 assets/aether/models/item/phoenix_gloves_copper_trim.json +6ccd45a96b379e4038a77e630f49660df967b925 assets/aether/models/item/phoenix_gloves_diamond_trim.json +4c347cfce15f4cbc15c1800d0663586ae9422aac assets/aether/models/item/phoenix_gloves_emerald_trim.json +b5a03fb077c794677d87dbad66edf13030073ec7 assets/aether/models/item/phoenix_gloves_gold_trim.json +c5eb6fcf91c1dac558c44fe581b0dfdf500bd706 assets/aether/models/item/phoenix_gloves_iron_trim.json +032fed74d1a747149e18bf3e788b58d86aa9e16e assets/aether/models/item/phoenix_gloves_lapis_trim.json +71e90213f2670c12f35a590b4e9320e99fca6fd7 assets/aether/models/item/phoenix_gloves_netherite_trim.json +feb9e7dfa3cfb5a6b90d48d3e28404453bc3d76a assets/aether/models/item/phoenix_gloves_quartz_trim.json +8a5e6f05327da9a9cab737abebfaa75392382225 assets/aether/models/item/phoenix_gloves_redstone_trim.json +4ebe1eaecd42e6be04d6e243bbb7a60676b0c8ac assets/aether/models/item/phoenix_helmet.json +d476b1b3ced68de11a237b21bb4fd55964d46ab5 assets/aether/models/item/phoenix_helmet_amethyst_trim.json +d1e8c62cf77ea0389ede916a27025d47b91bc9fd assets/aether/models/item/phoenix_helmet_copper_trim.json +adec709fef0203031bcd8fedcb3f754d54d62952 assets/aether/models/item/phoenix_helmet_diamond_trim.json +9a5a086303200a60e76841ff633d44192223efed assets/aether/models/item/phoenix_helmet_emerald_trim.json +2acd1be46e66d3b8b1375a5fda9e36e7d4eab4dd assets/aether/models/item/phoenix_helmet_gold_trim.json +f38800e4aa135588846aca57792a2269fa11473f assets/aether/models/item/phoenix_helmet_iron_trim.json +f08fd1e651800e6677c65404a3898d57f1f9d8b2 assets/aether/models/item/phoenix_helmet_lapis_trim.json +a57c6d185b7779da0189eb1aab5b8f011c40f2e5 assets/aether/models/item/phoenix_helmet_netherite_trim.json +037468748a85cc115ab054dcaa7f70e861d3b53e assets/aether/models/item/phoenix_helmet_quartz_trim.json +4101f5bd237ac270baee875e4c0488a71943f7bc assets/aether/models/item/phoenix_helmet_redstone_trim.json +9b6e2c0f35a2dd10b3759688fa26140f6b5a6a82 assets/aether/models/item/phoenix_leggings.json +76ddf53e52d673940cc22eed50f02a840aaf4dda assets/aether/models/item/phoenix_leggings_amethyst_trim.json +12ebd4ef2b91625febe569d9a19cc5d0b3a0f1d0 assets/aether/models/item/phoenix_leggings_copper_trim.json +162af1ac8dc892560b4ab5be18d4813d5df3202d assets/aether/models/item/phoenix_leggings_diamond_trim.json +b8231395c186f9adf82e060b5c44035c730e379c assets/aether/models/item/phoenix_leggings_emerald_trim.json +4da65e6c0a8c5ae5de9b6eeafce6b5b5fa35cdb3 assets/aether/models/item/phoenix_leggings_gold_trim.json +ec135874e88b254f75a28bce4ae28791de708e90 assets/aether/models/item/phoenix_leggings_iron_trim.json +c40bb74661a27d6d2a9d6ae0a75339f31c9ea8d4 assets/aether/models/item/phoenix_leggings_lapis_trim.json +8731e43a11d21eaa95e737f3ae5f30b51c324e6c assets/aether/models/item/phoenix_leggings_netherite_trim.json +f8da471de4e81f76c10685183de151271c42ea6f assets/aether/models/item/phoenix_leggings_quartz_trim.json +4707f5eb4b54ebaaabc6956b87cfbe0557cbffd2 assets/aether/models/item/phoenix_leggings_redstone_trim.json 63ec6c618a3a23eab4cab9c52d7d3250de9b516e assets/aether/models/item/phyg_spawn_egg.json 23b5238dfe412ca5b5617cd66c687a3869326a3f assets/aether/models/item/pig_slayer.json 8599566549a5492415574f72bd1d025a5ee6cabb assets/aether/models/item/pillar.json @@ -204,6 +464,7 @@ d43dd220611d687e8e75711facfb724a9f96b58a assets/aether/models/item/skyroot_books 922db224252274e33f400a91f4daa19dba514505 assets/aether/models/item/skyroot_door.json fa63e68bff32423f90ec4f5eb03dce5c84b7f3fc assets/aether/models/item/skyroot_fence.json 5b3eb4ea3b697e05d6c2d4a003c7539c558fb521 assets/aether/models/item/skyroot_fence_gate.json +f3b3f4fc5d12ecc89a77098e65de2df723110a47 assets/aether/models/item/skyroot_hanging_sign.json 4b6f6dcb6f2ab01a1c947fc4e4dc53e92f0be3b3 assets/aether/models/item/skyroot_hoe.json cd28104dcabc2aa805069da25b32414b5d5530cc assets/aether/models/item/skyroot_leaves.json aca9c2a9b6b108de19eefa1ce704e627151fb335 assets/aether/models/item/skyroot_log.json @@ -252,7 +513,17 @@ c6790cd0595e0e9c1ba9fc72897be53dd0e196c5 assets/aether/models/item/valkyrie_axe. db253500a2d4d5a185f0b0111f9ca227a1972a82 assets/aether/models/item/valkyrie_boots.json 8f9faf9d3071ee8803304fa07906cdc3cabd829a assets/aether/models/item/valkyrie_cape.json fa52aaa0af09bf6d764e7acbef5758afc23def36 assets/aether/models/item/valkyrie_chestplate.json -3e986c374a53bc801e5935258c4d0b405ad0647c assets/aether/models/item/valkyrie_gloves.json +d59dbe5c68285306afc7603d80643f33098c2541 assets/aether/models/item/valkyrie_gloves.json +0efd2b8da472232bf84141b6838ce7c7247cc55d assets/aether/models/item/valkyrie_gloves_amethyst_trim.json +4fd600d9526202fd59e4f12d6a770316590101cd assets/aether/models/item/valkyrie_gloves_copper_trim.json +8ce157b503bc4d6f38ea9b27aa8c9a45ee8dcd36 assets/aether/models/item/valkyrie_gloves_diamond_trim.json +d9f729e06da445fa6782a371742c7f9df67da8b1 assets/aether/models/item/valkyrie_gloves_emerald_trim.json +f7d53808dc87e0d242c7bad04839092838ced127 assets/aether/models/item/valkyrie_gloves_gold_trim.json +bf1166a403b6ab19675e1f6cb08d6f23a291724f assets/aether/models/item/valkyrie_gloves_iron_trim.json +5485762f765954ece2cb4dcad48654476ddb6396 assets/aether/models/item/valkyrie_gloves_lapis_trim.json +3432dc89c53320066e737e2e741ac678162dcb69 assets/aether/models/item/valkyrie_gloves_netherite_trim.json +1d5873eecbecfb1e6dc9b944bbaaaffdf3f2e430 assets/aether/models/item/valkyrie_gloves_quartz_trim.json +567122bf2385c2bf0e7383d8cdadce40e626f63a assets/aether/models/item/valkyrie_gloves_redstone_trim.json d031b3f1fa6b7aad4372730df2f393297b5585b0 assets/aether/models/item/valkyrie_helmet.json aebea6bf342404234c4eb507e0a26ffc79f622fa assets/aether/models/item/valkyrie_hoe.json db2724c804dbf67d64d0741c68d9ea944d975e05 assets/aether/models/item/valkyrie_lance.json @@ -271,13 +542,63 @@ b2bd959bcad921524e487fd56e66033e9ff36faa assets/aether/models/item/white_apple.j c8ab7b3215840838f306e74dab8a9ba4a99daf1d assets/aether/models/item/yellow_cape.json 29fc79b67cdb580b2de11d2b4c4abe1ca8f81e2f assets/aether/models/item/zanite_axe.json 7a3f20631ea3aa9e34b12842fef644b4d85b01b7 assets/aether/models/item/zanite_block.json -0138858e0ccf52e509fd16d6c11b5c1c066d0762 assets/aether/models/item/zanite_boots.json -9825e9e954d2cdff0691d02440b14143afbea651 assets/aether/models/item/zanite_chestplate.json +ef486a1b03114dd9ef5a3a6a97d19c26e5812143 assets/aether/models/item/zanite_boots.json +6a81202f5a2eb29e970ce5c22183983a7f7bf845 assets/aether/models/item/zanite_boots_amethyst_trim.json +5b1949363a5de311b3ba61b28fa4d1b1667867d0 assets/aether/models/item/zanite_boots_copper_trim.json +324b7be9b04c02a7dfacad092e86573aa1f97ab6 assets/aether/models/item/zanite_boots_diamond_trim.json +5a849163ac96d1f88eb93e8953b19e2362e6a752 assets/aether/models/item/zanite_boots_emerald_trim.json +5bea6bd3ba34f530e17f688e3df25b45183dd415 assets/aether/models/item/zanite_boots_gold_trim.json +d8590717595559310b49d5053d6c644634fd8cb2 assets/aether/models/item/zanite_boots_iron_trim.json +894a7972141c8bd0254b34e7a20e2e9e58f1aa88 assets/aether/models/item/zanite_boots_lapis_trim.json +cd64b7d0ffaac61aa0d8c7c02b660495e725b913 assets/aether/models/item/zanite_boots_netherite_trim.json +e31519a5c3185ef9153850c95a6e18f8be6831dd assets/aether/models/item/zanite_boots_quartz_trim.json +555023b725eb4393bf82bd60c906287cac48b210 assets/aether/models/item/zanite_boots_redstone_trim.json +4df74c9be8236694a9d5826051c9e79d58f78f42 assets/aether/models/item/zanite_chestplate.json +fea99444ff2faffe0faa52b4aadae5bfa01e6c38 assets/aether/models/item/zanite_chestplate_amethyst_trim.json +f7990ae73cb40e469ca84c1f357d0942b6a761e2 assets/aether/models/item/zanite_chestplate_copper_trim.json +def6efdd0622bdf562635136ddb20fb5af98b0de assets/aether/models/item/zanite_chestplate_diamond_trim.json +eba342a6934e37018873f4f6aa5fa11e0b9bfa5b assets/aether/models/item/zanite_chestplate_emerald_trim.json +4e8fb17b762a55b04d14cc1896bbc5127ed06354 assets/aether/models/item/zanite_chestplate_gold_trim.json +f02f68ec4e86f89b4b0977072723e9a48d6bf46b assets/aether/models/item/zanite_chestplate_iron_trim.json +77e78ae2bbe2a152837f2021e25e1a96c18e8c4d assets/aether/models/item/zanite_chestplate_lapis_trim.json +b09ed5a120875123602a9eca7024f5e76e0767e7 assets/aether/models/item/zanite_chestplate_netherite_trim.json +3325d8d8e0702c544f81e6c8bc64ca1aea789197 assets/aether/models/item/zanite_chestplate_quartz_trim.json +4eeb6a649aba25f2071d3de9893d7318551357f3 assets/aether/models/item/zanite_chestplate_redstone_trim.json e6efd73cc197c54afef868a6ad85e0aa03ad594e assets/aether/models/item/zanite_gemstone.json -d092715a2e5ae41ecf2bdf1337a703fd705ee308 assets/aether/models/item/zanite_gloves.json -add100cc7e7470b146805128bf8d17f31d441248 assets/aether/models/item/zanite_helmet.json +6df48c3516b395f8987dd7915278c61ecc19b14b assets/aether/models/item/zanite_gloves.json +667ea853b2aafc18aaee1e8270f94302a2053a67 assets/aether/models/item/zanite_gloves_amethyst_trim.json +e009c35c525478b644836aeb625adee60bb0952a assets/aether/models/item/zanite_gloves_copper_trim.json +f7c5179f306674de07286d1d6e5b2eaea0712f7c assets/aether/models/item/zanite_gloves_diamond_trim.json +95914e27477aee0a8fe6c1c71d6c40f445b13a28 assets/aether/models/item/zanite_gloves_emerald_trim.json +565bb0df6b52dcb7bbb26aa8a9101c7ab5d136b2 assets/aether/models/item/zanite_gloves_gold_trim.json +70d54f1f7bbc94ce2d8c9b0e4af5d741a2dec75b assets/aether/models/item/zanite_gloves_iron_trim.json +449eef6f11247c9016c7e62ca93433b334a98d96 assets/aether/models/item/zanite_gloves_lapis_trim.json +88e46dfe7867e1796809eece1bff0f7a7e8e2930 assets/aether/models/item/zanite_gloves_netherite_trim.json +32c714f28ba88152923fa20df5c43764ec294b50 assets/aether/models/item/zanite_gloves_quartz_trim.json +14f2d839825676d5d88ad4bb8654a3618a50bb18 assets/aether/models/item/zanite_gloves_redstone_trim.json +3bcf62c07c186fe12e6d8c2d0f417498c78abdd4 assets/aether/models/item/zanite_helmet.json +b5eea21b49dfe904a7a888520ff19e00466ee473 assets/aether/models/item/zanite_helmet_amethyst_trim.json +396e137751b3ad285195ba0caf6104ac687dcd3e assets/aether/models/item/zanite_helmet_copper_trim.json +23689bf28203c53a829356581b29a04d66e3f9b6 assets/aether/models/item/zanite_helmet_diamond_trim.json +846cbb5e36325cc7ebe89f8454547007a1ed5a62 assets/aether/models/item/zanite_helmet_emerald_trim.json +279e0ac17ceb8b703089ec91eb79b4f33843d4cf assets/aether/models/item/zanite_helmet_gold_trim.json +855e3579beb36b73f3ba022d14dc7ab2926eb7dc assets/aether/models/item/zanite_helmet_iron_trim.json +0797ac07c3d99fa10169fe68d6c314db61c4df2f assets/aether/models/item/zanite_helmet_lapis_trim.json +64b0961700ca484b41b733ea6f08107656ef1bea assets/aether/models/item/zanite_helmet_netherite_trim.json +50e9d21477f8ee718a45dea0bf6de8bfa761659f assets/aether/models/item/zanite_helmet_quartz_trim.json +3a198de5cc43fe2ef3a4deb667babd35f941743b assets/aether/models/item/zanite_helmet_redstone_trim.json 528945f74ab50d98a4ca3e0433223903ecb403fb assets/aether/models/item/zanite_hoe.json -f6b00183b78c730369325a4708acfe196c02f7cf assets/aether/models/item/zanite_leggings.json +aa904e981d3de7f6f6e6a7cd91373148e9522028 assets/aether/models/item/zanite_leggings.json +0fa3cb5923bfc6eecf3a8eb9275049433410b6a7 assets/aether/models/item/zanite_leggings_amethyst_trim.json +d24ba6d433b449923fb269b0e961abf8a56c8820 assets/aether/models/item/zanite_leggings_copper_trim.json +8df76cbb45e87c9e399134553186dff9aae5a4d2 assets/aether/models/item/zanite_leggings_diamond_trim.json +e0fd225324a9a7a95ea9caca50781c2624c6ab7b assets/aether/models/item/zanite_leggings_emerald_trim.json +fe54c618bf75036e6c0078670cc05b4d1fabecbe assets/aether/models/item/zanite_leggings_gold_trim.json +c19b6f8c2c368cb4c0aeef2d6ccfd2939d33edbe assets/aether/models/item/zanite_leggings_iron_trim.json +b181cd8109fad15e4be827ddce79b78e082ff68a assets/aether/models/item/zanite_leggings_lapis_trim.json +f04b62c4edf5702962c2845f949b6874e864be6a assets/aether/models/item/zanite_leggings_netherite_trim.json +4029effc6563e6d5b7988d62c8dda0bc3e1eb3a8 assets/aether/models/item/zanite_leggings_quartz_trim.json +0d1c274ce8af189aacf5173787bb3236d9fb91e0 assets/aether/models/item/zanite_leggings_redstone_trim.json 03956809dfc7459596a031e3a9061ed854050b24 assets/aether/models/item/zanite_ore.json 88b0596897dab9f512d8716dc16b12f1084691a5 assets/aether/models/item/zanite_pendant.json 5ec065d5c6f4261f37b37f0d74e5a5e05ff4b64c assets/aether/models/item/zanite_pickaxe.json diff --git a/src/generated/resources/.cache/9fb1092f32d4fcbf9e061ffd718d4ec689c6c95e b/src/generated/resources/.cache/9fb1092f32d4fcbf9e061ffd718d4ec689c6c95e index 8e449aca0d..d68e34ec75 100644 --- a/src/generated/resources/.cache/9fb1092f32d4fcbf9e061ffd718d4ec689c6c95e +++ b/src/generated/resources/.cache/9fb1092f32d4fcbf9e061ffd718d4ec689c6c95e @@ -1,312 +1,312 @@ -// 1.19.4 2023-08-21T12:12:13.6780045 Recipes -1d7abc4c8c4e7132f31bd563a8dd82a8f3285d0d data/aether/advancements/recipes/building_blocks/aerogel_slab.json -8c9f4fe6b61d89eb72b141ff6dfb92764a5dc5a9 data/aether/advancements/recipes/building_blocks/aerogel_slab_from_aerogel_stonecutting.json -6e53af7c3f7e89910ad337753c6d70a4cdcf0440 data/aether/advancements/recipes/building_blocks/aerogel_stairs.json -d55411f156f2f4b44ca6326073aa35cee508fae1 data/aether/advancements/recipes/building_blocks/aerogel_stairs_from_aerogel_stonecutting.json -66b9e717884de7821ecccdab17fcc52cf06a6975 data/aether/advancements/recipes/building_blocks/ambrosium_block.json -3ffa4ca877710f6de8a32aceb60ccda1d46a9ed3 data/aether/advancements/recipes/building_blocks/angelic_slab.json -75ceb9207381ce1c904d680ee6557cd8febfc3a9 data/aether/advancements/recipes/building_blocks/angelic_slab_from_angelic_stone_stonecutting.json -edd85b7301a1a8d5c058c69488a300ecc1ba3d7a data/aether/advancements/recipes/building_blocks/angelic_stairs.json -9a33fa12afe1fbd222a26f50dece8850c38a4b27 data/aether/advancements/recipes/building_blocks/angelic_stairs_from_angelic_stone_stonecutting.json -a512a7532e66e9445616a1f39b8cfd8698407b39 data/aether/advancements/recipes/building_blocks/angelic_stone_from_light_angelic_stone_stonecutting.json -cd6a65b844699a7eb8b98b924e98e487073325ef data/aether/advancements/recipes/building_blocks/angelic_stone_from_pillar_stonecutting.json -68d547a77cf03284dc9fd7770030080c588cc19f data/aether/advancements/recipes/building_blocks/angelic_stone_from_pillar_top_stonecutting.json -8c8af56189212c4c42ddbeadb3809dfc800a2f0c data/aether/advancements/recipes/building_blocks/blue_aercloud_freezing.json -3735445cec1daea7e41aef05776fb815d57bab84 data/aether/advancements/recipes/building_blocks/blue_ice_freezing.json -984958c3aa72cdfd380f7703647f92d4856e37a8 data/aether/advancements/recipes/building_blocks/carved_slab.json -2d71cf21b615b3a90c5c7efc54e840c55818d216 data/aether/advancements/recipes/building_blocks/carved_slab_from_carved_stone_stonecutting.json -97b19202100fffea4ff256b9d19140c5fd65843e data/aether/advancements/recipes/building_blocks/carved_stairs.json -9ceaa0922352b26eb0be78e57ce7e640441b5ca6 data/aether/advancements/recipes/building_blocks/carved_stairs_from_carved_stone_stonecutting.json -a7c74d4cada05b7f8542b63d910c1a27f40716b9 data/aether/advancements/recipes/building_blocks/carved_stone_from_sentry_stone_stonecutting.json -f7da2f0eed891d58dadc146fbec4c5265b10db1a data/aether/advancements/recipes/building_blocks/crystal_leaves_freezing.json -5a57493909239e426a9e39abeee8ed1769082e2c data/aether/advancements/recipes/building_blocks/enchanted_gravitite_enchanting.json -ae8b0f652ba10c25d3dd88f6705b2b6f46fcf8d7 data/aether/advancements/recipes/building_blocks/golden_aercloud_enchanting.json -2f2e1f46e51c6991f9103299842a140c0fcbfd82 data/aether/advancements/recipes/building_blocks/golden_oak_wood.json -7a7fb11628bd459185c4b479423592f56ef67262 data/aether/advancements/recipes/building_blocks/hellfire_slab.json -b459fa09dc8eba885b97a5375c223aef541ec0fd data/aether/advancements/recipes/building_blocks/hellfire_slab_from_hellfire_stone_stonecutting.json -83726b72faf2369228ef705fb459e5f2438e9d7f data/aether/advancements/recipes/building_blocks/hellfire_stairs.json -1736835d1785a22334740e1fb4189eff2bf542a1 data/aether/advancements/recipes/building_blocks/hellfire_stairs_from_hellfire_stone_stonecutting.json -a5fe0e54e686e2324e891e1932ab7f7ca7ee9b0e data/aether/advancements/recipes/building_blocks/hellfire_stone_from_light_hellfire_stone_stonecutting.json -0cdcd0bf6cc327db6bf70e8c5829a8b020c78b51 data/aether/advancements/recipes/building_blocks/holystone_bricks.json -166aef9ffd320b24ef2d6a1bd8187f46c2cc30f3 data/aether/advancements/recipes/building_blocks/holystone_bricks_from_holystone_stonecutting.json -088e42e8bb9e128f08c45f6ff922dd14e7a45ed9 data/aether/advancements/recipes/building_blocks/holystone_brick_slab.json -25a046e5a42fb2b754f1be8737ea9214aaef013c data/aether/advancements/recipes/building_blocks/holystone_brick_slab_from_holystone_bricks_stonecutting.json -5e1db0ee3848f682a88d4e69a3dd5cdc460c6f3f data/aether/advancements/recipes/building_blocks/holystone_brick_slab_from_holystone_stonecutting.json -06303863fd4fbce71c0bed0f7a67e99a09902c62 data/aether/advancements/recipes/building_blocks/holystone_brick_stairs.json -eb2f31e3b2ca5ecf538b9af91c527aec6dd290ae data/aether/advancements/recipes/building_blocks/holystone_brick_stairs_from_holystone_bricks_stonecutting.json -1c9e28b4eefd22cb4d5c1ea78b604d4e349edc8a data/aether/advancements/recipes/building_blocks/holystone_brick_stairs_from_holystone_stonecutting.json -d33b8dffb84205dc44ab389148477c23b8db36f4 data/aether/advancements/recipes/building_blocks/holystone_slab.json -a2820a0eb22bcc4f98a1e1a2a5acf25b89090e50 data/aether/advancements/recipes/building_blocks/holystone_slab_from_holystone_stonecutting.json -08d2b65b70d999c764f9d6ba16d33eb787c5a6e6 data/aether/advancements/recipes/building_blocks/holystone_stairs.json -5217ad49272b38f536a3bd677552d41028c183ea data/aether/advancements/recipes/building_blocks/holystone_stairs_from_holystone_stonecutting.json -29d7db9aa189ccd4cc3bedde101c68ffdd600995 data/aether/advancements/recipes/building_blocks/icestone_slab.json -0b49f0d0dfef9b4c91cd1cd44a64d3ed6f3865cd data/aether/advancements/recipes/building_blocks/icestone_slab_from_icestone_stonecutting.json -8c2ab479deea7271d5a81e99eb4e91e06c4686ba data/aether/advancements/recipes/building_blocks/icestone_stairs.json -bf903b200ca93da2f03858ac642dec3f5b347ce4 data/aether/advancements/recipes/building_blocks/icestone_stairs_from_icestone_stonecutting.json -392de6c57283095f872611333c6e2c05ef99171c data/aether/advancements/recipes/building_blocks/ice_from_bucket_freezing.json -f83c8bbcf673aff0494a2f6c8bed8e06f03176db data/aether/advancements/recipes/building_blocks/light_angelic_stone_from_angelic_stone_stonecutting.json -c66bccf56948596b4395a31dea81044d57708743 data/aether/advancements/recipes/building_blocks/light_hellfire_stone_from_hellfire_stone_stonecutting.json -93808ddddeac189ea2f749a4e8567b281f0c379e data/aether/advancements/recipes/building_blocks/mossy_holystone_slab.json -79f10ceff9f3ce4ec742f06e0a26339e4e19d3ee data/aether/advancements/recipes/building_blocks/mossy_holystone_slab_from_mossy_holystone_stonecutting.json -be01a4acfa3875cf6027ac15220542dab1349800 data/aether/advancements/recipes/building_blocks/mossy_holystone_stairs.json -cd3313ea658266b478eb7a76fd608a73972f75f5 data/aether/advancements/recipes/building_blocks/mossy_holystone_stairs_from_mossy_holystone_stonecutting.json -3691c2b8325e076655717a933f9249d725ab9b2a data/aether/advancements/recipes/building_blocks/mossy_holystone_with_moss.json -110aa4da79bb9f7c773141ef383626243e77a367 data/aether/advancements/recipes/building_blocks/mossy_holystone_with_vine.json -41fdba06b7cbfe001e62380a973421bbbbbe711d data/aether/advancements/recipes/building_blocks/obsidian_from_bucket_freezing.json -ac2e672400deeb453519a5cc75d887e8bf301340 data/aether/advancements/recipes/building_blocks/packed_ice_freezing.json -817072cab2e8aaa21995168665ee13366cee56d3 data/aether/advancements/recipes/building_blocks/pillar_from_angelic_stone_stonecutting.json -36940ac46e31d9dc4a32745e740b52e524aa9a90 data/aether/advancements/recipes/building_blocks/pillar_from_pillar_top_stonecutting.json -2cf955a033b7e633b5193dbf532aa7b2e545d592 data/aether/advancements/recipes/building_blocks/pillar_top_from_angelic_stone_stonecutting.json -ef5789fa2ec006fdfe47267ee7eb196524f2f693 data/aether/advancements/recipes/building_blocks/pillar_top_from_pillar_stonecutting.json -241fa0999cff7582de9c0a79f02610aea56cf717 data/aether/advancements/recipes/building_blocks/quicksoil_glass_enchanting.json -9c9f134a72e1e5aef329ea539e150f0c599fa020 data/aether/advancements/recipes/building_blocks/sentry_stone_from_carved_stone_stonecutting.json -715780e3f7909da3c641278e32d2d7af5ab2ad34 data/aether/advancements/recipes/building_blocks/skyroot_bookshelf.json -6c9bc7569be250f51011a5311d98ae676e95020b data/aether/advancements/recipes/building_blocks/skyroot_planks.json -98bbe1feb26ead589e7278e7733a7941c48ea265 data/aether/advancements/recipes/building_blocks/skyroot_slab.json -01ec3ddb2195f82f3533bd5c4edd676da97a9c86 data/aether/advancements/recipes/building_blocks/skyroot_stairs.json -8d12edaf70d52e895ad867e33089ac7adeb73f9f data/aether/advancements/recipes/building_blocks/skyroot_wood.json -631cfe7bea5870e8def7f5b591e54f372cbf0d79 data/aether/advancements/recipes/building_blocks/stripped_skyroot_wood.json -99f3526173e56a6d96c07e3123e6fc6b31b3b8e1 data/aether/advancements/recipes/building_blocks/zanite_block.json -f9128017ee2df4296353d5485e78b74ca2067620 data/aether/advancements/recipes/combat/blue_cape_blue_wool.json -31aac7e0aac92a851b6b70f7f8319482b38e6696 data/aether/advancements/recipes/combat/blue_cape_cyan_wool.json -9bb0c8d84563b5da41153ffacb6b3011a342ea11 data/aether/advancements/recipes/combat/blue_cape_light_blue_wool.json -1f3b0a263911cbd3f4df68111a7f18bae7665765 data/aether/advancements/recipes/combat/bow_repairing.json -a09bedb4510db58084ab4fcb6d4867b7e53ddd4f data/aether/advancements/recipes/combat/chainmail_boots_repairing.json -b20fc72a9ea8a64598e36b3a8538450b109639f0 data/aether/advancements/recipes/combat/chainmail_chestplate_repairing.json -e51fddb0b890fa94472e7882ae603719607fc2d6 data/aether/advancements/recipes/combat/chainmail_gloves_repairing.json -f0a34d422eb80c0acfede7b4aafb2b4aabfdd4ad data/aether/advancements/recipes/combat/chainmail_helmet_repairing.json -3d6104bc23a7500286e9513942380cd3642c8159 data/aether/advancements/recipes/combat/chainmail_leggings_repairing.json -04575fdf4da1a50856ec37cff890da39fc2cdc73 data/aether/advancements/recipes/combat/diamond_boots_repairing.json -d3acebf0f71f95d56e80426249b66c88682e37bb data/aether/advancements/recipes/combat/diamond_chestplate_repairing.json -6a4414227977f3bc902dbeb8a926309ccbe75688 data/aether/advancements/recipes/combat/diamond_gloves.json -b6303e8e3580e0710fea2efff9a68dc9801713de data/aether/advancements/recipes/combat/diamond_gloves_repairing.json -016b960cc57c2568647dd3d5fc626f08758ab341 data/aether/advancements/recipes/combat/diamond_helmet_repairing.json -5d37a941ff07fd1ce9949adb374c9f083cc1033e data/aether/advancements/recipes/combat/diamond_leggings_repairing.json -13ec97b383d73689d0d7edefa01cef87722bc644 data/aether/advancements/recipes/combat/diamond_sword_repairing.json -601b2eb59afc29e6ed528c1cd7224ef5f0949d5e data/aether/advancements/recipes/combat/golden_boots_repairing.json -a63eb6b19cd1b8a265637b2093da72300ce48788 data/aether/advancements/recipes/combat/golden_chestplate_repairing.json -eca1f6176a64c22ea00c3f40bd679e44c7d19120 data/aether/advancements/recipes/combat/golden_dart.json -ab34ff0cb9d5392f7b1bda17f3b6fe7fc42c5880 data/aether/advancements/recipes/combat/golden_dart_shooter.json -4eec6f9966db5af43210c562e28a1afd37ac8413 data/aether/advancements/recipes/combat/golden_gloves.json -bbc59a1df1571383f8a21f7c5df69c6d81d37b2c data/aether/advancements/recipes/combat/golden_gloves_repairing.json -40f997bd5352422a42361def0f4e7136b3d6a6d6 data/aether/advancements/recipes/combat/golden_helmet_repairing.json -e1986c7ddfea3288135a72fbadefe7e7e379cc01 data/aether/advancements/recipes/combat/golden_leggings_repairing.json -7bbc8b30de11e773666ef2e5fb2a69ab6e710f0e data/aether/advancements/recipes/combat/golden_pendant.json -29ff0fe956375cd27771709b4f295c6687ba891a data/aether/advancements/recipes/combat/golden_ring.json -6f78c7e68ae860f80bb47a14b5a7ce2ae7290473 data/aether/advancements/recipes/combat/golden_sword_repairing.json -10a1cefee44ae1b3d1af6784cddd950bc642e125 data/aether/advancements/recipes/combat/gravitite_boots.json -70dc07002736259eb667dadcf242b68957fd4722 data/aether/advancements/recipes/combat/gravitite_boots_repairing.json -081a2ec80fb2bfc9f4277afb7ff9f2aa3c59d6f1 data/aether/advancements/recipes/combat/gravitite_chestplate.json -0dfa74217fe4b99f60fd326847e931cd90deb80a data/aether/advancements/recipes/combat/gravitite_chestplate_repairing.json -cb9c17a1d29bcaccc535899409746a3c64591fad data/aether/advancements/recipes/combat/gravitite_gloves.json -2f9cb100cad16519abdcc8ac73c7c9dd3a057fc9 data/aether/advancements/recipes/combat/gravitite_gloves_repairing.json -2fd740dd814fa5d92d17393af6e7208c9504b352 data/aether/advancements/recipes/combat/gravitite_helmet.json -aa7c36cb01b0d107ce34d7cf168a2393d4ca423b data/aether/advancements/recipes/combat/gravitite_helmet_repairing.json -b5adf7e037c523e98fec17d417a5ddb4e18e589d data/aether/advancements/recipes/combat/gravitite_leggings.json -361e3e4b2e56f13d5044141d1b894db30ae4ff0e data/aether/advancements/recipes/combat/gravitite_leggings_repairing.json -e99b1970989cdbcee3e40252e4ff1483df052346 data/aether/advancements/recipes/combat/gravitite_sword.json -df55d7f07d9214f8d0c2fb7087cb8f9f1d85187e data/aether/advancements/recipes/combat/gravitite_sword_repairing.json -7fb1947c4b8c54f898c880517acdcc3103940696 data/aether/advancements/recipes/combat/holystone_sword.json -f557dd9c22f4492757f16180afc7eb8e1fe6a92e data/aether/advancements/recipes/combat/holystone_sword_repairing.json -cd19e5a184788f704c278fc55e71da34e25e652d data/aether/advancements/recipes/combat/iron_boots_repairing.json -d63a1a4d949a6ffcbba0923a3e5cd66b4d858403 data/aether/advancements/recipes/combat/iron_chestplate_repairing.json -f68b6f384b041424ff66c2501bf4dcd11977818d data/aether/advancements/recipes/combat/iron_gloves.json -17120bb2b91151743db955e2b0b62d7ce0e33e9f data/aether/advancements/recipes/combat/iron_gloves_repairing.json -c2a36cd52cec08eafc52d103212c0936a4f39c68 data/aether/advancements/recipes/combat/iron_helmet_repairing.json -d0f9d5614c8741cbf8f166ef93bb7dfad8040963 data/aether/advancements/recipes/combat/iron_leggings_repairing.json -a57f2422fe013995ee59d1897ae02d9df177e3d6 data/aether/advancements/recipes/combat/iron_pendant.json -e457f1987ad1a4020ae5d840d5d795d21d4c7f6c data/aether/advancements/recipes/combat/iron_ring.json -6a5aafebfe6137779de0d3980ca23c3f2751fe3b data/aether/advancements/recipes/combat/iron_sword_repairing.json -e4754a4fb7a6762bf960a907b7699d6d43f62655 data/aether/advancements/recipes/combat/leather_boots_repairing.json -7c1a93bfd98a3863f3dd557fe90c65f2204b4502 data/aether/advancements/recipes/combat/leather_chestplate_repairing.json -5c2c9b41a6d7c244395db0797aa675b18a4298ab data/aether/advancements/recipes/combat/leather_gloves.json -87e94aca1b7adeae17290c91481a963342227af9 data/aether/advancements/recipes/combat/leather_gloves_repairing.json -3d023a7cfe5c56bbaeab835eb9794b62e6126fc4 data/aether/advancements/recipes/combat/leather_helmet_repairing.json -5c189f12da6657290b991f7029780dfe312edb05 data/aether/advancements/recipes/combat/leather_leggings_repairing.json -532326433cf645eb40bc0eb83f0994957acbf1b5 data/aether/advancements/recipes/combat/netherite_boots_repairing.json -3944345343347cc4d32acc0743335e591d7d4131 data/aether/advancements/recipes/combat/netherite_chestplate_repairing.json -30ae79ea1d34dd3008f7408803bdb9a8c92137f0 data/aether/advancements/recipes/combat/netherite_gloves_repairing.json -def5eddd0c3576631e51ab85bef940c8258b3d0a data/aether/advancements/recipes/combat/netherite_gloves_smithing.json -b79568d576f72ffbfc4518cbd0f65b70c97737dc data/aether/advancements/recipes/combat/netherite_helmet_repairing.json -c5b2496d654cdc2d04e9fd3177a5b567dde1d6ae data/aether/advancements/recipes/combat/netherite_leggings_repairing.json -4b263ebb751620cbbefd258fb848e343aa354a49 data/aether/advancements/recipes/combat/netherite_sword_repairing.json -dbab6cf611c22bd92eac1d219f5c6a29685d9165 data/aether/advancements/recipes/combat/old_netherite_gloves_smithing.json -9e8688720c6a99a57f9172e47ae1a5cf0c1ecc6f data/aether/advancements/recipes/combat/poison_dart.json -f90648d6b3f82ca295aeb708b9baf433ddd49e22 data/aether/advancements/recipes/combat/poison_dart_shooter.json -20949f2277201ca8454a85557a52cf5bb7f7408b data/aether/advancements/recipes/combat/red_cape.json -f98b86f1e415d11a0fd742ec97dada9eb9ce77bc data/aether/advancements/recipes/combat/shield_repairing.json -fb8fac5525370f2e1ef4595c55ec31ee2065ddb7 data/aether/advancements/recipes/combat/skyroot_iron_vanilla_shield.json -95ec001365debf52d37611d8f70629eedf2af34b data/aether/advancements/recipes/combat/skyroot_sword.json -c9bac1460b02b54bdd1193ffde51432e0f644c22 data/aether/advancements/recipes/combat/skyroot_sword_repairing.json -8463881bcfce4e604f45f1d84522d4bf59af10d1 data/aether/advancements/recipes/combat/skyroot_zanite_vanilla_shield.json -2f8eb64dfbdde954885fc0412b5a313baf425ccd data/aether/advancements/recipes/combat/stone_sword_repairing.json -859b48face2b900562defbcc3025e6d99f90c5aa data/aether/advancements/recipes/combat/white_cape.json -6a474d08e65d0cfa4f5596b5eb3c3439562e6bc7 data/aether/advancements/recipes/combat/wooden_sword_repairing.json -3c723d07e51387a002d756f7cfd1a3ffcc1b3656 data/aether/advancements/recipes/combat/wood_zanite_vanilla_shield.json -cb23c301f30d4f25e9cb68e9c6fb05e51ca9f6a2 data/aether/advancements/recipes/combat/yellow_cape.json -43cecc38f88ca585e18f3ad388921c784af10a21 data/aether/advancements/recipes/combat/zanite_boots.json -39afe8c16461123ccc305151f334fbc95aafd0b1 data/aether/advancements/recipes/combat/zanite_boots_repairing.json -825982804b178cf9524be1fef6075432d0daca69 data/aether/advancements/recipes/combat/zanite_chestplate.json -24e7b66bb843f0f7af6e6785ca4c8a4fc3494559 data/aether/advancements/recipes/combat/zanite_chestplate_repairing.json -b25eba1785c02ec81b8abb8ba4b8d8fe0aba13a2 data/aether/advancements/recipes/combat/zanite_gloves.json -7261100e55114d0cccd786b75dad3f9cd538de92 data/aether/advancements/recipes/combat/zanite_gloves_repairing.json -e4e71646b16cbe52640f619344970920419e489a data/aether/advancements/recipes/combat/zanite_helmet.json -39d24f4ef1a6fef7fced32bd72fda4c1244a7208 data/aether/advancements/recipes/combat/zanite_helmet_repairing.json -ba6544ca307aaad3eff79af4dd08b01af6739e8a data/aether/advancements/recipes/combat/zanite_leggings.json -a2456cf22dd089cb7a2a6a889d6a4910556c0e98 data/aether/advancements/recipes/combat/zanite_leggings_repairing.json -e8adda5f3688ff3f969dfe8351538baf108f80c3 data/aether/advancements/recipes/combat/zanite_pendant.json -f3fc7b79f00e56cd41c3ac759e498c14dfb1b125 data/aether/advancements/recipes/combat/zanite_pendant_repairing.json -5a9c007e549dad2c4243b39b3130dcc2483df23f data/aether/advancements/recipes/combat/zanite_ring.json -e32e37a4d7b33271faf5d71cc9c8219fb466503b data/aether/advancements/recipes/combat/zanite_ring_repairing.json -1c2bcaea0a75008215ceeb28e55d3d4661268af6 data/aether/advancements/recipes/combat/zanite_sword.json -c1356dd404ad4a77eede6039600b5aedb9000a49 data/aether/advancements/recipes/combat/zanite_sword_repairing.json -7e6fb62aa25f19514642234027c07f26826dcd9f data/aether/advancements/recipes/decorations/aerogel_wall.json -7e512c71e37fcad023013c7f2778a393332a85c9 data/aether/advancements/recipes/decorations/aerogel_wall_from_aerogel_stonecutting.json -3703d32267821cf15e28bbd5bfc444b205c471ff data/aether/advancements/recipes/decorations/altar.json -02f25c665d941c3c4f28aab3e1952ce11aca83e8 data/aether/advancements/recipes/decorations/ambrosium_torch.json -7c3ba0468af5959b35ec422eb4f28afe96736d29 data/aether/advancements/recipes/decorations/angelic_wall.json -909f0067f761326b9cee0cfa87e49f7971f71a99 data/aether/advancements/recipes/decorations/angelic_wall_from_angelic_stone_stonecutting.json -50d96b63e0396b6e4189efd73998a492fbb9926f data/aether/advancements/recipes/decorations/carved_wall.json -010e173711ae3f2049554546fe677cff77a2167c data/aether/advancements/recipes/decorations/carved_wall_from_carved_stone_stonecutting.json -f8b3a38aff60de2179bfe7ae75a3182e86d9d92e data/aether/advancements/recipes/decorations/freezer.json -1fe96129234ab7b3de2680ddaae6ea01280e113d data/aether/advancements/recipes/decorations/gravitite_jukebox.json -afbc2d3cd28058fe3eee7460b33b49be0cfd138a data/aether/advancements/recipes/decorations/hellfire_wall.json -b2d0d0af60a30385d63391ee61179e668c1195d9 data/aether/advancements/recipes/decorations/hellfire_wall_from_hellfire_stone_stonecutting.json -b67d83b61f242ed5e16d5952dc91ae04c3c033d8 data/aether/advancements/recipes/decorations/holystone_brick_wall.json -1310f1fc80fd432260720abcfdd8e9daf4c5ff55 data/aether/advancements/recipes/decorations/holystone_brick_wall_from_holystone_bricks_stonecutting.json -843af83aa8d09fad6ef777be7824954fe12213e2 data/aether/advancements/recipes/decorations/holystone_brick_wall_from_holystone_stonecutting.json -fcd9c114ad4259a63d898f55da6124d7955c5e3a data/aether/advancements/recipes/decorations/holystone_stonecutter.json -a493cdb14de46c67c9a2bdd0420a2ef2a6a78ee7 data/aether/advancements/recipes/decorations/holystone_wall.json -041bcbff80698845295134192f03c1fcb56a4b52 data/aether/advancements/recipes/decorations/holystone_wall_from_holystone_stonecutting.json -5fab46aa6abb10baff6f256ff78e6269bf3a5c7d data/aether/advancements/recipes/decorations/icestone_wall.json -0ef828f6fa0f81bc06dc30489a090ed237eb982d data/aether/advancements/recipes/decorations/icestone_wall_from_icestone_stonecutting.json -ddd88956a201f3801a0f6c53ca5e912c2467b39e data/aether/advancements/recipes/decorations/incubator.json -3642c57770aa9a8d59d23c0afd59e1182b1acb0b data/aether/advancements/recipes/decorations/mossy_holystone_wall.json -d33f3acf397783a192bfc26957996099d0346dc3 data/aether/advancements/recipes/decorations/mossy_holystone_wall_from_mossy_holystone_stonecutting.json -969321410958aca08e6050f98da5b157289925a8 data/aether/advancements/recipes/decorations/quicksoil_glass_pane.json -e213cd3e22b720cf4417781f93c9410e3726fc5a data/aether/advancements/recipes/decorations/skyroot_barrel.json -ed07a6424401828583ad29d4a2f49f890abf89ed data/aether/advancements/recipes/decorations/skyroot_bed.json -8da835a46cd0798dc1408b271460ae198e3ab3c6 data/aether/advancements/recipes/decorations/skyroot_beehive.json -bec0e742cebbf48d5ede9717e7a8285426c586a0 data/aether/advancements/recipes/decorations/skyroot_cartography_table.json -cde85bbe922a40223ea0077bc26e72e88267d6e4 data/aether/advancements/recipes/decorations/skyroot_chest.json -4ec1648332248a86e87ab67c09b98b5936a4d000 data/aether/advancements/recipes/decorations/skyroot_crafting_table.json -542ce788a55a67f325baa9081f8bdf611434376a data/aether/advancements/recipes/decorations/skyroot_fence.json -b0761c59461170a379777b1de93e0889d0cd4da3 data/aether/advancements/recipes/decorations/skyroot_fletching_table.json -e693a36762a7e3927337d704df16779efe40c01a data/aether/advancements/recipes/decorations/skyroot_gravitite_jukebox.json -66d99b0c34be92ed61f93fc90b896f0a2ec713aa data/aether/advancements/recipes/decorations/skyroot_grindstone.json -4e9bed0add48c319ff65522de022faeaafaaca1e data/aether/advancements/recipes/decorations/skyroot_jukebox.json -62bffdaf05318b9519f82fd41f1f3935d9247585 data/aether/advancements/recipes/decorations/skyroot_loom.json -94d3530cfd21d5add3779689e6962cc7090d707e data/aether/advancements/recipes/decorations/skyroot_sign.json -9a7bfec3ba9d9429eaea5c288d52a051ec2f1155 data/aether/advancements/recipes/decorations/skyroot_smithing_table.json -46e18b152515d42df06329112900ecdb048aa25c data/aether/advancements/recipes/food/enchanted_berry_enchanting.json -63271f144f306ce4f7c23aa5156877a353908e52 data/aether/advancements/recipes/food/healing_stone_enchanting.json -f57e4b9c46719934c337887cb951590768afcbff data/aether/advancements/recipes/food/moa_egg_cake.json -bdd02a2c3d4515fb88c14590980c13213af0cc21 data/aether/advancements/recipes/food/moa_egg_pumpkin_pie.json -3a41d8b51f7a091067e34e050577f1c4064fec23 data/aether/advancements/recipes/food/skyroot_milk_bucket_cake.json -74c59ee968e89fcb4d8b1b0f1d26c60f3451688b data/aether/advancements/recipes/food/skyroot_milk_bucket_moa_egg_cake.json -624ed16f932356690a3edd9091df37bba5d6ba6f data/aether/advancements/recipes/incubation/black_moa_incubation.json -55960f7fe355b964c698a30480cd3fb5f3f97160 data/aether/advancements/recipes/incubation/blue_moa_incubation.json -ab12feda7f67509ed4daef63612f890dd3ac45c8 data/aether/advancements/recipes/incubation/white_moa_incubation.json -822148306e6af343a613568587b3a3134d01bdd4 data/aether/advancements/recipes/misc/aether_gold_nugget_from_blasting.json -f758f273884b51d755e03898dde29097d19e527b data/aether/advancements/recipes/misc/aether_gold_nugget_from_smelting.json -f40924b8d4a7e5fcaecd96f0206905cfed415826 data/aether/advancements/recipes/misc/aether_iron_nugget_from_blasting.json -f2f13c36b55557b04b8033bd496cf42181c695c2 data/aether/advancements/recipes/misc/aether_iron_nugget_from_smelting.json -e1d24111bd658facc1a30af033b4790b3c8bdbb7 data/aether/advancements/recipes/misc/aether_tune_enchanting.json -45c76a84670610aa54fb3dfc7a2cd7cffff9ff14 data/aether/advancements/recipes/misc/ambrosium_shard_from_ambrosium_block.json -0676d28d9170cae00e35ea36382ea2f6ec780d08 data/aether/advancements/recipes/misc/ambrosium_shard_from_blasting.json -5d9d82dc7fe72d864c05344cffe5ca20727ea479 data/aether/advancements/recipes/misc/ambrosium_shard_from_smelting.json -8aacf1750526e04e611d46895ae62796e1166593 data/aether/advancements/recipes/misc/book_of_lore.json -34d5fd0f4192094e8912bfe54fa1567c400b415d data/aether/advancements/recipes/misc/chinchilla_enchanting.json -ac359d6189e7df44336a09304bda231b08cce538 data/aether/advancements/recipes/misc/enchanted_dart_enchanting.json -c696b8e974d780d02ce13afec154a2fec81c0672 data/aether/advancements/recipes/misc/enchanted_dart_shooter_enchanting.json -d9a2f09868f6775196a54bf0a403cbb957a13740 data/aether/advancements/recipes/misc/flower_to_purple_dye.json -c0637ec24bfe64e73341335255c5e900de3a6f43 data/aether/advancements/recipes/misc/flower_to_white_dye.json -b9f7d7bfa77799dfda7ec69f7f627ace55516240 data/aether/advancements/recipes/misc/high_freezing.json -e298f47ff2dca7b9805addb75782293c0fa9b6da data/aether/advancements/recipes/misc/ice_pendant_from_freezing.json -23605bf85519cea3f7a4d31c89f2bbbc2bf0079e data/aether/advancements/recipes/misc/ice_ring_from_freezing.json -6dcfed6e98b83b93615f892eca612ea8a3e1bb0e data/aether/advancements/recipes/misc/remedy_bucket_enchanting.json -53c3b6d977c9151559e85da522799c04486b8711 data/aether/advancements/recipes/misc/skyroot_bucket.json -44e6764d98420ac17d2622b6bf3351bd029408c4 data/aether/advancements/recipes/misc/skyroot_stick.json -0c04f61f31ad8bdd4992acbea03368ef3477497a data/aether/advancements/recipes/misc/zanite_gemstone_from_blasting.json -02cffda48fb22648b96dd48d43379973aef21abc data/aether/advancements/recipes/misc/zanite_gemstone_from_smelting.json -9c191aa0be0bdb63c34b6dd2fb558df6a6dcd190 data/aether/advancements/recipes/misc/zanite_gemstone_from_zanite_block.json -47cfe7947bbc18a535ccd77e5edf45f3edd49f13 data/aether/advancements/recipes/redstone/holystone_button.json -e274da8f4c4e40ec39e626d7353ae150f7cc6b3c data/aether/advancements/recipes/redstone/holystone_pressure_plate.json -ad14d339f43c6ae2f8499e958f84de158abdd79c data/aether/advancements/recipes/redstone/skyroot_button.json -849546ef36af55a4bfd77466ab532c13ceee9103 data/aether/advancements/recipes/redstone/skyroot_door.json -e0a7ddffea194cc14d5371daf2cb5631737c2a93 data/aether/advancements/recipes/redstone/skyroot_fence_gate.json -82aa61ba21831042f2ca1e7ed274cf628e314757 data/aether/advancements/recipes/redstone/skyroot_lectern.json -6ffa9a832449f598279d7b2f8a07d9ec7e139a2d data/aether/advancements/recipes/redstone/skyroot_note_block.json -c10d0f994270efb49bcd12d8e7489ed9f366fbc9 data/aether/advancements/recipes/redstone/skyroot_piston.json -19c262e457a8c5fb7aad28397efdfcf26cf2b75a data/aether/advancements/recipes/redstone/skyroot_pressure_plate.json -5421d863e54077883d50955ebf853e343c293d51 data/aether/advancements/recipes/redstone/skyroot_trapdoor.json -304b6868d37851cffbe80fedab28877081cba12e data/aether/advancements/recipes/redstone/skyroot_tripwire_hook.json -23cb3dc2d9f21827b5f29ee7a025e42633ac45bb data/aether/advancements/recipes/redstone/swet_slime_block.json -be1bedbd670f7b347114428bd90c1a82bfbeb022 data/aether/advancements/recipes/redstone/swet_sticky_piston.json -94c996f9430545a6d34a50e2302aee3e29955822 data/aether/advancements/recipes/tools/aether_saddle.json -4b8d4cf6f6715dea815665d368aca2ca43dabcc9 data/aether/advancements/recipes/tools/cold_parachute.json -c9c99b46e5024f27a918d975ffe936fbf8b8090f data/aether/advancements/recipes/tools/diamond_axe_repairing.json -3f9194dbcd4b5d04eb19dc184d02e36059760021 data/aether/advancements/recipes/tools/diamond_hoe_repairing.json -dddedceb44d4e48526dbb72fb3f6014ae9b8eff3 data/aether/advancements/recipes/tools/diamond_pickaxe_repairing.json -b9016a7f3d7398b1467e7393d3cc3036c79f9355 data/aether/advancements/recipes/tools/diamond_shovel_repairing.json -d5e10e8dc6f5b89cedf7e4ec3d4ceb8f63ab14de data/aether/advancements/recipes/tools/fishing_rod_repairing.json -dde274fc4f12b2ebd226e5f73d8c8f5854e4736e data/aether/advancements/recipes/tools/golden_axe_repairing.json -d613e6196bc0366387fa8b3384b74b8ea4a252a2 data/aether/advancements/recipes/tools/golden_hoe_repairing.json -6b54478f97a6d31e899d68202acbcdb2ff422694 data/aether/advancements/recipes/tools/golden_parachute.json -0dec74d1aaf8d2c1b3045747c2aaec1a4b073527 data/aether/advancements/recipes/tools/golden_pickaxe_repairing.json -73533f74932cb72bcc1b82df509c0b63f91e7191 data/aether/advancements/recipes/tools/golden_shovel_repairing.json -fcac6dc709b170888e4f5b71f30f97e523aedfc9 data/aether/advancements/recipes/tools/gravitite_axe.json -a53925e63b68c0a6b61e9f809a20ee10b11bfadb data/aether/advancements/recipes/tools/gravitite_axe_repairing.json -2c5a200180e8e96709b56baf583bd5458d9b75c7 data/aether/advancements/recipes/tools/gravitite_hoe.json -29596853ec38199fbdd3a1855da18fa57227cbd2 data/aether/advancements/recipes/tools/gravitite_hoe_repairing.json -f92f9282c29e8ea1d5e2bd46649b69c36c82987e data/aether/advancements/recipes/tools/gravitite_pickaxe.json -7e007450b185537e40e1f833b8e981b240b5fa56 data/aether/advancements/recipes/tools/gravitite_pickaxe_repairing.json -c8f124feff0bf2eaadd6bddc97d4b8c36c525fa0 data/aether/advancements/recipes/tools/gravitite_shovel.json -bc914ae2960720a5ca14a501c5755597f0c68bab data/aether/advancements/recipes/tools/gravitite_shovel_repairing.json -cf8be3b8949eac81a7f176fe2d35711f11892155 data/aether/advancements/recipes/tools/holystone_axe.json -156a47d6e9d97adfb9a4b3d8f227a3ac24e599d7 data/aether/advancements/recipes/tools/holystone_axe_repairing.json -b127bdc1f173b443d16f2603fd876cae8b567082 data/aether/advancements/recipes/tools/holystone_hoe.json -00fa1cf83c94345cb2d06cf5d09ebbeeeca95046 data/aether/advancements/recipes/tools/holystone_hoe_repairing.json -655e124135272916d7166f3356ba1ea447059149 data/aether/advancements/recipes/tools/holystone_pickaxe.json -3feab4d8066913fdfe92ac5d7beebd67c11fa537 data/aether/advancements/recipes/tools/holystone_pickaxe_repairing.json -2f1b82d2d02d8d7072f46414bd855fceccae0607 data/aether/advancements/recipes/tools/holystone_shovel.json -8e682e984e79e86043a88171ca18339772a3f00d data/aether/advancements/recipes/tools/holystone_shovel_repairing.json -2bd98479eaf95f31d64cf55599c124da1c6f4040 data/aether/advancements/recipes/tools/iron_axe_repairing.json -90227e5a2eab1c96ccc127be87036fb3c2212145 data/aether/advancements/recipes/tools/iron_hoe_repairing.json -7c5e6c05a06d8cba59b6f7d21023949f6702f7c1 data/aether/advancements/recipes/tools/iron_pickaxe_repairing.json -f8d4d313622f0b3fa532cfdbfe24b98d3efc5283 data/aether/advancements/recipes/tools/iron_shovel_repairing.json -3f09ab5c3b857dacccd7ee4201a0534fa3fe1bbd data/aether/advancements/recipes/tools/nature_staff.json -589ab6222a5a29c3f1a2e5f8d00b9af486d05c2e data/aether/advancements/recipes/tools/netherite_axe_repairing.json -218b2a60170b4ea168f6cfe0ba13391ccb7fe1d5 data/aether/advancements/recipes/tools/netherite_hoe_repairing.json -9d9c0a3f375fb893f49f8d9ad1e5a0b65cab42f9 data/aether/advancements/recipes/tools/netherite_pickaxe_repairing.json -06c04a2582aad3a01a5e31612deb50c9f4048c2f data/aether/advancements/recipes/tools/netherite_shovel_repairing.json -6f1e9350fa92e237c95833a14f97c22b01ef9628 data/aether/advancements/recipes/tools/skyroot_axe.json -84a8106994a08679147f16cde660475b098e70db data/aether/advancements/recipes/tools/skyroot_axe_repairing.json -5b76038395bd13bd9157994caedb227ad5fdaf42 data/aether/advancements/recipes/tools/skyroot_hoe.json -0dec4854ef0db14cf87120ce4d418f53d636f65a data/aether/advancements/recipes/tools/skyroot_hoe_repairing.json -bc3a47b9a90686f56ea47fc111873215cb0d90e5 data/aether/advancements/recipes/tools/skyroot_pickaxe.json -9cd59ee10bf4997ef47cb501ad5ea3c1a07b22fc data/aether/advancements/recipes/tools/skyroot_pickaxe_repairing.json -a32720c819e4c3ffdaa614708482ce04c4128c1d data/aether/advancements/recipes/tools/skyroot_shovel.json -e2d2806214c2a6acb79e4618bd1ea1f2beb8da7b data/aether/advancements/recipes/tools/skyroot_shovel_repairing.json -913771cf6fe76c61fc7afdca5fdb7191ba77957a data/aether/advancements/recipes/tools/stone_axe_repairing.json -acda5e3ce6f294d5a6c3ec2dec645affd28db9b4 data/aether/advancements/recipes/tools/stone_hoe_repairing.json -1658b518a6450d266d90540efe65e9826da79f1c data/aether/advancements/recipes/tools/stone_pickaxe_repairing.json -1f83a5f9258699e5096551b049a4c116acdbeb8b data/aether/advancements/recipes/tools/stone_shovel_repairing.json -0171ee297dfeb80ea91609db17b680ca18bb396b data/aether/advancements/recipes/tools/swet_lead.json -df99a5bb54f381c82cd00f9b5d79a2c024ea9da3 data/aether/advancements/recipes/tools/wooden_axe_repairing.json -fb98ac560d3f9540d338fb53119089bafe5968f2 data/aether/advancements/recipes/tools/wooden_hoe_repairing.json -54b2b06275fefadddfd3f8b5d7a3c2c13d2f0616 data/aether/advancements/recipes/tools/wooden_pickaxe_repairing.json -79a251ebdcd61a850752487ba5e0077617da9994 data/aether/advancements/recipes/tools/wooden_shovel_repairing.json -69419505dbd40da45d9e5a3553440d029d1da4d7 data/aether/advancements/recipes/tools/zanite_axe.json -4daaa7f59472359774224fc84a026c3a3c574f44 data/aether/advancements/recipes/tools/zanite_axe_repairing.json -0d2c21c9b62f2594600d3b9b58313bd685e8fe75 data/aether/advancements/recipes/tools/zanite_hoe.json -c6ac56aaba839bafb9bfdba8a0160f16454b2be0 data/aether/advancements/recipes/tools/zanite_hoe_repairing.json -5e3a6f97a413b68d6c4869857b45d85e11489da9 data/aether/advancements/recipes/tools/zanite_pickaxe.json -1ba74b38ee2bc2cadee710fadd584606d457f08b data/aether/advancements/recipes/tools/zanite_pickaxe_repairing.json -cde0684630edf235e3f019f7eadf6684a7665e0c data/aether/advancements/recipes/tools/zanite_shovel.json -15361b570ad45475b5cb204844e7e6ef298db92d data/aether/advancements/recipes/tools/zanite_shovel_repairing.json -31c9c42c92a9cca2988470528fb56a43e2941de5 data/aether/advancements/recipes/transportation/skyroot_boat.json -8e205acec5290e450a99711a1dd4405a4101918c data/aether/advancements/recipes/transportation/skyroot_chest_boat.json +// 1.20.1 2023-09-14T18:08:26.7298555 Recipes +ce9ab2e043b1d5d8747a22324584f0bcf4c2b3b1 data/aether/advancements/recipes/building_blocks/aerogel_slab.json +90208eb708709fa9badd0fc606e5daf5ad91b03b data/aether/advancements/recipes/building_blocks/aerogel_slab_from_aerogel_stonecutting.json +6845688223f47a89fd0d51f6e6d1de155f983710 data/aether/advancements/recipes/building_blocks/aerogel_stairs.json +a1f006889ffff67fff6a067e1cc610044659c48e data/aether/advancements/recipes/building_blocks/aerogel_stairs_from_aerogel_stonecutting.json +d622d4fa3dd233cf5ff2cca2425d0481906e2541 data/aether/advancements/recipes/building_blocks/ambrosium_block.json +bf5cd0ca6108efd6843d198d5a584be1c225ee51 data/aether/advancements/recipes/building_blocks/angelic_slab.json +f129c098da51245b46081b2eccb161e72aabc294 data/aether/advancements/recipes/building_blocks/angelic_slab_from_angelic_stone_stonecutting.json +43efb6e5123f078259a15cc5ef3f513dd7d62eb5 data/aether/advancements/recipes/building_blocks/angelic_stairs.json +a1fefdc87c24356086cbf43b2e6524de5c3f2c63 data/aether/advancements/recipes/building_blocks/angelic_stairs_from_angelic_stone_stonecutting.json +bc93add4301a05da6de109c438a80f4ab706ddd2 data/aether/advancements/recipes/building_blocks/angelic_stone_from_light_angelic_stone_stonecutting.json +5274517ced3545a124e18172c37fef98b0ca6eac data/aether/advancements/recipes/building_blocks/angelic_stone_from_pillar_stonecutting.json +cba8161520511715a512d9917f2871ba7a0d312b data/aether/advancements/recipes/building_blocks/angelic_stone_from_pillar_top_stonecutting.json +c034685da9192c0b88a60bef96fb2c6b58506eea data/aether/advancements/recipes/building_blocks/blue_aercloud_freezing.json +66a6447cdc1d5b6fe2cec7cea11d0628eef0ddc0 data/aether/advancements/recipes/building_blocks/blue_ice_freezing.json +6aca1ef46b48b44f3724ef4ac0ce858fe018c297 data/aether/advancements/recipes/building_blocks/carved_slab.json +43fa7ca50430ee1f43320245ba2a2cf0cb69027b data/aether/advancements/recipes/building_blocks/carved_slab_from_carved_stone_stonecutting.json +8b6f12bd63d6239e8825511fb119711308eabddc data/aether/advancements/recipes/building_blocks/carved_stairs.json +570bb36812aee55dd10b9e1b84094e29b1be6522 data/aether/advancements/recipes/building_blocks/carved_stairs_from_carved_stone_stonecutting.json +455448f6ddb73c19b1c4608ad4d517e6dd0564e0 data/aether/advancements/recipes/building_blocks/carved_stone_from_sentry_stone_stonecutting.json +d24a6301ba5aafa4a0af41ad7babc9de4c171a25 data/aether/advancements/recipes/building_blocks/crystal_leaves_freezing.json +3b4b46a4e817f42b3f58fcb723e847998e19b7d0 data/aether/advancements/recipes/building_blocks/enchanted_gravitite_enchanting.json +3e8a98bbcfa05d0b90385018975855d0ca8590f3 data/aether/advancements/recipes/building_blocks/golden_aercloud_enchanting.json +975613b3303ef36db05a46693750d61a462bbe83 data/aether/advancements/recipes/building_blocks/golden_oak_wood.json +5a7b3cc3f6134990a7fb70d55b1d52b9a92fa0f4 data/aether/advancements/recipes/building_blocks/hellfire_slab.json +6e9396fbcb5369c7acdb1804e0661e71b0f61351 data/aether/advancements/recipes/building_blocks/hellfire_slab_from_hellfire_stone_stonecutting.json +03d1ff6e0012ba896862afd5143cb2d13474cad3 data/aether/advancements/recipes/building_blocks/hellfire_stairs.json +d94af40c156b919570d919866d9461d41226f5d4 data/aether/advancements/recipes/building_blocks/hellfire_stairs_from_hellfire_stone_stonecutting.json +2e705f790b6f18ef15e588b03fd36f7ecf728ca4 data/aether/advancements/recipes/building_blocks/hellfire_stone_from_light_hellfire_stone_stonecutting.json +40e2c8eccd6afb8bc045e45c51f307cbfbc8863f data/aether/advancements/recipes/building_blocks/holystone_bricks.json +9fbd8d47c0943f54f18a125cfb7518264b38e3de data/aether/advancements/recipes/building_blocks/holystone_bricks_from_holystone_stonecutting.json +25ddbcfbce20cb66f3713468eb6425442526bdbb data/aether/advancements/recipes/building_blocks/holystone_brick_slab.json +6c9dd1a8c931106a7065e5f90a9a1d962c783d97 data/aether/advancements/recipes/building_blocks/holystone_brick_slab_from_holystone_bricks_stonecutting.json +cd5aa859f5e81363d016294d9d206282e3513f08 data/aether/advancements/recipes/building_blocks/holystone_brick_slab_from_holystone_stonecutting.json +b21408c6eeed4a3e5fffd67bf00aaf061b7e893a data/aether/advancements/recipes/building_blocks/holystone_brick_stairs.json +ebc99b8d416e3cd1e6d35d625fef4251effe3a56 data/aether/advancements/recipes/building_blocks/holystone_brick_stairs_from_holystone_bricks_stonecutting.json +64db9abde8b6551df97e5eb86b44b4d9649d7d72 data/aether/advancements/recipes/building_blocks/holystone_brick_stairs_from_holystone_stonecutting.json +d0ac1beb4a3cf2c35b332503b834b4366ee81f8e data/aether/advancements/recipes/building_blocks/holystone_slab.json +1d9176a24234d8c10ffb2ae07a65ed827a02a74d data/aether/advancements/recipes/building_blocks/holystone_slab_from_holystone_stonecutting.json +986679ded1b74ca8824fad314df3dd9f469c8dc5 data/aether/advancements/recipes/building_blocks/holystone_stairs.json +2418e18321c668233971489fdafc7b0acc8f0ba9 data/aether/advancements/recipes/building_blocks/holystone_stairs_from_holystone_stonecutting.json +4efb9418741f48a4074ff8fa824fe983be6f549d data/aether/advancements/recipes/building_blocks/icestone_slab.json +6abb281461f1f2843365887c885ad4cee287e9da data/aether/advancements/recipes/building_blocks/icestone_slab_from_icestone_stonecutting.json +dda2212d89784a9a82efbeea27154274af046495 data/aether/advancements/recipes/building_blocks/icestone_stairs.json +9ec0607846e81dc858925d95487f1fc25a1819bc data/aether/advancements/recipes/building_blocks/icestone_stairs_from_icestone_stonecutting.json +464926da9049cd8541aac16328cb5b03f953b60c data/aether/advancements/recipes/building_blocks/ice_from_bucket_freezing.json +2de8ce71f1e1753d0341d12a1d8a97fce5882c64 data/aether/advancements/recipes/building_blocks/light_angelic_stone_from_angelic_stone_stonecutting.json +9c2160e9c6fa62bdf4e79b2dacdd09fff568190b data/aether/advancements/recipes/building_blocks/light_hellfire_stone_from_hellfire_stone_stonecutting.json +f27e28507bfac71eb78eb474fdea0b796658909e data/aether/advancements/recipes/building_blocks/mossy_holystone_slab.json +4f24fc69db259dcd6f48236ea5f0b63b50dc6940 data/aether/advancements/recipes/building_blocks/mossy_holystone_slab_from_mossy_holystone_stonecutting.json +8cbcb72517a56534f823d4684ac3267173f8a1f1 data/aether/advancements/recipes/building_blocks/mossy_holystone_stairs.json +869a5ace680281b27fe5882bf3ef6cd69d63f2de data/aether/advancements/recipes/building_blocks/mossy_holystone_stairs_from_mossy_holystone_stonecutting.json +f8bd7b927db83274f372df624287aebb4d8f5735 data/aether/advancements/recipes/building_blocks/mossy_holystone_with_moss.json +209289da77f4f28f59abad5d70ec5303de60c187 data/aether/advancements/recipes/building_blocks/mossy_holystone_with_vine.json +727454fdae01941acd344f233a7d231d2f3e3d00 data/aether/advancements/recipes/building_blocks/obsidian_from_bucket_freezing.json +6c8344daa6493356e38c307077dbc79999094e92 data/aether/advancements/recipes/building_blocks/packed_ice_freezing.json +09172c16a63748fdef0899acbd3c09af788881da data/aether/advancements/recipes/building_blocks/pillar_from_angelic_stone_stonecutting.json +caf181cc168b7fde017b947c72c2660958007813 data/aether/advancements/recipes/building_blocks/pillar_from_pillar_top_stonecutting.json +9f300b7640de5bb4ea5333b88c031d657bcc5f8e data/aether/advancements/recipes/building_blocks/pillar_top_from_angelic_stone_stonecutting.json +d7de29dd9107fefa2fca2f77c60fad2cb0c3c939 data/aether/advancements/recipes/building_blocks/pillar_top_from_pillar_stonecutting.json +84d48122c0ab0a9009811688afb9f85b0c7ce246 data/aether/advancements/recipes/building_blocks/quicksoil_glass_enchanting.json +1b152988c46a3fb3ff847035bf2c16ce0556d6ad data/aether/advancements/recipes/building_blocks/sentry_stone_from_carved_stone_stonecutting.json +d84814e07e28d58e05bea88d9fc65bc0d2555e40 data/aether/advancements/recipes/building_blocks/skyroot_bookshelf.json +bafb0e02a68854ddf3b9ac848c03fc01d5ffe93e data/aether/advancements/recipes/building_blocks/skyroot_planks.json +deba7a0410a913d9a8b1144163f4ca2ee277382f data/aether/advancements/recipes/building_blocks/skyroot_slab.json +a29e4cfeb83d5959e74880eb958675a37ba83508 data/aether/advancements/recipes/building_blocks/skyroot_stairs.json +4662bef92bf52b763396e4259aa6ef0d407332aa data/aether/advancements/recipes/building_blocks/skyroot_wood.json +c3d427bf1a0df67d87c8d7c5d4c7f46af4d28c78 data/aether/advancements/recipes/building_blocks/stripped_skyroot_wood.json +e088fbbef0d18a40dd3108b9f9e5c77cc295903d data/aether/advancements/recipes/building_blocks/zanite_block.json +a05e9477185418aab181dc94f54c614c7ee34b15 data/aether/advancements/recipes/combat/blue_cape_blue_wool.json +b2eb2e9310791e3f869890a9d6a712477029bc95 data/aether/advancements/recipes/combat/blue_cape_cyan_wool.json +f76291c2debb06feae8e99cd38ae7dbdd61720f2 data/aether/advancements/recipes/combat/blue_cape_light_blue_wool.json +7f6b5ca129d127aa67b5e4ae81c0a1ee96e1788a data/aether/advancements/recipes/combat/bow_repairing.json +1e42acb25e985f05deda20acf92dcd40b4f50998 data/aether/advancements/recipes/combat/chainmail_boots_repairing.json +94dbfd3f683155764ef1cbeb40c54a998907f210 data/aether/advancements/recipes/combat/chainmail_chestplate_repairing.json +1c941b09a3a93e38ecf1e7c8b204f05ee694af24 data/aether/advancements/recipes/combat/chainmail_gloves_repairing.json +ce8ed4631c7809dbae679b4f777d1f3413ca25fb data/aether/advancements/recipes/combat/chainmail_helmet_repairing.json +ab0fc53696da2af6b7fc25da27d539efa269ecb5 data/aether/advancements/recipes/combat/chainmail_leggings_repairing.json +2c510e64818b0509f05dd9520a601da36256f800 data/aether/advancements/recipes/combat/diamond_boots_repairing.json +f9c45e841a071063d56c627338b559c190566b2e data/aether/advancements/recipes/combat/diamond_chestplate_repairing.json +b360ad44c90cf01cc79a983bedb80ae4f14ec119 data/aether/advancements/recipes/combat/diamond_gloves.json +77dec422698e772d77a9a2ccfdbf9693d010a58d data/aether/advancements/recipes/combat/diamond_gloves_repairing.json +c3f1104a8b44149ba83f67510dc29f327504e2cb data/aether/advancements/recipes/combat/diamond_helmet_repairing.json +2eec096610a0dc6b302e00445782e6470b556be6 data/aether/advancements/recipes/combat/diamond_leggings_repairing.json +01cf37d19a83a78385d878403a391cbd6e599fe4 data/aether/advancements/recipes/combat/diamond_sword_repairing.json +ecd729f51ffd807608346bc87d0523ce2532bfc0 data/aether/advancements/recipes/combat/golden_boots_repairing.json +f8524ebdb4e63061d947c65dbbc613634aad5b2a data/aether/advancements/recipes/combat/golden_chestplate_repairing.json +6dbda3aa747b74c2e5e3db9f32cfde6c34180b29 data/aether/advancements/recipes/combat/golden_dart.json +2361ddbddde4f5a379d8b02a87b88b1915aeda4a data/aether/advancements/recipes/combat/golden_dart_shooter.json +ff500fac4634ff7b2da5394d44af7dc8b1a308a8 data/aether/advancements/recipes/combat/golden_gloves.json +8168dc056d4b45b8c78308aad7ece4ee6399d550 data/aether/advancements/recipes/combat/golden_gloves_repairing.json +207d617d526b34356a958b90f7f3d1f3931630a6 data/aether/advancements/recipes/combat/golden_helmet_repairing.json +168b9457779672819d5307cedab056314979ba88 data/aether/advancements/recipes/combat/golden_leggings_repairing.json +f993b1581931be5eba06eed1c6097c342a5b8020 data/aether/advancements/recipes/combat/golden_pendant.json +81edb2d1eb29915b3c803d16b398c566dcc115f0 data/aether/advancements/recipes/combat/golden_ring.json +9087e71911cbe1ac429b978fc814288efc83d033 data/aether/advancements/recipes/combat/golden_sword_repairing.json +4ae4c99b284bdbbcade40d03792f47eaf1530d1f data/aether/advancements/recipes/combat/gravitite_boots.json +45a06a9944f38b3f6dbeeb0648eb82c9fa54f2f4 data/aether/advancements/recipes/combat/gravitite_boots_repairing.json +d08bd8f4bab4ffb36681e9286667d79385642649 data/aether/advancements/recipes/combat/gravitite_chestplate.json +71b97ed1a001571181c3a9f0dff3bf93e9123dfa data/aether/advancements/recipes/combat/gravitite_chestplate_repairing.json +bedddf36d466bb5a177826e6fbb51dfaa0529ab8 data/aether/advancements/recipes/combat/gravitite_gloves.json +7d34e12c55eaafdff8cbfadafaf517c64f5716d0 data/aether/advancements/recipes/combat/gravitite_gloves_repairing.json +c0b08eea0ffc003e37fadb0576f0aa55d52c3194 data/aether/advancements/recipes/combat/gravitite_helmet.json +9579acaaf4a6e21710e31f549d0952088f569e99 data/aether/advancements/recipes/combat/gravitite_helmet_repairing.json +960b23bdeae06c06b61391fa480af8921d074486 data/aether/advancements/recipes/combat/gravitite_leggings.json +c6c7ac1d1fcbe6c9fa553f806ad186a0ba15bcda data/aether/advancements/recipes/combat/gravitite_leggings_repairing.json +9d95746c75d9b408137959e23586ee309f1cfd0e data/aether/advancements/recipes/combat/gravitite_sword.json +94e0ede4293f6142d75d237d0ca0e4870fc8616a data/aether/advancements/recipes/combat/gravitite_sword_repairing.json +d915e31e0f681ffc389e3a163c94bd2aaf432784 data/aether/advancements/recipes/combat/holystone_sword.json +beef20ef9232b26e48102a73568cd89ef54b1c25 data/aether/advancements/recipes/combat/holystone_sword_repairing.json +6af6e23c6486e04427eca7e15e4472383b0415b7 data/aether/advancements/recipes/combat/iron_boots_repairing.json +57d82cb4d23517b9c1bf7d37924c5b812b057a6e data/aether/advancements/recipes/combat/iron_chestplate_repairing.json +2687f5bf31a9ab52e9ea47848a25279054ec35c8 data/aether/advancements/recipes/combat/iron_gloves.json +164ff4afc294cccbf8810dd64748bc83510a399e data/aether/advancements/recipes/combat/iron_gloves_repairing.json +a43114aa6f22ef621fba9b61fe1322caac60c296 data/aether/advancements/recipes/combat/iron_helmet_repairing.json +89f6b07365d79dba0cc912778e5644a69b2bcd73 data/aether/advancements/recipes/combat/iron_leggings_repairing.json +c48328ffb9377e2addb5ac815c24d6e4a1cfeae7 data/aether/advancements/recipes/combat/iron_pendant.json +e7ddd33d7704a77b2361df8b8683636bf5b0fa34 data/aether/advancements/recipes/combat/iron_ring.json +b3a06fcc58c9198c27fb0c0aa433f9ef84a11965 data/aether/advancements/recipes/combat/iron_sword_repairing.json +781ce61c5fd4b3ac685866e5cab23e616bdaa7f3 data/aether/advancements/recipes/combat/leather_boots_repairing.json +425381b004b3cffd53635508b427e34c0bd68d7e data/aether/advancements/recipes/combat/leather_chestplate_repairing.json +f7310131370c485a749e3c763702c3768c2118cc data/aether/advancements/recipes/combat/leather_gloves.json +910235b7a352be93aa3eb6e22214b6bc77831850 data/aether/advancements/recipes/combat/leather_gloves_repairing.json +a452a230dee786f22aa49869a25fe27224f1ab23 data/aether/advancements/recipes/combat/leather_helmet_repairing.json +82de3b9b828c98a3fc38ceb9d7389ea7425d4852 data/aether/advancements/recipes/combat/leather_leggings_repairing.json +c5e9b8bdd3757dc8ad124b69b919fe1aa1308da5 data/aether/advancements/recipes/combat/netherite_boots_repairing.json +ce115a349414a1f4ef15f13bde2da723ec78dd57 data/aether/advancements/recipes/combat/netherite_chestplate_repairing.json +d4a63aa21d8ef502f273792c7114a7f92a1e6055 data/aether/advancements/recipes/combat/netherite_gloves_repairing.json +47024de83a6114635da80a39346385027f22fefa data/aether/advancements/recipes/combat/netherite_gloves_smithing.json +2507b022df55abfc7df15a905bb28ae9d83991ef data/aether/advancements/recipes/combat/netherite_helmet_repairing.json +2a05046b32dba6cebd3c52811af810140ffa0287 data/aether/advancements/recipes/combat/netherite_leggings_repairing.json +4ee4259a6aa6ed792035275961b75b81315e51fd data/aether/advancements/recipes/combat/netherite_sword_repairing.json +db533d5363eaa4725b7be28e270a8a9eb032efe5 data/aether/advancements/recipes/combat/poison_dart.json +ecd0b7603f904b65017311fa889f2b32be300bdd data/aether/advancements/recipes/combat/poison_dart_shooter.json +5dd0479dcb2edd33fd75c42557ca738695af3b1b data/aether/advancements/recipes/combat/red_cape.json +fc9bfc4b828ceb5277c1d0b64b5ad98168a108a5 data/aether/advancements/recipes/combat/shield_repairing.json +8abf1c9449163c9105e881f757d12a954ac1a51b data/aether/advancements/recipes/combat/skyroot_iron_vanilla_shield.json +a467b132cc67cbdacf7a76584e4705420a0b0545 data/aether/advancements/recipes/combat/skyroot_sword.json +790f2b0023e8ffba44990c8050161563957e77f2 data/aether/advancements/recipes/combat/skyroot_sword_repairing.json +eaefdabef0a959b398a1c407dd3d7dabeb6f9ec2 data/aether/advancements/recipes/combat/skyroot_zanite_vanilla_shield.json +7ece80f70f3ee8bd24478c80fe5c90d35050ca50 data/aether/advancements/recipes/combat/stone_sword_repairing.json +744b3d40e0b7b48cd1c67b1f5c7b4d313be7c31d data/aether/advancements/recipes/combat/white_cape.json +c6e98d8c16ecce3b25d1eb8c978edeaec7b8bc49 data/aether/advancements/recipes/combat/wooden_sword_repairing.json +b00c269e2d6e30d806b59ef49df073c56c86d787 data/aether/advancements/recipes/combat/wood_zanite_vanilla_shield.json +396774ab3772f00a460bc638d85834bebe4cc7f0 data/aether/advancements/recipes/combat/yellow_cape.json +6f1ec705cac9cc39328f4c1ea4b69b97ed58761a data/aether/advancements/recipes/combat/zanite_boots.json +ab26532f4fbcd1f7d300955719ed3c3dd09f3903 data/aether/advancements/recipes/combat/zanite_boots_repairing.json +5587d47e58eb83810dfced25a78cb37b7f0e41da data/aether/advancements/recipes/combat/zanite_chestplate.json +ee65ed345f8e775566432d316c68597c59ccb91b data/aether/advancements/recipes/combat/zanite_chestplate_repairing.json +4adcd309469ba5a077e063b9e7b0c227589f7b3c data/aether/advancements/recipes/combat/zanite_gloves.json +f72d3130514fff0224a94dc2a6a8fbebeeabaab2 data/aether/advancements/recipes/combat/zanite_gloves_repairing.json +e4f51baca97935e4965ee91119f222628804c592 data/aether/advancements/recipes/combat/zanite_helmet.json +120685dfa2f963731d8b6f854a2a9de3142734d5 data/aether/advancements/recipes/combat/zanite_helmet_repairing.json +3c2923f4f7c887debf2b6b4a6f9a6ec3d7220777 data/aether/advancements/recipes/combat/zanite_leggings.json +0d88828a3184fe5cafd6a2ec98de1add910c54f0 data/aether/advancements/recipes/combat/zanite_leggings_repairing.json +36a2cd6709a502b0f5b47630deb2f1c1ced7a1d7 data/aether/advancements/recipes/combat/zanite_pendant.json +47adfd20c0ebbfbf0097bbaa59840e8aeb16149e data/aether/advancements/recipes/combat/zanite_pendant_repairing.json +a8d6911445f2354d431d321d189670757751879b data/aether/advancements/recipes/combat/zanite_ring.json +29a4a0ad34212c4b374f2935e5bdca8a3ab04765 data/aether/advancements/recipes/combat/zanite_ring_repairing.json +ef7b43772cfe2b82f431af698295b3e073648b63 data/aether/advancements/recipes/combat/zanite_sword.json +fbced316eb0f97553d4ba70f9081846759132ddf data/aether/advancements/recipes/combat/zanite_sword_repairing.json +dbf705ebceaa890b1cbfad2e4f0c16ec9131f597 data/aether/advancements/recipes/decorations/aerogel_wall.json +bbc270ed7d53a92f1c78e5020da2ab3a332a48b3 data/aether/advancements/recipes/decorations/aerogel_wall_from_aerogel_stonecutting.json +f5bdaf0cec5d6e8e64831a3736dea281a2fc2f62 data/aether/advancements/recipes/decorations/altar.json +900d3181f5b5cc3d22fb46043bf2aa0bcb574aa3 data/aether/advancements/recipes/decorations/ambrosium_torch.json +f5d2d18bea33d30d9d2244557acf0c36be6c866d data/aether/advancements/recipes/decorations/angelic_wall.json +383a794b28f07b5485b5e251be25a91be3dd317d data/aether/advancements/recipes/decorations/angelic_wall_from_angelic_stone_stonecutting.json +64ed9cf71a0875f03cb3941fa65a882dafaa783a data/aether/advancements/recipes/decorations/carved_wall.json +5f52ac22535ca4f9e131310fef259beb70187450 data/aether/advancements/recipes/decorations/carved_wall_from_carved_stone_stonecutting.json +ae2f9660a82508bb76862b0311409a524acc176b data/aether/advancements/recipes/decorations/freezer.json +c0d58d06b60360e4f538f7a4470edf2c271c4cfd data/aether/advancements/recipes/decorations/gravitite_jukebox.json +f99c328e1053e9988dc4838bec8ea0da9d82e754 data/aether/advancements/recipes/decorations/hellfire_wall.json +75373f8dbee6155a1d3bb2ceba8d465f1a246fd2 data/aether/advancements/recipes/decorations/hellfire_wall_from_hellfire_stone_stonecutting.json +3ab0ed747114c709ae830263f64e05981b7b7357 data/aether/advancements/recipes/decorations/holystone_brick_wall.json +ae5eedbd1d72763179631760808de89cdebab848 data/aether/advancements/recipes/decorations/holystone_brick_wall_from_holystone_bricks_stonecutting.json +8c6addbecc21f0e41b36bee9515d3398192f00ec data/aether/advancements/recipes/decorations/holystone_brick_wall_from_holystone_stonecutting.json +f9db1d454efdc68fbabc665bed5ea757ce72a6c7 data/aether/advancements/recipes/decorations/holystone_stonecutter.json +fdd96b1d6707c7d7c268d0df3bf115bc2ebd669c data/aether/advancements/recipes/decorations/holystone_wall.json +5f192a8a8a364bf3fc16cc7d5285bb0f394a0a37 data/aether/advancements/recipes/decorations/holystone_wall_from_holystone_stonecutting.json +2769473e89eab5ce7ee58b7d9344aff116515dc1 data/aether/advancements/recipes/decorations/icestone_wall.json +7b2f1ab0b7bb8658a284e87b1133489532b2c757 data/aether/advancements/recipes/decorations/icestone_wall_from_icestone_stonecutting.json +6dc1367781fbfe0ad67d4294c7a5387a6ffa6589 data/aether/advancements/recipes/decorations/incubator.json +b84019ffa7c10f75b4e0e8a21763e98bb0d6afb0 data/aether/advancements/recipes/decorations/mossy_holystone_wall.json +e625b08e5c6711df39bbb67fc4914dd90fe453ca data/aether/advancements/recipes/decorations/mossy_holystone_wall_from_mossy_holystone_stonecutting.json +d239a5119e124f0c3e6dbec80fcf59bb565bfc74 data/aether/advancements/recipes/decorations/quicksoil_glass_pane.json +2c9aaf7f825ddb227a8c57198e1376b39e51c23d data/aether/advancements/recipes/decorations/skyroot_barrel.json +75cfa9fa39fc5dc83cd1fd7fd1b4b7767e8f51f4 data/aether/advancements/recipes/decorations/skyroot_bed.json +d90cc2d8af07d1a0ea02d62539c16c1c5e5d6bff data/aether/advancements/recipes/decorations/skyroot_beehive.json +002679284a3673cf08036739ca6d1c45bf77534d data/aether/advancements/recipes/decorations/skyroot_cartography_table.json +fc3288299488d5a7b6078c25d203ce87e6d4cac9 data/aether/advancements/recipes/decorations/skyroot_chest.json +1d8f52c4f257950d0587f162fe919fe45ecc256e data/aether/advancements/recipes/decorations/skyroot_crafting_table.json +10778ad084203b87543108ef2721cba479eec45b data/aether/advancements/recipes/decorations/skyroot_fence.json +452d6e6845c18e6e2624c6bf838056988caef826 data/aether/advancements/recipes/decorations/skyroot_fletching_table.json +d34f6f5faf59073c80f4352bea3f0e64b8c13911 data/aether/advancements/recipes/decorations/skyroot_gravitite_jukebox.json +82e851f1ba1763d7c182613ec3b3e4f0079513d9 data/aether/advancements/recipes/decorations/skyroot_grindstone.json +4efa2bcea5adb87016f76887d6da4c17984b41a3 data/aether/advancements/recipes/decorations/skyroot_hanging_sign.json +daa78171b812b1b43ee4e7cf563ec8c947830696 data/aether/advancements/recipes/decorations/skyroot_jukebox.json +72ab11943db2b8c0634a92e5bc40c20734ee4be0 data/aether/advancements/recipes/decorations/skyroot_loom.json +f67c4569590b8b0d2012b71de8189afd33b0f53d data/aether/advancements/recipes/decorations/skyroot_sign.json +edc4108994b316f91854a50e8a6ad9e3d4e7ea99 data/aether/advancements/recipes/decorations/skyroot_smithing_table.json +3691d32f120d691880e27f10e97bb7fa31fbd0a8 data/aether/advancements/recipes/food/enchanted_berry_enchanting.json +7c667f8065355ebc0bb34445878c4bfb090dc7d7 data/aether/advancements/recipes/food/healing_stone_enchanting.json +743adbdf1c13aaf35b73cd32d4e68a172e465fcd data/aether/advancements/recipes/food/moa_egg_cake.json +793d1b1eef16a5aae8ab4deb53b36a5724823d34 data/aether/advancements/recipes/food/moa_egg_pumpkin_pie.json +92c88fb53850ebfe0eb632965ee937ae7230ab43 data/aether/advancements/recipes/food/skyroot_milk_bucket_cake.json +0f47089c2aa8736aeedfeea8b4951cc8482a3d8d data/aether/advancements/recipes/food/skyroot_milk_bucket_moa_egg_cake.json +203715d3cfce705e720782b54f8305d2d9cf72a4 data/aether/advancements/recipes/incubation/black_moa_incubation.json +7b9135ceb882d8359d086e88556b83d920ace2c1 data/aether/advancements/recipes/incubation/blue_moa_incubation.json +00bb02670d5c1edc3fbbef6c88e505d20278f00b data/aether/advancements/recipes/incubation/white_moa_incubation.json +b7a39384ad689c649ca67b9a2d26bbaa4afe519e data/aether/advancements/recipes/misc/aether_gold_nugget_from_blasting.json +4f43613aef501e8767141f303997a7187db10517 data/aether/advancements/recipes/misc/aether_gold_nugget_from_smelting.json +f28a9b75c5262b9e7c47f14cac1aa3baafb09e60 data/aether/advancements/recipes/misc/aether_iron_nugget_from_blasting.json +e9dad784dc1939d9c61e0fd2a7c27e1177c0fc41 data/aether/advancements/recipes/misc/aether_iron_nugget_from_smelting.json +55b23879594f392bded46f7d5695751727a59ed3 data/aether/advancements/recipes/misc/aether_tune_enchanting.json +9c947de1849a276a28f5e44c222f06aa13424537 data/aether/advancements/recipes/misc/ambrosium_shard_from_ambrosium_block.json +b7b30220a40ea64ef773b9d04ca279730b4afe81 data/aether/advancements/recipes/misc/ambrosium_shard_from_blasting.json +f234ffda49f53247e6480f704160e85e9ae1c972 data/aether/advancements/recipes/misc/ambrosium_shard_from_smelting.json +813b17572daafb0107300e3bc429e6bd45c1d449 data/aether/advancements/recipes/misc/book_of_lore.json +d4c1eb2f8c231da4d38b8c6662e6b8fbe4a43a64 data/aether/advancements/recipes/misc/chinchilla_enchanting.json +3adde7dcd39f93402bdf469b0317b77cb06c4d8c data/aether/advancements/recipes/misc/enchanted_dart_enchanting.json +0da835acd5fdba9701ad34c690cd76b6878791dc data/aether/advancements/recipes/misc/enchanted_dart_shooter_enchanting.json +afc176cb8fa13d0dedb17d4ab2c7ca1d00eaab49 data/aether/advancements/recipes/misc/flower_to_purple_dye.json +32705603d5d8ac98e5db62097c6e8ac4fa1042eb data/aether/advancements/recipes/misc/flower_to_white_dye.json +59dad3dad5be7603ddde1fb39d6e43acd1b603b2 data/aether/advancements/recipes/misc/high_freezing.json +380a293dcb80178471889f8096278be03af0e596 data/aether/advancements/recipes/misc/ice_pendant_from_freezing.json +bf1c3eb844204f04a391e6b3079dc738aacdeb5e data/aether/advancements/recipes/misc/ice_ring_from_freezing.json +ccddb91df3b8d394144b85b3d879e068fd894132 data/aether/advancements/recipes/misc/remedy_bucket_enchanting.json +648646401a63b0b6d6e62ae305ac707d6c96dd47 data/aether/advancements/recipes/misc/skyroot_bucket.json +aa0d57d6fe45d710c0d1b04277d693578c223b31 data/aether/advancements/recipes/misc/skyroot_stick.json +074cadeea9acc8ceb642e68826d98d55e000a408 data/aether/advancements/recipes/misc/zanite_gemstone_from_blasting.json +6518547bf17ac1e4ffe4388eb4539b2aacfe5ad8 data/aether/advancements/recipes/misc/zanite_gemstone_from_smelting.json +a6f514fef2315186c1230dccbaf6a722cc087063 data/aether/advancements/recipes/misc/zanite_gemstone_from_zanite_block.json +d79acd2604340c02774591a787d2f86a51bc49f5 data/aether/advancements/recipes/redstone/holystone_button.json +c6090c61a3f76679e32982e4098883f5c66d526a data/aether/advancements/recipes/redstone/holystone_pressure_plate.json +b90fc6d15013e0e839581d6f2eda4671c07d8777 data/aether/advancements/recipes/redstone/skyroot_button.json +18c647a7d9ac3cf45ca439b8763fb8d23d3e6e39 data/aether/advancements/recipes/redstone/skyroot_door.json +baf87347938303e71d9e230e0314fe1a5ea75d60 data/aether/advancements/recipes/redstone/skyroot_fence_gate.json +4c973db67cdd216d52c07bbad7c719f1efe65e40 data/aether/advancements/recipes/redstone/skyroot_lectern.json +0340168b6cb6b4650403b6e39d974b2dd0e45f3a data/aether/advancements/recipes/redstone/skyroot_note_block.json +70c51a9b3f6a540d3dfc1c61535d6593141aab97 data/aether/advancements/recipes/redstone/skyroot_piston.json +a39056c73ada8f0abe4a902132381e39f1c4b221 data/aether/advancements/recipes/redstone/skyroot_pressure_plate.json +aaa5cfb647f5ef621b0dec26a78ebca2aeb789b9 data/aether/advancements/recipes/redstone/skyroot_trapdoor.json +f1dc823c564514a5f6ab243ec120f44b20e8741d data/aether/advancements/recipes/redstone/skyroot_tripwire_hook.json +8a1a7ff46c59db31e5b27965252dbcde751aa6df data/aether/advancements/recipes/redstone/swet_slime_block.json +36c06c12018018ba218e236d8986476044e41c48 data/aether/advancements/recipes/redstone/swet_sticky_piston.json +60a41beb1487b1ae7c5a8261c0e5f161eabb6ee9 data/aether/advancements/recipes/tools/aether_saddle.json +7e10cb3e2a80935d7b7e308be7fe74b0a40c1295 data/aether/advancements/recipes/tools/cold_parachute.json +4c77ae47724d5d0e44b62f487009a2fcf05f53bb data/aether/advancements/recipes/tools/diamond_axe_repairing.json +301ecbccb85f5a49f18e31ec6bc9a81eb75603d5 data/aether/advancements/recipes/tools/diamond_hoe_repairing.json +7ed650a6729c638132008e26e9eabbf420959719 data/aether/advancements/recipes/tools/diamond_pickaxe_repairing.json +b825526cb84bf53f3e4e361d43bea21ca0f3317a data/aether/advancements/recipes/tools/diamond_shovel_repairing.json +83eb1e434f62377c1a355f509c84d9c5b703c755 data/aether/advancements/recipes/tools/fishing_rod_repairing.json +f602ab13be591d68f06690ce81f98d8b8ef6b3c9 data/aether/advancements/recipes/tools/golden_axe_repairing.json +3286f7acf794d133ed89fd1de9b49e41b19970b6 data/aether/advancements/recipes/tools/golden_hoe_repairing.json +c28d86528b55e3826794fd3da7a24939f59583d6 data/aether/advancements/recipes/tools/golden_parachute.json +a4d5eb92494df86fd23478886bed79c2099ad4b2 data/aether/advancements/recipes/tools/golden_pickaxe_repairing.json +3b847ef9bddc7ed728fb01ff43e2a4075418145b data/aether/advancements/recipes/tools/golden_shovel_repairing.json +574bc3b83e21026b4f1f97a1c3f703f32494951d data/aether/advancements/recipes/tools/gravitite_axe.json +aefbba1cfcddf115eecfa376ae4ead15be4b26ac data/aether/advancements/recipes/tools/gravitite_axe_repairing.json +a68810625c8be9da0ce1ba40728d2d642ae04d54 data/aether/advancements/recipes/tools/gravitite_hoe.json +10dfbd0b5e8aafbb4510ecc22adcee58443f6989 data/aether/advancements/recipes/tools/gravitite_hoe_repairing.json +e22398b527ff2c6783b72763b647186f2d2c0e8f data/aether/advancements/recipes/tools/gravitite_pickaxe.json +4c71e1334b91d160b6d718587bf931057b234c37 data/aether/advancements/recipes/tools/gravitite_pickaxe_repairing.json +d0928803c79f3b1ab50084b45dc2809ac488c27a data/aether/advancements/recipes/tools/gravitite_shovel.json +ce34376b410a39a932263295e52d8a205fc0fd37 data/aether/advancements/recipes/tools/gravitite_shovel_repairing.json +ee5ad572e48aa2aeb1fcd2f2e70150fa3385686a data/aether/advancements/recipes/tools/holystone_axe.json +7d56dca4c59524943304750c5adda3c9682c4aec data/aether/advancements/recipes/tools/holystone_axe_repairing.json +b6510d43365a2c12ef67da55afff70e329523b58 data/aether/advancements/recipes/tools/holystone_hoe.json +e8ecc334b70133afd898fca30eaa2b3dfea140e9 data/aether/advancements/recipes/tools/holystone_hoe_repairing.json +61746c1859cbf1cf6249aeef03c8f62dd22e2cc2 data/aether/advancements/recipes/tools/holystone_pickaxe.json +a6e38c62da78092f6a1c2f2c9a25fb431e15ea81 data/aether/advancements/recipes/tools/holystone_pickaxe_repairing.json +e318ef65db85d523785f6a2379344afc313b8849 data/aether/advancements/recipes/tools/holystone_shovel.json +6afea522e0ca8e46d6959e77ca7598dfbd32f84b data/aether/advancements/recipes/tools/holystone_shovel_repairing.json +7b384cef5821494ae383c47d2c3add83095f67ff data/aether/advancements/recipes/tools/iron_axe_repairing.json +1b833b943d85eebc7ad56257ff56f86e6a7f8765 data/aether/advancements/recipes/tools/iron_hoe_repairing.json +2124f7e54befbbc5807118f3eca81c66e3f56393 data/aether/advancements/recipes/tools/iron_pickaxe_repairing.json +f5b20f5359bda46c68992d75038d2deeeaec06cc data/aether/advancements/recipes/tools/iron_shovel_repairing.json +a96029cf9395cfb1666a6f46e88b9d5a7b81aacf data/aether/advancements/recipes/tools/nature_staff.json +8fa99c108df885c3f2fc725d4f1ffc1333516046 data/aether/advancements/recipes/tools/netherite_axe_repairing.json +282ffb765067b0457a07bc4afc18269937996091 data/aether/advancements/recipes/tools/netherite_hoe_repairing.json +8f3efe3d941a0569762c3893173af91514521afe data/aether/advancements/recipes/tools/netherite_pickaxe_repairing.json +99ebd5f3c8f4bddbbd4edb1fd4a5b537670a940d data/aether/advancements/recipes/tools/netherite_shovel_repairing.json +bdb441088cc48227a5dc26a310a37c47942791c1 data/aether/advancements/recipes/tools/skyroot_axe.json +3d76eedc1edb90524d856c65462aa4c2bcac35ff data/aether/advancements/recipes/tools/skyroot_axe_repairing.json +17249bfacda4c6aa440c41f4216649f2ff76306b data/aether/advancements/recipes/tools/skyroot_hoe.json +aeb85ed9851d23680a3a83498cabd791fddf2df7 data/aether/advancements/recipes/tools/skyroot_hoe_repairing.json +12ce7dc86a1c496bff2affe7743618e5307a6c2e data/aether/advancements/recipes/tools/skyroot_pickaxe.json +bfd25dc5f2a6af7d07053e5a37a1f36e7302c94b data/aether/advancements/recipes/tools/skyroot_pickaxe_repairing.json +14dd4d398700596a75d9058a035462e11abdc552 data/aether/advancements/recipes/tools/skyroot_shovel.json +3afb622c335e6002fee41f33d5f4bf34eeb4c8ea data/aether/advancements/recipes/tools/skyroot_shovel_repairing.json +dd6992439344b9545194cc75dad063e65b8cb3eb data/aether/advancements/recipes/tools/stone_axe_repairing.json +174a7656de1e18d07633f730eef7dbd2f2d7be34 data/aether/advancements/recipes/tools/stone_hoe_repairing.json +223fcda087921979a13a409870e9a1252d0634e8 data/aether/advancements/recipes/tools/stone_pickaxe_repairing.json +61a205c761cd9605d13693db1ef2b14161477961 data/aether/advancements/recipes/tools/stone_shovel_repairing.json +77312d225be2a91a271d1441bad824501bda967a data/aether/advancements/recipes/tools/swet_lead.json +bb27cfb61217aa5196c67238466eeec2f276e9bd data/aether/advancements/recipes/tools/wooden_axe_repairing.json +e2139fef89580ba7421a8e031967e338cbc81fec data/aether/advancements/recipes/tools/wooden_hoe_repairing.json +c05595e9858644e73c17d8f29d8f1e5648693762 data/aether/advancements/recipes/tools/wooden_pickaxe_repairing.json +ea3c105d776fd71637bfe250060ff162b019820a data/aether/advancements/recipes/tools/wooden_shovel_repairing.json +78bca2421f56acf218eea6d3f7a6fd4e67a3164e data/aether/advancements/recipes/tools/zanite_axe.json +102a14f54bb5c9b3f090f3347ea4b16f6d4d5461 data/aether/advancements/recipes/tools/zanite_axe_repairing.json +482bf6e7c84398b062d8df7da586d56b78f04bca data/aether/advancements/recipes/tools/zanite_hoe.json +2a8a06e42ba8b4a583b680e6da65f323441d4471 data/aether/advancements/recipes/tools/zanite_hoe_repairing.json +0e99ebaad7713aa64993a8d648435ac7d735f482 data/aether/advancements/recipes/tools/zanite_pickaxe.json +99430ee618a1b0f74ff4d9a34a764a1c18098691 data/aether/advancements/recipes/tools/zanite_pickaxe_repairing.json +07f69bd02b76667b62a93e5943d8765151723c15 data/aether/advancements/recipes/tools/zanite_shovel.json +3c086ae739579796e0ca744df9dfa667311b0f6d data/aether/advancements/recipes/tools/zanite_shovel_repairing.json +b290016c78a3fc984775308cdc18eb363727d98b data/aether/advancements/recipes/transportation/skyroot_boat.json +6999d7635d1de58c8d53f87eb9faa36700cfa329 data/aether/advancements/recipes/transportation/skyroot_chest_boat.json 16baab7e6d9b21e1ae88f061095eb3ce6a58cbd7 data/aether/recipes/accessory_freeze_lava.json 3a3d088af53b230ff49d010ebd91b7a81140e39a data/aether/recipes/accessory_freeze_water.json 0db55d55d59157df6bd3dc51efb82cdf5a6614f4 data/aether/recipes/aerogel_conversion.json @@ -544,7 +544,6 @@ affbb930bd6cc1141c4bf1518fb8e05a053a3ade data/aether/recipes/netherite_hoe_repai 3779195a9c8f19d0c8e7fa84717daf4b451cf53d data/aether/recipes/netherite_shovel_repairing.json ef7241baee5998300c7c6f708bd7fab0f56522ca data/aether/recipes/netherite_sword_repairing.json 3e50a4916cf9d57d3e7856eade1f8df1f582272a data/aether/recipes/obsidian_from_bucket_freezing.json -a7223d49f172667d3c440bb745c308c4b0c9e343 data/aether/recipes/old_netherite_gloves_smithing.json 21ddf622bf9d0cb01829be187005d1a81176fdbc data/aether/recipes/orange_candle_cake_conversion.json c35513cabd16acf458ca3812ef72000e9ff12757 data/aether/recipes/orange_candle_conversion.json bfbba69016aa9a4113c183b0803ea6daa426ff0f data/aether/recipes/packed_ice_freezing.json @@ -569,7 +568,7 @@ eb763c8d8f5a907549b7c15c6c8de3527290c72c data/aether/recipes/shield_repairing.js 6ddbb67cd07c7f2673613f179c71e1cd436bf9a8 data/aether/recipes/skyroot_axe.json d19edd46c1828a6b649ef802bb43ec77afbd2fd9 data/aether/recipes/skyroot_axe_repairing.json e467a506e67ee68a7d86187995ddb6218f6ba790 data/aether/recipes/skyroot_barrel.json -ecc1e7f8f5c72d2684e0a4ebb1394a338639d84a data/aether/recipes/skyroot_bed.json +46124fab81b820d1b56d70e5cda2dd303b603edd data/aether/recipes/skyroot_bed.json e5f9ee455b03813a8b1eda0a995a7a84a70bf6d8 data/aether/recipes/skyroot_beehive.json a2cb1545c07a8941e0341ab35ab44965230ef9a0 data/aether/recipes/skyroot_boat.json ee9eaa593dbe57822929dd6092b11a97e51171d5 data/aether/recipes/skyroot_bookshelf.json @@ -585,6 +584,7 @@ a7456721445feef6dc053f4743cec611f1b0f356 data/aether/recipes/skyroot_fence_gate. 1ecbae288fe53b716c0b703deeff51889082b4c7 data/aether/recipes/skyroot_fletching_table.json c2199b2a5e51078c1f7b5c9f7a7c105e029715d8 data/aether/recipes/skyroot_gravitite_jukebox.json bcda821c30b7775bc6c81ede624db052930d3e7d data/aether/recipes/skyroot_grindstone.json +cfa059e65301abd9d61fefa56cf4341bb89def5e data/aether/recipes/skyroot_hanging_sign.json 5b2d1298c795a29b74dbca22629a6f781b06c692 data/aether/recipes/skyroot_hoe.json 6d431208d34acc5ee132d5ad1b5d78ecf970623b data/aether/recipes/skyroot_hoe_repairing.json c740eb0ad5b2f6d82f27a7e50eaf705da53c4a56 data/aether/recipes/skyroot_iron_vanilla_shield.json diff --git a/src/generated/resources/.cache/c622617f6fabf890a00b9275cd5f643584a8a2c8 b/src/generated/resources/.cache/c622617f6fabf890a00b9275cd5f643584a8a2c8 index eba95252aa..a8444d0951 100644 --- a/src/generated/resources/.cache/c622617f6fabf890a00b9275cd5f643584a8a2c8 +++ b/src/generated/resources/.cache/c622617f6fabf890a00b9275cd5f643584a8a2c8 @@ -1,2 +1,2 @@ -// 1.19.4 2023-09-05T09:00:08.740732124 Languages: en_us -0e11ae7930fa7e4d584b2ec3a60a65a67475212d assets/aether/lang/en_us.json +// 1.20.1 2023-09-14T15:46:42.1101712 Languages: en_us +c5753ed3091ad96a227e69b6c4c7fec23aeb491d assets/aether/lang/en_us.json diff --git a/src/generated/resources/.cache/e5c5eb35b4ba40351ecb7d9f04c3527f2f5779b0 b/src/generated/resources/.cache/e5c5eb35b4ba40351ecb7d9f04c3527f2f5779b0 index 1ce30afa92..2475ddc995 100644 --- a/src/generated/resources/.cache/e5c5eb35b4ba40351ecb7d9f04c3527f2f5779b0 +++ b/src/generated/resources/.cache/e5c5eb35b4ba40351ecb7d9f04c3527f2f5779b0 @@ -1,29 +1,29 @@ -// 1.19.4 2023-08-16T20:37:27.3417428 Advancements -06e4eff332e36648b2a1bc237e738ec2a5584897 data/aether/advancements/aether_sleep.json -63a80813c0c6f54bf16c23f6ac28c91836bdf5db data/aether/advancements/black_moa.json -a6a7ec78b783342af08b1021cf32a7f5cf76d6a7 data/aether/advancements/blue_aercloud.json -efd339a33f705488af0ea59398e615253f1d54e0 data/aether/advancements/bronze_dungeon.json -21c6768274691a83f527ff1b142c9079a6575ce7 data/aether/advancements/craft_altar.json -989a06b550d55e15316683b15aed845a805b87c7 data/aether/advancements/enchanted_gravitite.json -581a42f27ecf9554d1797d0eb0ce4fac12a8cd88 data/aether/advancements/enter_aether.json -a2cb6ee3de066685f05961e2ff5ddb2a52753d56 data/aether/advancements/gold_dungeon.json -2c0cd6da6cb7856171ac3e53243ec8245eae8824 data/aether/advancements/gravitite_armor.json -807ec6b68f6d4f809176fcea04989adebf953f3f data/aether/advancements/hammer_loot.json -aef150f8789b124eaba4cd703f5a09878653a2c9 data/aether/advancements/icestone.json -dd0236aef2071358b8962da0482e723de2f48801 data/aether/advancements/ice_accessory.json -57c8b94249817d326a0cce30253719539de7ad0a data/aether/advancements/incubate_moa.json -d594332609b0f1ee53c12c9a34314267dd4f7713 data/aether/advancements/lance_loot.json -f3947e7b1d2a2ffcfef94ec59dfbf422fe7a7f00 data/aether/advancements/loreception.json -f7555059c9b97f02d6a1340f93ecf1db1182792e data/aether/advancements/mount_phyg.json -139f907ee80d2e276f63052baf710a25f1fbf05c data/aether/advancements/obsidian_armor.json -5398c215ec9e00e77f188173e70db81d1a29fa9a data/aether/advancements/obtain_egg.json -6a663ffdb90f9440ce1a186a8fa50a1bf9541be6 data/aether/advancements/obtain_petal.json -a4f61ee818e77c68a1b9c851f6a62c97291f4c2a data/aether/advancements/phoenix_armor.json -d33843f197963009639ff064068cf88b2a55df9b data/aether/advancements/read_lore.json -40050e2c90f8e4ad6f3ee174057f7deb2afc3433 data/aether/advancements/regen_stone.json -c200f124e81f53495600efa43c07fdffd740975c data/aether/advancements/silver_dungeon.json -78893c92add5d6490566b50446b9f98c595a86bd data/aether/advancements/the_aether.json -6e1f957f18d019e0b21fbf2057b5bc4ff11cac8e data/aether/advancements/valkyrie_hoe.json -7c32538627718fdee744b022659213e20ad1741d data/aether/advancements/valkyrie_loot.json -981f66c9b16016d0020ce4eef4ba6d838b9c506a data/aether/advancements/zanite.json -29a2847695b8811724dd80aa2e97020ebd9d7229 data/aether/advancements/zephyr_hammer.json +// 1.20.1 2023-09-14T18:08:26.8118573 Advancements +398a96fa0ca394bc7c0a65a04efb4043da5c9246 data/aether/advancements/aether_sleep.json +330c4a9d97b1d5a399ff23c8e21cb91088a9db5c data/aether/advancements/black_moa.json +4a2c9f8e5a9f000b91ce42864768dbe69f26044e data/aether/advancements/blue_aercloud.json +96807d378c121f81547033b3cf695836cc2a490d data/aether/advancements/bronze_dungeon.json +b23fb5a464d49e1bf657d0abf9a7eec946b6554c data/aether/advancements/craft_altar.json +3befe5eca7bc73c94e8ac370366c168188947374 data/aether/advancements/enchanted_gravitite.json +3b6befa6d45ab21b57cdf6560850464c23dda189 data/aether/advancements/enter_aether.json +578969d977c4e79eb9324ac5aafc536535d3edd0 data/aether/advancements/gold_dungeon.json +c9700a239914cd4e53f5ebb003ab84d0c7d30bca data/aether/advancements/gravitite_armor.json +3764818a63e6d2ab845fc848321d3caa82c67dab data/aether/advancements/hammer_loot.json +972f4e2a0034b0fa32e7abd7c2d63aa3c3fd1986 data/aether/advancements/icestone.json +d46db2002af3486fe8c7d489a6af1ef868e209ce data/aether/advancements/ice_accessory.json +4883a514502aabc889255fd95cfd2268fc719143 data/aether/advancements/incubate_moa.json +45850ed4b02f76d3671bfe265a5756266eb1eac4 data/aether/advancements/lance_loot.json +8e37deba2bb6656eeea0e816b25ca1a85ff9e109 data/aether/advancements/loreception.json +aee32d6d0fd6fd55f0585b323c907f0417485c40 data/aether/advancements/mount_phyg.json +4c5bd607d5ea347087cab6922ea97803b1ff0be5 data/aether/advancements/obsidian_armor.json +8be61f379152f855889f6bdad0252b1f1f62cc26 data/aether/advancements/obtain_egg.json +a995576a777a4fdbae266f290a92779cfd8b590b data/aether/advancements/obtain_petal.json +4bbbe6551748f8256e0bd03870fa15ba54a3de9a data/aether/advancements/phoenix_armor.json +546599b4c41349c9fb43bf16f33fbd4992b65137 data/aether/advancements/read_lore.json +f6f08792ddce0582f82d1f7e7e50dbc671b4d6ce data/aether/advancements/regen_stone.json +a3642bd91e2f4628c95f569ca383508c1b40abb1 data/aether/advancements/silver_dungeon.json +047c395ede5ce83dfebfe30c630fc27cc848cfe0 data/aether/advancements/the_aether.json +77674ac293f40b95993e631de73c834169e69348 data/aether/advancements/valkyrie_hoe.json +f6fc39b2fa0f9ae8e3705979b7bac6311f7a9ea8 data/aether/advancements/valkyrie_loot.json +2d1b087bdf6bd05b9308be4323ae288c8ee4ffbb data/aether/advancements/zanite.json +a49db2544172bf2edeb20923b64219f89d4c0133 data/aether/advancements/zephyr_hammer.json diff --git a/src/generated/resources/.cache/feecd04c25d277e5de10185e187a010c8d7228ee b/src/generated/resources/.cache/feecd04c25d277e5de10185e187a010c8d7228ee index ed49f10dee..fa898adb85 100644 --- a/src/generated/resources/.cache/feecd04c25d277e5de10185e187a010c8d7228ee +++ b/src/generated/resources/.cache/feecd04c25d277e5de10185e187a010c8d7228ee @@ -1,4 +1,4 @@ -// 1.19.4 2023-09-04T16:18:04.8492482 Tags for minecraft:worldgen/biome mod id aether +// 1.20.1 2023-09-08T18:52:14.613144 Tags for minecraft:worldgen/biome mod id aether 6425e7e0a57a451843094090fa1e31c9fbd4c5e0 data/aether/tags/worldgen/biome/aether_music.json b95f2e5677841946d287305b14c97c69f59b6db1 data/aether/tags/worldgen/biome/crimson_nylium_conversion.json 70073d71d36e3d050e21bd0d44e3dc94f4ec4890 data/aether/tags/worldgen/biome/display_travel_text.json diff --git a/src/generated/resources/assets/aether/blockstates/skyroot_hanging_sign.json b/src/generated/resources/assets/aether/blockstates/skyroot_hanging_sign.json new file mode 100644 index 0000000000..0951b6893f --- /dev/null +++ b/src/generated/resources/assets/aether/blockstates/skyroot_hanging_sign.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "aether:block/skyroot_hanging_sign" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/blockstates/skyroot_wall_hanging_sign.json b/src/generated/resources/assets/aether/blockstates/skyroot_wall_hanging_sign.json new file mode 100644 index 0000000000..0951b6893f --- /dev/null +++ b/src/generated/resources/assets/aether/blockstates/skyroot_wall_hanging_sign.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "aether:block/skyroot_hanging_sign" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/lang/en_us.json b/src/generated/resources/assets/aether/lang/en_us.json index 28ed1374ea..2bce86065b 100644 --- a/src/generated/resources/assets/aether/lang/en_us.json +++ b/src/generated/resources/assets/aether/lang/en_us.json @@ -221,6 +221,7 @@ "block.aether.skyroot_door": "Skyroot Door", "block.aether.skyroot_fence": "Skyroot Fence", "block.aether.skyroot_fence_gate": "Skyroot Fence Gate", + "block.aether.skyroot_hanging_sign": "Skyroot Hanging Sign", "block.aether.skyroot_leaves": "Skyroot Leaves", "block.aether.skyroot_log": "Skyroot Log", "block.aether.skyroot_planks": "Skyroot Planks", @@ -953,6 +954,8 @@ "menu.aether.sun_altar": "Sun Altar", "pack.aether.125.description": "The classic look of the Aether from 1.2.5", "pack.aether.125.title": "Aether 1.2.5 Textures", + "pack.aether.accessories.description": "Register default accessories", + "pack.aether.accessories.title": "Aether Accessories", "pack.aether.b173.description": "The original look of the Aether from b1.7.3", "pack.aether.b173.title": "Aether b1.7.3 Textures", "pack.aether.colorblind.description": "Changes textures for color blindness accessibility", @@ -1062,5 +1065,7 @@ "subtitles.aether.item.armor.equip_zanite": "Zanite armor clangs", "subtitles.aether.item.dart_shooter.shoot": "Dart Shooter fired", "subtitles.aether.item.hammer_of_kingbdogz.shoot": "Hammer fired", - "subtitles.aether.item.lightning_knife.shoot": "Lightning Knife flies" + "subtitles.aether.item.lightning_knife.shoot": "Lightning Knife flies", + "trim_material.aether.gravitite": "Gravitite Material", + "trim_material.aether.zanite": "Zanite Material" } \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/block/skyroot_hanging_sign.json b/src/generated/resources/assets/aether/models/block/skyroot_hanging_sign.json new file mode 100644 index 0000000000..ede20b0546 --- /dev/null +++ b/src/generated/resources/assets/aether/models/block/skyroot_hanging_sign.json @@ -0,0 +1,5 @@ +{ + "textures": { + "particle": "aether:block/natural/stripped_skyroot_log" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/chainmail_gloves.json b/src/generated/resources/assets/aether/models/item/chainmail_gloves.json index 13ed97e7c2..6bb57f219f 100644 --- a/src/generated/resources/assets/aether/models/item/chainmail_gloves.json +++ b/src/generated/resources/assets/aether/models/item/chainmail_gloves.json @@ -1,5 +1,67 @@ { "parent": "minecraft:item/generated", + "overrides": [ + { + "model": "aether:item/chainmail_gloves_quartz_trim", + "predicate": { + "minecraft:trim_type": 0.1 + } + }, + { + "model": "aether:item/chainmail_gloves_iron_trim", + "predicate": { + "minecraft:trim_type": 0.2 + } + }, + { + "model": "aether:item/chainmail_gloves_netherite_trim", + "predicate": { + "minecraft:trim_type": 0.3 + } + }, + { + "model": "aether:item/chainmail_gloves_redstone_trim", + "predicate": { + "minecraft:trim_type": 0.4 + } + }, + { + "model": "aether:item/chainmail_gloves_copper_trim", + "predicate": { + "minecraft:trim_type": 0.5 + } + }, + { + "model": "aether:item/chainmail_gloves_gold_trim", + "predicate": { + "minecraft:trim_type": 0.6 + } + }, + { + "model": "aether:item/chainmail_gloves_emerald_trim", + "predicate": { + "minecraft:trim_type": 0.7 + } + }, + { + "model": "aether:item/chainmail_gloves_diamond_trim", + "predicate": { + "minecraft:trim_type": 0.8 + } + }, + { + "model": "aether:item/chainmail_gloves_lapis_trim", + "predicate": { + "minecraft:trim_type": 0.9 + } + }, + { + "model": "aether:item/chainmail_gloves_amethyst_trim", + "predicate": { + "minecraft:trim_type": 1.0 + } + } + ], "textures": { "layer0": "aether:item/accessories/chainmail_gloves" } diff --git a/src/generated/resources/assets/aether/models/item/chainmail_gloves_amethyst_trim.json b/src/generated/resources/assets/aether/models/item/chainmail_gloves_amethyst_trim.json new file mode 100644 index 0000000000..3d3d02646b --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/chainmail_gloves_amethyst_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/chainmail_gloves", + "layer1": "aether:trims/items/gloves_trim_amethyst" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/chainmail_gloves_copper_trim.json b/src/generated/resources/assets/aether/models/item/chainmail_gloves_copper_trim.json new file mode 100644 index 0000000000..166f3433d0 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/chainmail_gloves_copper_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/chainmail_gloves", + "layer1": "aether:trims/items/gloves_trim_copper" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/chainmail_gloves_diamond_trim.json b/src/generated/resources/assets/aether/models/item/chainmail_gloves_diamond_trim.json new file mode 100644 index 0000000000..2982de522e --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/chainmail_gloves_diamond_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/chainmail_gloves", + "layer1": "aether:trims/items/gloves_trim_diamond" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/chainmail_gloves_emerald_trim.json b/src/generated/resources/assets/aether/models/item/chainmail_gloves_emerald_trim.json new file mode 100644 index 0000000000..b90bf043ff --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/chainmail_gloves_emerald_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/chainmail_gloves", + "layer1": "aether:trims/items/gloves_trim_emerald" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/chainmail_gloves_gold_trim.json b/src/generated/resources/assets/aether/models/item/chainmail_gloves_gold_trim.json new file mode 100644 index 0000000000..3199f88f45 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/chainmail_gloves_gold_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/chainmail_gloves", + "layer1": "aether:trims/items/gloves_trim_gold" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/chainmail_gloves_iron_trim.json b/src/generated/resources/assets/aether/models/item/chainmail_gloves_iron_trim.json new file mode 100644 index 0000000000..2187e64465 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/chainmail_gloves_iron_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/chainmail_gloves", + "layer1": "aether:trims/items/gloves_trim_iron" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/chainmail_gloves_lapis_trim.json b/src/generated/resources/assets/aether/models/item/chainmail_gloves_lapis_trim.json new file mode 100644 index 0000000000..9b85c0dfc1 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/chainmail_gloves_lapis_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/chainmail_gloves", + "layer1": "aether:trims/items/gloves_trim_lapis" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/chainmail_gloves_netherite_trim.json b/src/generated/resources/assets/aether/models/item/chainmail_gloves_netherite_trim.json new file mode 100644 index 0000000000..c116207160 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/chainmail_gloves_netherite_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/chainmail_gloves", + "layer1": "aether:trims/items/gloves_trim_netherite" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/chainmail_gloves_quartz_trim.json b/src/generated/resources/assets/aether/models/item/chainmail_gloves_quartz_trim.json new file mode 100644 index 0000000000..9552f9cdcb --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/chainmail_gloves_quartz_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/chainmail_gloves", + "layer1": "aether:trims/items/gloves_trim_quartz" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/chainmail_gloves_redstone_trim.json b/src/generated/resources/assets/aether/models/item/chainmail_gloves_redstone_trim.json new file mode 100644 index 0000000000..fbaea8ac1c --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/chainmail_gloves_redstone_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/chainmail_gloves", + "layer1": "aether:trims/items/gloves_trim_redstone" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/diamond_gloves.json b/src/generated/resources/assets/aether/models/item/diamond_gloves.json index a93de87519..6fa56141b1 100644 --- a/src/generated/resources/assets/aether/models/item/diamond_gloves.json +++ b/src/generated/resources/assets/aether/models/item/diamond_gloves.json @@ -1,5 +1,67 @@ { "parent": "minecraft:item/generated", + "overrides": [ + { + "model": "aether:item/diamond_gloves_quartz_trim", + "predicate": { + "minecraft:trim_type": 0.1 + } + }, + { + "model": "aether:item/diamond_gloves_iron_trim", + "predicate": { + "minecraft:trim_type": 0.2 + } + }, + { + "model": "aether:item/diamond_gloves_netherite_trim", + "predicate": { + "minecraft:trim_type": 0.3 + } + }, + { + "model": "aether:item/diamond_gloves_redstone_trim", + "predicate": { + "minecraft:trim_type": 0.4 + } + }, + { + "model": "aether:item/diamond_gloves_copper_trim", + "predicate": { + "minecraft:trim_type": 0.5 + } + }, + { + "model": "aether:item/diamond_gloves_gold_trim", + "predicate": { + "minecraft:trim_type": 0.6 + } + }, + { + "model": "aether:item/diamond_gloves_emerald_trim", + "predicate": { + "minecraft:trim_type": 0.7 + } + }, + { + "model": "aether:item/diamond_gloves_diamond_trim", + "predicate": { + "minecraft:trim_type": 0.8 + } + }, + { + "model": "aether:item/diamond_gloves_lapis_trim", + "predicate": { + "minecraft:trim_type": 0.9 + } + }, + { + "model": "aether:item/diamond_gloves_amethyst_trim", + "predicate": { + "minecraft:trim_type": 1.0 + } + } + ], "textures": { "layer0": "aether:item/accessories/diamond_gloves" } diff --git a/src/generated/resources/assets/aether/models/item/diamond_gloves_amethyst_trim.json b/src/generated/resources/assets/aether/models/item/diamond_gloves_amethyst_trim.json new file mode 100644 index 0000000000..a997ecf883 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/diamond_gloves_amethyst_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/diamond_gloves", + "layer1": "aether:trims/items/gloves_trim_amethyst" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/diamond_gloves_copper_trim.json b/src/generated/resources/assets/aether/models/item/diamond_gloves_copper_trim.json new file mode 100644 index 0000000000..41014923cc --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/diamond_gloves_copper_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/diamond_gloves", + "layer1": "aether:trims/items/gloves_trim_copper" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/diamond_gloves_diamond_trim.json b/src/generated/resources/assets/aether/models/item/diamond_gloves_diamond_trim.json new file mode 100644 index 0000000000..48a0cc3bae --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/diamond_gloves_diamond_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/diamond_gloves", + "layer1": "aether:trims/items/gloves_trim_diamond" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/diamond_gloves_emerald_trim.json b/src/generated/resources/assets/aether/models/item/diamond_gloves_emerald_trim.json new file mode 100644 index 0000000000..c8aeddbe4d --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/diamond_gloves_emerald_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/diamond_gloves", + "layer1": "aether:trims/items/gloves_trim_emerald" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/diamond_gloves_gold_trim.json b/src/generated/resources/assets/aether/models/item/diamond_gloves_gold_trim.json new file mode 100644 index 0000000000..9e1af132da --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/diamond_gloves_gold_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/diamond_gloves", + "layer1": "aether:trims/items/gloves_trim_gold" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/diamond_gloves_iron_trim.json b/src/generated/resources/assets/aether/models/item/diamond_gloves_iron_trim.json new file mode 100644 index 0000000000..20e9c3488a --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/diamond_gloves_iron_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/diamond_gloves", + "layer1": "aether:trims/items/gloves_trim_iron" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/diamond_gloves_lapis_trim.json b/src/generated/resources/assets/aether/models/item/diamond_gloves_lapis_trim.json new file mode 100644 index 0000000000..2d3ac0cca8 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/diamond_gloves_lapis_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/diamond_gloves", + "layer1": "aether:trims/items/gloves_trim_lapis" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/diamond_gloves_netherite_trim.json b/src/generated/resources/assets/aether/models/item/diamond_gloves_netherite_trim.json new file mode 100644 index 0000000000..eab78b31c7 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/diamond_gloves_netherite_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/diamond_gloves", + "layer1": "aether:trims/items/gloves_trim_netherite" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/diamond_gloves_quartz_trim.json b/src/generated/resources/assets/aether/models/item/diamond_gloves_quartz_trim.json new file mode 100644 index 0000000000..f049a9065a --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/diamond_gloves_quartz_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/diamond_gloves", + "layer1": "aether:trims/items/gloves_trim_quartz" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/diamond_gloves_redstone_trim.json b/src/generated/resources/assets/aether/models/item/diamond_gloves_redstone_trim.json new file mode 100644 index 0000000000..bc392bb70b --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/diamond_gloves_redstone_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/diamond_gloves", + "layer1": "aether:trims/items/gloves_trim_redstone" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/golden_gloves.json b/src/generated/resources/assets/aether/models/item/golden_gloves.json index b53aad449b..290753f446 100644 --- a/src/generated/resources/assets/aether/models/item/golden_gloves.json +++ b/src/generated/resources/assets/aether/models/item/golden_gloves.json @@ -1,5 +1,67 @@ { "parent": "minecraft:item/generated", + "overrides": [ + { + "model": "aether:item/golden_gloves_quartz_trim", + "predicate": { + "minecraft:trim_type": 0.1 + } + }, + { + "model": "aether:item/golden_gloves_iron_trim", + "predicate": { + "minecraft:trim_type": 0.2 + } + }, + { + "model": "aether:item/golden_gloves_netherite_trim", + "predicate": { + "minecraft:trim_type": 0.3 + } + }, + { + "model": "aether:item/golden_gloves_redstone_trim", + "predicate": { + "minecraft:trim_type": 0.4 + } + }, + { + "model": "aether:item/golden_gloves_copper_trim", + "predicate": { + "minecraft:trim_type": 0.5 + } + }, + { + "model": "aether:item/golden_gloves_gold_trim", + "predicate": { + "minecraft:trim_type": 0.6 + } + }, + { + "model": "aether:item/golden_gloves_emerald_trim", + "predicate": { + "minecraft:trim_type": 0.7 + } + }, + { + "model": "aether:item/golden_gloves_diamond_trim", + "predicate": { + "minecraft:trim_type": 0.8 + } + }, + { + "model": "aether:item/golden_gloves_lapis_trim", + "predicate": { + "minecraft:trim_type": 0.9 + } + }, + { + "model": "aether:item/golden_gloves_amethyst_trim", + "predicate": { + "minecraft:trim_type": 1.0 + } + } + ], "textures": { "layer0": "aether:item/accessories/golden_gloves" } diff --git a/src/generated/resources/assets/aether/models/item/golden_gloves_amethyst_trim.json b/src/generated/resources/assets/aether/models/item/golden_gloves_amethyst_trim.json new file mode 100644 index 0000000000..812f6f52a5 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/golden_gloves_amethyst_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/golden_gloves", + "layer1": "aether:trims/items/gloves_trim_amethyst" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/golden_gloves_copper_trim.json b/src/generated/resources/assets/aether/models/item/golden_gloves_copper_trim.json new file mode 100644 index 0000000000..a309a2f3dc --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/golden_gloves_copper_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/golden_gloves", + "layer1": "aether:trims/items/gloves_trim_copper" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/golden_gloves_diamond_trim.json b/src/generated/resources/assets/aether/models/item/golden_gloves_diamond_trim.json new file mode 100644 index 0000000000..1e8829ba3a --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/golden_gloves_diamond_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/golden_gloves", + "layer1": "aether:trims/items/gloves_trim_diamond" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/golden_gloves_emerald_trim.json b/src/generated/resources/assets/aether/models/item/golden_gloves_emerald_trim.json new file mode 100644 index 0000000000..bc98de5788 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/golden_gloves_emerald_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/golden_gloves", + "layer1": "aether:trims/items/gloves_trim_emerald" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/golden_gloves_gold_trim.json b/src/generated/resources/assets/aether/models/item/golden_gloves_gold_trim.json new file mode 100644 index 0000000000..b0995adb44 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/golden_gloves_gold_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/golden_gloves", + "layer1": "aether:trims/items/gloves_trim_gold" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/golden_gloves_iron_trim.json b/src/generated/resources/assets/aether/models/item/golden_gloves_iron_trim.json new file mode 100644 index 0000000000..8504876f19 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/golden_gloves_iron_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/golden_gloves", + "layer1": "aether:trims/items/gloves_trim_iron" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/golden_gloves_lapis_trim.json b/src/generated/resources/assets/aether/models/item/golden_gloves_lapis_trim.json new file mode 100644 index 0000000000..7f926358fb --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/golden_gloves_lapis_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/golden_gloves", + "layer1": "aether:trims/items/gloves_trim_lapis" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/golden_gloves_netherite_trim.json b/src/generated/resources/assets/aether/models/item/golden_gloves_netherite_trim.json new file mode 100644 index 0000000000..97ca04a048 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/golden_gloves_netherite_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/golden_gloves", + "layer1": "aether:trims/items/gloves_trim_netherite" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/golden_gloves_quartz_trim.json b/src/generated/resources/assets/aether/models/item/golden_gloves_quartz_trim.json new file mode 100644 index 0000000000..c61f5c39a9 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/golden_gloves_quartz_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/golden_gloves", + "layer1": "aether:trims/items/gloves_trim_quartz" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/golden_gloves_redstone_trim.json b/src/generated/resources/assets/aether/models/item/golden_gloves_redstone_trim.json new file mode 100644 index 0000000000..d7f5488913 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/golden_gloves_redstone_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/golden_gloves", + "layer1": "aether:trims/items/gloves_trim_redstone" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/gravitite_boots.json b/src/generated/resources/assets/aether/models/item/gravitite_boots.json index cf43731d9a..36b917359f 100644 --- a/src/generated/resources/assets/aether/models/item/gravitite_boots.json +++ b/src/generated/resources/assets/aether/models/item/gravitite_boots.json @@ -1,5 +1,67 @@ { "parent": "minecraft:item/generated", + "overrides": [ + { + "model": "aether:item/gravitite_boots_quartz_trim", + "predicate": { + "minecraft:trim_type": 0.1 + } + }, + { + "model": "aether:item/gravitite_boots_iron_trim", + "predicate": { + "minecraft:trim_type": 0.2 + } + }, + { + "model": "aether:item/gravitite_boots_netherite_trim", + "predicate": { + "minecraft:trim_type": 0.3 + } + }, + { + "model": "aether:item/gravitite_boots_redstone_trim", + "predicate": { + "minecraft:trim_type": 0.4 + } + }, + { + "model": "aether:item/gravitite_boots_copper_trim", + "predicate": { + "minecraft:trim_type": 0.5 + } + }, + { + "model": "aether:item/gravitite_boots_gold_trim", + "predicate": { + "minecraft:trim_type": 0.6 + } + }, + { + "model": "aether:item/gravitite_boots_emerald_trim", + "predicate": { + "minecraft:trim_type": 0.7 + } + }, + { + "model": "aether:item/gravitite_boots_diamond_trim", + "predicate": { + "minecraft:trim_type": 0.8 + } + }, + { + "model": "aether:item/gravitite_boots_lapis_trim", + "predicate": { + "minecraft:trim_type": 0.9 + } + }, + { + "model": "aether:item/gravitite_boots_amethyst_trim", + "predicate": { + "minecraft:trim_type": 1.0 + } + } + ], "textures": { "layer0": "aether:item/armor/gravitite_boots" } diff --git a/src/generated/resources/assets/aether/models/item/gravitite_boots_amethyst_trim.json b/src/generated/resources/assets/aether/models/item/gravitite_boots_amethyst_trim.json new file mode 100644 index 0000000000..429f71b0e1 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/gravitite_boots_amethyst_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/gravitite_boots", + "layer1": "minecraft:trims/items/boots_trim_amethyst" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/gravitite_boots_copper_trim.json b/src/generated/resources/assets/aether/models/item/gravitite_boots_copper_trim.json new file mode 100644 index 0000000000..dc678fbf85 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/gravitite_boots_copper_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/gravitite_boots", + "layer1": "minecraft:trims/items/boots_trim_copper" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/gravitite_boots_diamond_trim.json b/src/generated/resources/assets/aether/models/item/gravitite_boots_diamond_trim.json new file mode 100644 index 0000000000..332b3e097a --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/gravitite_boots_diamond_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/gravitite_boots", + "layer1": "minecraft:trims/items/boots_trim_diamond" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/gravitite_boots_emerald_trim.json b/src/generated/resources/assets/aether/models/item/gravitite_boots_emerald_trim.json new file mode 100644 index 0000000000..d63d10e00c --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/gravitite_boots_emerald_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/gravitite_boots", + "layer1": "minecraft:trims/items/boots_trim_emerald" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/gravitite_boots_gold_trim.json b/src/generated/resources/assets/aether/models/item/gravitite_boots_gold_trim.json new file mode 100644 index 0000000000..019878844b --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/gravitite_boots_gold_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/gravitite_boots", + "layer1": "minecraft:trims/items/boots_trim_gold" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/gravitite_boots_iron_trim.json b/src/generated/resources/assets/aether/models/item/gravitite_boots_iron_trim.json new file mode 100644 index 0000000000..43d29adcbc --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/gravitite_boots_iron_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/gravitite_boots", + "layer1": "minecraft:trims/items/boots_trim_iron" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/gravitite_boots_lapis_trim.json b/src/generated/resources/assets/aether/models/item/gravitite_boots_lapis_trim.json new file mode 100644 index 0000000000..8a56cfa921 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/gravitite_boots_lapis_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/gravitite_boots", + "layer1": "minecraft:trims/items/boots_trim_lapis" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/gravitite_boots_netherite_trim.json b/src/generated/resources/assets/aether/models/item/gravitite_boots_netherite_trim.json new file mode 100644 index 0000000000..a9be2a4d12 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/gravitite_boots_netherite_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/gravitite_boots", + "layer1": "minecraft:trims/items/boots_trim_netherite" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/gravitite_boots_quartz_trim.json b/src/generated/resources/assets/aether/models/item/gravitite_boots_quartz_trim.json new file mode 100644 index 0000000000..fd68c1e28c --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/gravitite_boots_quartz_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/gravitite_boots", + "layer1": "minecraft:trims/items/boots_trim_quartz" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/gravitite_boots_redstone_trim.json b/src/generated/resources/assets/aether/models/item/gravitite_boots_redstone_trim.json new file mode 100644 index 0000000000..adc9d6bcc4 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/gravitite_boots_redstone_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/gravitite_boots", + "layer1": "minecraft:trims/items/boots_trim_redstone" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/gravitite_chestplate.json b/src/generated/resources/assets/aether/models/item/gravitite_chestplate.json index f6504786fb..b16bf0f59e 100644 --- a/src/generated/resources/assets/aether/models/item/gravitite_chestplate.json +++ b/src/generated/resources/assets/aether/models/item/gravitite_chestplate.json @@ -1,5 +1,67 @@ { "parent": "minecraft:item/generated", + "overrides": [ + { + "model": "aether:item/gravitite_chestplate_quartz_trim", + "predicate": { + "minecraft:trim_type": 0.1 + } + }, + { + "model": "aether:item/gravitite_chestplate_iron_trim", + "predicate": { + "minecraft:trim_type": 0.2 + } + }, + { + "model": "aether:item/gravitite_chestplate_netherite_trim", + "predicate": { + "minecraft:trim_type": 0.3 + } + }, + { + "model": "aether:item/gravitite_chestplate_redstone_trim", + "predicate": { + "minecraft:trim_type": 0.4 + } + }, + { + "model": "aether:item/gravitite_chestplate_copper_trim", + "predicate": { + "minecraft:trim_type": 0.5 + } + }, + { + "model": "aether:item/gravitite_chestplate_gold_trim", + "predicate": { + "minecraft:trim_type": 0.6 + } + }, + { + "model": "aether:item/gravitite_chestplate_emerald_trim", + "predicate": { + "minecraft:trim_type": 0.7 + } + }, + { + "model": "aether:item/gravitite_chestplate_diamond_trim", + "predicate": { + "minecraft:trim_type": 0.8 + } + }, + { + "model": "aether:item/gravitite_chestplate_lapis_trim", + "predicate": { + "minecraft:trim_type": 0.9 + } + }, + { + "model": "aether:item/gravitite_chestplate_amethyst_trim", + "predicate": { + "minecraft:trim_type": 1.0 + } + } + ], "textures": { "layer0": "aether:item/armor/gravitite_chestplate" } diff --git a/src/generated/resources/assets/aether/models/item/gravitite_chestplate_amethyst_trim.json b/src/generated/resources/assets/aether/models/item/gravitite_chestplate_amethyst_trim.json new file mode 100644 index 0000000000..610cb2f8fc --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/gravitite_chestplate_amethyst_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/gravitite_chestplate", + "layer1": "minecraft:trims/items/chestplate_trim_amethyst" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/gravitite_chestplate_copper_trim.json b/src/generated/resources/assets/aether/models/item/gravitite_chestplate_copper_trim.json new file mode 100644 index 0000000000..11e7b2794c --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/gravitite_chestplate_copper_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/gravitite_chestplate", + "layer1": "minecraft:trims/items/chestplate_trim_copper" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/gravitite_chestplate_diamond_trim.json b/src/generated/resources/assets/aether/models/item/gravitite_chestplate_diamond_trim.json new file mode 100644 index 0000000000..5633ded260 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/gravitite_chestplate_diamond_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/gravitite_chestplate", + "layer1": "minecraft:trims/items/chestplate_trim_diamond" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/gravitite_chestplate_emerald_trim.json b/src/generated/resources/assets/aether/models/item/gravitite_chestplate_emerald_trim.json new file mode 100644 index 0000000000..6d394938d5 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/gravitite_chestplate_emerald_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/gravitite_chestplate", + "layer1": "minecraft:trims/items/chestplate_trim_emerald" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/gravitite_chestplate_gold_trim.json b/src/generated/resources/assets/aether/models/item/gravitite_chestplate_gold_trim.json new file mode 100644 index 0000000000..5f59e37bcb --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/gravitite_chestplate_gold_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/gravitite_chestplate", + "layer1": "minecraft:trims/items/chestplate_trim_gold" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/gravitite_chestplate_iron_trim.json b/src/generated/resources/assets/aether/models/item/gravitite_chestplate_iron_trim.json new file mode 100644 index 0000000000..a69e21592b --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/gravitite_chestplate_iron_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/gravitite_chestplate", + "layer1": "minecraft:trims/items/chestplate_trim_iron" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/gravitite_chestplate_lapis_trim.json b/src/generated/resources/assets/aether/models/item/gravitite_chestplate_lapis_trim.json new file mode 100644 index 0000000000..4f50422c91 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/gravitite_chestplate_lapis_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/gravitite_chestplate", + "layer1": "minecraft:trims/items/chestplate_trim_lapis" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/gravitite_chestplate_netherite_trim.json b/src/generated/resources/assets/aether/models/item/gravitite_chestplate_netherite_trim.json new file mode 100644 index 0000000000..40a902a06e --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/gravitite_chestplate_netherite_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/gravitite_chestplate", + "layer1": "minecraft:trims/items/chestplate_trim_netherite" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/gravitite_chestplate_quartz_trim.json b/src/generated/resources/assets/aether/models/item/gravitite_chestplate_quartz_trim.json new file mode 100644 index 0000000000..4ee42d1dc0 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/gravitite_chestplate_quartz_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/gravitite_chestplate", + "layer1": "minecraft:trims/items/chestplate_trim_quartz" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/gravitite_chestplate_redstone_trim.json b/src/generated/resources/assets/aether/models/item/gravitite_chestplate_redstone_trim.json new file mode 100644 index 0000000000..40f5a1fd93 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/gravitite_chestplate_redstone_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/gravitite_chestplate", + "layer1": "minecraft:trims/items/chestplate_trim_redstone" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/gravitite_gloves.json b/src/generated/resources/assets/aether/models/item/gravitite_gloves.json index 1c81888c90..3ef00e3ff5 100644 --- a/src/generated/resources/assets/aether/models/item/gravitite_gloves.json +++ b/src/generated/resources/assets/aether/models/item/gravitite_gloves.json @@ -1,5 +1,67 @@ { "parent": "minecraft:item/generated", + "overrides": [ + { + "model": "aether:item/gravitite_gloves_quartz_trim", + "predicate": { + "minecraft:trim_type": 0.1 + } + }, + { + "model": "aether:item/gravitite_gloves_iron_trim", + "predicate": { + "minecraft:trim_type": 0.2 + } + }, + { + "model": "aether:item/gravitite_gloves_netherite_trim", + "predicate": { + "minecraft:trim_type": 0.3 + } + }, + { + "model": "aether:item/gravitite_gloves_redstone_trim", + "predicate": { + "minecraft:trim_type": 0.4 + } + }, + { + "model": "aether:item/gravitite_gloves_copper_trim", + "predicate": { + "minecraft:trim_type": 0.5 + } + }, + { + "model": "aether:item/gravitite_gloves_gold_trim", + "predicate": { + "minecraft:trim_type": 0.6 + } + }, + { + "model": "aether:item/gravitite_gloves_emerald_trim", + "predicate": { + "minecraft:trim_type": 0.7 + } + }, + { + "model": "aether:item/gravitite_gloves_diamond_trim", + "predicate": { + "minecraft:trim_type": 0.8 + } + }, + { + "model": "aether:item/gravitite_gloves_lapis_trim", + "predicate": { + "minecraft:trim_type": 0.9 + } + }, + { + "model": "aether:item/gravitite_gloves_amethyst_trim", + "predicate": { + "minecraft:trim_type": 1.0 + } + } + ], "textures": { "layer0": "aether:item/accessories/gravitite_gloves" } diff --git a/src/generated/resources/assets/aether/models/item/gravitite_gloves_amethyst_trim.json b/src/generated/resources/assets/aether/models/item/gravitite_gloves_amethyst_trim.json new file mode 100644 index 0000000000..b87cf114a4 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/gravitite_gloves_amethyst_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/gravitite_gloves", + "layer1": "aether:trims/items/gloves_trim_amethyst" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/gravitite_gloves_copper_trim.json b/src/generated/resources/assets/aether/models/item/gravitite_gloves_copper_trim.json new file mode 100644 index 0000000000..47ba587a0b --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/gravitite_gloves_copper_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/gravitite_gloves", + "layer1": "aether:trims/items/gloves_trim_copper" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/gravitite_gloves_diamond_trim.json b/src/generated/resources/assets/aether/models/item/gravitite_gloves_diamond_trim.json new file mode 100644 index 0000000000..bc9961b161 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/gravitite_gloves_diamond_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/gravitite_gloves", + "layer1": "aether:trims/items/gloves_trim_diamond" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/gravitite_gloves_emerald_trim.json b/src/generated/resources/assets/aether/models/item/gravitite_gloves_emerald_trim.json new file mode 100644 index 0000000000..a754447ea0 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/gravitite_gloves_emerald_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/gravitite_gloves", + "layer1": "aether:trims/items/gloves_trim_emerald" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/gravitite_gloves_gold_trim.json b/src/generated/resources/assets/aether/models/item/gravitite_gloves_gold_trim.json new file mode 100644 index 0000000000..6786b2ecb0 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/gravitite_gloves_gold_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/gravitite_gloves", + "layer1": "aether:trims/items/gloves_trim_gold" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/gravitite_gloves_iron_trim.json b/src/generated/resources/assets/aether/models/item/gravitite_gloves_iron_trim.json new file mode 100644 index 0000000000..a27e721370 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/gravitite_gloves_iron_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/gravitite_gloves", + "layer1": "aether:trims/items/gloves_trim_iron" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/gravitite_gloves_lapis_trim.json b/src/generated/resources/assets/aether/models/item/gravitite_gloves_lapis_trim.json new file mode 100644 index 0000000000..b04d33e41b --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/gravitite_gloves_lapis_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/gravitite_gloves", + "layer1": "aether:trims/items/gloves_trim_lapis" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/gravitite_gloves_netherite_trim.json b/src/generated/resources/assets/aether/models/item/gravitite_gloves_netherite_trim.json new file mode 100644 index 0000000000..5f9021a533 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/gravitite_gloves_netherite_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/gravitite_gloves", + "layer1": "aether:trims/items/gloves_trim_netherite" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/gravitite_gloves_quartz_trim.json b/src/generated/resources/assets/aether/models/item/gravitite_gloves_quartz_trim.json new file mode 100644 index 0000000000..3ed91c06ee --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/gravitite_gloves_quartz_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/gravitite_gloves", + "layer1": "aether:trims/items/gloves_trim_quartz" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/gravitite_gloves_redstone_trim.json b/src/generated/resources/assets/aether/models/item/gravitite_gloves_redstone_trim.json new file mode 100644 index 0000000000..43ce10eae6 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/gravitite_gloves_redstone_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/gravitite_gloves", + "layer1": "aether:trims/items/gloves_trim_redstone" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/gravitite_helmet.json b/src/generated/resources/assets/aether/models/item/gravitite_helmet.json index 659471838a..61667f330a 100644 --- a/src/generated/resources/assets/aether/models/item/gravitite_helmet.json +++ b/src/generated/resources/assets/aether/models/item/gravitite_helmet.json @@ -1,5 +1,67 @@ { "parent": "minecraft:item/generated", + "overrides": [ + { + "model": "aether:item/gravitite_helmet_quartz_trim", + "predicate": { + "minecraft:trim_type": 0.1 + } + }, + { + "model": "aether:item/gravitite_helmet_iron_trim", + "predicate": { + "minecraft:trim_type": 0.2 + } + }, + { + "model": "aether:item/gravitite_helmet_netherite_trim", + "predicate": { + "minecraft:trim_type": 0.3 + } + }, + { + "model": "aether:item/gravitite_helmet_redstone_trim", + "predicate": { + "minecraft:trim_type": 0.4 + } + }, + { + "model": "aether:item/gravitite_helmet_copper_trim", + "predicate": { + "minecraft:trim_type": 0.5 + } + }, + { + "model": "aether:item/gravitite_helmet_gold_trim", + "predicate": { + "minecraft:trim_type": 0.6 + } + }, + { + "model": "aether:item/gravitite_helmet_emerald_trim", + "predicate": { + "minecraft:trim_type": 0.7 + } + }, + { + "model": "aether:item/gravitite_helmet_diamond_trim", + "predicate": { + "minecraft:trim_type": 0.8 + } + }, + { + "model": "aether:item/gravitite_helmet_lapis_trim", + "predicate": { + "minecraft:trim_type": 0.9 + } + }, + { + "model": "aether:item/gravitite_helmet_amethyst_trim", + "predicate": { + "minecraft:trim_type": 1.0 + } + } + ], "textures": { "layer0": "aether:item/armor/gravitite_helmet" } diff --git a/src/generated/resources/assets/aether/models/item/gravitite_helmet_amethyst_trim.json b/src/generated/resources/assets/aether/models/item/gravitite_helmet_amethyst_trim.json new file mode 100644 index 0000000000..b3afd7c5b9 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/gravitite_helmet_amethyst_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/gravitite_helmet", + "layer1": "minecraft:trims/items/helmet_trim_amethyst" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/gravitite_helmet_copper_trim.json b/src/generated/resources/assets/aether/models/item/gravitite_helmet_copper_trim.json new file mode 100644 index 0000000000..9452d25fd7 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/gravitite_helmet_copper_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/gravitite_helmet", + "layer1": "minecraft:trims/items/helmet_trim_copper" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/gravitite_helmet_diamond_trim.json b/src/generated/resources/assets/aether/models/item/gravitite_helmet_diamond_trim.json new file mode 100644 index 0000000000..8a251b2b0c --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/gravitite_helmet_diamond_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/gravitite_helmet", + "layer1": "minecraft:trims/items/helmet_trim_diamond" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/gravitite_helmet_emerald_trim.json b/src/generated/resources/assets/aether/models/item/gravitite_helmet_emerald_trim.json new file mode 100644 index 0000000000..f2e4a1d65d --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/gravitite_helmet_emerald_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/gravitite_helmet", + "layer1": "minecraft:trims/items/helmet_trim_emerald" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/gravitite_helmet_gold_trim.json b/src/generated/resources/assets/aether/models/item/gravitite_helmet_gold_trim.json new file mode 100644 index 0000000000..1a1295712a --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/gravitite_helmet_gold_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/gravitite_helmet", + "layer1": "minecraft:trims/items/helmet_trim_gold" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/gravitite_helmet_iron_trim.json b/src/generated/resources/assets/aether/models/item/gravitite_helmet_iron_trim.json new file mode 100644 index 0000000000..1ba21e5a3c --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/gravitite_helmet_iron_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/gravitite_helmet", + "layer1": "minecraft:trims/items/helmet_trim_iron" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/gravitite_helmet_lapis_trim.json b/src/generated/resources/assets/aether/models/item/gravitite_helmet_lapis_trim.json new file mode 100644 index 0000000000..6b73925db2 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/gravitite_helmet_lapis_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/gravitite_helmet", + "layer1": "minecraft:trims/items/helmet_trim_lapis" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/gravitite_helmet_netherite_trim.json b/src/generated/resources/assets/aether/models/item/gravitite_helmet_netherite_trim.json new file mode 100644 index 0000000000..03338d7f40 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/gravitite_helmet_netherite_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/gravitite_helmet", + "layer1": "minecraft:trims/items/helmet_trim_netherite" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/gravitite_helmet_quartz_trim.json b/src/generated/resources/assets/aether/models/item/gravitite_helmet_quartz_trim.json new file mode 100644 index 0000000000..91e27dca76 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/gravitite_helmet_quartz_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/gravitite_helmet", + "layer1": "minecraft:trims/items/helmet_trim_quartz" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/gravitite_helmet_redstone_trim.json b/src/generated/resources/assets/aether/models/item/gravitite_helmet_redstone_trim.json new file mode 100644 index 0000000000..f549c580b9 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/gravitite_helmet_redstone_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/gravitite_helmet", + "layer1": "minecraft:trims/items/helmet_trim_redstone" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/gravitite_leggings.json b/src/generated/resources/assets/aether/models/item/gravitite_leggings.json index 5512845abf..6d319aea0f 100644 --- a/src/generated/resources/assets/aether/models/item/gravitite_leggings.json +++ b/src/generated/resources/assets/aether/models/item/gravitite_leggings.json @@ -1,5 +1,67 @@ { "parent": "minecraft:item/generated", + "overrides": [ + { + "model": "aether:item/gravitite_leggings_quartz_trim", + "predicate": { + "minecraft:trim_type": 0.1 + } + }, + { + "model": "aether:item/gravitite_leggings_iron_trim", + "predicate": { + "minecraft:trim_type": 0.2 + } + }, + { + "model": "aether:item/gravitite_leggings_netherite_trim", + "predicate": { + "minecraft:trim_type": 0.3 + } + }, + { + "model": "aether:item/gravitite_leggings_redstone_trim", + "predicate": { + "minecraft:trim_type": 0.4 + } + }, + { + "model": "aether:item/gravitite_leggings_copper_trim", + "predicate": { + "minecraft:trim_type": 0.5 + } + }, + { + "model": "aether:item/gravitite_leggings_gold_trim", + "predicate": { + "minecraft:trim_type": 0.6 + } + }, + { + "model": "aether:item/gravitite_leggings_emerald_trim", + "predicate": { + "minecraft:trim_type": 0.7 + } + }, + { + "model": "aether:item/gravitite_leggings_diamond_trim", + "predicate": { + "minecraft:trim_type": 0.8 + } + }, + { + "model": "aether:item/gravitite_leggings_lapis_trim", + "predicate": { + "minecraft:trim_type": 0.9 + } + }, + { + "model": "aether:item/gravitite_leggings_amethyst_trim", + "predicate": { + "minecraft:trim_type": 1.0 + } + } + ], "textures": { "layer0": "aether:item/armor/gravitite_leggings" } diff --git a/src/generated/resources/assets/aether/models/item/gravitite_leggings_amethyst_trim.json b/src/generated/resources/assets/aether/models/item/gravitite_leggings_amethyst_trim.json new file mode 100644 index 0000000000..1f011eef0e --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/gravitite_leggings_amethyst_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/gravitite_leggings", + "layer1": "minecraft:trims/items/leggings_trim_amethyst" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/gravitite_leggings_copper_trim.json b/src/generated/resources/assets/aether/models/item/gravitite_leggings_copper_trim.json new file mode 100644 index 0000000000..cf91359582 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/gravitite_leggings_copper_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/gravitite_leggings", + "layer1": "minecraft:trims/items/leggings_trim_copper" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/gravitite_leggings_diamond_trim.json b/src/generated/resources/assets/aether/models/item/gravitite_leggings_diamond_trim.json new file mode 100644 index 0000000000..8d3b40fc12 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/gravitite_leggings_diamond_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/gravitite_leggings", + "layer1": "minecraft:trims/items/leggings_trim_diamond" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/gravitite_leggings_emerald_trim.json b/src/generated/resources/assets/aether/models/item/gravitite_leggings_emerald_trim.json new file mode 100644 index 0000000000..33190c82f7 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/gravitite_leggings_emerald_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/gravitite_leggings", + "layer1": "minecraft:trims/items/leggings_trim_emerald" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/gravitite_leggings_gold_trim.json b/src/generated/resources/assets/aether/models/item/gravitite_leggings_gold_trim.json new file mode 100644 index 0000000000..f80f2ad1aa --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/gravitite_leggings_gold_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/gravitite_leggings", + "layer1": "minecraft:trims/items/leggings_trim_gold" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/gravitite_leggings_iron_trim.json b/src/generated/resources/assets/aether/models/item/gravitite_leggings_iron_trim.json new file mode 100644 index 0000000000..6c7e0ebddb --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/gravitite_leggings_iron_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/gravitite_leggings", + "layer1": "minecraft:trims/items/leggings_trim_iron" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/gravitite_leggings_lapis_trim.json b/src/generated/resources/assets/aether/models/item/gravitite_leggings_lapis_trim.json new file mode 100644 index 0000000000..ccb11a3969 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/gravitite_leggings_lapis_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/gravitite_leggings", + "layer1": "minecraft:trims/items/leggings_trim_lapis" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/gravitite_leggings_netherite_trim.json b/src/generated/resources/assets/aether/models/item/gravitite_leggings_netherite_trim.json new file mode 100644 index 0000000000..0b25f59380 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/gravitite_leggings_netherite_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/gravitite_leggings", + "layer1": "minecraft:trims/items/leggings_trim_netherite" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/gravitite_leggings_quartz_trim.json b/src/generated/resources/assets/aether/models/item/gravitite_leggings_quartz_trim.json new file mode 100644 index 0000000000..4ff5034cb1 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/gravitite_leggings_quartz_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/gravitite_leggings", + "layer1": "minecraft:trims/items/leggings_trim_quartz" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/gravitite_leggings_redstone_trim.json b/src/generated/resources/assets/aether/models/item/gravitite_leggings_redstone_trim.json new file mode 100644 index 0000000000..b0b3974e95 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/gravitite_leggings_redstone_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/gravitite_leggings", + "layer1": "minecraft:trims/items/leggings_trim_redstone" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/iron_gloves.json b/src/generated/resources/assets/aether/models/item/iron_gloves.json index facffe5e9d..f0ced0f3f7 100644 --- a/src/generated/resources/assets/aether/models/item/iron_gloves.json +++ b/src/generated/resources/assets/aether/models/item/iron_gloves.json @@ -1,5 +1,67 @@ { "parent": "minecraft:item/generated", + "overrides": [ + { + "model": "aether:item/iron_gloves_quartz_trim", + "predicate": { + "minecraft:trim_type": 0.1 + } + }, + { + "model": "aether:item/iron_gloves_iron_trim", + "predicate": { + "minecraft:trim_type": 0.2 + } + }, + { + "model": "aether:item/iron_gloves_netherite_trim", + "predicate": { + "minecraft:trim_type": 0.3 + } + }, + { + "model": "aether:item/iron_gloves_redstone_trim", + "predicate": { + "minecraft:trim_type": 0.4 + } + }, + { + "model": "aether:item/iron_gloves_copper_trim", + "predicate": { + "minecraft:trim_type": 0.5 + } + }, + { + "model": "aether:item/iron_gloves_gold_trim", + "predicate": { + "minecraft:trim_type": 0.6 + } + }, + { + "model": "aether:item/iron_gloves_emerald_trim", + "predicate": { + "minecraft:trim_type": 0.7 + } + }, + { + "model": "aether:item/iron_gloves_diamond_trim", + "predicate": { + "minecraft:trim_type": 0.8 + } + }, + { + "model": "aether:item/iron_gloves_lapis_trim", + "predicate": { + "minecraft:trim_type": 0.9 + } + }, + { + "model": "aether:item/iron_gloves_amethyst_trim", + "predicate": { + "minecraft:trim_type": 1.0 + } + } + ], "textures": { "layer0": "aether:item/accessories/iron_gloves" } diff --git a/src/generated/resources/assets/aether/models/item/iron_gloves_amethyst_trim.json b/src/generated/resources/assets/aether/models/item/iron_gloves_amethyst_trim.json new file mode 100644 index 0000000000..9ba7d12f50 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/iron_gloves_amethyst_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/iron_gloves", + "layer1": "aether:trims/items/gloves_trim_amethyst" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/iron_gloves_copper_trim.json b/src/generated/resources/assets/aether/models/item/iron_gloves_copper_trim.json new file mode 100644 index 0000000000..e43669fa44 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/iron_gloves_copper_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/iron_gloves", + "layer1": "aether:trims/items/gloves_trim_copper" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/iron_gloves_diamond_trim.json b/src/generated/resources/assets/aether/models/item/iron_gloves_diamond_trim.json new file mode 100644 index 0000000000..65e2766e93 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/iron_gloves_diamond_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/iron_gloves", + "layer1": "aether:trims/items/gloves_trim_diamond" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/iron_gloves_emerald_trim.json b/src/generated/resources/assets/aether/models/item/iron_gloves_emerald_trim.json new file mode 100644 index 0000000000..4aa0cc499f --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/iron_gloves_emerald_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/iron_gloves", + "layer1": "aether:trims/items/gloves_trim_emerald" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/iron_gloves_gold_trim.json b/src/generated/resources/assets/aether/models/item/iron_gloves_gold_trim.json new file mode 100644 index 0000000000..0aa9c66a31 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/iron_gloves_gold_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/iron_gloves", + "layer1": "aether:trims/items/gloves_trim_gold" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/iron_gloves_iron_trim.json b/src/generated/resources/assets/aether/models/item/iron_gloves_iron_trim.json new file mode 100644 index 0000000000..35422ed7b2 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/iron_gloves_iron_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/iron_gloves", + "layer1": "aether:trims/items/gloves_trim_iron" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/iron_gloves_lapis_trim.json b/src/generated/resources/assets/aether/models/item/iron_gloves_lapis_trim.json new file mode 100644 index 0000000000..f8ce857d4f --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/iron_gloves_lapis_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/iron_gloves", + "layer1": "aether:trims/items/gloves_trim_lapis" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/iron_gloves_netherite_trim.json b/src/generated/resources/assets/aether/models/item/iron_gloves_netherite_trim.json new file mode 100644 index 0000000000..a816a17a50 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/iron_gloves_netherite_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/iron_gloves", + "layer1": "aether:trims/items/gloves_trim_netherite" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/iron_gloves_quartz_trim.json b/src/generated/resources/assets/aether/models/item/iron_gloves_quartz_trim.json new file mode 100644 index 0000000000..ae10969cbc --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/iron_gloves_quartz_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/iron_gloves", + "layer1": "aether:trims/items/gloves_trim_quartz" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/iron_gloves_redstone_trim.json b/src/generated/resources/assets/aether/models/item/iron_gloves_redstone_trim.json new file mode 100644 index 0000000000..b42b950864 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/iron_gloves_redstone_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/iron_gloves", + "layer1": "aether:trims/items/gloves_trim_redstone" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/leather_gloves.json b/src/generated/resources/assets/aether/models/item/leather_gloves.json index 43abe5c779..c9c4dbe1f3 100644 --- a/src/generated/resources/assets/aether/models/item/leather_gloves.json +++ b/src/generated/resources/assets/aether/models/item/leather_gloves.json @@ -1,5 +1,67 @@ { "parent": "minecraft:item/generated", + "overrides": [ + { + "model": "aether:item/leather_gloves_quartz_trim", + "predicate": { + "minecraft:trim_type": 0.1 + } + }, + { + "model": "aether:item/leather_gloves_iron_trim", + "predicate": { + "minecraft:trim_type": 0.2 + } + }, + { + "model": "aether:item/leather_gloves_netherite_trim", + "predicate": { + "minecraft:trim_type": 0.3 + } + }, + { + "model": "aether:item/leather_gloves_redstone_trim", + "predicate": { + "minecraft:trim_type": 0.4 + } + }, + { + "model": "aether:item/leather_gloves_copper_trim", + "predicate": { + "minecraft:trim_type": 0.5 + } + }, + { + "model": "aether:item/leather_gloves_gold_trim", + "predicate": { + "minecraft:trim_type": 0.6 + } + }, + { + "model": "aether:item/leather_gloves_emerald_trim", + "predicate": { + "minecraft:trim_type": 0.7 + } + }, + { + "model": "aether:item/leather_gloves_diamond_trim", + "predicate": { + "minecraft:trim_type": 0.8 + } + }, + { + "model": "aether:item/leather_gloves_lapis_trim", + "predicate": { + "minecraft:trim_type": 0.9 + } + }, + { + "model": "aether:item/leather_gloves_amethyst_trim", + "predicate": { + "minecraft:trim_type": 1.0 + } + } + ], "textures": { "layer0": "aether:item/accessories/leather_gloves", "layer1": "aether:item/accessories/leather_gloves_overlay" diff --git a/src/generated/resources/assets/aether/models/item/leather_gloves_amethyst_trim.json b/src/generated/resources/assets/aether/models/item/leather_gloves_amethyst_trim.json new file mode 100644 index 0000000000..063d55928f --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/leather_gloves_amethyst_trim.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/leather_gloves", + "layer1": "aether:item/accessories/leather_gloves_overlay", + "layer2": "aether:trims/items/gloves_trim_amethyst" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/leather_gloves_copper_trim.json b/src/generated/resources/assets/aether/models/item/leather_gloves_copper_trim.json new file mode 100644 index 0000000000..11c3cfad37 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/leather_gloves_copper_trim.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/leather_gloves", + "layer1": "aether:item/accessories/leather_gloves_overlay", + "layer2": "aether:trims/items/gloves_trim_copper" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/leather_gloves_diamond_trim.json b/src/generated/resources/assets/aether/models/item/leather_gloves_diamond_trim.json new file mode 100644 index 0000000000..10d9a39130 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/leather_gloves_diamond_trim.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/leather_gloves", + "layer1": "aether:item/accessories/leather_gloves_overlay", + "layer2": "aether:trims/items/gloves_trim_diamond" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/leather_gloves_emerald_trim.json b/src/generated/resources/assets/aether/models/item/leather_gloves_emerald_trim.json new file mode 100644 index 0000000000..607fb53ef9 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/leather_gloves_emerald_trim.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/leather_gloves", + "layer1": "aether:item/accessories/leather_gloves_overlay", + "layer2": "aether:trims/items/gloves_trim_emerald" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/leather_gloves_gold_trim.json b/src/generated/resources/assets/aether/models/item/leather_gloves_gold_trim.json new file mode 100644 index 0000000000..fff412a0e4 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/leather_gloves_gold_trim.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/leather_gloves", + "layer1": "aether:item/accessories/leather_gloves_overlay", + "layer2": "aether:trims/items/gloves_trim_gold" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/leather_gloves_iron_trim.json b/src/generated/resources/assets/aether/models/item/leather_gloves_iron_trim.json new file mode 100644 index 0000000000..457da6dc08 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/leather_gloves_iron_trim.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/leather_gloves", + "layer1": "aether:item/accessories/leather_gloves_overlay", + "layer2": "aether:trims/items/gloves_trim_iron" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/leather_gloves_lapis_trim.json b/src/generated/resources/assets/aether/models/item/leather_gloves_lapis_trim.json new file mode 100644 index 0000000000..dd0e1acb45 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/leather_gloves_lapis_trim.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/leather_gloves", + "layer1": "aether:item/accessories/leather_gloves_overlay", + "layer2": "aether:trims/items/gloves_trim_lapis" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/leather_gloves_netherite_trim.json b/src/generated/resources/assets/aether/models/item/leather_gloves_netherite_trim.json new file mode 100644 index 0000000000..fbb202de42 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/leather_gloves_netherite_trim.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/leather_gloves", + "layer1": "aether:item/accessories/leather_gloves_overlay", + "layer2": "aether:trims/items/gloves_trim_netherite" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/leather_gloves_quartz_trim.json b/src/generated/resources/assets/aether/models/item/leather_gloves_quartz_trim.json new file mode 100644 index 0000000000..0555053d43 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/leather_gloves_quartz_trim.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/leather_gloves", + "layer1": "aether:item/accessories/leather_gloves_overlay", + "layer2": "aether:trims/items/gloves_trim_quartz" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/leather_gloves_redstone_trim.json b/src/generated/resources/assets/aether/models/item/leather_gloves_redstone_trim.json new file mode 100644 index 0000000000..45b74c71de --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/leather_gloves_redstone_trim.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/leather_gloves", + "layer1": "aether:item/accessories/leather_gloves_overlay", + "layer2": "aether:trims/items/gloves_trim_redstone" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/neptune_boots.json b/src/generated/resources/assets/aether/models/item/neptune_boots.json index 1012a7edaa..5736c67f77 100644 --- a/src/generated/resources/assets/aether/models/item/neptune_boots.json +++ b/src/generated/resources/assets/aether/models/item/neptune_boots.json @@ -1,5 +1,67 @@ { "parent": "minecraft:item/generated", + "overrides": [ + { + "model": "aether:item/neptune_boots_quartz_trim", + "predicate": { + "minecraft:trim_type": 0.1 + } + }, + { + "model": "aether:item/neptune_boots_iron_trim", + "predicate": { + "minecraft:trim_type": 0.2 + } + }, + { + "model": "aether:item/neptune_boots_netherite_trim", + "predicate": { + "minecraft:trim_type": 0.3 + } + }, + { + "model": "aether:item/neptune_boots_redstone_trim", + "predicate": { + "minecraft:trim_type": 0.4 + } + }, + { + "model": "aether:item/neptune_boots_copper_trim", + "predicate": { + "minecraft:trim_type": 0.5 + } + }, + { + "model": "aether:item/neptune_boots_gold_trim", + "predicate": { + "minecraft:trim_type": 0.6 + } + }, + { + "model": "aether:item/neptune_boots_emerald_trim", + "predicate": { + "minecraft:trim_type": 0.7 + } + }, + { + "model": "aether:item/neptune_boots_diamond_trim", + "predicate": { + "minecraft:trim_type": 0.8 + } + }, + { + "model": "aether:item/neptune_boots_lapis_trim", + "predicate": { + "minecraft:trim_type": 0.9 + } + }, + { + "model": "aether:item/neptune_boots_amethyst_trim", + "predicate": { + "minecraft:trim_type": 1.0 + } + } + ], "textures": { "layer0": "aether:item/armor/neptune_boots" } diff --git a/src/generated/resources/assets/aether/models/item/neptune_boots_amethyst_trim.json b/src/generated/resources/assets/aether/models/item/neptune_boots_amethyst_trim.json new file mode 100644 index 0000000000..6e08917b65 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/neptune_boots_amethyst_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/neptune_boots", + "layer1": "minecraft:trims/items/boots_trim_amethyst" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/neptune_boots_copper_trim.json b/src/generated/resources/assets/aether/models/item/neptune_boots_copper_trim.json new file mode 100644 index 0000000000..f61b2490c3 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/neptune_boots_copper_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/neptune_boots", + "layer1": "minecraft:trims/items/boots_trim_copper" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/neptune_boots_diamond_trim.json b/src/generated/resources/assets/aether/models/item/neptune_boots_diamond_trim.json new file mode 100644 index 0000000000..7373ef970c --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/neptune_boots_diamond_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/neptune_boots", + "layer1": "minecraft:trims/items/boots_trim_diamond" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/neptune_boots_emerald_trim.json b/src/generated/resources/assets/aether/models/item/neptune_boots_emerald_trim.json new file mode 100644 index 0000000000..2553615778 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/neptune_boots_emerald_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/neptune_boots", + "layer1": "minecraft:trims/items/boots_trim_emerald" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/neptune_boots_gold_trim.json b/src/generated/resources/assets/aether/models/item/neptune_boots_gold_trim.json new file mode 100644 index 0000000000..e02e388c74 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/neptune_boots_gold_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/neptune_boots", + "layer1": "minecraft:trims/items/boots_trim_gold" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/neptune_boots_iron_trim.json b/src/generated/resources/assets/aether/models/item/neptune_boots_iron_trim.json new file mode 100644 index 0000000000..84725f3b1a --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/neptune_boots_iron_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/neptune_boots", + "layer1": "minecraft:trims/items/boots_trim_iron" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/neptune_boots_lapis_trim.json b/src/generated/resources/assets/aether/models/item/neptune_boots_lapis_trim.json new file mode 100644 index 0000000000..58d63f3400 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/neptune_boots_lapis_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/neptune_boots", + "layer1": "minecraft:trims/items/boots_trim_lapis" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/neptune_boots_netherite_trim.json b/src/generated/resources/assets/aether/models/item/neptune_boots_netherite_trim.json new file mode 100644 index 0000000000..2968b0accc --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/neptune_boots_netherite_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/neptune_boots", + "layer1": "minecraft:trims/items/boots_trim_netherite" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/neptune_boots_quartz_trim.json b/src/generated/resources/assets/aether/models/item/neptune_boots_quartz_trim.json new file mode 100644 index 0000000000..fd986e5522 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/neptune_boots_quartz_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/neptune_boots", + "layer1": "minecraft:trims/items/boots_trim_quartz" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/neptune_boots_redstone_trim.json b/src/generated/resources/assets/aether/models/item/neptune_boots_redstone_trim.json new file mode 100644 index 0000000000..f237b344c2 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/neptune_boots_redstone_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/neptune_boots", + "layer1": "minecraft:trims/items/boots_trim_redstone" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/neptune_chestplate.json b/src/generated/resources/assets/aether/models/item/neptune_chestplate.json index b509a7fe0d..58ec739a7a 100644 --- a/src/generated/resources/assets/aether/models/item/neptune_chestplate.json +++ b/src/generated/resources/assets/aether/models/item/neptune_chestplate.json @@ -1,5 +1,67 @@ { "parent": "minecraft:item/generated", + "overrides": [ + { + "model": "aether:item/neptune_chestplate_quartz_trim", + "predicate": { + "minecraft:trim_type": 0.1 + } + }, + { + "model": "aether:item/neptune_chestplate_iron_trim", + "predicate": { + "minecraft:trim_type": 0.2 + } + }, + { + "model": "aether:item/neptune_chestplate_netherite_trim", + "predicate": { + "minecraft:trim_type": 0.3 + } + }, + { + "model": "aether:item/neptune_chestplate_redstone_trim", + "predicate": { + "minecraft:trim_type": 0.4 + } + }, + { + "model": "aether:item/neptune_chestplate_copper_trim", + "predicate": { + "minecraft:trim_type": 0.5 + } + }, + { + "model": "aether:item/neptune_chestplate_gold_trim", + "predicate": { + "minecraft:trim_type": 0.6 + } + }, + { + "model": "aether:item/neptune_chestplate_emerald_trim", + "predicate": { + "minecraft:trim_type": 0.7 + } + }, + { + "model": "aether:item/neptune_chestplate_diamond_trim", + "predicate": { + "minecraft:trim_type": 0.8 + } + }, + { + "model": "aether:item/neptune_chestplate_lapis_trim", + "predicate": { + "minecraft:trim_type": 0.9 + } + }, + { + "model": "aether:item/neptune_chestplate_amethyst_trim", + "predicate": { + "minecraft:trim_type": 1.0 + } + } + ], "textures": { "layer0": "aether:item/armor/neptune_chestplate" } diff --git a/src/generated/resources/assets/aether/models/item/neptune_chestplate_amethyst_trim.json b/src/generated/resources/assets/aether/models/item/neptune_chestplate_amethyst_trim.json new file mode 100644 index 0000000000..d5bdd5f33e --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/neptune_chestplate_amethyst_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/neptune_chestplate", + "layer1": "minecraft:trims/items/chestplate_trim_amethyst" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/neptune_chestplate_copper_trim.json b/src/generated/resources/assets/aether/models/item/neptune_chestplate_copper_trim.json new file mode 100644 index 0000000000..f4fba53be4 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/neptune_chestplate_copper_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/neptune_chestplate", + "layer1": "minecraft:trims/items/chestplate_trim_copper" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/neptune_chestplate_diamond_trim.json b/src/generated/resources/assets/aether/models/item/neptune_chestplate_diamond_trim.json new file mode 100644 index 0000000000..29dc3b08f4 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/neptune_chestplate_diamond_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/neptune_chestplate", + "layer1": "minecraft:trims/items/chestplate_trim_diamond" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/neptune_chestplate_emerald_trim.json b/src/generated/resources/assets/aether/models/item/neptune_chestplate_emerald_trim.json new file mode 100644 index 0000000000..3fd17a96ad --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/neptune_chestplate_emerald_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/neptune_chestplate", + "layer1": "minecraft:trims/items/chestplate_trim_emerald" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/neptune_chestplate_gold_trim.json b/src/generated/resources/assets/aether/models/item/neptune_chestplate_gold_trim.json new file mode 100644 index 0000000000..6a669ea8b9 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/neptune_chestplate_gold_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/neptune_chestplate", + "layer1": "minecraft:trims/items/chestplate_trim_gold" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/neptune_chestplate_iron_trim.json b/src/generated/resources/assets/aether/models/item/neptune_chestplate_iron_trim.json new file mode 100644 index 0000000000..adf583348e --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/neptune_chestplate_iron_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/neptune_chestplate", + "layer1": "minecraft:trims/items/chestplate_trim_iron" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/neptune_chestplate_lapis_trim.json b/src/generated/resources/assets/aether/models/item/neptune_chestplate_lapis_trim.json new file mode 100644 index 0000000000..1b11a93b62 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/neptune_chestplate_lapis_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/neptune_chestplate", + "layer1": "minecraft:trims/items/chestplate_trim_lapis" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/neptune_chestplate_netherite_trim.json b/src/generated/resources/assets/aether/models/item/neptune_chestplate_netherite_trim.json new file mode 100644 index 0000000000..453614199f --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/neptune_chestplate_netherite_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/neptune_chestplate", + "layer1": "minecraft:trims/items/chestplate_trim_netherite" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/neptune_chestplate_quartz_trim.json b/src/generated/resources/assets/aether/models/item/neptune_chestplate_quartz_trim.json new file mode 100644 index 0000000000..a868c95357 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/neptune_chestplate_quartz_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/neptune_chestplate", + "layer1": "minecraft:trims/items/chestplate_trim_quartz" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/neptune_chestplate_redstone_trim.json b/src/generated/resources/assets/aether/models/item/neptune_chestplate_redstone_trim.json new file mode 100644 index 0000000000..9bfc3b1cbe --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/neptune_chestplate_redstone_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/neptune_chestplate", + "layer1": "minecraft:trims/items/chestplate_trim_redstone" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/neptune_gloves.json b/src/generated/resources/assets/aether/models/item/neptune_gloves.json index 24381f63a8..3af43a72a5 100644 --- a/src/generated/resources/assets/aether/models/item/neptune_gloves.json +++ b/src/generated/resources/assets/aether/models/item/neptune_gloves.json @@ -1,5 +1,67 @@ { "parent": "minecraft:item/generated", + "overrides": [ + { + "model": "aether:item/neptune_gloves_quartz_trim", + "predicate": { + "minecraft:trim_type": 0.1 + } + }, + { + "model": "aether:item/neptune_gloves_iron_trim", + "predicate": { + "minecraft:trim_type": 0.2 + } + }, + { + "model": "aether:item/neptune_gloves_netherite_trim", + "predicate": { + "minecraft:trim_type": 0.3 + } + }, + { + "model": "aether:item/neptune_gloves_redstone_trim", + "predicate": { + "minecraft:trim_type": 0.4 + } + }, + { + "model": "aether:item/neptune_gloves_copper_trim", + "predicate": { + "minecraft:trim_type": 0.5 + } + }, + { + "model": "aether:item/neptune_gloves_gold_trim", + "predicate": { + "minecraft:trim_type": 0.6 + } + }, + { + "model": "aether:item/neptune_gloves_emerald_trim", + "predicate": { + "minecraft:trim_type": 0.7 + } + }, + { + "model": "aether:item/neptune_gloves_diamond_trim", + "predicate": { + "minecraft:trim_type": 0.8 + } + }, + { + "model": "aether:item/neptune_gloves_lapis_trim", + "predicate": { + "minecraft:trim_type": 0.9 + } + }, + { + "model": "aether:item/neptune_gloves_amethyst_trim", + "predicate": { + "minecraft:trim_type": 1.0 + } + } + ], "textures": { "layer0": "aether:item/accessories/neptune_gloves" } diff --git a/src/generated/resources/assets/aether/models/item/neptune_gloves_amethyst_trim.json b/src/generated/resources/assets/aether/models/item/neptune_gloves_amethyst_trim.json new file mode 100644 index 0000000000..538f75c905 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/neptune_gloves_amethyst_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/neptune_gloves", + "layer1": "aether:trims/items/gloves_trim_amethyst" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/neptune_gloves_copper_trim.json b/src/generated/resources/assets/aether/models/item/neptune_gloves_copper_trim.json new file mode 100644 index 0000000000..557bacbea1 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/neptune_gloves_copper_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/neptune_gloves", + "layer1": "aether:trims/items/gloves_trim_copper" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/neptune_gloves_diamond_trim.json b/src/generated/resources/assets/aether/models/item/neptune_gloves_diamond_trim.json new file mode 100644 index 0000000000..6e0a04d48e --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/neptune_gloves_diamond_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/neptune_gloves", + "layer1": "aether:trims/items/gloves_trim_diamond" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/neptune_gloves_emerald_trim.json b/src/generated/resources/assets/aether/models/item/neptune_gloves_emerald_trim.json new file mode 100644 index 0000000000..47ba677e2a --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/neptune_gloves_emerald_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/neptune_gloves", + "layer1": "aether:trims/items/gloves_trim_emerald" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/neptune_gloves_gold_trim.json b/src/generated/resources/assets/aether/models/item/neptune_gloves_gold_trim.json new file mode 100644 index 0000000000..3ea2c7af18 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/neptune_gloves_gold_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/neptune_gloves", + "layer1": "aether:trims/items/gloves_trim_gold" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/neptune_gloves_iron_trim.json b/src/generated/resources/assets/aether/models/item/neptune_gloves_iron_trim.json new file mode 100644 index 0000000000..d2e151a333 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/neptune_gloves_iron_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/neptune_gloves", + "layer1": "aether:trims/items/gloves_trim_iron" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/neptune_gloves_lapis_trim.json b/src/generated/resources/assets/aether/models/item/neptune_gloves_lapis_trim.json new file mode 100644 index 0000000000..b3e3b70cab --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/neptune_gloves_lapis_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/neptune_gloves", + "layer1": "aether:trims/items/gloves_trim_lapis" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/neptune_gloves_netherite_trim.json b/src/generated/resources/assets/aether/models/item/neptune_gloves_netherite_trim.json new file mode 100644 index 0000000000..8507b9b04d --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/neptune_gloves_netherite_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/neptune_gloves", + "layer1": "aether:trims/items/gloves_trim_netherite" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/neptune_gloves_quartz_trim.json b/src/generated/resources/assets/aether/models/item/neptune_gloves_quartz_trim.json new file mode 100644 index 0000000000..b07efdd919 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/neptune_gloves_quartz_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/neptune_gloves", + "layer1": "aether:trims/items/gloves_trim_quartz" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/neptune_gloves_redstone_trim.json b/src/generated/resources/assets/aether/models/item/neptune_gloves_redstone_trim.json new file mode 100644 index 0000000000..aee62edad9 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/neptune_gloves_redstone_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/neptune_gloves", + "layer1": "aether:trims/items/gloves_trim_redstone" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/neptune_helmet.json b/src/generated/resources/assets/aether/models/item/neptune_helmet.json index d9b92c0c85..4a0bdc940e 100644 --- a/src/generated/resources/assets/aether/models/item/neptune_helmet.json +++ b/src/generated/resources/assets/aether/models/item/neptune_helmet.json @@ -1,5 +1,67 @@ { "parent": "minecraft:item/generated", + "overrides": [ + { + "model": "aether:item/neptune_helmet_quartz_trim", + "predicate": { + "minecraft:trim_type": 0.1 + } + }, + { + "model": "aether:item/neptune_helmet_iron_trim", + "predicate": { + "minecraft:trim_type": 0.2 + } + }, + { + "model": "aether:item/neptune_helmet_netherite_trim", + "predicate": { + "minecraft:trim_type": 0.3 + } + }, + { + "model": "aether:item/neptune_helmet_redstone_trim", + "predicate": { + "minecraft:trim_type": 0.4 + } + }, + { + "model": "aether:item/neptune_helmet_copper_trim", + "predicate": { + "minecraft:trim_type": 0.5 + } + }, + { + "model": "aether:item/neptune_helmet_gold_trim", + "predicate": { + "minecraft:trim_type": 0.6 + } + }, + { + "model": "aether:item/neptune_helmet_emerald_trim", + "predicate": { + "minecraft:trim_type": 0.7 + } + }, + { + "model": "aether:item/neptune_helmet_diamond_trim", + "predicate": { + "minecraft:trim_type": 0.8 + } + }, + { + "model": "aether:item/neptune_helmet_lapis_trim", + "predicate": { + "minecraft:trim_type": 0.9 + } + }, + { + "model": "aether:item/neptune_helmet_amethyst_trim", + "predicate": { + "minecraft:trim_type": 1.0 + } + } + ], "textures": { "layer0": "aether:item/armor/neptune_helmet" } diff --git a/src/generated/resources/assets/aether/models/item/neptune_helmet_amethyst_trim.json b/src/generated/resources/assets/aether/models/item/neptune_helmet_amethyst_trim.json new file mode 100644 index 0000000000..bd0fed8c63 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/neptune_helmet_amethyst_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/neptune_helmet", + "layer1": "minecraft:trims/items/helmet_trim_amethyst" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/neptune_helmet_copper_trim.json b/src/generated/resources/assets/aether/models/item/neptune_helmet_copper_trim.json new file mode 100644 index 0000000000..8615b58181 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/neptune_helmet_copper_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/neptune_helmet", + "layer1": "minecraft:trims/items/helmet_trim_copper" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/neptune_helmet_diamond_trim.json b/src/generated/resources/assets/aether/models/item/neptune_helmet_diamond_trim.json new file mode 100644 index 0000000000..be7e9121f6 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/neptune_helmet_diamond_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/neptune_helmet", + "layer1": "minecraft:trims/items/helmet_trim_diamond" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/neptune_helmet_emerald_trim.json b/src/generated/resources/assets/aether/models/item/neptune_helmet_emerald_trim.json new file mode 100644 index 0000000000..ce6f2503a8 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/neptune_helmet_emerald_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/neptune_helmet", + "layer1": "minecraft:trims/items/helmet_trim_emerald" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/neptune_helmet_gold_trim.json b/src/generated/resources/assets/aether/models/item/neptune_helmet_gold_trim.json new file mode 100644 index 0000000000..0afbf5dc3d --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/neptune_helmet_gold_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/neptune_helmet", + "layer1": "minecraft:trims/items/helmet_trim_gold" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/neptune_helmet_iron_trim.json b/src/generated/resources/assets/aether/models/item/neptune_helmet_iron_trim.json new file mode 100644 index 0000000000..1d1183d1b6 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/neptune_helmet_iron_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/neptune_helmet", + "layer1": "minecraft:trims/items/helmet_trim_iron" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/neptune_helmet_lapis_trim.json b/src/generated/resources/assets/aether/models/item/neptune_helmet_lapis_trim.json new file mode 100644 index 0000000000..0e0fd4b676 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/neptune_helmet_lapis_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/neptune_helmet", + "layer1": "minecraft:trims/items/helmet_trim_lapis" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/neptune_helmet_netherite_trim.json b/src/generated/resources/assets/aether/models/item/neptune_helmet_netherite_trim.json new file mode 100644 index 0000000000..3b23b46176 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/neptune_helmet_netherite_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/neptune_helmet", + "layer1": "minecraft:trims/items/helmet_trim_netherite" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/neptune_helmet_quartz_trim.json b/src/generated/resources/assets/aether/models/item/neptune_helmet_quartz_trim.json new file mode 100644 index 0000000000..c266da37c2 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/neptune_helmet_quartz_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/neptune_helmet", + "layer1": "minecraft:trims/items/helmet_trim_quartz" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/neptune_helmet_redstone_trim.json b/src/generated/resources/assets/aether/models/item/neptune_helmet_redstone_trim.json new file mode 100644 index 0000000000..fef5a6c80c --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/neptune_helmet_redstone_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/neptune_helmet", + "layer1": "minecraft:trims/items/helmet_trim_redstone" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/neptune_leggings.json b/src/generated/resources/assets/aether/models/item/neptune_leggings.json index 91c9bb7856..93137aa817 100644 --- a/src/generated/resources/assets/aether/models/item/neptune_leggings.json +++ b/src/generated/resources/assets/aether/models/item/neptune_leggings.json @@ -1,5 +1,67 @@ { "parent": "minecraft:item/generated", + "overrides": [ + { + "model": "aether:item/neptune_leggings_quartz_trim", + "predicate": { + "minecraft:trim_type": 0.1 + } + }, + { + "model": "aether:item/neptune_leggings_iron_trim", + "predicate": { + "minecraft:trim_type": 0.2 + } + }, + { + "model": "aether:item/neptune_leggings_netherite_trim", + "predicate": { + "minecraft:trim_type": 0.3 + } + }, + { + "model": "aether:item/neptune_leggings_redstone_trim", + "predicate": { + "minecraft:trim_type": 0.4 + } + }, + { + "model": "aether:item/neptune_leggings_copper_trim", + "predicate": { + "minecraft:trim_type": 0.5 + } + }, + { + "model": "aether:item/neptune_leggings_gold_trim", + "predicate": { + "minecraft:trim_type": 0.6 + } + }, + { + "model": "aether:item/neptune_leggings_emerald_trim", + "predicate": { + "minecraft:trim_type": 0.7 + } + }, + { + "model": "aether:item/neptune_leggings_diamond_trim", + "predicate": { + "minecraft:trim_type": 0.8 + } + }, + { + "model": "aether:item/neptune_leggings_lapis_trim", + "predicate": { + "minecraft:trim_type": 0.9 + } + }, + { + "model": "aether:item/neptune_leggings_amethyst_trim", + "predicate": { + "minecraft:trim_type": 1.0 + } + } + ], "textures": { "layer0": "aether:item/armor/neptune_leggings" } diff --git a/src/generated/resources/assets/aether/models/item/neptune_leggings_amethyst_trim.json b/src/generated/resources/assets/aether/models/item/neptune_leggings_amethyst_trim.json new file mode 100644 index 0000000000..b6b7f333f2 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/neptune_leggings_amethyst_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/neptune_leggings", + "layer1": "minecraft:trims/items/leggings_trim_amethyst" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/neptune_leggings_copper_trim.json b/src/generated/resources/assets/aether/models/item/neptune_leggings_copper_trim.json new file mode 100644 index 0000000000..7e87be65ea --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/neptune_leggings_copper_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/neptune_leggings", + "layer1": "minecraft:trims/items/leggings_trim_copper" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/neptune_leggings_diamond_trim.json b/src/generated/resources/assets/aether/models/item/neptune_leggings_diamond_trim.json new file mode 100644 index 0000000000..80e9c37f51 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/neptune_leggings_diamond_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/neptune_leggings", + "layer1": "minecraft:trims/items/leggings_trim_diamond" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/neptune_leggings_emerald_trim.json b/src/generated/resources/assets/aether/models/item/neptune_leggings_emerald_trim.json new file mode 100644 index 0000000000..4439dbc673 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/neptune_leggings_emerald_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/neptune_leggings", + "layer1": "minecraft:trims/items/leggings_trim_emerald" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/neptune_leggings_gold_trim.json b/src/generated/resources/assets/aether/models/item/neptune_leggings_gold_trim.json new file mode 100644 index 0000000000..f563f887e0 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/neptune_leggings_gold_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/neptune_leggings", + "layer1": "minecraft:trims/items/leggings_trim_gold" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/neptune_leggings_iron_trim.json b/src/generated/resources/assets/aether/models/item/neptune_leggings_iron_trim.json new file mode 100644 index 0000000000..54c47a0988 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/neptune_leggings_iron_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/neptune_leggings", + "layer1": "minecraft:trims/items/leggings_trim_iron" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/neptune_leggings_lapis_trim.json b/src/generated/resources/assets/aether/models/item/neptune_leggings_lapis_trim.json new file mode 100644 index 0000000000..1fe258788d --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/neptune_leggings_lapis_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/neptune_leggings", + "layer1": "minecraft:trims/items/leggings_trim_lapis" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/neptune_leggings_netherite_trim.json b/src/generated/resources/assets/aether/models/item/neptune_leggings_netherite_trim.json new file mode 100644 index 0000000000..4d0d371885 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/neptune_leggings_netherite_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/neptune_leggings", + "layer1": "minecraft:trims/items/leggings_trim_netherite" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/neptune_leggings_quartz_trim.json b/src/generated/resources/assets/aether/models/item/neptune_leggings_quartz_trim.json new file mode 100644 index 0000000000..2002ae8f32 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/neptune_leggings_quartz_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/neptune_leggings", + "layer1": "minecraft:trims/items/leggings_trim_quartz" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/neptune_leggings_redstone_trim.json b/src/generated/resources/assets/aether/models/item/neptune_leggings_redstone_trim.json new file mode 100644 index 0000000000..3118f8f35b --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/neptune_leggings_redstone_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/neptune_leggings", + "layer1": "minecraft:trims/items/leggings_trim_redstone" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/netherite_gloves.json b/src/generated/resources/assets/aether/models/item/netherite_gloves.json index aa3f8c5bc0..3c5ecb2339 100644 --- a/src/generated/resources/assets/aether/models/item/netherite_gloves.json +++ b/src/generated/resources/assets/aether/models/item/netherite_gloves.json @@ -1,5 +1,67 @@ { "parent": "minecraft:item/generated", + "overrides": [ + { + "model": "aether:item/netherite_gloves_quartz_trim", + "predicate": { + "minecraft:trim_type": 0.1 + } + }, + { + "model": "aether:item/netherite_gloves_iron_trim", + "predicate": { + "minecraft:trim_type": 0.2 + } + }, + { + "model": "aether:item/netherite_gloves_netherite_trim", + "predicate": { + "minecraft:trim_type": 0.3 + } + }, + { + "model": "aether:item/netherite_gloves_redstone_trim", + "predicate": { + "minecraft:trim_type": 0.4 + } + }, + { + "model": "aether:item/netherite_gloves_copper_trim", + "predicate": { + "minecraft:trim_type": 0.5 + } + }, + { + "model": "aether:item/netherite_gloves_gold_trim", + "predicate": { + "minecraft:trim_type": 0.6 + } + }, + { + "model": "aether:item/netherite_gloves_emerald_trim", + "predicate": { + "minecraft:trim_type": 0.7 + } + }, + { + "model": "aether:item/netherite_gloves_diamond_trim", + "predicate": { + "minecraft:trim_type": 0.8 + } + }, + { + "model": "aether:item/netherite_gloves_lapis_trim", + "predicate": { + "minecraft:trim_type": 0.9 + } + }, + { + "model": "aether:item/netherite_gloves_amethyst_trim", + "predicate": { + "minecraft:trim_type": 1.0 + } + } + ], "textures": { "layer0": "aether:item/accessories/netherite_gloves" } diff --git a/src/generated/resources/assets/aether/models/item/netherite_gloves_amethyst_trim.json b/src/generated/resources/assets/aether/models/item/netherite_gloves_amethyst_trim.json new file mode 100644 index 0000000000..5d2ed7c0a8 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/netherite_gloves_amethyst_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/netherite_gloves", + "layer1": "aether:trims/items/gloves_trim_amethyst" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/netherite_gloves_copper_trim.json b/src/generated/resources/assets/aether/models/item/netherite_gloves_copper_trim.json new file mode 100644 index 0000000000..a163c75a4a --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/netherite_gloves_copper_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/netherite_gloves", + "layer1": "aether:trims/items/gloves_trim_copper" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/netherite_gloves_diamond_trim.json b/src/generated/resources/assets/aether/models/item/netherite_gloves_diamond_trim.json new file mode 100644 index 0000000000..4d476a7a65 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/netherite_gloves_diamond_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/netherite_gloves", + "layer1": "aether:trims/items/gloves_trim_diamond" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/netherite_gloves_emerald_trim.json b/src/generated/resources/assets/aether/models/item/netherite_gloves_emerald_trim.json new file mode 100644 index 0000000000..30e68b86c8 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/netherite_gloves_emerald_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/netherite_gloves", + "layer1": "aether:trims/items/gloves_trim_emerald" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/netherite_gloves_gold_trim.json b/src/generated/resources/assets/aether/models/item/netherite_gloves_gold_trim.json new file mode 100644 index 0000000000..20bf7b6182 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/netherite_gloves_gold_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/netherite_gloves", + "layer1": "aether:trims/items/gloves_trim_gold" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/netherite_gloves_iron_trim.json b/src/generated/resources/assets/aether/models/item/netherite_gloves_iron_trim.json new file mode 100644 index 0000000000..e97847a86d --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/netherite_gloves_iron_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/netherite_gloves", + "layer1": "aether:trims/items/gloves_trim_iron" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/netherite_gloves_lapis_trim.json b/src/generated/resources/assets/aether/models/item/netherite_gloves_lapis_trim.json new file mode 100644 index 0000000000..259e1546ab --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/netherite_gloves_lapis_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/netherite_gloves", + "layer1": "aether:trims/items/gloves_trim_lapis" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/netherite_gloves_netherite_trim.json b/src/generated/resources/assets/aether/models/item/netherite_gloves_netherite_trim.json new file mode 100644 index 0000000000..5ad4bfed4c --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/netherite_gloves_netherite_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/netherite_gloves", + "layer1": "aether:trims/items/gloves_trim_netherite" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/netherite_gloves_quartz_trim.json b/src/generated/resources/assets/aether/models/item/netherite_gloves_quartz_trim.json new file mode 100644 index 0000000000..1733a6a6bc --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/netherite_gloves_quartz_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/netherite_gloves", + "layer1": "aether:trims/items/gloves_trim_quartz" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/netherite_gloves_redstone_trim.json b/src/generated/resources/assets/aether/models/item/netherite_gloves_redstone_trim.json new file mode 100644 index 0000000000..3b5545c9c1 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/netherite_gloves_redstone_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/netherite_gloves", + "layer1": "aether:trims/items/gloves_trim_redstone" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/obsidian_boots.json b/src/generated/resources/assets/aether/models/item/obsidian_boots.json index 018e0951f2..3524bb6f01 100644 --- a/src/generated/resources/assets/aether/models/item/obsidian_boots.json +++ b/src/generated/resources/assets/aether/models/item/obsidian_boots.json @@ -1,5 +1,67 @@ { "parent": "minecraft:item/generated", + "overrides": [ + { + "model": "aether:item/obsidian_boots_quartz_trim", + "predicate": { + "minecraft:trim_type": 0.1 + } + }, + { + "model": "aether:item/obsidian_boots_iron_trim", + "predicate": { + "minecraft:trim_type": 0.2 + } + }, + { + "model": "aether:item/obsidian_boots_netherite_trim", + "predicate": { + "minecraft:trim_type": 0.3 + } + }, + { + "model": "aether:item/obsidian_boots_redstone_trim", + "predicate": { + "minecraft:trim_type": 0.4 + } + }, + { + "model": "aether:item/obsidian_boots_copper_trim", + "predicate": { + "minecraft:trim_type": 0.5 + } + }, + { + "model": "aether:item/obsidian_boots_gold_trim", + "predicate": { + "minecraft:trim_type": 0.6 + } + }, + { + "model": "aether:item/obsidian_boots_emerald_trim", + "predicate": { + "minecraft:trim_type": 0.7 + } + }, + { + "model": "aether:item/obsidian_boots_diamond_trim", + "predicate": { + "minecraft:trim_type": 0.8 + } + }, + { + "model": "aether:item/obsidian_boots_lapis_trim", + "predicate": { + "minecraft:trim_type": 0.9 + } + }, + { + "model": "aether:item/obsidian_boots_amethyst_trim", + "predicate": { + "minecraft:trim_type": 1.0 + } + } + ], "textures": { "layer0": "aether:item/armor/obsidian_boots" } diff --git a/src/generated/resources/assets/aether/models/item/obsidian_boots_amethyst_trim.json b/src/generated/resources/assets/aether/models/item/obsidian_boots_amethyst_trim.json new file mode 100644 index 0000000000..5e5b27582b --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/obsidian_boots_amethyst_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/obsidian_boots", + "layer1": "minecraft:trims/items/boots_trim_amethyst" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/obsidian_boots_copper_trim.json b/src/generated/resources/assets/aether/models/item/obsidian_boots_copper_trim.json new file mode 100644 index 0000000000..9865fbf599 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/obsidian_boots_copper_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/obsidian_boots", + "layer1": "minecraft:trims/items/boots_trim_copper" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/obsidian_boots_diamond_trim.json b/src/generated/resources/assets/aether/models/item/obsidian_boots_diamond_trim.json new file mode 100644 index 0000000000..b771b7ef81 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/obsidian_boots_diamond_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/obsidian_boots", + "layer1": "minecraft:trims/items/boots_trim_diamond" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/obsidian_boots_emerald_trim.json b/src/generated/resources/assets/aether/models/item/obsidian_boots_emerald_trim.json new file mode 100644 index 0000000000..4fa116bf50 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/obsidian_boots_emerald_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/obsidian_boots", + "layer1": "minecraft:trims/items/boots_trim_emerald" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/obsidian_boots_gold_trim.json b/src/generated/resources/assets/aether/models/item/obsidian_boots_gold_trim.json new file mode 100644 index 0000000000..e05375c928 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/obsidian_boots_gold_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/obsidian_boots", + "layer1": "minecraft:trims/items/boots_trim_gold" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/obsidian_boots_iron_trim.json b/src/generated/resources/assets/aether/models/item/obsidian_boots_iron_trim.json new file mode 100644 index 0000000000..be53351543 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/obsidian_boots_iron_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/obsidian_boots", + "layer1": "minecraft:trims/items/boots_trim_iron" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/obsidian_boots_lapis_trim.json b/src/generated/resources/assets/aether/models/item/obsidian_boots_lapis_trim.json new file mode 100644 index 0000000000..772d7980e4 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/obsidian_boots_lapis_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/obsidian_boots", + "layer1": "minecraft:trims/items/boots_trim_lapis" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/obsidian_boots_netherite_trim.json b/src/generated/resources/assets/aether/models/item/obsidian_boots_netherite_trim.json new file mode 100644 index 0000000000..e4c41b0841 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/obsidian_boots_netherite_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/obsidian_boots", + "layer1": "minecraft:trims/items/boots_trim_netherite" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/obsidian_boots_quartz_trim.json b/src/generated/resources/assets/aether/models/item/obsidian_boots_quartz_trim.json new file mode 100644 index 0000000000..43e6fd318a --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/obsidian_boots_quartz_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/obsidian_boots", + "layer1": "minecraft:trims/items/boots_trim_quartz" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/obsidian_boots_redstone_trim.json b/src/generated/resources/assets/aether/models/item/obsidian_boots_redstone_trim.json new file mode 100644 index 0000000000..c03dc3659c --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/obsidian_boots_redstone_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/obsidian_boots", + "layer1": "minecraft:trims/items/boots_trim_redstone" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/obsidian_chestplate.json b/src/generated/resources/assets/aether/models/item/obsidian_chestplate.json index 2365bd1eb1..e353f5e880 100644 --- a/src/generated/resources/assets/aether/models/item/obsidian_chestplate.json +++ b/src/generated/resources/assets/aether/models/item/obsidian_chestplate.json @@ -1,5 +1,67 @@ { "parent": "minecraft:item/generated", + "overrides": [ + { + "model": "aether:item/obsidian_chestplate_quartz_trim", + "predicate": { + "minecraft:trim_type": 0.1 + } + }, + { + "model": "aether:item/obsidian_chestplate_iron_trim", + "predicate": { + "minecraft:trim_type": 0.2 + } + }, + { + "model": "aether:item/obsidian_chestplate_netherite_trim", + "predicate": { + "minecraft:trim_type": 0.3 + } + }, + { + "model": "aether:item/obsidian_chestplate_redstone_trim", + "predicate": { + "minecraft:trim_type": 0.4 + } + }, + { + "model": "aether:item/obsidian_chestplate_copper_trim", + "predicate": { + "minecraft:trim_type": 0.5 + } + }, + { + "model": "aether:item/obsidian_chestplate_gold_trim", + "predicate": { + "minecraft:trim_type": 0.6 + } + }, + { + "model": "aether:item/obsidian_chestplate_emerald_trim", + "predicate": { + "minecraft:trim_type": 0.7 + } + }, + { + "model": "aether:item/obsidian_chestplate_diamond_trim", + "predicate": { + "minecraft:trim_type": 0.8 + } + }, + { + "model": "aether:item/obsidian_chestplate_lapis_trim", + "predicate": { + "minecraft:trim_type": 0.9 + } + }, + { + "model": "aether:item/obsidian_chestplate_amethyst_trim", + "predicate": { + "minecraft:trim_type": 1.0 + } + } + ], "textures": { "layer0": "aether:item/armor/obsidian_chestplate" } diff --git a/src/generated/resources/assets/aether/models/item/obsidian_chestplate_amethyst_trim.json b/src/generated/resources/assets/aether/models/item/obsidian_chestplate_amethyst_trim.json new file mode 100644 index 0000000000..b2a997d0c7 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/obsidian_chestplate_amethyst_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/obsidian_chestplate", + "layer1": "minecraft:trims/items/chestplate_trim_amethyst" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/obsidian_chestplate_copper_trim.json b/src/generated/resources/assets/aether/models/item/obsidian_chestplate_copper_trim.json new file mode 100644 index 0000000000..cde1e53ec3 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/obsidian_chestplate_copper_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/obsidian_chestplate", + "layer1": "minecraft:trims/items/chestplate_trim_copper" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/obsidian_chestplate_diamond_trim.json b/src/generated/resources/assets/aether/models/item/obsidian_chestplate_diamond_trim.json new file mode 100644 index 0000000000..f58e6b7de4 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/obsidian_chestplate_diamond_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/obsidian_chestplate", + "layer1": "minecraft:trims/items/chestplate_trim_diamond" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/obsidian_chestplate_emerald_trim.json b/src/generated/resources/assets/aether/models/item/obsidian_chestplate_emerald_trim.json new file mode 100644 index 0000000000..d57739e0ed --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/obsidian_chestplate_emerald_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/obsidian_chestplate", + "layer1": "minecraft:trims/items/chestplate_trim_emerald" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/obsidian_chestplate_gold_trim.json b/src/generated/resources/assets/aether/models/item/obsidian_chestplate_gold_trim.json new file mode 100644 index 0000000000..9de9e13a02 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/obsidian_chestplate_gold_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/obsidian_chestplate", + "layer1": "minecraft:trims/items/chestplate_trim_gold" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/obsidian_chestplate_iron_trim.json b/src/generated/resources/assets/aether/models/item/obsidian_chestplate_iron_trim.json new file mode 100644 index 0000000000..b4bf347a60 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/obsidian_chestplate_iron_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/obsidian_chestplate", + "layer1": "minecraft:trims/items/chestplate_trim_iron" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/obsidian_chestplate_lapis_trim.json b/src/generated/resources/assets/aether/models/item/obsidian_chestplate_lapis_trim.json new file mode 100644 index 0000000000..32cb291aa6 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/obsidian_chestplate_lapis_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/obsidian_chestplate", + "layer1": "minecraft:trims/items/chestplate_trim_lapis" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/obsidian_chestplate_netherite_trim.json b/src/generated/resources/assets/aether/models/item/obsidian_chestplate_netherite_trim.json new file mode 100644 index 0000000000..1f3157634f --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/obsidian_chestplate_netherite_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/obsidian_chestplate", + "layer1": "minecraft:trims/items/chestplate_trim_netherite" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/obsidian_chestplate_quartz_trim.json b/src/generated/resources/assets/aether/models/item/obsidian_chestplate_quartz_trim.json new file mode 100644 index 0000000000..2874b5a82a --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/obsidian_chestplate_quartz_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/obsidian_chestplate", + "layer1": "minecraft:trims/items/chestplate_trim_quartz" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/obsidian_chestplate_redstone_trim.json b/src/generated/resources/assets/aether/models/item/obsidian_chestplate_redstone_trim.json new file mode 100644 index 0000000000..0806529cab --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/obsidian_chestplate_redstone_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/obsidian_chestplate", + "layer1": "minecraft:trims/items/chestplate_trim_redstone" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/obsidian_gloves.json b/src/generated/resources/assets/aether/models/item/obsidian_gloves.json index 7acf255d38..56e9d86850 100644 --- a/src/generated/resources/assets/aether/models/item/obsidian_gloves.json +++ b/src/generated/resources/assets/aether/models/item/obsidian_gloves.json @@ -1,5 +1,67 @@ { "parent": "minecraft:item/generated", + "overrides": [ + { + "model": "aether:item/obsidian_gloves_quartz_trim", + "predicate": { + "minecraft:trim_type": 0.1 + } + }, + { + "model": "aether:item/obsidian_gloves_iron_trim", + "predicate": { + "minecraft:trim_type": 0.2 + } + }, + { + "model": "aether:item/obsidian_gloves_netherite_trim", + "predicate": { + "minecraft:trim_type": 0.3 + } + }, + { + "model": "aether:item/obsidian_gloves_redstone_trim", + "predicate": { + "minecraft:trim_type": 0.4 + } + }, + { + "model": "aether:item/obsidian_gloves_copper_trim", + "predicate": { + "minecraft:trim_type": 0.5 + } + }, + { + "model": "aether:item/obsidian_gloves_gold_trim", + "predicate": { + "minecraft:trim_type": 0.6 + } + }, + { + "model": "aether:item/obsidian_gloves_emerald_trim", + "predicate": { + "minecraft:trim_type": 0.7 + } + }, + { + "model": "aether:item/obsidian_gloves_diamond_trim", + "predicate": { + "minecraft:trim_type": 0.8 + } + }, + { + "model": "aether:item/obsidian_gloves_lapis_trim", + "predicate": { + "minecraft:trim_type": 0.9 + } + }, + { + "model": "aether:item/obsidian_gloves_amethyst_trim", + "predicate": { + "minecraft:trim_type": 1.0 + } + } + ], "textures": { "layer0": "aether:item/accessories/obsidian_gloves" } diff --git a/src/generated/resources/assets/aether/models/item/obsidian_gloves_amethyst_trim.json b/src/generated/resources/assets/aether/models/item/obsidian_gloves_amethyst_trim.json new file mode 100644 index 0000000000..57a3f5d9df --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/obsidian_gloves_amethyst_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/obsidian_gloves", + "layer1": "aether:trims/items/gloves_trim_amethyst" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/obsidian_gloves_copper_trim.json b/src/generated/resources/assets/aether/models/item/obsidian_gloves_copper_trim.json new file mode 100644 index 0000000000..0420beeebc --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/obsidian_gloves_copper_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/obsidian_gloves", + "layer1": "aether:trims/items/gloves_trim_copper" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/obsidian_gloves_diamond_trim.json b/src/generated/resources/assets/aether/models/item/obsidian_gloves_diamond_trim.json new file mode 100644 index 0000000000..6d932176ca --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/obsidian_gloves_diamond_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/obsidian_gloves", + "layer1": "aether:trims/items/gloves_trim_diamond" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/obsidian_gloves_emerald_trim.json b/src/generated/resources/assets/aether/models/item/obsidian_gloves_emerald_trim.json new file mode 100644 index 0000000000..1b8b03a40e --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/obsidian_gloves_emerald_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/obsidian_gloves", + "layer1": "aether:trims/items/gloves_trim_emerald" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/obsidian_gloves_gold_trim.json b/src/generated/resources/assets/aether/models/item/obsidian_gloves_gold_trim.json new file mode 100644 index 0000000000..67fbe9a76f --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/obsidian_gloves_gold_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/obsidian_gloves", + "layer1": "aether:trims/items/gloves_trim_gold" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/obsidian_gloves_iron_trim.json b/src/generated/resources/assets/aether/models/item/obsidian_gloves_iron_trim.json new file mode 100644 index 0000000000..07c6913f44 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/obsidian_gloves_iron_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/obsidian_gloves", + "layer1": "aether:trims/items/gloves_trim_iron" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/obsidian_gloves_lapis_trim.json b/src/generated/resources/assets/aether/models/item/obsidian_gloves_lapis_trim.json new file mode 100644 index 0000000000..94c387da62 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/obsidian_gloves_lapis_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/obsidian_gloves", + "layer1": "aether:trims/items/gloves_trim_lapis" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/obsidian_gloves_netherite_trim.json b/src/generated/resources/assets/aether/models/item/obsidian_gloves_netherite_trim.json new file mode 100644 index 0000000000..c63cb2262d --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/obsidian_gloves_netherite_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/obsidian_gloves", + "layer1": "aether:trims/items/gloves_trim_netherite" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/obsidian_gloves_quartz_trim.json b/src/generated/resources/assets/aether/models/item/obsidian_gloves_quartz_trim.json new file mode 100644 index 0000000000..c6f6e3e590 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/obsidian_gloves_quartz_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/obsidian_gloves", + "layer1": "aether:trims/items/gloves_trim_quartz" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/obsidian_gloves_redstone_trim.json b/src/generated/resources/assets/aether/models/item/obsidian_gloves_redstone_trim.json new file mode 100644 index 0000000000..e3f6d469c3 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/obsidian_gloves_redstone_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/obsidian_gloves", + "layer1": "aether:trims/items/gloves_trim_redstone" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/obsidian_helmet.json b/src/generated/resources/assets/aether/models/item/obsidian_helmet.json index 755c1fa3fb..8afc7cef4b 100644 --- a/src/generated/resources/assets/aether/models/item/obsidian_helmet.json +++ b/src/generated/resources/assets/aether/models/item/obsidian_helmet.json @@ -1,5 +1,67 @@ { "parent": "minecraft:item/generated", + "overrides": [ + { + "model": "aether:item/obsidian_helmet_quartz_trim", + "predicate": { + "minecraft:trim_type": 0.1 + } + }, + { + "model": "aether:item/obsidian_helmet_iron_trim", + "predicate": { + "minecraft:trim_type": 0.2 + } + }, + { + "model": "aether:item/obsidian_helmet_netherite_trim", + "predicate": { + "minecraft:trim_type": 0.3 + } + }, + { + "model": "aether:item/obsidian_helmet_redstone_trim", + "predicate": { + "minecraft:trim_type": 0.4 + } + }, + { + "model": "aether:item/obsidian_helmet_copper_trim", + "predicate": { + "minecraft:trim_type": 0.5 + } + }, + { + "model": "aether:item/obsidian_helmet_gold_trim", + "predicate": { + "minecraft:trim_type": 0.6 + } + }, + { + "model": "aether:item/obsidian_helmet_emerald_trim", + "predicate": { + "minecraft:trim_type": 0.7 + } + }, + { + "model": "aether:item/obsidian_helmet_diamond_trim", + "predicate": { + "minecraft:trim_type": 0.8 + } + }, + { + "model": "aether:item/obsidian_helmet_lapis_trim", + "predicate": { + "minecraft:trim_type": 0.9 + } + }, + { + "model": "aether:item/obsidian_helmet_amethyst_trim", + "predicate": { + "minecraft:trim_type": 1.0 + } + } + ], "textures": { "layer0": "aether:item/armor/obsidian_helmet" } diff --git a/src/generated/resources/assets/aether/models/item/obsidian_helmet_amethyst_trim.json b/src/generated/resources/assets/aether/models/item/obsidian_helmet_amethyst_trim.json new file mode 100644 index 0000000000..00010722cf --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/obsidian_helmet_amethyst_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/obsidian_helmet", + "layer1": "minecraft:trims/items/helmet_trim_amethyst" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/obsidian_helmet_copper_trim.json b/src/generated/resources/assets/aether/models/item/obsidian_helmet_copper_trim.json new file mode 100644 index 0000000000..1c98bfd0d3 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/obsidian_helmet_copper_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/obsidian_helmet", + "layer1": "minecraft:trims/items/helmet_trim_copper" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/obsidian_helmet_diamond_trim.json b/src/generated/resources/assets/aether/models/item/obsidian_helmet_diamond_trim.json new file mode 100644 index 0000000000..267de834e4 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/obsidian_helmet_diamond_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/obsidian_helmet", + "layer1": "minecraft:trims/items/helmet_trim_diamond" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/obsidian_helmet_emerald_trim.json b/src/generated/resources/assets/aether/models/item/obsidian_helmet_emerald_trim.json new file mode 100644 index 0000000000..a397b9fa10 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/obsidian_helmet_emerald_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/obsidian_helmet", + "layer1": "minecraft:trims/items/helmet_trim_emerald" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/obsidian_helmet_gold_trim.json b/src/generated/resources/assets/aether/models/item/obsidian_helmet_gold_trim.json new file mode 100644 index 0000000000..e884ccdf36 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/obsidian_helmet_gold_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/obsidian_helmet", + "layer1": "minecraft:trims/items/helmet_trim_gold" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/obsidian_helmet_iron_trim.json b/src/generated/resources/assets/aether/models/item/obsidian_helmet_iron_trim.json new file mode 100644 index 0000000000..9958256653 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/obsidian_helmet_iron_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/obsidian_helmet", + "layer1": "minecraft:trims/items/helmet_trim_iron" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/obsidian_helmet_lapis_trim.json b/src/generated/resources/assets/aether/models/item/obsidian_helmet_lapis_trim.json new file mode 100644 index 0000000000..ab617f6f62 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/obsidian_helmet_lapis_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/obsidian_helmet", + "layer1": "minecraft:trims/items/helmet_trim_lapis" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/obsidian_helmet_netherite_trim.json b/src/generated/resources/assets/aether/models/item/obsidian_helmet_netherite_trim.json new file mode 100644 index 0000000000..89c67fd9b2 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/obsidian_helmet_netherite_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/obsidian_helmet", + "layer1": "minecraft:trims/items/helmet_trim_netherite" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/obsidian_helmet_quartz_trim.json b/src/generated/resources/assets/aether/models/item/obsidian_helmet_quartz_trim.json new file mode 100644 index 0000000000..2d84093a26 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/obsidian_helmet_quartz_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/obsidian_helmet", + "layer1": "minecraft:trims/items/helmet_trim_quartz" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/obsidian_helmet_redstone_trim.json b/src/generated/resources/assets/aether/models/item/obsidian_helmet_redstone_trim.json new file mode 100644 index 0000000000..01ca0f19da --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/obsidian_helmet_redstone_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/obsidian_helmet", + "layer1": "minecraft:trims/items/helmet_trim_redstone" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/obsidian_leggings.json b/src/generated/resources/assets/aether/models/item/obsidian_leggings.json index 6c3e2999f2..7648b998f8 100644 --- a/src/generated/resources/assets/aether/models/item/obsidian_leggings.json +++ b/src/generated/resources/assets/aether/models/item/obsidian_leggings.json @@ -1,5 +1,67 @@ { "parent": "minecraft:item/generated", + "overrides": [ + { + "model": "aether:item/obsidian_leggings_quartz_trim", + "predicate": { + "minecraft:trim_type": 0.1 + } + }, + { + "model": "aether:item/obsidian_leggings_iron_trim", + "predicate": { + "minecraft:trim_type": 0.2 + } + }, + { + "model": "aether:item/obsidian_leggings_netherite_trim", + "predicate": { + "minecraft:trim_type": 0.3 + } + }, + { + "model": "aether:item/obsidian_leggings_redstone_trim", + "predicate": { + "minecraft:trim_type": 0.4 + } + }, + { + "model": "aether:item/obsidian_leggings_copper_trim", + "predicate": { + "minecraft:trim_type": 0.5 + } + }, + { + "model": "aether:item/obsidian_leggings_gold_trim", + "predicate": { + "minecraft:trim_type": 0.6 + } + }, + { + "model": "aether:item/obsidian_leggings_emerald_trim", + "predicate": { + "minecraft:trim_type": 0.7 + } + }, + { + "model": "aether:item/obsidian_leggings_diamond_trim", + "predicate": { + "minecraft:trim_type": 0.8 + } + }, + { + "model": "aether:item/obsidian_leggings_lapis_trim", + "predicate": { + "minecraft:trim_type": 0.9 + } + }, + { + "model": "aether:item/obsidian_leggings_amethyst_trim", + "predicate": { + "minecraft:trim_type": 1.0 + } + } + ], "textures": { "layer0": "aether:item/armor/obsidian_leggings" } diff --git a/src/generated/resources/assets/aether/models/item/obsidian_leggings_amethyst_trim.json b/src/generated/resources/assets/aether/models/item/obsidian_leggings_amethyst_trim.json new file mode 100644 index 0000000000..a59de75c41 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/obsidian_leggings_amethyst_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/obsidian_leggings", + "layer1": "minecraft:trims/items/leggings_trim_amethyst" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/obsidian_leggings_copper_trim.json b/src/generated/resources/assets/aether/models/item/obsidian_leggings_copper_trim.json new file mode 100644 index 0000000000..1affbd0caa --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/obsidian_leggings_copper_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/obsidian_leggings", + "layer1": "minecraft:trims/items/leggings_trim_copper" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/obsidian_leggings_diamond_trim.json b/src/generated/resources/assets/aether/models/item/obsidian_leggings_diamond_trim.json new file mode 100644 index 0000000000..98422f0ba0 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/obsidian_leggings_diamond_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/obsidian_leggings", + "layer1": "minecraft:trims/items/leggings_trim_diamond" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/obsidian_leggings_emerald_trim.json b/src/generated/resources/assets/aether/models/item/obsidian_leggings_emerald_trim.json new file mode 100644 index 0000000000..23a06b235f --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/obsidian_leggings_emerald_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/obsidian_leggings", + "layer1": "minecraft:trims/items/leggings_trim_emerald" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/obsidian_leggings_gold_trim.json b/src/generated/resources/assets/aether/models/item/obsidian_leggings_gold_trim.json new file mode 100644 index 0000000000..63a153d616 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/obsidian_leggings_gold_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/obsidian_leggings", + "layer1": "minecraft:trims/items/leggings_trim_gold" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/obsidian_leggings_iron_trim.json b/src/generated/resources/assets/aether/models/item/obsidian_leggings_iron_trim.json new file mode 100644 index 0000000000..f8b032303f --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/obsidian_leggings_iron_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/obsidian_leggings", + "layer1": "minecraft:trims/items/leggings_trim_iron" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/obsidian_leggings_lapis_trim.json b/src/generated/resources/assets/aether/models/item/obsidian_leggings_lapis_trim.json new file mode 100644 index 0000000000..70f58be931 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/obsidian_leggings_lapis_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/obsidian_leggings", + "layer1": "minecraft:trims/items/leggings_trim_lapis" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/obsidian_leggings_netherite_trim.json b/src/generated/resources/assets/aether/models/item/obsidian_leggings_netherite_trim.json new file mode 100644 index 0000000000..38e91f9bc3 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/obsidian_leggings_netherite_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/obsidian_leggings", + "layer1": "minecraft:trims/items/leggings_trim_netherite" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/obsidian_leggings_quartz_trim.json b/src/generated/resources/assets/aether/models/item/obsidian_leggings_quartz_trim.json new file mode 100644 index 0000000000..1a1511b357 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/obsidian_leggings_quartz_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/obsidian_leggings", + "layer1": "minecraft:trims/items/leggings_trim_quartz" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/obsidian_leggings_redstone_trim.json b/src/generated/resources/assets/aether/models/item/obsidian_leggings_redstone_trim.json new file mode 100644 index 0000000000..5404a77939 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/obsidian_leggings_redstone_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/obsidian_leggings", + "layer1": "minecraft:trims/items/leggings_trim_redstone" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/phoenix_boots.json b/src/generated/resources/assets/aether/models/item/phoenix_boots.json index 80f3e9043e..ed6a978ec2 100644 --- a/src/generated/resources/assets/aether/models/item/phoenix_boots.json +++ b/src/generated/resources/assets/aether/models/item/phoenix_boots.json @@ -1,5 +1,67 @@ { "parent": "minecraft:item/generated", + "overrides": [ + { + "model": "aether:item/phoenix_boots_quartz_trim", + "predicate": { + "minecraft:trim_type": 0.1 + } + }, + { + "model": "aether:item/phoenix_boots_iron_trim", + "predicate": { + "minecraft:trim_type": 0.2 + } + }, + { + "model": "aether:item/phoenix_boots_netherite_trim", + "predicate": { + "minecraft:trim_type": 0.3 + } + }, + { + "model": "aether:item/phoenix_boots_redstone_trim", + "predicate": { + "minecraft:trim_type": 0.4 + } + }, + { + "model": "aether:item/phoenix_boots_copper_trim", + "predicate": { + "minecraft:trim_type": 0.5 + } + }, + { + "model": "aether:item/phoenix_boots_gold_trim", + "predicate": { + "minecraft:trim_type": 0.6 + } + }, + { + "model": "aether:item/phoenix_boots_emerald_trim", + "predicate": { + "minecraft:trim_type": 0.7 + } + }, + { + "model": "aether:item/phoenix_boots_diamond_trim", + "predicate": { + "minecraft:trim_type": 0.8 + } + }, + { + "model": "aether:item/phoenix_boots_lapis_trim", + "predicate": { + "minecraft:trim_type": 0.9 + } + }, + { + "model": "aether:item/phoenix_boots_amethyst_trim", + "predicate": { + "minecraft:trim_type": 1.0 + } + } + ], "textures": { "layer0": "aether:item/armor/phoenix_boots" } diff --git a/src/generated/resources/assets/aether/models/item/phoenix_boots_amethyst_trim.json b/src/generated/resources/assets/aether/models/item/phoenix_boots_amethyst_trim.json new file mode 100644 index 0000000000..cac05807ac --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/phoenix_boots_amethyst_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/phoenix_boots", + "layer1": "minecraft:trims/items/boots_trim_amethyst" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/phoenix_boots_copper_trim.json b/src/generated/resources/assets/aether/models/item/phoenix_boots_copper_trim.json new file mode 100644 index 0000000000..f41d372183 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/phoenix_boots_copper_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/phoenix_boots", + "layer1": "minecraft:trims/items/boots_trim_copper" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/phoenix_boots_diamond_trim.json b/src/generated/resources/assets/aether/models/item/phoenix_boots_diamond_trim.json new file mode 100644 index 0000000000..f9e6b84802 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/phoenix_boots_diamond_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/phoenix_boots", + "layer1": "minecraft:trims/items/boots_trim_diamond" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/phoenix_boots_emerald_trim.json b/src/generated/resources/assets/aether/models/item/phoenix_boots_emerald_trim.json new file mode 100644 index 0000000000..573e42c26a --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/phoenix_boots_emerald_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/phoenix_boots", + "layer1": "minecraft:trims/items/boots_trim_emerald" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/phoenix_boots_gold_trim.json b/src/generated/resources/assets/aether/models/item/phoenix_boots_gold_trim.json new file mode 100644 index 0000000000..2477b457b6 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/phoenix_boots_gold_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/phoenix_boots", + "layer1": "minecraft:trims/items/boots_trim_gold" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/phoenix_boots_iron_trim.json b/src/generated/resources/assets/aether/models/item/phoenix_boots_iron_trim.json new file mode 100644 index 0000000000..4799b6df18 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/phoenix_boots_iron_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/phoenix_boots", + "layer1": "minecraft:trims/items/boots_trim_iron" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/phoenix_boots_lapis_trim.json b/src/generated/resources/assets/aether/models/item/phoenix_boots_lapis_trim.json new file mode 100644 index 0000000000..bfe6dc0d9c --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/phoenix_boots_lapis_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/phoenix_boots", + "layer1": "minecraft:trims/items/boots_trim_lapis" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/phoenix_boots_netherite_trim.json b/src/generated/resources/assets/aether/models/item/phoenix_boots_netherite_trim.json new file mode 100644 index 0000000000..fcf368b79a --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/phoenix_boots_netherite_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/phoenix_boots", + "layer1": "minecraft:trims/items/boots_trim_netherite" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/phoenix_boots_quartz_trim.json b/src/generated/resources/assets/aether/models/item/phoenix_boots_quartz_trim.json new file mode 100644 index 0000000000..baf18e0d8a --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/phoenix_boots_quartz_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/phoenix_boots", + "layer1": "minecraft:trims/items/boots_trim_quartz" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/phoenix_boots_redstone_trim.json b/src/generated/resources/assets/aether/models/item/phoenix_boots_redstone_trim.json new file mode 100644 index 0000000000..f26f672238 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/phoenix_boots_redstone_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/phoenix_boots", + "layer1": "minecraft:trims/items/boots_trim_redstone" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/phoenix_chestplate.json b/src/generated/resources/assets/aether/models/item/phoenix_chestplate.json index d9e56f8020..7dfc5f6ad7 100644 --- a/src/generated/resources/assets/aether/models/item/phoenix_chestplate.json +++ b/src/generated/resources/assets/aether/models/item/phoenix_chestplate.json @@ -1,5 +1,67 @@ { "parent": "minecraft:item/generated", + "overrides": [ + { + "model": "aether:item/phoenix_chestplate_quartz_trim", + "predicate": { + "minecraft:trim_type": 0.1 + } + }, + { + "model": "aether:item/phoenix_chestplate_iron_trim", + "predicate": { + "minecraft:trim_type": 0.2 + } + }, + { + "model": "aether:item/phoenix_chestplate_netherite_trim", + "predicate": { + "minecraft:trim_type": 0.3 + } + }, + { + "model": "aether:item/phoenix_chestplate_redstone_trim", + "predicate": { + "minecraft:trim_type": 0.4 + } + }, + { + "model": "aether:item/phoenix_chestplate_copper_trim", + "predicate": { + "minecraft:trim_type": 0.5 + } + }, + { + "model": "aether:item/phoenix_chestplate_gold_trim", + "predicate": { + "minecraft:trim_type": 0.6 + } + }, + { + "model": "aether:item/phoenix_chestplate_emerald_trim", + "predicate": { + "minecraft:trim_type": 0.7 + } + }, + { + "model": "aether:item/phoenix_chestplate_diamond_trim", + "predicate": { + "minecraft:trim_type": 0.8 + } + }, + { + "model": "aether:item/phoenix_chestplate_lapis_trim", + "predicate": { + "minecraft:trim_type": 0.9 + } + }, + { + "model": "aether:item/phoenix_chestplate_amethyst_trim", + "predicate": { + "minecraft:trim_type": 1.0 + } + } + ], "textures": { "layer0": "aether:item/armor/phoenix_chestplate" } diff --git a/src/generated/resources/assets/aether/models/item/phoenix_chestplate_amethyst_trim.json b/src/generated/resources/assets/aether/models/item/phoenix_chestplate_amethyst_trim.json new file mode 100644 index 0000000000..fd8e689503 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/phoenix_chestplate_amethyst_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/phoenix_chestplate", + "layer1": "minecraft:trims/items/chestplate_trim_amethyst" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/phoenix_chestplate_copper_trim.json b/src/generated/resources/assets/aether/models/item/phoenix_chestplate_copper_trim.json new file mode 100644 index 0000000000..b6ccec36f1 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/phoenix_chestplate_copper_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/phoenix_chestplate", + "layer1": "minecraft:trims/items/chestplate_trim_copper" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/phoenix_chestplate_diamond_trim.json b/src/generated/resources/assets/aether/models/item/phoenix_chestplate_diamond_trim.json new file mode 100644 index 0000000000..9b08d58a02 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/phoenix_chestplate_diamond_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/phoenix_chestplate", + "layer1": "minecraft:trims/items/chestplate_trim_diamond" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/phoenix_chestplate_emerald_trim.json b/src/generated/resources/assets/aether/models/item/phoenix_chestplate_emerald_trim.json new file mode 100644 index 0000000000..06fdf292e2 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/phoenix_chestplate_emerald_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/phoenix_chestplate", + "layer1": "minecraft:trims/items/chestplate_trim_emerald" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/phoenix_chestplate_gold_trim.json b/src/generated/resources/assets/aether/models/item/phoenix_chestplate_gold_trim.json new file mode 100644 index 0000000000..3e95dc86ee --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/phoenix_chestplate_gold_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/phoenix_chestplate", + "layer1": "minecraft:trims/items/chestplate_trim_gold" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/phoenix_chestplate_iron_trim.json b/src/generated/resources/assets/aether/models/item/phoenix_chestplate_iron_trim.json new file mode 100644 index 0000000000..2b4725f2ea --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/phoenix_chestplate_iron_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/phoenix_chestplate", + "layer1": "minecraft:trims/items/chestplate_trim_iron" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/phoenix_chestplate_lapis_trim.json b/src/generated/resources/assets/aether/models/item/phoenix_chestplate_lapis_trim.json new file mode 100644 index 0000000000..be573b6fa5 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/phoenix_chestplate_lapis_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/phoenix_chestplate", + "layer1": "minecraft:trims/items/chestplate_trim_lapis" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/phoenix_chestplate_netherite_trim.json b/src/generated/resources/assets/aether/models/item/phoenix_chestplate_netherite_trim.json new file mode 100644 index 0000000000..c4a204809b --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/phoenix_chestplate_netherite_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/phoenix_chestplate", + "layer1": "minecraft:trims/items/chestplate_trim_netherite" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/phoenix_chestplate_quartz_trim.json b/src/generated/resources/assets/aether/models/item/phoenix_chestplate_quartz_trim.json new file mode 100644 index 0000000000..c79fff1b90 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/phoenix_chestplate_quartz_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/phoenix_chestplate", + "layer1": "minecraft:trims/items/chestplate_trim_quartz" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/phoenix_chestplate_redstone_trim.json b/src/generated/resources/assets/aether/models/item/phoenix_chestplate_redstone_trim.json new file mode 100644 index 0000000000..2fe8786b44 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/phoenix_chestplate_redstone_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/phoenix_chestplate", + "layer1": "minecraft:trims/items/chestplate_trim_redstone" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/phoenix_gloves.json b/src/generated/resources/assets/aether/models/item/phoenix_gloves.json index b50d3dd6e7..1180c42dbe 100644 --- a/src/generated/resources/assets/aether/models/item/phoenix_gloves.json +++ b/src/generated/resources/assets/aether/models/item/phoenix_gloves.json @@ -1,5 +1,67 @@ { "parent": "minecraft:item/generated", + "overrides": [ + { + "model": "aether:item/phoenix_gloves_quartz_trim", + "predicate": { + "minecraft:trim_type": 0.1 + } + }, + { + "model": "aether:item/phoenix_gloves_iron_trim", + "predicate": { + "minecraft:trim_type": 0.2 + } + }, + { + "model": "aether:item/phoenix_gloves_netherite_trim", + "predicate": { + "minecraft:trim_type": 0.3 + } + }, + { + "model": "aether:item/phoenix_gloves_redstone_trim", + "predicate": { + "minecraft:trim_type": 0.4 + } + }, + { + "model": "aether:item/phoenix_gloves_copper_trim", + "predicate": { + "minecraft:trim_type": 0.5 + } + }, + { + "model": "aether:item/phoenix_gloves_gold_trim", + "predicate": { + "minecraft:trim_type": 0.6 + } + }, + { + "model": "aether:item/phoenix_gloves_emerald_trim", + "predicate": { + "minecraft:trim_type": 0.7 + } + }, + { + "model": "aether:item/phoenix_gloves_diamond_trim", + "predicate": { + "minecraft:trim_type": 0.8 + } + }, + { + "model": "aether:item/phoenix_gloves_lapis_trim", + "predicate": { + "minecraft:trim_type": 0.9 + } + }, + { + "model": "aether:item/phoenix_gloves_amethyst_trim", + "predicate": { + "minecraft:trim_type": 1.0 + } + } + ], "textures": { "layer0": "aether:item/accessories/phoenix_gloves" } diff --git a/src/generated/resources/assets/aether/models/item/phoenix_gloves_amethyst_trim.json b/src/generated/resources/assets/aether/models/item/phoenix_gloves_amethyst_trim.json new file mode 100644 index 0000000000..9c8b168cea --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/phoenix_gloves_amethyst_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/phoenix_gloves", + "layer1": "aether:trims/items/gloves_trim_amethyst" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/phoenix_gloves_copper_trim.json b/src/generated/resources/assets/aether/models/item/phoenix_gloves_copper_trim.json new file mode 100644 index 0000000000..798d95b7cd --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/phoenix_gloves_copper_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/phoenix_gloves", + "layer1": "aether:trims/items/gloves_trim_copper" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/phoenix_gloves_diamond_trim.json b/src/generated/resources/assets/aether/models/item/phoenix_gloves_diamond_trim.json new file mode 100644 index 0000000000..57a5d71998 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/phoenix_gloves_diamond_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/phoenix_gloves", + "layer1": "aether:trims/items/gloves_trim_diamond" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/phoenix_gloves_emerald_trim.json b/src/generated/resources/assets/aether/models/item/phoenix_gloves_emerald_trim.json new file mode 100644 index 0000000000..d07abdc53d --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/phoenix_gloves_emerald_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/phoenix_gloves", + "layer1": "aether:trims/items/gloves_trim_emerald" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/phoenix_gloves_gold_trim.json b/src/generated/resources/assets/aether/models/item/phoenix_gloves_gold_trim.json new file mode 100644 index 0000000000..da5dbb7696 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/phoenix_gloves_gold_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/phoenix_gloves", + "layer1": "aether:trims/items/gloves_trim_gold" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/phoenix_gloves_iron_trim.json b/src/generated/resources/assets/aether/models/item/phoenix_gloves_iron_trim.json new file mode 100644 index 0000000000..2241b1863c --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/phoenix_gloves_iron_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/phoenix_gloves", + "layer1": "aether:trims/items/gloves_trim_iron" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/phoenix_gloves_lapis_trim.json b/src/generated/resources/assets/aether/models/item/phoenix_gloves_lapis_trim.json new file mode 100644 index 0000000000..2dd32c739b --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/phoenix_gloves_lapis_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/phoenix_gloves", + "layer1": "aether:trims/items/gloves_trim_lapis" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/phoenix_gloves_netherite_trim.json b/src/generated/resources/assets/aether/models/item/phoenix_gloves_netherite_trim.json new file mode 100644 index 0000000000..4192a808eb --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/phoenix_gloves_netherite_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/phoenix_gloves", + "layer1": "aether:trims/items/gloves_trim_netherite" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/phoenix_gloves_quartz_trim.json b/src/generated/resources/assets/aether/models/item/phoenix_gloves_quartz_trim.json new file mode 100644 index 0000000000..f1ae76e93f --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/phoenix_gloves_quartz_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/phoenix_gloves", + "layer1": "aether:trims/items/gloves_trim_quartz" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/phoenix_gloves_redstone_trim.json b/src/generated/resources/assets/aether/models/item/phoenix_gloves_redstone_trim.json new file mode 100644 index 0000000000..ce9304d76e --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/phoenix_gloves_redstone_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/phoenix_gloves", + "layer1": "aether:trims/items/gloves_trim_redstone" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/phoenix_helmet.json b/src/generated/resources/assets/aether/models/item/phoenix_helmet.json index df38713323..0cfc7b3aa2 100644 --- a/src/generated/resources/assets/aether/models/item/phoenix_helmet.json +++ b/src/generated/resources/assets/aether/models/item/phoenix_helmet.json @@ -1,5 +1,67 @@ { "parent": "minecraft:item/generated", + "overrides": [ + { + "model": "aether:item/phoenix_helmet_quartz_trim", + "predicate": { + "minecraft:trim_type": 0.1 + } + }, + { + "model": "aether:item/phoenix_helmet_iron_trim", + "predicate": { + "minecraft:trim_type": 0.2 + } + }, + { + "model": "aether:item/phoenix_helmet_netherite_trim", + "predicate": { + "minecraft:trim_type": 0.3 + } + }, + { + "model": "aether:item/phoenix_helmet_redstone_trim", + "predicate": { + "minecraft:trim_type": 0.4 + } + }, + { + "model": "aether:item/phoenix_helmet_copper_trim", + "predicate": { + "minecraft:trim_type": 0.5 + } + }, + { + "model": "aether:item/phoenix_helmet_gold_trim", + "predicate": { + "minecraft:trim_type": 0.6 + } + }, + { + "model": "aether:item/phoenix_helmet_emerald_trim", + "predicate": { + "minecraft:trim_type": 0.7 + } + }, + { + "model": "aether:item/phoenix_helmet_diamond_trim", + "predicate": { + "minecraft:trim_type": 0.8 + } + }, + { + "model": "aether:item/phoenix_helmet_lapis_trim", + "predicate": { + "minecraft:trim_type": 0.9 + } + }, + { + "model": "aether:item/phoenix_helmet_amethyst_trim", + "predicate": { + "minecraft:trim_type": 1.0 + } + } + ], "textures": { "layer0": "aether:item/armor/phoenix_helmet" } diff --git a/src/generated/resources/assets/aether/models/item/phoenix_helmet_amethyst_trim.json b/src/generated/resources/assets/aether/models/item/phoenix_helmet_amethyst_trim.json new file mode 100644 index 0000000000..0400edb427 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/phoenix_helmet_amethyst_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/phoenix_helmet", + "layer1": "minecraft:trims/items/helmet_trim_amethyst" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/phoenix_helmet_copper_trim.json b/src/generated/resources/assets/aether/models/item/phoenix_helmet_copper_trim.json new file mode 100644 index 0000000000..8d4031f485 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/phoenix_helmet_copper_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/phoenix_helmet", + "layer1": "minecraft:trims/items/helmet_trim_copper" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/phoenix_helmet_diamond_trim.json b/src/generated/resources/assets/aether/models/item/phoenix_helmet_diamond_trim.json new file mode 100644 index 0000000000..6a6108d860 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/phoenix_helmet_diamond_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/phoenix_helmet", + "layer1": "minecraft:trims/items/helmet_trim_diamond" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/phoenix_helmet_emerald_trim.json b/src/generated/resources/assets/aether/models/item/phoenix_helmet_emerald_trim.json new file mode 100644 index 0000000000..19aa20e06b --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/phoenix_helmet_emerald_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/phoenix_helmet", + "layer1": "minecraft:trims/items/helmet_trim_emerald" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/phoenix_helmet_gold_trim.json b/src/generated/resources/assets/aether/models/item/phoenix_helmet_gold_trim.json new file mode 100644 index 0000000000..2ef0edc7db --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/phoenix_helmet_gold_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/phoenix_helmet", + "layer1": "minecraft:trims/items/helmet_trim_gold" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/phoenix_helmet_iron_trim.json b/src/generated/resources/assets/aether/models/item/phoenix_helmet_iron_trim.json new file mode 100644 index 0000000000..1670d8d03a --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/phoenix_helmet_iron_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/phoenix_helmet", + "layer1": "minecraft:trims/items/helmet_trim_iron" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/phoenix_helmet_lapis_trim.json b/src/generated/resources/assets/aether/models/item/phoenix_helmet_lapis_trim.json new file mode 100644 index 0000000000..bd7b8018b7 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/phoenix_helmet_lapis_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/phoenix_helmet", + "layer1": "minecraft:trims/items/helmet_trim_lapis" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/phoenix_helmet_netherite_trim.json b/src/generated/resources/assets/aether/models/item/phoenix_helmet_netherite_trim.json new file mode 100644 index 0000000000..7bc0b17c99 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/phoenix_helmet_netherite_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/phoenix_helmet", + "layer1": "minecraft:trims/items/helmet_trim_netherite" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/phoenix_helmet_quartz_trim.json b/src/generated/resources/assets/aether/models/item/phoenix_helmet_quartz_trim.json new file mode 100644 index 0000000000..6a003cce24 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/phoenix_helmet_quartz_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/phoenix_helmet", + "layer1": "minecraft:trims/items/helmet_trim_quartz" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/phoenix_helmet_redstone_trim.json b/src/generated/resources/assets/aether/models/item/phoenix_helmet_redstone_trim.json new file mode 100644 index 0000000000..d109a8a2d9 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/phoenix_helmet_redstone_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/phoenix_helmet", + "layer1": "minecraft:trims/items/helmet_trim_redstone" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/phoenix_leggings.json b/src/generated/resources/assets/aether/models/item/phoenix_leggings.json index 2b78d82b8a..a4055a97c6 100644 --- a/src/generated/resources/assets/aether/models/item/phoenix_leggings.json +++ b/src/generated/resources/assets/aether/models/item/phoenix_leggings.json @@ -1,5 +1,67 @@ { "parent": "minecraft:item/generated", + "overrides": [ + { + "model": "aether:item/phoenix_leggings_quartz_trim", + "predicate": { + "minecraft:trim_type": 0.1 + } + }, + { + "model": "aether:item/phoenix_leggings_iron_trim", + "predicate": { + "minecraft:trim_type": 0.2 + } + }, + { + "model": "aether:item/phoenix_leggings_netherite_trim", + "predicate": { + "minecraft:trim_type": 0.3 + } + }, + { + "model": "aether:item/phoenix_leggings_redstone_trim", + "predicate": { + "minecraft:trim_type": 0.4 + } + }, + { + "model": "aether:item/phoenix_leggings_copper_trim", + "predicate": { + "minecraft:trim_type": 0.5 + } + }, + { + "model": "aether:item/phoenix_leggings_gold_trim", + "predicate": { + "minecraft:trim_type": 0.6 + } + }, + { + "model": "aether:item/phoenix_leggings_emerald_trim", + "predicate": { + "minecraft:trim_type": 0.7 + } + }, + { + "model": "aether:item/phoenix_leggings_diamond_trim", + "predicate": { + "minecraft:trim_type": 0.8 + } + }, + { + "model": "aether:item/phoenix_leggings_lapis_trim", + "predicate": { + "minecraft:trim_type": 0.9 + } + }, + { + "model": "aether:item/phoenix_leggings_amethyst_trim", + "predicate": { + "minecraft:trim_type": 1.0 + } + } + ], "textures": { "layer0": "aether:item/armor/phoenix_leggings" } diff --git a/src/generated/resources/assets/aether/models/item/phoenix_leggings_amethyst_trim.json b/src/generated/resources/assets/aether/models/item/phoenix_leggings_amethyst_trim.json new file mode 100644 index 0000000000..f8fa104407 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/phoenix_leggings_amethyst_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/phoenix_leggings", + "layer1": "minecraft:trims/items/leggings_trim_amethyst" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/phoenix_leggings_copper_trim.json b/src/generated/resources/assets/aether/models/item/phoenix_leggings_copper_trim.json new file mode 100644 index 0000000000..5d0bac8d1b --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/phoenix_leggings_copper_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/phoenix_leggings", + "layer1": "minecraft:trims/items/leggings_trim_copper" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/phoenix_leggings_diamond_trim.json b/src/generated/resources/assets/aether/models/item/phoenix_leggings_diamond_trim.json new file mode 100644 index 0000000000..429e1168ca --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/phoenix_leggings_diamond_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/phoenix_leggings", + "layer1": "minecraft:trims/items/leggings_trim_diamond" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/phoenix_leggings_emerald_trim.json b/src/generated/resources/assets/aether/models/item/phoenix_leggings_emerald_trim.json new file mode 100644 index 0000000000..925619c94b --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/phoenix_leggings_emerald_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/phoenix_leggings", + "layer1": "minecraft:trims/items/leggings_trim_emerald" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/phoenix_leggings_gold_trim.json b/src/generated/resources/assets/aether/models/item/phoenix_leggings_gold_trim.json new file mode 100644 index 0000000000..a94ff2dec1 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/phoenix_leggings_gold_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/phoenix_leggings", + "layer1": "minecraft:trims/items/leggings_trim_gold" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/phoenix_leggings_iron_trim.json b/src/generated/resources/assets/aether/models/item/phoenix_leggings_iron_trim.json new file mode 100644 index 0000000000..fcffff0e6d --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/phoenix_leggings_iron_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/phoenix_leggings", + "layer1": "minecraft:trims/items/leggings_trim_iron" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/phoenix_leggings_lapis_trim.json b/src/generated/resources/assets/aether/models/item/phoenix_leggings_lapis_trim.json new file mode 100644 index 0000000000..88a5aebb8e --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/phoenix_leggings_lapis_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/phoenix_leggings", + "layer1": "minecraft:trims/items/leggings_trim_lapis" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/phoenix_leggings_netherite_trim.json b/src/generated/resources/assets/aether/models/item/phoenix_leggings_netherite_trim.json new file mode 100644 index 0000000000..3124b05776 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/phoenix_leggings_netherite_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/phoenix_leggings", + "layer1": "minecraft:trims/items/leggings_trim_netherite" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/phoenix_leggings_quartz_trim.json b/src/generated/resources/assets/aether/models/item/phoenix_leggings_quartz_trim.json new file mode 100644 index 0000000000..ae6191a069 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/phoenix_leggings_quartz_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/phoenix_leggings", + "layer1": "minecraft:trims/items/leggings_trim_quartz" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/phoenix_leggings_redstone_trim.json b/src/generated/resources/assets/aether/models/item/phoenix_leggings_redstone_trim.json new file mode 100644 index 0000000000..41e3747884 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/phoenix_leggings_redstone_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/phoenix_leggings", + "layer1": "minecraft:trims/items/leggings_trim_redstone" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/skyroot_hanging_sign.json b/src/generated/resources/assets/aether/models/item/skyroot_hanging_sign.json new file mode 100644 index 0000000000..b51b534f41 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/skyroot_hanging_sign.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/miscellaneous/skyroot_hanging_sign" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/valkyrie_gloves.json b/src/generated/resources/assets/aether/models/item/valkyrie_gloves.json index 1de7201cae..8dc04a030f 100644 --- a/src/generated/resources/assets/aether/models/item/valkyrie_gloves.json +++ b/src/generated/resources/assets/aether/models/item/valkyrie_gloves.json @@ -1,5 +1,67 @@ { "parent": "minecraft:item/generated", + "overrides": [ + { + "model": "aether:item/valkyrie_gloves_quartz_trim", + "predicate": { + "minecraft:trim_type": 0.1 + } + }, + { + "model": "aether:item/valkyrie_gloves_iron_trim", + "predicate": { + "minecraft:trim_type": 0.2 + } + }, + { + "model": "aether:item/valkyrie_gloves_netherite_trim", + "predicate": { + "minecraft:trim_type": 0.3 + } + }, + { + "model": "aether:item/valkyrie_gloves_redstone_trim", + "predicate": { + "minecraft:trim_type": 0.4 + } + }, + { + "model": "aether:item/valkyrie_gloves_copper_trim", + "predicate": { + "minecraft:trim_type": 0.5 + } + }, + { + "model": "aether:item/valkyrie_gloves_gold_trim", + "predicate": { + "minecraft:trim_type": 0.6 + } + }, + { + "model": "aether:item/valkyrie_gloves_emerald_trim", + "predicate": { + "minecraft:trim_type": 0.7 + } + }, + { + "model": "aether:item/valkyrie_gloves_diamond_trim", + "predicate": { + "minecraft:trim_type": 0.8 + } + }, + { + "model": "aether:item/valkyrie_gloves_lapis_trim", + "predicate": { + "minecraft:trim_type": 0.9 + } + }, + { + "model": "aether:item/valkyrie_gloves_amethyst_trim", + "predicate": { + "minecraft:trim_type": 1.0 + } + } + ], "textures": { "layer0": "aether:item/accessories/valkyrie_gloves" } diff --git a/src/generated/resources/assets/aether/models/item/valkyrie_gloves_amethyst_trim.json b/src/generated/resources/assets/aether/models/item/valkyrie_gloves_amethyst_trim.json new file mode 100644 index 0000000000..39c995639d --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/valkyrie_gloves_amethyst_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/valkyrie_gloves", + "layer1": "aether:trims/items/gloves_trim_amethyst" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/valkyrie_gloves_copper_trim.json b/src/generated/resources/assets/aether/models/item/valkyrie_gloves_copper_trim.json new file mode 100644 index 0000000000..c0c320db78 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/valkyrie_gloves_copper_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/valkyrie_gloves", + "layer1": "aether:trims/items/gloves_trim_copper" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/valkyrie_gloves_diamond_trim.json b/src/generated/resources/assets/aether/models/item/valkyrie_gloves_diamond_trim.json new file mode 100644 index 0000000000..6dd0a1860f --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/valkyrie_gloves_diamond_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/valkyrie_gloves", + "layer1": "aether:trims/items/gloves_trim_diamond" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/valkyrie_gloves_emerald_trim.json b/src/generated/resources/assets/aether/models/item/valkyrie_gloves_emerald_trim.json new file mode 100644 index 0000000000..24cd60aa88 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/valkyrie_gloves_emerald_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/valkyrie_gloves", + "layer1": "aether:trims/items/gloves_trim_emerald" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/valkyrie_gloves_gold_trim.json b/src/generated/resources/assets/aether/models/item/valkyrie_gloves_gold_trim.json new file mode 100644 index 0000000000..dc81b65d31 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/valkyrie_gloves_gold_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/valkyrie_gloves", + "layer1": "aether:trims/items/gloves_trim_gold" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/valkyrie_gloves_iron_trim.json b/src/generated/resources/assets/aether/models/item/valkyrie_gloves_iron_trim.json new file mode 100644 index 0000000000..0188441c9b --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/valkyrie_gloves_iron_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/valkyrie_gloves", + "layer1": "aether:trims/items/gloves_trim_iron" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/valkyrie_gloves_lapis_trim.json b/src/generated/resources/assets/aether/models/item/valkyrie_gloves_lapis_trim.json new file mode 100644 index 0000000000..695bf11ce8 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/valkyrie_gloves_lapis_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/valkyrie_gloves", + "layer1": "aether:trims/items/gloves_trim_lapis" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/valkyrie_gloves_netherite_trim.json b/src/generated/resources/assets/aether/models/item/valkyrie_gloves_netherite_trim.json new file mode 100644 index 0000000000..0b5e8b33c6 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/valkyrie_gloves_netherite_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/valkyrie_gloves", + "layer1": "aether:trims/items/gloves_trim_netherite" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/valkyrie_gloves_quartz_trim.json b/src/generated/resources/assets/aether/models/item/valkyrie_gloves_quartz_trim.json new file mode 100644 index 0000000000..5fced3de2b --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/valkyrie_gloves_quartz_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/valkyrie_gloves", + "layer1": "aether:trims/items/gloves_trim_quartz" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/valkyrie_gloves_redstone_trim.json b/src/generated/resources/assets/aether/models/item/valkyrie_gloves_redstone_trim.json new file mode 100644 index 0000000000..d4e4c485c5 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/valkyrie_gloves_redstone_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/valkyrie_gloves", + "layer1": "aether:trims/items/gloves_trim_redstone" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/zanite_boots.json b/src/generated/resources/assets/aether/models/item/zanite_boots.json index 63eb29f13e..f09c8e7a4e 100644 --- a/src/generated/resources/assets/aether/models/item/zanite_boots.json +++ b/src/generated/resources/assets/aether/models/item/zanite_boots.json @@ -1,5 +1,67 @@ { "parent": "minecraft:item/generated", + "overrides": [ + { + "model": "aether:item/zanite_boots_quartz_trim", + "predicate": { + "minecraft:trim_type": 0.1 + } + }, + { + "model": "aether:item/zanite_boots_iron_trim", + "predicate": { + "minecraft:trim_type": 0.2 + } + }, + { + "model": "aether:item/zanite_boots_netherite_trim", + "predicate": { + "minecraft:trim_type": 0.3 + } + }, + { + "model": "aether:item/zanite_boots_redstone_trim", + "predicate": { + "minecraft:trim_type": 0.4 + } + }, + { + "model": "aether:item/zanite_boots_copper_trim", + "predicate": { + "minecraft:trim_type": 0.5 + } + }, + { + "model": "aether:item/zanite_boots_gold_trim", + "predicate": { + "minecraft:trim_type": 0.6 + } + }, + { + "model": "aether:item/zanite_boots_emerald_trim", + "predicate": { + "minecraft:trim_type": 0.7 + } + }, + { + "model": "aether:item/zanite_boots_diamond_trim", + "predicate": { + "minecraft:trim_type": 0.8 + } + }, + { + "model": "aether:item/zanite_boots_lapis_trim", + "predicate": { + "minecraft:trim_type": 0.9 + } + }, + { + "model": "aether:item/zanite_boots_amethyst_trim", + "predicate": { + "minecraft:trim_type": 1.0 + } + } + ], "textures": { "layer0": "aether:item/armor/zanite_boots" } diff --git a/src/generated/resources/assets/aether/models/item/zanite_boots_amethyst_trim.json b/src/generated/resources/assets/aether/models/item/zanite_boots_amethyst_trim.json new file mode 100644 index 0000000000..dcb10140e1 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/zanite_boots_amethyst_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/zanite_boots", + "layer1": "minecraft:trims/items/boots_trim_amethyst" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/zanite_boots_copper_trim.json b/src/generated/resources/assets/aether/models/item/zanite_boots_copper_trim.json new file mode 100644 index 0000000000..360ad2eca4 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/zanite_boots_copper_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/zanite_boots", + "layer1": "minecraft:trims/items/boots_trim_copper" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/zanite_boots_diamond_trim.json b/src/generated/resources/assets/aether/models/item/zanite_boots_diamond_trim.json new file mode 100644 index 0000000000..273c1f8272 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/zanite_boots_diamond_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/zanite_boots", + "layer1": "minecraft:trims/items/boots_trim_diamond" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/zanite_boots_emerald_trim.json b/src/generated/resources/assets/aether/models/item/zanite_boots_emerald_trim.json new file mode 100644 index 0000000000..183e99d5ab --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/zanite_boots_emerald_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/zanite_boots", + "layer1": "minecraft:trims/items/boots_trim_emerald" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/zanite_boots_gold_trim.json b/src/generated/resources/assets/aether/models/item/zanite_boots_gold_trim.json new file mode 100644 index 0000000000..f089cb1cf4 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/zanite_boots_gold_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/zanite_boots", + "layer1": "minecraft:trims/items/boots_trim_gold" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/zanite_boots_iron_trim.json b/src/generated/resources/assets/aether/models/item/zanite_boots_iron_trim.json new file mode 100644 index 0000000000..8651454666 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/zanite_boots_iron_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/zanite_boots", + "layer1": "minecraft:trims/items/boots_trim_iron" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/zanite_boots_lapis_trim.json b/src/generated/resources/assets/aether/models/item/zanite_boots_lapis_trim.json new file mode 100644 index 0000000000..0f3fb4f4d9 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/zanite_boots_lapis_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/zanite_boots", + "layer1": "minecraft:trims/items/boots_trim_lapis" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/zanite_boots_netherite_trim.json b/src/generated/resources/assets/aether/models/item/zanite_boots_netherite_trim.json new file mode 100644 index 0000000000..5cd3ae8fae --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/zanite_boots_netherite_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/zanite_boots", + "layer1": "minecraft:trims/items/boots_trim_netherite" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/zanite_boots_quartz_trim.json b/src/generated/resources/assets/aether/models/item/zanite_boots_quartz_trim.json new file mode 100644 index 0000000000..270550b9c1 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/zanite_boots_quartz_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/zanite_boots", + "layer1": "minecraft:trims/items/boots_trim_quartz" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/zanite_boots_redstone_trim.json b/src/generated/resources/assets/aether/models/item/zanite_boots_redstone_trim.json new file mode 100644 index 0000000000..ec5351dec9 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/zanite_boots_redstone_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/zanite_boots", + "layer1": "minecraft:trims/items/boots_trim_redstone" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/zanite_chestplate.json b/src/generated/resources/assets/aether/models/item/zanite_chestplate.json index a9605919e7..fd2c47f076 100644 --- a/src/generated/resources/assets/aether/models/item/zanite_chestplate.json +++ b/src/generated/resources/assets/aether/models/item/zanite_chestplate.json @@ -1,5 +1,67 @@ { "parent": "minecraft:item/generated", + "overrides": [ + { + "model": "aether:item/zanite_chestplate_quartz_trim", + "predicate": { + "minecraft:trim_type": 0.1 + } + }, + { + "model": "aether:item/zanite_chestplate_iron_trim", + "predicate": { + "minecraft:trim_type": 0.2 + } + }, + { + "model": "aether:item/zanite_chestplate_netherite_trim", + "predicate": { + "minecraft:trim_type": 0.3 + } + }, + { + "model": "aether:item/zanite_chestplate_redstone_trim", + "predicate": { + "minecraft:trim_type": 0.4 + } + }, + { + "model": "aether:item/zanite_chestplate_copper_trim", + "predicate": { + "minecraft:trim_type": 0.5 + } + }, + { + "model": "aether:item/zanite_chestplate_gold_trim", + "predicate": { + "minecraft:trim_type": 0.6 + } + }, + { + "model": "aether:item/zanite_chestplate_emerald_trim", + "predicate": { + "minecraft:trim_type": 0.7 + } + }, + { + "model": "aether:item/zanite_chestplate_diamond_trim", + "predicate": { + "minecraft:trim_type": 0.8 + } + }, + { + "model": "aether:item/zanite_chestplate_lapis_trim", + "predicate": { + "minecraft:trim_type": 0.9 + } + }, + { + "model": "aether:item/zanite_chestplate_amethyst_trim", + "predicate": { + "minecraft:trim_type": 1.0 + } + } + ], "textures": { "layer0": "aether:item/armor/zanite_chestplate" } diff --git a/src/generated/resources/assets/aether/models/item/zanite_chestplate_amethyst_trim.json b/src/generated/resources/assets/aether/models/item/zanite_chestplate_amethyst_trim.json new file mode 100644 index 0000000000..f689d08dda --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/zanite_chestplate_amethyst_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/zanite_chestplate", + "layer1": "minecraft:trims/items/chestplate_trim_amethyst" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/zanite_chestplate_copper_trim.json b/src/generated/resources/assets/aether/models/item/zanite_chestplate_copper_trim.json new file mode 100644 index 0000000000..3d97f81dba --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/zanite_chestplate_copper_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/zanite_chestplate", + "layer1": "minecraft:trims/items/chestplate_trim_copper" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/zanite_chestplate_diamond_trim.json b/src/generated/resources/assets/aether/models/item/zanite_chestplate_diamond_trim.json new file mode 100644 index 0000000000..8019e4b55f --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/zanite_chestplate_diamond_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/zanite_chestplate", + "layer1": "minecraft:trims/items/chestplate_trim_diamond" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/zanite_chestplate_emerald_trim.json b/src/generated/resources/assets/aether/models/item/zanite_chestplate_emerald_trim.json new file mode 100644 index 0000000000..46d686d7a4 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/zanite_chestplate_emerald_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/zanite_chestplate", + "layer1": "minecraft:trims/items/chestplate_trim_emerald" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/zanite_chestplate_gold_trim.json b/src/generated/resources/assets/aether/models/item/zanite_chestplate_gold_trim.json new file mode 100644 index 0000000000..07f78da7e4 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/zanite_chestplate_gold_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/zanite_chestplate", + "layer1": "minecraft:trims/items/chestplate_trim_gold" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/zanite_chestplate_iron_trim.json b/src/generated/resources/assets/aether/models/item/zanite_chestplate_iron_trim.json new file mode 100644 index 0000000000..03b1a1cec3 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/zanite_chestplate_iron_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/zanite_chestplate", + "layer1": "minecraft:trims/items/chestplate_trim_iron" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/zanite_chestplate_lapis_trim.json b/src/generated/resources/assets/aether/models/item/zanite_chestplate_lapis_trim.json new file mode 100644 index 0000000000..6f84859036 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/zanite_chestplate_lapis_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/zanite_chestplate", + "layer1": "minecraft:trims/items/chestplate_trim_lapis" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/zanite_chestplate_netherite_trim.json b/src/generated/resources/assets/aether/models/item/zanite_chestplate_netherite_trim.json new file mode 100644 index 0000000000..31986206cc --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/zanite_chestplate_netherite_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/zanite_chestplate", + "layer1": "minecraft:trims/items/chestplate_trim_netherite" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/zanite_chestplate_quartz_trim.json b/src/generated/resources/assets/aether/models/item/zanite_chestplate_quartz_trim.json new file mode 100644 index 0000000000..902e5e3e27 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/zanite_chestplate_quartz_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/zanite_chestplate", + "layer1": "minecraft:trims/items/chestplate_trim_quartz" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/zanite_chestplate_redstone_trim.json b/src/generated/resources/assets/aether/models/item/zanite_chestplate_redstone_trim.json new file mode 100644 index 0000000000..41c2c77d80 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/zanite_chestplate_redstone_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/zanite_chestplate", + "layer1": "minecraft:trims/items/chestplate_trim_redstone" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/zanite_gloves.json b/src/generated/resources/assets/aether/models/item/zanite_gloves.json index 54cb85a199..8199a2176f 100644 --- a/src/generated/resources/assets/aether/models/item/zanite_gloves.json +++ b/src/generated/resources/assets/aether/models/item/zanite_gloves.json @@ -1,5 +1,67 @@ { "parent": "minecraft:item/generated", + "overrides": [ + { + "model": "aether:item/zanite_gloves_quartz_trim", + "predicate": { + "minecraft:trim_type": 0.1 + } + }, + { + "model": "aether:item/zanite_gloves_iron_trim", + "predicate": { + "minecraft:trim_type": 0.2 + } + }, + { + "model": "aether:item/zanite_gloves_netherite_trim", + "predicate": { + "minecraft:trim_type": 0.3 + } + }, + { + "model": "aether:item/zanite_gloves_redstone_trim", + "predicate": { + "minecraft:trim_type": 0.4 + } + }, + { + "model": "aether:item/zanite_gloves_copper_trim", + "predicate": { + "minecraft:trim_type": 0.5 + } + }, + { + "model": "aether:item/zanite_gloves_gold_trim", + "predicate": { + "minecraft:trim_type": 0.6 + } + }, + { + "model": "aether:item/zanite_gloves_emerald_trim", + "predicate": { + "minecraft:trim_type": 0.7 + } + }, + { + "model": "aether:item/zanite_gloves_diamond_trim", + "predicate": { + "minecraft:trim_type": 0.8 + } + }, + { + "model": "aether:item/zanite_gloves_lapis_trim", + "predicate": { + "minecraft:trim_type": 0.9 + } + }, + { + "model": "aether:item/zanite_gloves_amethyst_trim", + "predicate": { + "minecraft:trim_type": 1.0 + } + } + ], "textures": { "layer0": "aether:item/accessories/zanite_gloves" } diff --git a/src/generated/resources/assets/aether/models/item/zanite_gloves_amethyst_trim.json b/src/generated/resources/assets/aether/models/item/zanite_gloves_amethyst_trim.json new file mode 100644 index 0000000000..f59ee69a26 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/zanite_gloves_amethyst_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/zanite_gloves", + "layer1": "aether:trims/items/gloves_trim_amethyst" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/zanite_gloves_copper_trim.json b/src/generated/resources/assets/aether/models/item/zanite_gloves_copper_trim.json new file mode 100644 index 0000000000..e6abf31abf --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/zanite_gloves_copper_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/zanite_gloves", + "layer1": "aether:trims/items/gloves_trim_copper" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/zanite_gloves_diamond_trim.json b/src/generated/resources/assets/aether/models/item/zanite_gloves_diamond_trim.json new file mode 100644 index 0000000000..5f0dc6c31c --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/zanite_gloves_diamond_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/zanite_gloves", + "layer1": "aether:trims/items/gloves_trim_diamond" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/zanite_gloves_emerald_trim.json b/src/generated/resources/assets/aether/models/item/zanite_gloves_emerald_trim.json new file mode 100644 index 0000000000..b165c35355 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/zanite_gloves_emerald_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/zanite_gloves", + "layer1": "aether:trims/items/gloves_trim_emerald" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/zanite_gloves_gold_trim.json b/src/generated/resources/assets/aether/models/item/zanite_gloves_gold_trim.json new file mode 100644 index 0000000000..f0fabc40b5 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/zanite_gloves_gold_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/zanite_gloves", + "layer1": "aether:trims/items/gloves_trim_gold" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/zanite_gloves_iron_trim.json b/src/generated/resources/assets/aether/models/item/zanite_gloves_iron_trim.json new file mode 100644 index 0000000000..4d44aa9242 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/zanite_gloves_iron_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/zanite_gloves", + "layer1": "aether:trims/items/gloves_trim_iron" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/zanite_gloves_lapis_trim.json b/src/generated/resources/assets/aether/models/item/zanite_gloves_lapis_trim.json new file mode 100644 index 0000000000..d5a527d635 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/zanite_gloves_lapis_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/zanite_gloves", + "layer1": "aether:trims/items/gloves_trim_lapis" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/zanite_gloves_netherite_trim.json b/src/generated/resources/assets/aether/models/item/zanite_gloves_netherite_trim.json new file mode 100644 index 0000000000..0924c07553 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/zanite_gloves_netherite_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/zanite_gloves", + "layer1": "aether:trims/items/gloves_trim_netherite" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/zanite_gloves_quartz_trim.json b/src/generated/resources/assets/aether/models/item/zanite_gloves_quartz_trim.json new file mode 100644 index 0000000000..627634d36a --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/zanite_gloves_quartz_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/zanite_gloves", + "layer1": "aether:trims/items/gloves_trim_quartz" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/zanite_gloves_redstone_trim.json b/src/generated/resources/assets/aether/models/item/zanite_gloves_redstone_trim.json new file mode 100644 index 0000000000..05db82045e --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/zanite_gloves_redstone_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/accessories/zanite_gloves", + "layer1": "aether:trims/items/gloves_trim_redstone" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/zanite_helmet.json b/src/generated/resources/assets/aether/models/item/zanite_helmet.json index c4ac0bc631..556a234a67 100644 --- a/src/generated/resources/assets/aether/models/item/zanite_helmet.json +++ b/src/generated/resources/assets/aether/models/item/zanite_helmet.json @@ -1,5 +1,67 @@ { "parent": "minecraft:item/generated", + "overrides": [ + { + "model": "aether:item/zanite_helmet_quartz_trim", + "predicate": { + "minecraft:trim_type": 0.1 + } + }, + { + "model": "aether:item/zanite_helmet_iron_trim", + "predicate": { + "minecraft:trim_type": 0.2 + } + }, + { + "model": "aether:item/zanite_helmet_netherite_trim", + "predicate": { + "minecraft:trim_type": 0.3 + } + }, + { + "model": "aether:item/zanite_helmet_redstone_trim", + "predicate": { + "minecraft:trim_type": 0.4 + } + }, + { + "model": "aether:item/zanite_helmet_copper_trim", + "predicate": { + "minecraft:trim_type": 0.5 + } + }, + { + "model": "aether:item/zanite_helmet_gold_trim", + "predicate": { + "minecraft:trim_type": 0.6 + } + }, + { + "model": "aether:item/zanite_helmet_emerald_trim", + "predicate": { + "minecraft:trim_type": 0.7 + } + }, + { + "model": "aether:item/zanite_helmet_diamond_trim", + "predicate": { + "minecraft:trim_type": 0.8 + } + }, + { + "model": "aether:item/zanite_helmet_lapis_trim", + "predicate": { + "minecraft:trim_type": 0.9 + } + }, + { + "model": "aether:item/zanite_helmet_amethyst_trim", + "predicate": { + "minecraft:trim_type": 1.0 + } + } + ], "textures": { "layer0": "aether:item/armor/zanite_helmet" } diff --git a/src/generated/resources/assets/aether/models/item/zanite_helmet_amethyst_trim.json b/src/generated/resources/assets/aether/models/item/zanite_helmet_amethyst_trim.json new file mode 100644 index 0000000000..a3163ee5d6 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/zanite_helmet_amethyst_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/zanite_helmet", + "layer1": "minecraft:trims/items/helmet_trim_amethyst" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/zanite_helmet_copper_trim.json b/src/generated/resources/assets/aether/models/item/zanite_helmet_copper_trim.json new file mode 100644 index 0000000000..492f0adbb0 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/zanite_helmet_copper_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/zanite_helmet", + "layer1": "minecraft:trims/items/helmet_trim_copper" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/zanite_helmet_diamond_trim.json b/src/generated/resources/assets/aether/models/item/zanite_helmet_diamond_trim.json new file mode 100644 index 0000000000..1500d46925 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/zanite_helmet_diamond_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/zanite_helmet", + "layer1": "minecraft:trims/items/helmet_trim_diamond" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/zanite_helmet_emerald_trim.json b/src/generated/resources/assets/aether/models/item/zanite_helmet_emerald_trim.json new file mode 100644 index 0000000000..ff8673ef32 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/zanite_helmet_emerald_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/zanite_helmet", + "layer1": "minecraft:trims/items/helmet_trim_emerald" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/zanite_helmet_gold_trim.json b/src/generated/resources/assets/aether/models/item/zanite_helmet_gold_trim.json new file mode 100644 index 0000000000..7622a13c16 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/zanite_helmet_gold_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/zanite_helmet", + "layer1": "minecraft:trims/items/helmet_trim_gold" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/zanite_helmet_iron_trim.json b/src/generated/resources/assets/aether/models/item/zanite_helmet_iron_trim.json new file mode 100644 index 0000000000..7be8267a69 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/zanite_helmet_iron_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/zanite_helmet", + "layer1": "minecraft:trims/items/helmet_trim_iron" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/zanite_helmet_lapis_trim.json b/src/generated/resources/assets/aether/models/item/zanite_helmet_lapis_trim.json new file mode 100644 index 0000000000..e8b978683c --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/zanite_helmet_lapis_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/zanite_helmet", + "layer1": "minecraft:trims/items/helmet_trim_lapis" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/zanite_helmet_netherite_trim.json b/src/generated/resources/assets/aether/models/item/zanite_helmet_netherite_trim.json new file mode 100644 index 0000000000..55f29a472c --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/zanite_helmet_netherite_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/zanite_helmet", + "layer1": "minecraft:trims/items/helmet_trim_netherite" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/zanite_helmet_quartz_trim.json b/src/generated/resources/assets/aether/models/item/zanite_helmet_quartz_trim.json new file mode 100644 index 0000000000..a26fd5a8c8 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/zanite_helmet_quartz_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/zanite_helmet", + "layer1": "minecraft:trims/items/helmet_trim_quartz" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/zanite_helmet_redstone_trim.json b/src/generated/resources/assets/aether/models/item/zanite_helmet_redstone_trim.json new file mode 100644 index 0000000000..2f03aaef3d --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/zanite_helmet_redstone_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/zanite_helmet", + "layer1": "minecraft:trims/items/helmet_trim_redstone" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/zanite_leggings.json b/src/generated/resources/assets/aether/models/item/zanite_leggings.json index 0f8768e1f4..1541d24046 100644 --- a/src/generated/resources/assets/aether/models/item/zanite_leggings.json +++ b/src/generated/resources/assets/aether/models/item/zanite_leggings.json @@ -1,5 +1,67 @@ { "parent": "minecraft:item/generated", + "overrides": [ + { + "model": "aether:item/zanite_leggings_quartz_trim", + "predicate": { + "minecraft:trim_type": 0.1 + } + }, + { + "model": "aether:item/zanite_leggings_iron_trim", + "predicate": { + "minecraft:trim_type": 0.2 + } + }, + { + "model": "aether:item/zanite_leggings_netherite_trim", + "predicate": { + "minecraft:trim_type": 0.3 + } + }, + { + "model": "aether:item/zanite_leggings_redstone_trim", + "predicate": { + "minecraft:trim_type": 0.4 + } + }, + { + "model": "aether:item/zanite_leggings_copper_trim", + "predicate": { + "minecraft:trim_type": 0.5 + } + }, + { + "model": "aether:item/zanite_leggings_gold_trim", + "predicate": { + "minecraft:trim_type": 0.6 + } + }, + { + "model": "aether:item/zanite_leggings_emerald_trim", + "predicate": { + "minecraft:trim_type": 0.7 + } + }, + { + "model": "aether:item/zanite_leggings_diamond_trim", + "predicate": { + "minecraft:trim_type": 0.8 + } + }, + { + "model": "aether:item/zanite_leggings_lapis_trim", + "predicate": { + "minecraft:trim_type": 0.9 + } + }, + { + "model": "aether:item/zanite_leggings_amethyst_trim", + "predicate": { + "minecraft:trim_type": 1.0 + } + } + ], "textures": { "layer0": "aether:item/armor/zanite_leggings" } diff --git a/src/generated/resources/assets/aether/models/item/zanite_leggings_amethyst_trim.json b/src/generated/resources/assets/aether/models/item/zanite_leggings_amethyst_trim.json new file mode 100644 index 0000000000..a4d7871640 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/zanite_leggings_amethyst_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/zanite_leggings", + "layer1": "minecraft:trims/items/leggings_trim_amethyst" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/zanite_leggings_copper_trim.json b/src/generated/resources/assets/aether/models/item/zanite_leggings_copper_trim.json new file mode 100644 index 0000000000..94b820d801 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/zanite_leggings_copper_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/zanite_leggings", + "layer1": "minecraft:trims/items/leggings_trim_copper" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/zanite_leggings_diamond_trim.json b/src/generated/resources/assets/aether/models/item/zanite_leggings_diamond_trim.json new file mode 100644 index 0000000000..be64ca5b09 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/zanite_leggings_diamond_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/zanite_leggings", + "layer1": "minecraft:trims/items/leggings_trim_diamond" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/zanite_leggings_emerald_trim.json b/src/generated/resources/assets/aether/models/item/zanite_leggings_emerald_trim.json new file mode 100644 index 0000000000..0a32fad653 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/zanite_leggings_emerald_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/zanite_leggings", + "layer1": "minecraft:trims/items/leggings_trim_emerald" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/zanite_leggings_gold_trim.json b/src/generated/resources/assets/aether/models/item/zanite_leggings_gold_trim.json new file mode 100644 index 0000000000..a2cf839669 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/zanite_leggings_gold_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/zanite_leggings", + "layer1": "minecraft:trims/items/leggings_trim_gold" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/zanite_leggings_iron_trim.json b/src/generated/resources/assets/aether/models/item/zanite_leggings_iron_trim.json new file mode 100644 index 0000000000..55a6712ed6 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/zanite_leggings_iron_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/zanite_leggings", + "layer1": "minecraft:trims/items/leggings_trim_iron" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/zanite_leggings_lapis_trim.json b/src/generated/resources/assets/aether/models/item/zanite_leggings_lapis_trim.json new file mode 100644 index 0000000000..76aefd1874 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/zanite_leggings_lapis_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/zanite_leggings", + "layer1": "minecraft:trims/items/leggings_trim_lapis" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/zanite_leggings_netherite_trim.json b/src/generated/resources/assets/aether/models/item/zanite_leggings_netherite_trim.json new file mode 100644 index 0000000000..1a0c103c4d --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/zanite_leggings_netherite_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/zanite_leggings", + "layer1": "minecraft:trims/items/leggings_trim_netherite" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/zanite_leggings_quartz_trim.json b/src/generated/resources/assets/aether/models/item/zanite_leggings_quartz_trim.json new file mode 100644 index 0000000000..d07c1b3494 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/zanite_leggings_quartz_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/zanite_leggings", + "layer1": "minecraft:trims/items/leggings_trim_quartz" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/aether/models/item/zanite_leggings_redstone_trim.json b/src/generated/resources/assets/aether/models/item/zanite_leggings_redstone_trim.json new file mode 100644 index 0000000000..ee0ee5e022 --- /dev/null +++ b/src/generated/resources/assets/aether/models/item/zanite_leggings_redstone_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "aether:item/armor/zanite_leggings", + "layer1": "minecraft:trims/items/leggings_trim_redstone" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/aether_sleep.json b/src/generated/resources/data/aether/advancements/aether_sleep.json index 5a2a6a7ead..b4f3b1dac7 100644 --- a/src/generated/resources/data/aether/advancements/aether_sleep.json +++ b/src/generated/resources/data/aether/advancements/aether_sleep.json @@ -37,5 +37,6 @@ [ "aether_sleep" ] - ] + ], + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/black_moa.json b/src/generated/resources/data/aether/advancements/black_moa.json index 227995658f..094e1b9ba8 100644 --- a/src/generated/resources/data/aether/advancements/black_moa.json +++ b/src/generated/resources/data/aether/advancements/black_moa.json @@ -38,5 +38,6 @@ [ "black_moa" ] - ] + ], + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/blue_aercloud.json b/src/generated/resources/data/aether/advancements/blue_aercloud.json index 9b049e6fb9..9e2f506748 100644 --- a/src/generated/resources/data/aether/advancements/blue_aercloud.json +++ b/src/generated/resources/data/aether/advancements/blue_aercloud.json @@ -27,5 +27,6 @@ [ "blue_aercloud" ] - ] + ], + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/bronze_dungeon.json b/src/generated/resources/data/aether/advancements/bronze_dungeon.json index 4519736f3e..668d959458 100644 --- a/src/generated/resources/data/aether/advancements/bronze_dungeon.json +++ b/src/generated/resources/data/aether/advancements/bronze_dungeon.json @@ -35,5 +35,6 @@ [ "kill_slider" ] - ] + ], + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/craft_altar.json b/src/generated/resources/data/aether/advancements/craft_altar.json index c12543c67b..af6e68f49d 100644 --- a/src/generated/resources/data/aether/advancements/craft_altar.json +++ b/src/generated/resources/data/aether/advancements/craft_altar.json @@ -33,5 +33,6 @@ [ "craft_altar" ] - ] + ], + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/enchanted_gravitite.json b/src/generated/resources/data/aether/advancements/enchanted_gravitite.json index a29071865c..8f8431f32b 100644 --- a/src/generated/resources/data/aether/advancements/enchanted_gravitite.json +++ b/src/generated/resources/data/aether/advancements/enchanted_gravitite.json @@ -33,5 +33,6 @@ [ "enchanted_gravitite" ] - ] + ], + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/enter_aether.json b/src/generated/resources/data/aether/advancements/enter_aether.json index 0e90ad9f6e..ae5c9b5e77 100644 --- a/src/generated/resources/data/aether/advancements/enter_aether.json +++ b/src/generated/resources/data/aether/advancements/enter_aether.json @@ -32,5 +32,6 @@ "loot": [ "aether:advancements/enter_aether" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/gold_dungeon.json b/src/generated/resources/data/aether/advancements/gold_dungeon.json index 6bd9e60be9..5c82eefe8a 100644 --- a/src/generated/resources/data/aether/advancements/gold_dungeon.json +++ b/src/generated/resources/data/aether/advancements/gold_dungeon.json @@ -35,5 +35,6 @@ [ "kill_sun_spirit" ] - ] + ], + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/gravitite_armor.json b/src/generated/resources/data/aether/advancements/gravitite_armor.json index 1f92112db6..71d4aca646 100644 --- a/src/generated/resources/data/aether/advancements/gravitite_armor.json +++ b/src/generated/resources/data/aether/advancements/gravitite_armor.json @@ -94,5 +94,6 @@ [ "gravitite_gloves" ] - ] + ], + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/hammer_loot.json b/src/generated/resources/data/aether/advancements/hammer_loot.json index 5d6ccb510e..8a3018acad 100644 --- a/src/generated/resources/data/aether/advancements/hammer_loot.json +++ b/src/generated/resources/data/aether/advancements/hammer_loot.json @@ -34,5 +34,6 @@ [ "hammer_loot" ] - ] + ], + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/ice_accessory.json b/src/generated/resources/data/aether/advancements/ice_accessory.json index dbd2574205..804d35ef79 100644 --- a/src/generated/resources/data/aether/advancements/ice_accessory.json +++ b/src/generated/resources/data/aether/advancements/ice_accessory.json @@ -47,5 +47,6 @@ "ice_pendant", "ice_ring" ] - ] + ], + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/icestone.json b/src/generated/resources/data/aether/advancements/icestone.json index 101394ce0c..d9c24fbc4b 100644 --- a/src/generated/resources/data/aether/advancements/icestone.json +++ b/src/generated/resources/data/aether/advancements/icestone.json @@ -33,5 +33,6 @@ [ "icestone" ] - ] + ], + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/incubate_moa.json b/src/generated/resources/data/aether/advancements/incubate_moa.json index 7afc0d637b..e7df6aa6d3 100644 --- a/src/generated/resources/data/aether/advancements/incubate_moa.json +++ b/src/generated/resources/data/aether/advancements/incubate_moa.json @@ -29,5 +29,6 @@ [ "incubate_moa" ] - ] + ], + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/lance_loot.json b/src/generated/resources/data/aether/advancements/lance_loot.json index bb58ede7de..5a7f3da7b8 100644 --- a/src/generated/resources/data/aether/advancements/lance_loot.json +++ b/src/generated/resources/data/aether/advancements/lance_loot.json @@ -34,5 +34,6 @@ [ "lance_loot" ] - ] + ], + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/loreception.json b/src/generated/resources/data/aether/advancements/loreception.json index d52724c41b..bda53df10f 100644 --- a/src/generated/resources/data/aether/advancements/loreception.json +++ b/src/generated/resources/data/aether/advancements/loreception.json @@ -31,5 +31,6 @@ [ "lore_book_entry" ] - ] + ], + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/mount_phyg.json b/src/generated/resources/data/aether/advancements/mount_phyg.json index bd19f282b5..f253d9c5c6 100644 --- a/src/generated/resources/data/aether/advancements/mount_phyg.json +++ b/src/generated/resources/data/aether/advancements/mount_phyg.json @@ -37,5 +37,6 @@ [ "mount_phyg" ] - ] + ], + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/obsidian_armor.json b/src/generated/resources/data/aether/advancements/obsidian_armor.json index addee0bc6e..c5d3a90447 100644 --- a/src/generated/resources/data/aether/advancements/obsidian_armor.json +++ b/src/generated/resources/data/aether/advancements/obsidian_armor.json @@ -94,5 +94,6 @@ [ "obsidian_gloves" ] - ] + ], + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/obtain_egg.json b/src/generated/resources/data/aether/advancements/obtain_egg.json index 044724e707..876aea3769 100644 --- a/src/generated/resources/data/aether/advancements/obtain_egg.json +++ b/src/generated/resources/data/aether/advancements/obtain_egg.json @@ -1,37 +1,11 @@ { "parent": "aether:blue_aercloud", "criteria": { - "black_moa_egg": { + "moa_egg": { "conditions": { "items": [ { - "items": [ - "aether:black_moa_egg" - ] - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "blue_moa_egg": { - "conditions": { - "items": [ - { - "items": [ - "aether:blue_moa_egg" - ] - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "white_moa_egg": { - "conditions": { - "items": [ - { - "items": [ - "aether:white_moa_egg" - ] + "tag": "aether:moa_eggs" } ] }, @@ -55,9 +29,8 @@ }, "requirements": [ [ - "blue_moa_egg", - "white_moa_egg", - "black_moa_egg" + "moa_egg" ] - ] + ], + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/obtain_petal.json b/src/generated/resources/data/aether/advancements/obtain_petal.json index c83f10ac6b..aae5dabe6c 100644 --- a/src/generated/resources/data/aether/advancements/obtain_petal.json +++ b/src/generated/resources/data/aether/advancements/obtain_petal.json @@ -33,5 +33,6 @@ [ "aechor_petal" ] - ] + ], + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/phoenix_armor.json b/src/generated/resources/data/aether/advancements/phoenix_armor.json index 9715a09110..74bac2fcc4 100644 --- a/src/generated/resources/data/aether/advancements/phoenix_armor.json +++ b/src/generated/resources/data/aether/advancements/phoenix_armor.json @@ -86,5 +86,6 @@ "phoenix_boots", "phoenix_gloves" ] - ] + ], + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/read_lore.json b/src/generated/resources/data/aether/advancements/read_lore.json index 98fcbbde1f..cce1e472f4 100644 --- a/src/generated/resources/data/aether/advancements/read_lore.json +++ b/src/generated/resources/data/aether/advancements/read_lore.json @@ -25,5 +25,6 @@ [ "lore_book_entry" ] - ] + ], + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/building_blocks/aerogel_slab.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/aerogel_slab.json index 42c3a99792..eeee2806bf 100644 --- a/src/generated/resources/data/aether/advancements/recipes/building_blocks/aerogel_slab.json +++ b/src/generated/resources/data/aether/advancements/recipes/building_blocks/aerogel_slab.json @@ -30,5 +30,6 @@ "recipes": [ "aether:aerogel_slab" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/building_blocks/aerogel_slab_from_aerogel_stonecutting.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/aerogel_slab_from_aerogel_stonecutting.json index a180af79fd..0ce3e922c5 100644 --- a/src/generated/resources/data/aether/advancements/recipes/building_blocks/aerogel_slab_from_aerogel_stonecutting.json +++ b/src/generated/resources/data/aether/advancements/recipes/building_blocks/aerogel_slab_from_aerogel_stonecutting.json @@ -30,5 +30,6 @@ "recipes": [ "aether:aerogel_slab_from_aerogel_stonecutting" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/building_blocks/aerogel_stairs.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/aerogel_stairs.json index fc22cf6ea0..0e449b8566 100644 --- a/src/generated/resources/data/aether/advancements/recipes/building_blocks/aerogel_stairs.json +++ b/src/generated/resources/data/aether/advancements/recipes/building_blocks/aerogel_stairs.json @@ -30,5 +30,6 @@ "recipes": [ "aether:aerogel_stairs" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/building_blocks/aerogel_stairs_from_aerogel_stonecutting.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/aerogel_stairs_from_aerogel_stonecutting.json index 2cf1412615..03c57ef68d 100644 --- a/src/generated/resources/data/aether/advancements/recipes/building_blocks/aerogel_stairs_from_aerogel_stonecutting.json +++ b/src/generated/resources/data/aether/advancements/recipes/building_blocks/aerogel_stairs_from_aerogel_stonecutting.json @@ -30,5 +30,6 @@ "recipes": [ "aether:aerogel_stairs_from_aerogel_stonecutting" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/building_blocks/ambrosium_block.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/ambrosium_block.json index 62fd1ea288..f982af9106 100644 --- a/src/generated/resources/data/aether/advancements/recipes/building_blocks/ambrosium_block.json +++ b/src/generated/resources/data/aether/advancements/recipes/building_blocks/ambrosium_block.json @@ -30,5 +30,6 @@ "recipes": [ "aether:ambrosium_block" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/building_blocks/angelic_slab.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/angelic_slab.json index 7b62a2bde8..ebd6d67546 100644 --- a/src/generated/resources/data/aether/advancements/recipes/building_blocks/angelic_slab.json +++ b/src/generated/resources/data/aether/advancements/recipes/building_blocks/angelic_slab.json @@ -30,5 +30,6 @@ "recipes": [ "aether:angelic_slab" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/building_blocks/angelic_slab_from_angelic_stone_stonecutting.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/angelic_slab_from_angelic_stone_stonecutting.json index a36232fc46..72ac8e8992 100644 --- a/src/generated/resources/data/aether/advancements/recipes/building_blocks/angelic_slab_from_angelic_stone_stonecutting.json +++ b/src/generated/resources/data/aether/advancements/recipes/building_blocks/angelic_slab_from_angelic_stone_stonecutting.json @@ -30,5 +30,6 @@ "recipes": [ "aether:angelic_slab_from_angelic_stone_stonecutting" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/building_blocks/angelic_stairs.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/angelic_stairs.json index 0dae5a9d13..0835b0802d 100644 --- a/src/generated/resources/data/aether/advancements/recipes/building_blocks/angelic_stairs.json +++ b/src/generated/resources/data/aether/advancements/recipes/building_blocks/angelic_stairs.json @@ -30,5 +30,6 @@ "recipes": [ "aether:angelic_stairs" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/building_blocks/angelic_stairs_from_angelic_stone_stonecutting.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/angelic_stairs_from_angelic_stone_stonecutting.json index 5b449f53ff..846e1242f8 100644 --- a/src/generated/resources/data/aether/advancements/recipes/building_blocks/angelic_stairs_from_angelic_stone_stonecutting.json +++ b/src/generated/resources/data/aether/advancements/recipes/building_blocks/angelic_stairs_from_angelic_stone_stonecutting.json @@ -30,5 +30,6 @@ "recipes": [ "aether:angelic_stairs_from_angelic_stone_stonecutting" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/building_blocks/angelic_stone_from_light_angelic_stone_stonecutting.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/angelic_stone_from_light_angelic_stone_stonecutting.json index 5a4380323b..28a06d5b12 100644 --- a/src/generated/resources/data/aether/advancements/recipes/building_blocks/angelic_stone_from_light_angelic_stone_stonecutting.json +++ b/src/generated/resources/data/aether/advancements/recipes/building_blocks/angelic_stone_from_light_angelic_stone_stonecutting.json @@ -30,5 +30,6 @@ "recipes": [ "aether:angelic_stone_from_light_angelic_stone_stonecutting" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/building_blocks/angelic_stone_from_pillar_stonecutting.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/angelic_stone_from_pillar_stonecutting.json index 809e4257ee..e67a8b45cf 100644 --- a/src/generated/resources/data/aether/advancements/recipes/building_blocks/angelic_stone_from_pillar_stonecutting.json +++ b/src/generated/resources/data/aether/advancements/recipes/building_blocks/angelic_stone_from_pillar_stonecutting.json @@ -30,5 +30,6 @@ "recipes": [ "aether:angelic_stone_from_pillar_stonecutting" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/building_blocks/angelic_stone_from_pillar_top_stonecutting.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/angelic_stone_from_pillar_top_stonecutting.json index c0fbe82665..64429d7642 100644 --- a/src/generated/resources/data/aether/advancements/recipes/building_blocks/angelic_stone_from_pillar_top_stonecutting.json +++ b/src/generated/resources/data/aether/advancements/recipes/building_blocks/angelic_stone_from_pillar_top_stonecutting.json @@ -30,5 +30,6 @@ "recipes": [ "aether:angelic_stone_from_pillar_top_stonecutting" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/building_blocks/blue_aercloud_freezing.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/blue_aercloud_freezing.json index 424c97b5fa..bfb2c0fd84 100644 --- a/src/generated/resources/data/aether/advancements/recipes/building_blocks/blue_aercloud_freezing.json +++ b/src/generated/resources/data/aether/advancements/recipes/building_blocks/blue_aercloud_freezing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:blue_aercloud_freezing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/building_blocks/blue_ice_freezing.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/blue_ice_freezing.json index ede186ef23..4ad8bc3639 100644 --- a/src/generated/resources/data/aether/advancements/recipes/building_blocks/blue_ice_freezing.json +++ b/src/generated/resources/data/aether/advancements/recipes/building_blocks/blue_ice_freezing.json @@ -28,5 +28,6 @@ "recipes": [ "aether:blue_ice_freezing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/building_blocks/carved_slab.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/carved_slab.json index dd791acdd1..4e4122cb78 100644 --- a/src/generated/resources/data/aether/advancements/recipes/building_blocks/carved_slab.json +++ b/src/generated/resources/data/aether/advancements/recipes/building_blocks/carved_slab.json @@ -30,5 +30,6 @@ "recipes": [ "aether:carved_slab" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/building_blocks/carved_slab_from_carved_stone_stonecutting.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/carved_slab_from_carved_stone_stonecutting.json index 3f1e035060..27dcb3644e 100644 --- a/src/generated/resources/data/aether/advancements/recipes/building_blocks/carved_slab_from_carved_stone_stonecutting.json +++ b/src/generated/resources/data/aether/advancements/recipes/building_blocks/carved_slab_from_carved_stone_stonecutting.json @@ -30,5 +30,6 @@ "recipes": [ "aether:carved_slab_from_carved_stone_stonecutting" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/building_blocks/carved_stairs.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/carved_stairs.json index 223565304f..8d7c1190fb 100644 --- a/src/generated/resources/data/aether/advancements/recipes/building_blocks/carved_stairs.json +++ b/src/generated/resources/data/aether/advancements/recipes/building_blocks/carved_stairs.json @@ -30,5 +30,6 @@ "recipes": [ "aether:carved_stairs" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/building_blocks/carved_stairs_from_carved_stone_stonecutting.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/carved_stairs_from_carved_stone_stonecutting.json index 73419a6983..094dc21a80 100644 --- a/src/generated/resources/data/aether/advancements/recipes/building_blocks/carved_stairs_from_carved_stone_stonecutting.json +++ b/src/generated/resources/data/aether/advancements/recipes/building_blocks/carved_stairs_from_carved_stone_stonecutting.json @@ -30,5 +30,6 @@ "recipes": [ "aether:carved_stairs_from_carved_stone_stonecutting" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/building_blocks/carved_stone_from_sentry_stone_stonecutting.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/carved_stone_from_sentry_stone_stonecutting.json index 2b14d7c30c..89d353db89 100644 --- a/src/generated/resources/data/aether/advancements/recipes/building_blocks/carved_stone_from_sentry_stone_stonecutting.json +++ b/src/generated/resources/data/aether/advancements/recipes/building_blocks/carved_stone_from_sentry_stone_stonecutting.json @@ -30,5 +30,6 @@ "recipes": [ "aether:carved_stone_from_sentry_stone_stonecutting" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/building_blocks/crystal_leaves_freezing.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/crystal_leaves_freezing.json index a346bb1e8f..af50d7cf37 100644 --- a/src/generated/resources/data/aether/advancements/recipes/building_blocks/crystal_leaves_freezing.json +++ b/src/generated/resources/data/aether/advancements/recipes/building_blocks/crystal_leaves_freezing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:crystal_leaves_freezing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/building_blocks/enchanted_gravitite_enchanting.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/enchanted_gravitite_enchanting.json index e6ec10e662..bc97e793c0 100644 --- a/src/generated/resources/data/aether/advancements/recipes/building_blocks/enchanted_gravitite_enchanting.json +++ b/src/generated/resources/data/aether/advancements/recipes/building_blocks/enchanted_gravitite_enchanting.json @@ -30,5 +30,6 @@ "recipes": [ "aether:enchanted_gravitite_enchanting" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/building_blocks/golden_aercloud_enchanting.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/golden_aercloud_enchanting.json index abc725e321..d3ef486294 100644 --- a/src/generated/resources/data/aether/advancements/recipes/building_blocks/golden_aercloud_enchanting.json +++ b/src/generated/resources/data/aether/advancements/recipes/building_blocks/golden_aercloud_enchanting.json @@ -30,5 +30,6 @@ "recipes": [ "aether:golden_aercloud_enchanting" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/building_blocks/golden_oak_wood.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/golden_oak_wood.json index 13cebd56bf..0ff9a04bbf 100644 --- a/src/generated/resources/data/aether/advancements/recipes/building_blocks/golden_oak_wood.json +++ b/src/generated/resources/data/aether/advancements/recipes/building_blocks/golden_oak_wood.json @@ -30,5 +30,6 @@ "recipes": [ "aether:golden_oak_wood" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/building_blocks/hellfire_slab.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/hellfire_slab.json index 8a6dbb454f..19ed76f958 100644 --- a/src/generated/resources/data/aether/advancements/recipes/building_blocks/hellfire_slab.json +++ b/src/generated/resources/data/aether/advancements/recipes/building_blocks/hellfire_slab.json @@ -30,5 +30,6 @@ "recipes": [ "aether:hellfire_slab" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/building_blocks/hellfire_slab_from_hellfire_stone_stonecutting.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/hellfire_slab_from_hellfire_stone_stonecutting.json index edf5d44a2f..ef25afe13b 100644 --- a/src/generated/resources/data/aether/advancements/recipes/building_blocks/hellfire_slab_from_hellfire_stone_stonecutting.json +++ b/src/generated/resources/data/aether/advancements/recipes/building_blocks/hellfire_slab_from_hellfire_stone_stonecutting.json @@ -30,5 +30,6 @@ "recipes": [ "aether:hellfire_slab_from_hellfire_stone_stonecutting" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/building_blocks/hellfire_stairs.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/hellfire_stairs.json index 094660179d..4f25580f62 100644 --- a/src/generated/resources/data/aether/advancements/recipes/building_blocks/hellfire_stairs.json +++ b/src/generated/resources/data/aether/advancements/recipes/building_blocks/hellfire_stairs.json @@ -30,5 +30,6 @@ "recipes": [ "aether:hellfire_stairs" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/building_blocks/hellfire_stairs_from_hellfire_stone_stonecutting.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/hellfire_stairs_from_hellfire_stone_stonecutting.json index bf8f3c4016..5053de2967 100644 --- a/src/generated/resources/data/aether/advancements/recipes/building_blocks/hellfire_stairs_from_hellfire_stone_stonecutting.json +++ b/src/generated/resources/data/aether/advancements/recipes/building_blocks/hellfire_stairs_from_hellfire_stone_stonecutting.json @@ -30,5 +30,6 @@ "recipes": [ "aether:hellfire_stairs_from_hellfire_stone_stonecutting" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/building_blocks/hellfire_stone_from_light_hellfire_stone_stonecutting.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/hellfire_stone_from_light_hellfire_stone_stonecutting.json index ca3cf626dc..d0a28339aa 100644 --- a/src/generated/resources/data/aether/advancements/recipes/building_blocks/hellfire_stone_from_light_hellfire_stone_stonecutting.json +++ b/src/generated/resources/data/aether/advancements/recipes/building_blocks/hellfire_stone_from_light_hellfire_stone_stonecutting.json @@ -30,5 +30,6 @@ "recipes": [ "aether:hellfire_stone_from_light_hellfire_stone_stonecutting" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/building_blocks/holystone_brick_slab.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/holystone_brick_slab.json index 03f8fc1977..35a6076b8e 100644 --- a/src/generated/resources/data/aether/advancements/recipes/building_blocks/holystone_brick_slab.json +++ b/src/generated/resources/data/aether/advancements/recipes/building_blocks/holystone_brick_slab.json @@ -30,5 +30,6 @@ "recipes": [ "aether:holystone_brick_slab" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/building_blocks/holystone_brick_slab_from_holystone_bricks_stonecutting.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/holystone_brick_slab_from_holystone_bricks_stonecutting.json index 0a4fe5cb01..3b3b4668bc 100644 --- a/src/generated/resources/data/aether/advancements/recipes/building_blocks/holystone_brick_slab_from_holystone_bricks_stonecutting.json +++ b/src/generated/resources/data/aether/advancements/recipes/building_blocks/holystone_brick_slab_from_holystone_bricks_stonecutting.json @@ -30,5 +30,6 @@ "recipes": [ "aether:holystone_brick_slab_from_holystone_bricks_stonecutting" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/building_blocks/holystone_brick_slab_from_holystone_stonecutting.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/holystone_brick_slab_from_holystone_stonecutting.json index d697247178..97555b411f 100644 --- a/src/generated/resources/data/aether/advancements/recipes/building_blocks/holystone_brick_slab_from_holystone_stonecutting.json +++ b/src/generated/resources/data/aether/advancements/recipes/building_blocks/holystone_brick_slab_from_holystone_stonecutting.json @@ -30,5 +30,6 @@ "recipes": [ "aether:holystone_brick_slab_from_holystone_stonecutting" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/building_blocks/holystone_brick_stairs.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/holystone_brick_stairs.json index dfa2e93890..7165617879 100644 --- a/src/generated/resources/data/aether/advancements/recipes/building_blocks/holystone_brick_stairs.json +++ b/src/generated/resources/data/aether/advancements/recipes/building_blocks/holystone_brick_stairs.json @@ -30,5 +30,6 @@ "recipes": [ "aether:holystone_brick_stairs" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/building_blocks/holystone_brick_stairs_from_holystone_bricks_stonecutting.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/holystone_brick_stairs_from_holystone_bricks_stonecutting.json index 2b23c4acb1..beb525fc71 100644 --- a/src/generated/resources/data/aether/advancements/recipes/building_blocks/holystone_brick_stairs_from_holystone_bricks_stonecutting.json +++ b/src/generated/resources/data/aether/advancements/recipes/building_blocks/holystone_brick_stairs_from_holystone_bricks_stonecutting.json @@ -30,5 +30,6 @@ "recipes": [ "aether:holystone_brick_stairs_from_holystone_bricks_stonecutting" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/building_blocks/holystone_brick_stairs_from_holystone_stonecutting.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/holystone_brick_stairs_from_holystone_stonecutting.json index 8336096060..45475a1045 100644 --- a/src/generated/resources/data/aether/advancements/recipes/building_blocks/holystone_brick_stairs_from_holystone_stonecutting.json +++ b/src/generated/resources/data/aether/advancements/recipes/building_blocks/holystone_brick_stairs_from_holystone_stonecutting.json @@ -30,5 +30,6 @@ "recipes": [ "aether:holystone_brick_stairs_from_holystone_stonecutting" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/building_blocks/holystone_bricks.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/holystone_bricks.json index 796fcbef1b..bc382fef82 100644 --- a/src/generated/resources/data/aether/advancements/recipes/building_blocks/holystone_bricks.json +++ b/src/generated/resources/data/aether/advancements/recipes/building_blocks/holystone_bricks.json @@ -30,5 +30,6 @@ "recipes": [ "aether:holystone_bricks" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/building_blocks/holystone_bricks_from_holystone_stonecutting.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/holystone_bricks_from_holystone_stonecutting.json index 6ab9db9ee4..15bd8b92bc 100644 --- a/src/generated/resources/data/aether/advancements/recipes/building_blocks/holystone_bricks_from_holystone_stonecutting.json +++ b/src/generated/resources/data/aether/advancements/recipes/building_blocks/holystone_bricks_from_holystone_stonecutting.json @@ -30,5 +30,6 @@ "recipes": [ "aether:holystone_bricks_from_holystone_stonecutting" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/building_blocks/holystone_slab.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/holystone_slab.json index 71adcbf749..4373e7be73 100644 --- a/src/generated/resources/data/aether/advancements/recipes/building_blocks/holystone_slab.json +++ b/src/generated/resources/data/aether/advancements/recipes/building_blocks/holystone_slab.json @@ -30,5 +30,6 @@ "recipes": [ "aether:holystone_slab" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/building_blocks/holystone_slab_from_holystone_stonecutting.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/holystone_slab_from_holystone_stonecutting.json index 4223253609..13c3494cc5 100644 --- a/src/generated/resources/data/aether/advancements/recipes/building_blocks/holystone_slab_from_holystone_stonecutting.json +++ b/src/generated/resources/data/aether/advancements/recipes/building_blocks/holystone_slab_from_holystone_stonecutting.json @@ -30,5 +30,6 @@ "recipes": [ "aether:holystone_slab_from_holystone_stonecutting" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/building_blocks/holystone_stairs.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/holystone_stairs.json index ed941bf27a..f1aa4bbed9 100644 --- a/src/generated/resources/data/aether/advancements/recipes/building_blocks/holystone_stairs.json +++ b/src/generated/resources/data/aether/advancements/recipes/building_blocks/holystone_stairs.json @@ -30,5 +30,6 @@ "recipes": [ "aether:holystone_stairs" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/building_blocks/holystone_stairs_from_holystone_stonecutting.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/holystone_stairs_from_holystone_stonecutting.json index 97d4825825..2047dda9df 100644 --- a/src/generated/resources/data/aether/advancements/recipes/building_blocks/holystone_stairs_from_holystone_stonecutting.json +++ b/src/generated/resources/data/aether/advancements/recipes/building_blocks/holystone_stairs_from_holystone_stonecutting.json @@ -30,5 +30,6 @@ "recipes": [ "aether:holystone_stairs_from_holystone_stonecutting" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/building_blocks/ice_from_bucket_freezing.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/ice_from_bucket_freezing.json index 4884c9cb98..ad3aff6a23 100644 --- a/src/generated/resources/data/aether/advancements/recipes/building_blocks/ice_from_bucket_freezing.json +++ b/src/generated/resources/data/aether/advancements/recipes/building_blocks/ice_from_bucket_freezing.json @@ -28,5 +28,6 @@ "recipes": [ "aether:ice_from_bucket_freezing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/building_blocks/icestone_slab.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/icestone_slab.json index 2e5a1b327d..662f233709 100644 --- a/src/generated/resources/data/aether/advancements/recipes/building_blocks/icestone_slab.json +++ b/src/generated/resources/data/aether/advancements/recipes/building_blocks/icestone_slab.json @@ -30,5 +30,6 @@ "recipes": [ "aether:icestone_slab" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/building_blocks/icestone_slab_from_icestone_stonecutting.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/icestone_slab_from_icestone_stonecutting.json index 7d7e25f2d5..802ad44091 100644 --- a/src/generated/resources/data/aether/advancements/recipes/building_blocks/icestone_slab_from_icestone_stonecutting.json +++ b/src/generated/resources/data/aether/advancements/recipes/building_blocks/icestone_slab_from_icestone_stonecutting.json @@ -30,5 +30,6 @@ "recipes": [ "aether:icestone_slab_from_icestone_stonecutting" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/building_blocks/icestone_stairs.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/icestone_stairs.json index 8039c774c0..e94250251f 100644 --- a/src/generated/resources/data/aether/advancements/recipes/building_blocks/icestone_stairs.json +++ b/src/generated/resources/data/aether/advancements/recipes/building_blocks/icestone_stairs.json @@ -30,5 +30,6 @@ "recipes": [ "aether:icestone_stairs" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/building_blocks/icestone_stairs_from_icestone_stonecutting.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/icestone_stairs_from_icestone_stonecutting.json index f7efebf01e..a8c6cfa945 100644 --- a/src/generated/resources/data/aether/advancements/recipes/building_blocks/icestone_stairs_from_icestone_stonecutting.json +++ b/src/generated/resources/data/aether/advancements/recipes/building_blocks/icestone_stairs_from_icestone_stonecutting.json @@ -30,5 +30,6 @@ "recipes": [ "aether:icestone_stairs_from_icestone_stonecutting" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/building_blocks/light_angelic_stone_from_angelic_stone_stonecutting.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/light_angelic_stone_from_angelic_stone_stonecutting.json index 5dd2ebfa1e..c7da07bd15 100644 --- a/src/generated/resources/data/aether/advancements/recipes/building_blocks/light_angelic_stone_from_angelic_stone_stonecutting.json +++ b/src/generated/resources/data/aether/advancements/recipes/building_blocks/light_angelic_stone_from_angelic_stone_stonecutting.json @@ -30,5 +30,6 @@ "recipes": [ "aether:light_angelic_stone_from_angelic_stone_stonecutting" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/building_blocks/light_hellfire_stone_from_hellfire_stone_stonecutting.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/light_hellfire_stone_from_hellfire_stone_stonecutting.json index bbeaaa9164..7c3f401c21 100644 --- a/src/generated/resources/data/aether/advancements/recipes/building_blocks/light_hellfire_stone_from_hellfire_stone_stonecutting.json +++ b/src/generated/resources/data/aether/advancements/recipes/building_blocks/light_hellfire_stone_from_hellfire_stone_stonecutting.json @@ -30,5 +30,6 @@ "recipes": [ "aether:light_hellfire_stone_from_hellfire_stone_stonecutting" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/building_blocks/mossy_holystone_slab.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/mossy_holystone_slab.json index 4bb2738445..ac92fac676 100644 --- a/src/generated/resources/data/aether/advancements/recipes/building_blocks/mossy_holystone_slab.json +++ b/src/generated/resources/data/aether/advancements/recipes/building_blocks/mossy_holystone_slab.json @@ -30,5 +30,6 @@ "recipes": [ "aether:mossy_holystone_slab" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/building_blocks/mossy_holystone_slab_from_mossy_holystone_stonecutting.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/mossy_holystone_slab_from_mossy_holystone_stonecutting.json index 9c991d9aed..ddcbf57fd2 100644 --- a/src/generated/resources/data/aether/advancements/recipes/building_blocks/mossy_holystone_slab_from_mossy_holystone_stonecutting.json +++ b/src/generated/resources/data/aether/advancements/recipes/building_blocks/mossy_holystone_slab_from_mossy_holystone_stonecutting.json @@ -30,5 +30,6 @@ "recipes": [ "aether:mossy_holystone_slab_from_mossy_holystone_stonecutting" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/building_blocks/mossy_holystone_stairs.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/mossy_holystone_stairs.json index af86e0d903..4e4ed385e1 100644 --- a/src/generated/resources/data/aether/advancements/recipes/building_blocks/mossy_holystone_stairs.json +++ b/src/generated/resources/data/aether/advancements/recipes/building_blocks/mossy_holystone_stairs.json @@ -30,5 +30,6 @@ "recipes": [ "aether:mossy_holystone_stairs" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/building_blocks/mossy_holystone_stairs_from_mossy_holystone_stonecutting.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/mossy_holystone_stairs_from_mossy_holystone_stonecutting.json index c97f329af6..d29f8443e0 100644 --- a/src/generated/resources/data/aether/advancements/recipes/building_blocks/mossy_holystone_stairs_from_mossy_holystone_stonecutting.json +++ b/src/generated/resources/data/aether/advancements/recipes/building_blocks/mossy_holystone_stairs_from_mossy_holystone_stonecutting.json @@ -30,5 +30,6 @@ "recipes": [ "aether:mossy_holystone_stairs_from_mossy_holystone_stonecutting" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/building_blocks/mossy_holystone_with_moss.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/mossy_holystone_with_moss.json index cc51298a0a..1db959eed7 100644 --- a/src/generated/resources/data/aether/advancements/recipes/building_blocks/mossy_holystone_with_moss.json +++ b/src/generated/resources/data/aether/advancements/recipes/building_blocks/mossy_holystone_with_moss.json @@ -30,5 +30,6 @@ "recipes": [ "aether:mossy_holystone_with_moss" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/building_blocks/mossy_holystone_with_vine.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/mossy_holystone_with_vine.json index 006734ce3e..261b534563 100644 --- a/src/generated/resources/data/aether/advancements/recipes/building_blocks/mossy_holystone_with_vine.json +++ b/src/generated/resources/data/aether/advancements/recipes/building_blocks/mossy_holystone_with_vine.json @@ -30,5 +30,6 @@ "recipes": [ "aether:mossy_holystone_with_vine" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/building_blocks/obsidian_from_bucket_freezing.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/obsidian_from_bucket_freezing.json index dfbe564c47..8857f283bb 100644 --- a/src/generated/resources/data/aether/advancements/recipes/building_blocks/obsidian_from_bucket_freezing.json +++ b/src/generated/resources/data/aether/advancements/recipes/building_blocks/obsidian_from_bucket_freezing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:obsidian_from_bucket_freezing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/building_blocks/packed_ice_freezing.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/packed_ice_freezing.json index e90c400ca6..f7ecc8714c 100644 --- a/src/generated/resources/data/aether/advancements/recipes/building_blocks/packed_ice_freezing.json +++ b/src/generated/resources/data/aether/advancements/recipes/building_blocks/packed_ice_freezing.json @@ -28,5 +28,6 @@ "recipes": [ "aether:packed_ice_freezing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/building_blocks/pillar_from_angelic_stone_stonecutting.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/pillar_from_angelic_stone_stonecutting.json index 76c13b00de..42436324fc 100644 --- a/src/generated/resources/data/aether/advancements/recipes/building_blocks/pillar_from_angelic_stone_stonecutting.json +++ b/src/generated/resources/data/aether/advancements/recipes/building_blocks/pillar_from_angelic_stone_stonecutting.json @@ -30,5 +30,6 @@ "recipes": [ "aether:pillar_from_angelic_stone_stonecutting" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/building_blocks/pillar_from_pillar_top_stonecutting.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/pillar_from_pillar_top_stonecutting.json index b955baa190..150f66c303 100644 --- a/src/generated/resources/data/aether/advancements/recipes/building_blocks/pillar_from_pillar_top_stonecutting.json +++ b/src/generated/resources/data/aether/advancements/recipes/building_blocks/pillar_from_pillar_top_stonecutting.json @@ -30,5 +30,6 @@ "recipes": [ "aether:pillar_from_pillar_top_stonecutting" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/building_blocks/pillar_top_from_angelic_stone_stonecutting.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/pillar_top_from_angelic_stone_stonecutting.json index 0b7b69d46a..4f1b06c5ee 100644 --- a/src/generated/resources/data/aether/advancements/recipes/building_blocks/pillar_top_from_angelic_stone_stonecutting.json +++ b/src/generated/resources/data/aether/advancements/recipes/building_blocks/pillar_top_from_angelic_stone_stonecutting.json @@ -30,5 +30,6 @@ "recipes": [ "aether:pillar_top_from_angelic_stone_stonecutting" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/building_blocks/pillar_top_from_pillar_stonecutting.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/pillar_top_from_pillar_stonecutting.json index a68fb2c694..b8590059bb 100644 --- a/src/generated/resources/data/aether/advancements/recipes/building_blocks/pillar_top_from_pillar_stonecutting.json +++ b/src/generated/resources/data/aether/advancements/recipes/building_blocks/pillar_top_from_pillar_stonecutting.json @@ -30,5 +30,6 @@ "recipes": [ "aether:pillar_top_from_pillar_stonecutting" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/building_blocks/quicksoil_glass_enchanting.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/quicksoil_glass_enchanting.json index eb00caf071..f88508dbe2 100644 --- a/src/generated/resources/data/aether/advancements/recipes/building_blocks/quicksoil_glass_enchanting.json +++ b/src/generated/resources/data/aether/advancements/recipes/building_blocks/quicksoil_glass_enchanting.json @@ -30,5 +30,6 @@ "recipes": [ "aether:quicksoil_glass_enchanting" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/building_blocks/sentry_stone_from_carved_stone_stonecutting.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/sentry_stone_from_carved_stone_stonecutting.json index e833a7683d..c32f6035e1 100644 --- a/src/generated/resources/data/aether/advancements/recipes/building_blocks/sentry_stone_from_carved_stone_stonecutting.json +++ b/src/generated/resources/data/aether/advancements/recipes/building_blocks/sentry_stone_from_carved_stone_stonecutting.json @@ -30,5 +30,6 @@ "recipes": [ "aether:sentry_stone_from_carved_stone_stonecutting" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/building_blocks/skyroot_bookshelf.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/skyroot_bookshelf.json index 9f75b4bb41..1e5aa37bc6 100644 --- a/src/generated/resources/data/aether/advancements/recipes/building_blocks/skyroot_bookshelf.json +++ b/src/generated/resources/data/aether/advancements/recipes/building_blocks/skyroot_bookshelf.json @@ -30,5 +30,6 @@ "recipes": [ "aether:skyroot_bookshelf" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/building_blocks/skyroot_planks.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/skyroot_planks.json index 6ea9fa33dc..c3ce093812 100644 --- a/src/generated/resources/data/aether/advancements/recipes/building_blocks/skyroot_planks.json +++ b/src/generated/resources/data/aether/advancements/recipes/building_blocks/skyroot_planks.json @@ -28,5 +28,6 @@ "recipes": [ "aether:skyroot_planks" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/building_blocks/skyroot_slab.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/skyroot_slab.json index 0a0b9f033b..c8d267090d 100644 --- a/src/generated/resources/data/aether/advancements/recipes/building_blocks/skyroot_slab.json +++ b/src/generated/resources/data/aether/advancements/recipes/building_blocks/skyroot_slab.json @@ -30,5 +30,6 @@ "recipes": [ "aether:skyroot_slab" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/building_blocks/skyroot_stairs.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/skyroot_stairs.json index 41cec027df..762d0e31fa 100644 --- a/src/generated/resources/data/aether/advancements/recipes/building_blocks/skyroot_stairs.json +++ b/src/generated/resources/data/aether/advancements/recipes/building_blocks/skyroot_stairs.json @@ -30,5 +30,6 @@ "recipes": [ "aether:skyroot_stairs" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/building_blocks/skyroot_wood.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/skyroot_wood.json index 1d5bfb9154..71adb6e50e 100644 --- a/src/generated/resources/data/aether/advancements/recipes/building_blocks/skyroot_wood.json +++ b/src/generated/resources/data/aether/advancements/recipes/building_blocks/skyroot_wood.json @@ -30,5 +30,6 @@ "recipes": [ "aether:skyroot_wood" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/building_blocks/stripped_skyroot_wood.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/stripped_skyroot_wood.json index e12f023668..fd69cc6ae7 100644 --- a/src/generated/resources/data/aether/advancements/recipes/building_blocks/stripped_skyroot_wood.json +++ b/src/generated/resources/data/aether/advancements/recipes/building_blocks/stripped_skyroot_wood.json @@ -30,5 +30,6 @@ "recipes": [ "aether:stripped_skyroot_wood" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/building_blocks/zanite_block.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/zanite_block.json index 1b60c2db51..d551a768d2 100644 --- a/src/generated/resources/data/aether/advancements/recipes/building_blocks/zanite_block.json +++ b/src/generated/resources/data/aether/advancements/recipes/building_blocks/zanite_block.json @@ -30,5 +30,6 @@ "recipes": [ "aether:zanite_block" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/combat/blue_cape_blue_wool.json b/src/generated/resources/data/aether/advancements/recipes/combat/blue_cape_blue_wool.json index 8bbf981a06..07457ea17e 100644 --- a/src/generated/resources/data/aether/advancements/recipes/combat/blue_cape_blue_wool.json +++ b/src/generated/resources/data/aether/advancements/recipes/combat/blue_cape_blue_wool.json @@ -30,5 +30,6 @@ "recipes": [ "aether:blue_cape_blue_wool" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/combat/blue_cape_cyan_wool.json b/src/generated/resources/data/aether/advancements/recipes/combat/blue_cape_cyan_wool.json index 74d02f4f54..dcd6aea3b9 100644 --- a/src/generated/resources/data/aether/advancements/recipes/combat/blue_cape_cyan_wool.json +++ b/src/generated/resources/data/aether/advancements/recipes/combat/blue_cape_cyan_wool.json @@ -30,5 +30,6 @@ "recipes": [ "aether:blue_cape_cyan_wool" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/combat/blue_cape_light_blue_wool.json b/src/generated/resources/data/aether/advancements/recipes/combat/blue_cape_light_blue_wool.json index a51539cc3c..49e56f3c9a 100644 --- a/src/generated/resources/data/aether/advancements/recipes/combat/blue_cape_light_blue_wool.json +++ b/src/generated/resources/data/aether/advancements/recipes/combat/blue_cape_light_blue_wool.json @@ -30,5 +30,6 @@ "recipes": [ "aether:blue_cape_light_blue_wool" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/combat/bow_repairing.json b/src/generated/resources/data/aether/advancements/recipes/combat/bow_repairing.json index 38b96f6a49..370977a402 100644 --- a/src/generated/resources/data/aether/advancements/recipes/combat/bow_repairing.json +++ b/src/generated/resources/data/aether/advancements/recipes/combat/bow_repairing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:bow_repairing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/combat/chainmail_boots_repairing.json b/src/generated/resources/data/aether/advancements/recipes/combat/chainmail_boots_repairing.json index e915e0226d..c527679096 100644 --- a/src/generated/resources/data/aether/advancements/recipes/combat/chainmail_boots_repairing.json +++ b/src/generated/resources/data/aether/advancements/recipes/combat/chainmail_boots_repairing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:chainmail_boots_repairing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/combat/chainmail_chestplate_repairing.json b/src/generated/resources/data/aether/advancements/recipes/combat/chainmail_chestplate_repairing.json index f03417abb3..2754593af7 100644 --- a/src/generated/resources/data/aether/advancements/recipes/combat/chainmail_chestplate_repairing.json +++ b/src/generated/resources/data/aether/advancements/recipes/combat/chainmail_chestplate_repairing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:chainmail_chestplate_repairing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/combat/chainmail_gloves_repairing.json b/src/generated/resources/data/aether/advancements/recipes/combat/chainmail_gloves_repairing.json index e8ceab9acf..1a06348b67 100644 --- a/src/generated/resources/data/aether/advancements/recipes/combat/chainmail_gloves_repairing.json +++ b/src/generated/resources/data/aether/advancements/recipes/combat/chainmail_gloves_repairing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:chainmail_gloves_repairing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/combat/chainmail_helmet_repairing.json b/src/generated/resources/data/aether/advancements/recipes/combat/chainmail_helmet_repairing.json index f1079500d6..fd02cd852d 100644 --- a/src/generated/resources/data/aether/advancements/recipes/combat/chainmail_helmet_repairing.json +++ b/src/generated/resources/data/aether/advancements/recipes/combat/chainmail_helmet_repairing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:chainmail_helmet_repairing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/combat/chainmail_leggings_repairing.json b/src/generated/resources/data/aether/advancements/recipes/combat/chainmail_leggings_repairing.json index 95f6c61f16..88a3420b69 100644 --- a/src/generated/resources/data/aether/advancements/recipes/combat/chainmail_leggings_repairing.json +++ b/src/generated/resources/data/aether/advancements/recipes/combat/chainmail_leggings_repairing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:chainmail_leggings_repairing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/combat/diamond_boots_repairing.json b/src/generated/resources/data/aether/advancements/recipes/combat/diamond_boots_repairing.json index a27e6685dd..4bce35e10c 100644 --- a/src/generated/resources/data/aether/advancements/recipes/combat/diamond_boots_repairing.json +++ b/src/generated/resources/data/aether/advancements/recipes/combat/diamond_boots_repairing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:diamond_boots_repairing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/combat/diamond_chestplate_repairing.json b/src/generated/resources/data/aether/advancements/recipes/combat/diamond_chestplate_repairing.json index cdb91098a7..ba3a57a5f3 100644 --- a/src/generated/resources/data/aether/advancements/recipes/combat/diamond_chestplate_repairing.json +++ b/src/generated/resources/data/aether/advancements/recipes/combat/diamond_chestplate_repairing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:diamond_chestplate_repairing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/combat/diamond_gloves.json b/src/generated/resources/data/aether/advancements/recipes/combat/diamond_gloves.json index 475f7aa66f..567193a587 100644 --- a/src/generated/resources/data/aether/advancements/recipes/combat/diamond_gloves.json +++ b/src/generated/resources/data/aether/advancements/recipes/combat/diamond_gloves.json @@ -28,5 +28,6 @@ "recipes": [ "aether:diamond_gloves" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/combat/diamond_gloves_repairing.json b/src/generated/resources/data/aether/advancements/recipes/combat/diamond_gloves_repairing.json index 3e4473bed3..d9f4cefe1a 100644 --- a/src/generated/resources/data/aether/advancements/recipes/combat/diamond_gloves_repairing.json +++ b/src/generated/resources/data/aether/advancements/recipes/combat/diamond_gloves_repairing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:diamond_gloves_repairing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/combat/diamond_helmet_repairing.json b/src/generated/resources/data/aether/advancements/recipes/combat/diamond_helmet_repairing.json index 117924df73..8e15ae5275 100644 --- a/src/generated/resources/data/aether/advancements/recipes/combat/diamond_helmet_repairing.json +++ b/src/generated/resources/data/aether/advancements/recipes/combat/diamond_helmet_repairing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:diamond_helmet_repairing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/combat/diamond_leggings_repairing.json b/src/generated/resources/data/aether/advancements/recipes/combat/diamond_leggings_repairing.json index fe1f6fcabb..002935a661 100644 --- a/src/generated/resources/data/aether/advancements/recipes/combat/diamond_leggings_repairing.json +++ b/src/generated/resources/data/aether/advancements/recipes/combat/diamond_leggings_repairing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:diamond_leggings_repairing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/combat/diamond_sword_repairing.json b/src/generated/resources/data/aether/advancements/recipes/combat/diamond_sword_repairing.json index d99ee530c3..169888ad45 100644 --- a/src/generated/resources/data/aether/advancements/recipes/combat/diamond_sword_repairing.json +++ b/src/generated/resources/data/aether/advancements/recipes/combat/diamond_sword_repairing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:diamond_sword_repairing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/combat/golden_boots_repairing.json b/src/generated/resources/data/aether/advancements/recipes/combat/golden_boots_repairing.json index 3f0a5f717b..904f3fbc84 100644 --- a/src/generated/resources/data/aether/advancements/recipes/combat/golden_boots_repairing.json +++ b/src/generated/resources/data/aether/advancements/recipes/combat/golden_boots_repairing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:golden_boots_repairing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/combat/golden_chestplate_repairing.json b/src/generated/resources/data/aether/advancements/recipes/combat/golden_chestplate_repairing.json index e6c4452e16..d02f4ac8fb 100644 --- a/src/generated/resources/data/aether/advancements/recipes/combat/golden_chestplate_repairing.json +++ b/src/generated/resources/data/aether/advancements/recipes/combat/golden_chestplate_repairing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:golden_chestplate_repairing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/combat/golden_dart.json b/src/generated/resources/data/aether/advancements/recipes/combat/golden_dart.json index 94a0859f0f..d6c9e268db 100644 --- a/src/generated/resources/data/aether/advancements/recipes/combat/golden_dart.json +++ b/src/generated/resources/data/aether/advancements/recipes/combat/golden_dart.json @@ -41,5 +41,6 @@ "recipes": [ "aether:golden_dart" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/combat/golden_dart_shooter.json b/src/generated/resources/data/aether/advancements/recipes/combat/golden_dart_shooter.json index c200ac22e3..deb4317c7e 100644 --- a/src/generated/resources/data/aether/advancements/recipes/combat/golden_dart_shooter.json +++ b/src/generated/resources/data/aether/advancements/recipes/combat/golden_dart_shooter.json @@ -30,5 +30,6 @@ "recipes": [ "aether:golden_dart_shooter" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/combat/golden_gloves.json b/src/generated/resources/data/aether/advancements/recipes/combat/golden_gloves.json index a98334223f..4881b535eb 100644 --- a/src/generated/resources/data/aether/advancements/recipes/combat/golden_gloves.json +++ b/src/generated/resources/data/aether/advancements/recipes/combat/golden_gloves.json @@ -28,5 +28,6 @@ "recipes": [ "aether:golden_gloves" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/combat/golden_gloves_repairing.json b/src/generated/resources/data/aether/advancements/recipes/combat/golden_gloves_repairing.json index b548d2c96a..a9d74844b3 100644 --- a/src/generated/resources/data/aether/advancements/recipes/combat/golden_gloves_repairing.json +++ b/src/generated/resources/data/aether/advancements/recipes/combat/golden_gloves_repairing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:golden_gloves_repairing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/combat/golden_helmet_repairing.json b/src/generated/resources/data/aether/advancements/recipes/combat/golden_helmet_repairing.json index de0798b515..de74e52b25 100644 --- a/src/generated/resources/data/aether/advancements/recipes/combat/golden_helmet_repairing.json +++ b/src/generated/resources/data/aether/advancements/recipes/combat/golden_helmet_repairing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:golden_helmet_repairing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/combat/golden_leggings_repairing.json b/src/generated/resources/data/aether/advancements/recipes/combat/golden_leggings_repairing.json index a9f7f8551c..a78bd27b20 100644 --- a/src/generated/resources/data/aether/advancements/recipes/combat/golden_leggings_repairing.json +++ b/src/generated/resources/data/aether/advancements/recipes/combat/golden_leggings_repairing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:golden_leggings_repairing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/combat/golden_pendant.json b/src/generated/resources/data/aether/advancements/recipes/combat/golden_pendant.json index 865d3ece84..03e64885f6 100644 --- a/src/generated/resources/data/aether/advancements/recipes/combat/golden_pendant.json +++ b/src/generated/resources/data/aether/advancements/recipes/combat/golden_pendant.json @@ -30,5 +30,6 @@ "recipes": [ "aether:golden_pendant" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/combat/golden_ring.json b/src/generated/resources/data/aether/advancements/recipes/combat/golden_ring.json index aa985895f2..c424a9eb52 100644 --- a/src/generated/resources/data/aether/advancements/recipes/combat/golden_ring.json +++ b/src/generated/resources/data/aether/advancements/recipes/combat/golden_ring.json @@ -30,5 +30,6 @@ "recipes": [ "aether:golden_ring" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/combat/golden_sword_repairing.json b/src/generated/resources/data/aether/advancements/recipes/combat/golden_sword_repairing.json index 7326b63d16..a9b2927224 100644 --- a/src/generated/resources/data/aether/advancements/recipes/combat/golden_sword_repairing.json +++ b/src/generated/resources/data/aether/advancements/recipes/combat/golden_sword_repairing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:golden_sword_repairing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/combat/gravitite_boots.json b/src/generated/resources/data/aether/advancements/recipes/combat/gravitite_boots.json index bd493c3bb3..9568bf0552 100644 --- a/src/generated/resources/data/aether/advancements/recipes/combat/gravitite_boots.json +++ b/src/generated/resources/data/aether/advancements/recipes/combat/gravitite_boots.json @@ -30,5 +30,6 @@ "recipes": [ "aether:gravitite_boots" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/combat/gravitite_boots_repairing.json b/src/generated/resources/data/aether/advancements/recipes/combat/gravitite_boots_repairing.json index 9581c5b1ce..f076ddc854 100644 --- a/src/generated/resources/data/aether/advancements/recipes/combat/gravitite_boots_repairing.json +++ b/src/generated/resources/data/aether/advancements/recipes/combat/gravitite_boots_repairing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:gravitite_boots_repairing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/combat/gravitite_chestplate.json b/src/generated/resources/data/aether/advancements/recipes/combat/gravitite_chestplate.json index c13521ab83..db696a2519 100644 --- a/src/generated/resources/data/aether/advancements/recipes/combat/gravitite_chestplate.json +++ b/src/generated/resources/data/aether/advancements/recipes/combat/gravitite_chestplate.json @@ -30,5 +30,6 @@ "recipes": [ "aether:gravitite_chestplate" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/combat/gravitite_chestplate_repairing.json b/src/generated/resources/data/aether/advancements/recipes/combat/gravitite_chestplate_repairing.json index 9d827f7aa5..f08794b55e 100644 --- a/src/generated/resources/data/aether/advancements/recipes/combat/gravitite_chestplate_repairing.json +++ b/src/generated/resources/data/aether/advancements/recipes/combat/gravitite_chestplate_repairing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:gravitite_chestplate_repairing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/combat/gravitite_gloves.json b/src/generated/resources/data/aether/advancements/recipes/combat/gravitite_gloves.json index ad357f8d5d..bd2324845f 100644 --- a/src/generated/resources/data/aether/advancements/recipes/combat/gravitite_gloves.json +++ b/src/generated/resources/data/aether/advancements/recipes/combat/gravitite_gloves.json @@ -30,5 +30,6 @@ "recipes": [ "aether:gravitite_gloves" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/combat/gravitite_gloves_repairing.json b/src/generated/resources/data/aether/advancements/recipes/combat/gravitite_gloves_repairing.json index 5e022d9c15..bee92f9464 100644 --- a/src/generated/resources/data/aether/advancements/recipes/combat/gravitite_gloves_repairing.json +++ b/src/generated/resources/data/aether/advancements/recipes/combat/gravitite_gloves_repairing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:gravitite_gloves_repairing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/combat/gravitite_helmet.json b/src/generated/resources/data/aether/advancements/recipes/combat/gravitite_helmet.json index dbc4afe5d2..f8a938ecb8 100644 --- a/src/generated/resources/data/aether/advancements/recipes/combat/gravitite_helmet.json +++ b/src/generated/resources/data/aether/advancements/recipes/combat/gravitite_helmet.json @@ -30,5 +30,6 @@ "recipes": [ "aether:gravitite_helmet" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/combat/gravitite_helmet_repairing.json b/src/generated/resources/data/aether/advancements/recipes/combat/gravitite_helmet_repairing.json index 202c1b1f9a..47b1fed8cf 100644 --- a/src/generated/resources/data/aether/advancements/recipes/combat/gravitite_helmet_repairing.json +++ b/src/generated/resources/data/aether/advancements/recipes/combat/gravitite_helmet_repairing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:gravitite_helmet_repairing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/combat/gravitite_leggings.json b/src/generated/resources/data/aether/advancements/recipes/combat/gravitite_leggings.json index 00570d63ef..b3e08fefe9 100644 --- a/src/generated/resources/data/aether/advancements/recipes/combat/gravitite_leggings.json +++ b/src/generated/resources/data/aether/advancements/recipes/combat/gravitite_leggings.json @@ -30,5 +30,6 @@ "recipes": [ "aether:gravitite_leggings" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/combat/gravitite_leggings_repairing.json b/src/generated/resources/data/aether/advancements/recipes/combat/gravitite_leggings_repairing.json index 7c284b5fc9..c5c13450f1 100644 --- a/src/generated/resources/data/aether/advancements/recipes/combat/gravitite_leggings_repairing.json +++ b/src/generated/resources/data/aether/advancements/recipes/combat/gravitite_leggings_repairing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:gravitite_leggings_repairing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/combat/gravitite_sword.json b/src/generated/resources/data/aether/advancements/recipes/combat/gravitite_sword.json index 04584a85fa..e4607c36e1 100644 --- a/src/generated/resources/data/aether/advancements/recipes/combat/gravitite_sword.json +++ b/src/generated/resources/data/aether/advancements/recipes/combat/gravitite_sword.json @@ -30,5 +30,6 @@ "recipes": [ "aether:gravitite_sword" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/combat/gravitite_sword_repairing.json b/src/generated/resources/data/aether/advancements/recipes/combat/gravitite_sword_repairing.json index bfc805190d..b55057afae 100644 --- a/src/generated/resources/data/aether/advancements/recipes/combat/gravitite_sword_repairing.json +++ b/src/generated/resources/data/aether/advancements/recipes/combat/gravitite_sword_repairing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:gravitite_sword_repairing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/combat/holystone_sword.json b/src/generated/resources/data/aether/advancements/recipes/combat/holystone_sword.json index 40a263d23f..2bb850f267 100644 --- a/src/generated/resources/data/aether/advancements/recipes/combat/holystone_sword.json +++ b/src/generated/resources/data/aether/advancements/recipes/combat/holystone_sword.json @@ -30,5 +30,6 @@ "recipes": [ "aether:holystone_sword" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/combat/holystone_sword_repairing.json b/src/generated/resources/data/aether/advancements/recipes/combat/holystone_sword_repairing.json index 73778f627a..3145951cbe 100644 --- a/src/generated/resources/data/aether/advancements/recipes/combat/holystone_sword_repairing.json +++ b/src/generated/resources/data/aether/advancements/recipes/combat/holystone_sword_repairing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:holystone_sword_repairing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/combat/iron_boots_repairing.json b/src/generated/resources/data/aether/advancements/recipes/combat/iron_boots_repairing.json index fbc3c5bf58..9c53803d62 100644 --- a/src/generated/resources/data/aether/advancements/recipes/combat/iron_boots_repairing.json +++ b/src/generated/resources/data/aether/advancements/recipes/combat/iron_boots_repairing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:iron_boots_repairing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/combat/iron_chestplate_repairing.json b/src/generated/resources/data/aether/advancements/recipes/combat/iron_chestplate_repairing.json index 8eae5a6b2b..d6a766b7a7 100644 --- a/src/generated/resources/data/aether/advancements/recipes/combat/iron_chestplate_repairing.json +++ b/src/generated/resources/data/aether/advancements/recipes/combat/iron_chestplate_repairing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:iron_chestplate_repairing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/combat/iron_gloves.json b/src/generated/resources/data/aether/advancements/recipes/combat/iron_gloves.json index b3be3deb8e..fa4261e00d 100644 --- a/src/generated/resources/data/aether/advancements/recipes/combat/iron_gloves.json +++ b/src/generated/resources/data/aether/advancements/recipes/combat/iron_gloves.json @@ -28,5 +28,6 @@ "recipes": [ "aether:iron_gloves" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/combat/iron_gloves_repairing.json b/src/generated/resources/data/aether/advancements/recipes/combat/iron_gloves_repairing.json index 008110e043..fcfa745336 100644 --- a/src/generated/resources/data/aether/advancements/recipes/combat/iron_gloves_repairing.json +++ b/src/generated/resources/data/aether/advancements/recipes/combat/iron_gloves_repairing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:iron_gloves_repairing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/combat/iron_helmet_repairing.json b/src/generated/resources/data/aether/advancements/recipes/combat/iron_helmet_repairing.json index 7f5a5df010..cb9e45f0d0 100644 --- a/src/generated/resources/data/aether/advancements/recipes/combat/iron_helmet_repairing.json +++ b/src/generated/resources/data/aether/advancements/recipes/combat/iron_helmet_repairing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:iron_helmet_repairing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/combat/iron_leggings_repairing.json b/src/generated/resources/data/aether/advancements/recipes/combat/iron_leggings_repairing.json index 10573780fc..171566226a 100644 --- a/src/generated/resources/data/aether/advancements/recipes/combat/iron_leggings_repairing.json +++ b/src/generated/resources/data/aether/advancements/recipes/combat/iron_leggings_repairing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:iron_leggings_repairing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/combat/iron_pendant.json b/src/generated/resources/data/aether/advancements/recipes/combat/iron_pendant.json index 13d93df2d3..d6014cccde 100644 --- a/src/generated/resources/data/aether/advancements/recipes/combat/iron_pendant.json +++ b/src/generated/resources/data/aether/advancements/recipes/combat/iron_pendant.json @@ -30,5 +30,6 @@ "recipes": [ "aether:iron_pendant" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/combat/iron_ring.json b/src/generated/resources/data/aether/advancements/recipes/combat/iron_ring.json index 18844d26fd..2f2f8965f2 100644 --- a/src/generated/resources/data/aether/advancements/recipes/combat/iron_ring.json +++ b/src/generated/resources/data/aether/advancements/recipes/combat/iron_ring.json @@ -30,5 +30,6 @@ "recipes": [ "aether:iron_ring" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/combat/iron_sword_repairing.json b/src/generated/resources/data/aether/advancements/recipes/combat/iron_sword_repairing.json index 2ea65ec350..6a83935802 100644 --- a/src/generated/resources/data/aether/advancements/recipes/combat/iron_sword_repairing.json +++ b/src/generated/resources/data/aether/advancements/recipes/combat/iron_sword_repairing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:iron_sword_repairing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/combat/leather_boots_repairing.json b/src/generated/resources/data/aether/advancements/recipes/combat/leather_boots_repairing.json index d0fec16049..edc1bd81e2 100644 --- a/src/generated/resources/data/aether/advancements/recipes/combat/leather_boots_repairing.json +++ b/src/generated/resources/data/aether/advancements/recipes/combat/leather_boots_repairing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:leather_boots_repairing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/combat/leather_chestplate_repairing.json b/src/generated/resources/data/aether/advancements/recipes/combat/leather_chestplate_repairing.json index eb74de863d..c3f8844a9e 100644 --- a/src/generated/resources/data/aether/advancements/recipes/combat/leather_chestplate_repairing.json +++ b/src/generated/resources/data/aether/advancements/recipes/combat/leather_chestplate_repairing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:leather_chestplate_repairing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/combat/leather_gloves.json b/src/generated/resources/data/aether/advancements/recipes/combat/leather_gloves.json index e04c591f38..48fe048559 100644 --- a/src/generated/resources/data/aether/advancements/recipes/combat/leather_gloves.json +++ b/src/generated/resources/data/aether/advancements/recipes/combat/leather_gloves.json @@ -28,5 +28,6 @@ "recipes": [ "aether:leather_gloves" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/combat/leather_gloves_repairing.json b/src/generated/resources/data/aether/advancements/recipes/combat/leather_gloves_repairing.json index 35cdbb8d21..a4afc1a776 100644 --- a/src/generated/resources/data/aether/advancements/recipes/combat/leather_gloves_repairing.json +++ b/src/generated/resources/data/aether/advancements/recipes/combat/leather_gloves_repairing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:leather_gloves_repairing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/combat/leather_helmet_repairing.json b/src/generated/resources/data/aether/advancements/recipes/combat/leather_helmet_repairing.json index 6d6c8159af..476e1a6bc4 100644 --- a/src/generated/resources/data/aether/advancements/recipes/combat/leather_helmet_repairing.json +++ b/src/generated/resources/data/aether/advancements/recipes/combat/leather_helmet_repairing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:leather_helmet_repairing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/combat/leather_leggings_repairing.json b/src/generated/resources/data/aether/advancements/recipes/combat/leather_leggings_repairing.json index 5ad4526eab..70b6cc1bb4 100644 --- a/src/generated/resources/data/aether/advancements/recipes/combat/leather_leggings_repairing.json +++ b/src/generated/resources/data/aether/advancements/recipes/combat/leather_leggings_repairing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:leather_leggings_repairing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/combat/netherite_boots_repairing.json b/src/generated/resources/data/aether/advancements/recipes/combat/netherite_boots_repairing.json index 720baf09a9..5c53f358b9 100644 --- a/src/generated/resources/data/aether/advancements/recipes/combat/netherite_boots_repairing.json +++ b/src/generated/resources/data/aether/advancements/recipes/combat/netherite_boots_repairing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:netherite_boots_repairing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/combat/netherite_chestplate_repairing.json b/src/generated/resources/data/aether/advancements/recipes/combat/netherite_chestplate_repairing.json index e54f55071c..b3a7a0851b 100644 --- a/src/generated/resources/data/aether/advancements/recipes/combat/netherite_chestplate_repairing.json +++ b/src/generated/resources/data/aether/advancements/recipes/combat/netherite_chestplate_repairing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:netherite_chestplate_repairing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/combat/netherite_gloves_repairing.json b/src/generated/resources/data/aether/advancements/recipes/combat/netherite_gloves_repairing.json index 6d34a588cc..c622726729 100644 --- a/src/generated/resources/data/aether/advancements/recipes/combat/netherite_gloves_repairing.json +++ b/src/generated/resources/data/aether/advancements/recipes/combat/netherite_gloves_repairing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:netherite_gloves_repairing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/combat/netherite_gloves_smithing.json b/src/generated/resources/data/aether/advancements/recipes/combat/netherite_gloves_smithing.json index 769cf6cd46..bc8fc7a0b4 100644 --- a/src/generated/resources/data/aether/advancements/recipes/combat/netherite_gloves_smithing.json +++ b/src/generated/resources/data/aether/advancements/recipes/combat/netherite_gloves_smithing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:netherite_gloves_smithing" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/combat/netherite_helmet_repairing.json b/src/generated/resources/data/aether/advancements/recipes/combat/netherite_helmet_repairing.json index 9c39617476..9ba2099838 100644 --- a/src/generated/resources/data/aether/advancements/recipes/combat/netherite_helmet_repairing.json +++ b/src/generated/resources/data/aether/advancements/recipes/combat/netherite_helmet_repairing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:netherite_helmet_repairing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/combat/netherite_leggings_repairing.json b/src/generated/resources/data/aether/advancements/recipes/combat/netherite_leggings_repairing.json index a5d0dd5748..e3a2dbd3a1 100644 --- a/src/generated/resources/data/aether/advancements/recipes/combat/netherite_leggings_repairing.json +++ b/src/generated/resources/data/aether/advancements/recipes/combat/netherite_leggings_repairing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:netherite_leggings_repairing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/combat/netherite_sword_repairing.json b/src/generated/resources/data/aether/advancements/recipes/combat/netherite_sword_repairing.json index 6306f1f530..d59946d5ac 100644 --- a/src/generated/resources/data/aether/advancements/recipes/combat/netherite_sword_repairing.json +++ b/src/generated/resources/data/aether/advancements/recipes/combat/netherite_sword_repairing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:netherite_sword_repairing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/combat/poison_dart.json b/src/generated/resources/data/aether/advancements/recipes/combat/poison_dart.json index 0fd5273b62..0ec4e40fda 100644 --- a/src/generated/resources/data/aether/advancements/recipes/combat/poison_dart.json +++ b/src/generated/resources/data/aether/advancements/recipes/combat/poison_dart.json @@ -43,5 +43,6 @@ "recipes": [ "aether:poison_dart" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/combat/poison_dart_shooter.json b/src/generated/resources/data/aether/advancements/recipes/combat/poison_dart_shooter.json index 385fa66a3a..7bec1679b1 100644 --- a/src/generated/resources/data/aether/advancements/recipes/combat/poison_dart_shooter.json +++ b/src/generated/resources/data/aether/advancements/recipes/combat/poison_dart_shooter.json @@ -43,5 +43,6 @@ "recipes": [ "aether:poison_dart_shooter" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/combat/red_cape.json b/src/generated/resources/data/aether/advancements/recipes/combat/red_cape.json index b0fb3b0c8c..cce9e66824 100644 --- a/src/generated/resources/data/aether/advancements/recipes/combat/red_cape.json +++ b/src/generated/resources/data/aether/advancements/recipes/combat/red_cape.json @@ -30,5 +30,6 @@ "recipes": [ "aether:red_cape" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/combat/shield_repairing.json b/src/generated/resources/data/aether/advancements/recipes/combat/shield_repairing.json index dcdd313ec7..fc2eb7f563 100644 --- a/src/generated/resources/data/aether/advancements/recipes/combat/shield_repairing.json +++ b/src/generated/resources/data/aether/advancements/recipes/combat/shield_repairing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:shield_repairing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/combat/skyroot_iron_vanilla_shield.json b/src/generated/resources/data/aether/advancements/recipes/combat/skyroot_iron_vanilla_shield.json index 35498bf843..c39ecbc881 100644 --- a/src/generated/resources/data/aether/advancements/recipes/combat/skyroot_iron_vanilla_shield.json +++ b/src/generated/resources/data/aether/advancements/recipes/combat/skyroot_iron_vanilla_shield.json @@ -28,5 +28,6 @@ "recipes": [ "aether:skyroot_iron_vanilla_shield" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/combat/skyroot_sword.json b/src/generated/resources/data/aether/advancements/recipes/combat/skyroot_sword.json index bc463f16ef..34ad7a9d71 100644 --- a/src/generated/resources/data/aether/advancements/recipes/combat/skyroot_sword.json +++ b/src/generated/resources/data/aether/advancements/recipes/combat/skyroot_sword.json @@ -28,5 +28,6 @@ "recipes": [ "aether:skyroot_sword" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/combat/skyroot_sword_repairing.json b/src/generated/resources/data/aether/advancements/recipes/combat/skyroot_sword_repairing.json index 984705884d..be497801a2 100644 --- a/src/generated/resources/data/aether/advancements/recipes/combat/skyroot_sword_repairing.json +++ b/src/generated/resources/data/aether/advancements/recipes/combat/skyroot_sword_repairing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:skyroot_sword_repairing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/combat/skyroot_zanite_vanilla_shield.json b/src/generated/resources/data/aether/advancements/recipes/combat/skyroot_zanite_vanilla_shield.json index 9106f73b96..23ef430bae 100644 --- a/src/generated/resources/data/aether/advancements/recipes/combat/skyroot_zanite_vanilla_shield.json +++ b/src/generated/resources/data/aether/advancements/recipes/combat/skyroot_zanite_vanilla_shield.json @@ -30,5 +30,6 @@ "recipes": [ "aether:skyroot_zanite_vanilla_shield" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/combat/stone_sword_repairing.json b/src/generated/resources/data/aether/advancements/recipes/combat/stone_sword_repairing.json index d8293b486e..9aebd8d009 100644 --- a/src/generated/resources/data/aether/advancements/recipes/combat/stone_sword_repairing.json +++ b/src/generated/resources/data/aether/advancements/recipes/combat/stone_sword_repairing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:stone_sword_repairing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/combat/white_cape.json b/src/generated/resources/data/aether/advancements/recipes/combat/white_cape.json index b9aaf1eb1c..f66d9891a1 100644 --- a/src/generated/resources/data/aether/advancements/recipes/combat/white_cape.json +++ b/src/generated/resources/data/aether/advancements/recipes/combat/white_cape.json @@ -30,5 +30,6 @@ "recipes": [ "aether:white_cape" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/combat/wood_zanite_vanilla_shield.json b/src/generated/resources/data/aether/advancements/recipes/combat/wood_zanite_vanilla_shield.json index 9d86bc274e..863bf136d4 100644 --- a/src/generated/resources/data/aether/advancements/recipes/combat/wood_zanite_vanilla_shield.json +++ b/src/generated/resources/data/aether/advancements/recipes/combat/wood_zanite_vanilla_shield.json @@ -30,5 +30,6 @@ "recipes": [ "aether:wood_zanite_vanilla_shield" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/combat/wooden_sword_repairing.json b/src/generated/resources/data/aether/advancements/recipes/combat/wooden_sword_repairing.json index c9e2686014..d078e20da1 100644 --- a/src/generated/resources/data/aether/advancements/recipes/combat/wooden_sword_repairing.json +++ b/src/generated/resources/data/aether/advancements/recipes/combat/wooden_sword_repairing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:wooden_sword_repairing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/combat/yellow_cape.json b/src/generated/resources/data/aether/advancements/recipes/combat/yellow_cape.json index cb57c24e29..d52be710bf 100644 --- a/src/generated/resources/data/aether/advancements/recipes/combat/yellow_cape.json +++ b/src/generated/resources/data/aether/advancements/recipes/combat/yellow_cape.json @@ -30,5 +30,6 @@ "recipes": [ "aether:yellow_cape" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/combat/zanite_boots.json b/src/generated/resources/data/aether/advancements/recipes/combat/zanite_boots.json index 47f3ca882e..7d71097aeb 100644 --- a/src/generated/resources/data/aether/advancements/recipes/combat/zanite_boots.json +++ b/src/generated/resources/data/aether/advancements/recipes/combat/zanite_boots.json @@ -30,5 +30,6 @@ "recipes": [ "aether:zanite_boots" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/combat/zanite_boots_repairing.json b/src/generated/resources/data/aether/advancements/recipes/combat/zanite_boots_repairing.json index 7b7e8e9575..498d72590d 100644 --- a/src/generated/resources/data/aether/advancements/recipes/combat/zanite_boots_repairing.json +++ b/src/generated/resources/data/aether/advancements/recipes/combat/zanite_boots_repairing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:zanite_boots_repairing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/combat/zanite_chestplate.json b/src/generated/resources/data/aether/advancements/recipes/combat/zanite_chestplate.json index c32ccc1f79..98256fa56e 100644 --- a/src/generated/resources/data/aether/advancements/recipes/combat/zanite_chestplate.json +++ b/src/generated/resources/data/aether/advancements/recipes/combat/zanite_chestplate.json @@ -30,5 +30,6 @@ "recipes": [ "aether:zanite_chestplate" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/combat/zanite_chestplate_repairing.json b/src/generated/resources/data/aether/advancements/recipes/combat/zanite_chestplate_repairing.json index 470de74203..158c711610 100644 --- a/src/generated/resources/data/aether/advancements/recipes/combat/zanite_chestplate_repairing.json +++ b/src/generated/resources/data/aether/advancements/recipes/combat/zanite_chestplate_repairing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:zanite_chestplate_repairing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/combat/zanite_gloves.json b/src/generated/resources/data/aether/advancements/recipes/combat/zanite_gloves.json index e7d789df2d..9f1a375720 100644 --- a/src/generated/resources/data/aether/advancements/recipes/combat/zanite_gloves.json +++ b/src/generated/resources/data/aether/advancements/recipes/combat/zanite_gloves.json @@ -30,5 +30,6 @@ "recipes": [ "aether:zanite_gloves" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/combat/zanite_gloves_repairing.json b/src/generated/resources/data/aether/advancements/recipes/combat/zanite_gloves_repairing.json index 360bc79d12..29cb65fa6c 100644 --- a/src/generated/resources/data/aether/advancements/recipes/combat/zanite_gloves_repairing.json +++ b/src/generated/resources/data/aether/advancements/recipes/combat/zanite_gloves_repairing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:zanite_gloves_repairing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/combat/zanite_helmet.json b/src/generated/resources/data/aether/advancements/recipes/combat/zanite_helmet.json index c51bfc08a6..203923cb04 100644 --- a/src/generated/resources/data/aether/advancements/recipes/combat/zanite_helmet.json +++ b/src/generated/resources/data/aether/advancements/recipes/combat/zanite_helmet.json @@ -30,5 +30,6 @@ "recipes": [ "aether:zanite_helmet" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/combat/zanite_helmet_repairing.json b/src/generated/resources/data/aether/advancements/recipes/combat/zanite_helmet_repairing.json index 5982179784..c4c16bca1d 100644 --- a/src/generated/resources/data/aether/advancements/recipes/combat/zanite_helmet_repairing.json +++ b/src/generated/resources/data/aether/advancements/recipes/combat/zanite_helmet_repairing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:zanite_helmet_repairing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/combat/zanite_leggings.json b/src/generated/resources/data/aether/advancements/recipes/combat/zanite_leggings.json index 85ca070bb2..141e47ea80 100644 --- a/src/generated/resources/data/aether/advancements/recipes/combat/zanite_leggings.json +++ b/src/generated/resources/data/aether/advancements/recipes/combat/zanite_leggings.json @@ -30,5 +30,6 @@ "recipes": [ "aether:zanite_leggings" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/combat/zanite_leggings_repairing.json b/src/generated/resources/data/aether/advancements/recipes/combat/zanite_leggings_repairing.json index 542efbac2e..52d3f8ed74 100644 --- a/src/generated/resources/data/aether/advancements/recipes/combat/zanite_leggings_repairing.json +++ b/src/generated/resources/data/aether/advancements/recipes/combat/zanite_leggings_repairing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:zanite_leggings_repairing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/combat/zanite_pendant.json b/src/generated/resources/data/aether/advancements/recipes/combat/zanite_pendant.json index aa278eba4f..9e7566b46a 100644 --- a/src/generated/resources/data/aether/advancements/recipes/combat/zanite_pendant.json +++ b/src/generated/resources/data/aether/advancements/recipes/combat/zanite_pendant.json @@ -30,5 +30,6 @@ "recipes": [ "aether:zanite_pendant" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/combat/zanite_pendant_repairing.json b/src/generated/resources/data/aether/advancements/recipes/combat/zanite_pendant_repairing.json index 67938597d5..83a3318157 100644 --- a/src/generated/resources/data/aether/advancements/recipes/combat/zanite_pendant_repairing.json +++ b/src/generated/resources/data/aether/advancements/recipes/combat/zanite_pendant_repairing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:zanite_pendant_repairing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/combat/zanite_ring.json b/src/generated/resources/data/aether/advancements/recipes/combat/zanite_ring.json index a9c6accb26..fe14e478b7 100644 --- a/src/generated/resources/data/aether/advancements/recipes/combat/zanite_ring.json +++ b/src/generated/resources/data/aether/advancements/recipes/combat/zanite_ring.json @@ -30,5 +30,6 @@ "recipes": [ "aether:zanite_ring" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/combat/zanite_ring_repairing.json b/src/generated/resources/data/aether/advancements/recipes/combat/zanite_ring_repairing.json index ad1ad8196f..2cdda7dbc1 100644 --- a/src/generated/resources/data/aether/advancements/recipes/combat/zanite_ring_repairing.json +++ b/src/generated/resources/data/aether/advancements/recipes/combat/zanite_ring_repairing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:zanite_ring_repairing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/combat/zanite_sword.json b/src/generated/resources/data/aether/advancements/recipes/combat/zanite_sword.json index f4ce48c5df..c07811ac79 100644 --- a/src/generated/resources/data/aether/advancements/recipes/combat/zanite_sword.json +++ b/src/generated/resources/data/aether/advancements/recipes/combat/zanite_sword.json @@ -30,5 +30,6 @@ "recipes": [ "aether:zanite_sword" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/combat/zanite_sword_repairing.json b/src/generated/resources/data/aether/advancements/recipes/combat/zanite_sword_repairing.json index 9aaae2d6ff..7d2f3d5de7 100644 --- a/src/generated/resources/data/aether/advancements/recipes/combat/zanite_sword_repairing.json +++ b/src/generated/resources/data/aether/advancements/recipes/combat/zanite_sword_repairing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:zanite_sword_repairing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/decorations/aerogel_wall.json b/src/generated/resources/data/aether/advancements/recipes/decorations/aerogel_wall.json index c0f7a8824e..3bb1ff8cd0 100644 --- a/src/generated/resources/data/aether/advancements/recipes/decorations/aerogel_wall.json +++ b/src/generated/resources/data/aether/advancements/recipes/decorations/aerogel_wall.json @@ -30,5 +30,6 @@ "recipes": [ "aether:aerogel_wall" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/decorations/aerogel_wall_from_aerogel_stonecutting.json b/src/generated/resources/data/aether/advancements/recipes/decorations/aerogel_wall_from_aerogel_stonecutting.json index dfb5d5a9c1..358d7efe1b 100644 --- a/src/generated/resources/data/aether/advancements/recipes/decorations/aerogel_wall_from_aerogel_stonecutting.json +++ b/src/generated/resources/data/aether/advancements/recipes/decorations/aerogel_wall_from_aerogel_stonecutting.json @@ -30,5 +30,6 @@ "recipes": [ "aether:aerogel_wall_from_aerogel_stonecutting" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/decorations/altar.json b/src/generated/resources/data/aether/advancements/recipes/decorations/altar.json index 6504a7c610..4ed847c6e1 100644 --- a/src/generated/resources/data/aether/advancements/recipes/decorations/altar.json +++ b/src/generated/resources/data/aether/advancements/recipes/decorations/altar.json @@ -30,5 +30,6 @@ "recipes": [ "aether:altar" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/decorations/ambrosium_torch.json b/src/generated/resources/data/aether/advancements/recipes/decorations/ambrosium_torch.json index 9824177996..614fda2eda 100644 --- a/src/generated/resources/data/aether/advancements/recipes/decorations/ambrosium_torch.json +++ b/src/generated/resources/data/aether/advancements/recipes/decorations/ambrosium_torch.json @@ -30,5 +30,6 @@ "recipes": [ "aether:ambrosium_torch" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/decorations/angelic_wall.json b/src/generated/resources/data/aether/advancements/recipes/decorations/angelic_wall.json index 7b40706317..244cb82072 100644 --- a/src/generated/resources/data/aether/advancements/recipes/decorations/angelic_wall.json +++ b/src/generated/resources/data/aether/advancements/recipes/decorations/angelic_wall.json @@ -30,5 +30,6 @@ "recipes": [ "aether:angelic_wall" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/decorations/angelic_wall_from_angelic_stone_stonecutting.json b/src/generated/resources/data/aether/advancements/recipes/decorations/angelic_wall_from_angelic_stone_stonecutting.json index 655fb79b4f..ffb0837f1c 100644 --- a/src/generated/resources/data/aether/advancements/recipes/decorations/angelic_wall_from_angelic_stone_stonecutting.json +++ b/src/generated/resources/data/aether/advancements/recipes/decorations/angelic_wall_from_angelic_stone_stonecutting.json @@ -30,5 +30,6 @@ "recipes": [ "aether:angelic_wall_from_angelic_stone_stonecutting" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/decorations/carved_wall.json b/src/generated/resources/data/aether/advancements/recipes/decorations/carved_wall.json index 86e63569bb..1613822eda 100644 --- a/src/generated/resources/data/aether/advancements/recipes/decorations/carved_wall.json +++ b/src/generated/resources/data/aether/advancements/recipes/decorations/carved_wall.json @@ -30,5 +30,6 @@ "recipes": [ "aether:carved_wall" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/decorations/carved_wall_from_carved_stone_stonecutting.json b/src/generated/resources/data/aether/advancements/recipes/decorations/carved_wall_from_carved_stone_stonecutting.json index 4a85a0c225..bea75e4087 100644 --- a/src/generated/resources/data/aether/advancements/recipes/decorations/carved_wall_from_carved_stone_stonecutting.json +++ b/src/generated/resources/data/aether/advancements/recipes/decorations/carved_wall_from_carved_stone_stonecutting.json @@ -30,5 +30,6 @@ "recipes": [ "aether:carved_wall_from_carved_stone_stonecutting" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/decorations/freezer.json b/src/generated/resources/data/aether/advancements/recipes/decorations/freezer.json index 6ca826ec16..80a92d8544 100644 --- a/src/generated/resources/data/aether/advancements/recipes/decorations/freezer.json +++ b/src/generated/resources/data/aether/advancements/recipes/decorations/freezer.json @@ -30,5 +30,6 @@ "recipes": [ "aether:freezer" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/decorations/gravitite_jukebox.json b/src/generated/resources/data/aether/advancements/recipes/decorations/gravitite_jukebox.json index f48bb5ab69..5fcac680f1 100644 --- a/src/generated/resources/data/aether/advancements/recipes/decorations/gravitite_jukebox.json +++ b/src/generated/resources/data/aether/advancements/recipes/decorations/gravitite_jukebox.json @@ -30,5 +30,6 @@ "recipes": [ "aether:gravitite_jukebox" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/decorations/hellfire_wall.json b/src/generated/resources/data/aether/advancements/recipes/decorations/hellfire_wall.json index d7316e80bd..f13eb47236 100644 --- a/src/generated/resources/data/aether/advancements/recipes/decorations/hellfire_wall.json +++ b/src/generated/resources/data/aether/advancements/recipes/decorations/hellfire_wall.json @@ -30,5 +30,6 @@ "recipes": [ "aether:hellfire_wall" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/decorations/hellfire_wall_from_hellfire_stone_stonecutting.json b/src/generated/resources/data/aether/advancements/recipes/decorations/hellfire_wall_from_hellfire_stone_stonecutting.json index 6b5fcf34ed..cb2c8ebd7a 100644 --- a/src/generated/resources/data/aether/advancements/recipes/decorations/hellfire_wall_from_hellfire_stone_stonecutting.json +++ b/src/generated/resources/data/aether/advancements/recipes/decorations/hellfire_wall_from_hellfire_stone_stonecutting.json @@ -30,5 +30,6 @@ "recipes": [ "aether:hellfire_wall_from_hellfire_stone_stonecutting" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/decorations/holystone_brick_wall.json b/src/generated/resources/data/aether/advancements/recipes/decorations/holystone_brick_wall.json index 68a89336a5..ecc8755839 100644 --- a/src/generated/resources/data/aether/advancements/recipes/decorations/holystone_brick_wall.json +++ b/src/generated/resources/data/aether/advancements/recipes/decorations/holystone_brick_wall.json @@ -30,5 +30,6 @@ "recipes": [ "aether:holystone_brick_wall" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/decorations/holystone_brick_wall_from_holystone_bricks_stonecutting.json b/src/generated/resources/data/aether/advancements/recipes/decorations/holystone_brick_wall_from_holystone_bricks_stonecutting.json index e0e284ade5..639d83d098 100644 --- a/src/generated/resources/data/aether/advancements/recipes/decorations/holystone_brick_wall_from_holystone_bricks_stonecutting.json +++ b/src/generated/resources/data/aether/advancements/recipes/decorations/holystone_brick_wall_from_holystone_bricks_stonecutting.json @@ -30,5 +30,6 @@ "recipes": [ "aether:holystone_brick_wall_from_holystone_bricks_stonecutting" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/decorations/holystone_brick_wall_from_holystone_stonecutting.json b/src/generated/resources/data/aether/advancements/recipes/decorations/holystone_brick_wall_from_holystone_stonecutting.json index a792a5016b..c49f07e63d 100644 --- a/src/generated/resources/data/aether/advancements/recipes/decorations/holystone_brick_wall_from_holystone_stonecutting.json +++ b/src/generated/resources/data/aether/advancements/recipes/decorations/holystone_brick_wall_from_holystone_stonecutting.json @@ -30,5 +30,6 @@ "recipes": [ "aether:holystone_brick_wall_from_holystone_stonecutting" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/decorations/holystone_stonecutter.json b/src/generated/resources/data/aether/advancements/recipes/decorations/holystone_stonecutter.json index a7db7a0dac..0212836d10 100644 --- a/src/generated/resources/data/aether/advancements/recipes/decorations/holystone_stonecutter.json +++ b/src/generated/resources/data/aether/advancements/recipes/decorations/holystone_stonecutter.json @@ -30,5 +30,6 @@ "recipes": [ "aether:holystone_stonecutter" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/decorations/holystone_wall.json b/src/generated/resources/data/aether/advancements/recipes/decorations/holystone_wall.json index 6fff6a045a..488b320a68 100644 --- a/src/generated/resources/data/aether/advancements/recipes/decorations/holystone_wall.json +++ b/src/generated/resources/data/aether/advancements/recipes/decorations/holystone_wall.json @@ -30,5 +30,6 @@ "recipes": [ "aether:holystone_wall" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/decorations/holystone_wall_from_holystone_stonecutting.json b/src/generated/resources/data/aether/advancements/recipes/decorations/holystone_wall_from_holystone_stonecutting.json index c2ed706e22..d851e78168 100644 --- a/src/generated/resources/data/aether/advancements/recipes/decorations/holystone_wall_from_holystone_stonecutting.json +++ b/src/generated/resources/data/aether/advancements/recipes/decorations/holystone_wall_from_holystone_stonecutting.json @@ -30,5 +30,6 @@ "recipes": [ "aether:holystone_wall_from_holystone_stonecutting" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/decorations/icestone_wall.json b/src/generated/resources/data/aether/advancements/recipes/decorations/icestone_wall.json index 496c453d42..aef9d74901 100644 --- a/src/generated/resources/data/aether/advancements/recipes/decorations/icestone_wall.json +++ b/src/generated/resources/data/aether/advancements/recipes/decorations/icestone_wall.json @@ -30,5 +30,6 @@ "recipes": [ "aether:icestone_wall" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/decorations/icestone_wall_from_icestone_stonecutting.json b/src/generated/resources/data/aether/advancements/recipes/decorations/icestone_wall_from_icestone_stonecutting.json index 21f5dcefb3..822e5b466a 100644 --- a/src/generated/resources/data/aether/advancements/recipes/decorations/icestone_wall_from_icestone_stonecutting.json +++ b/src/generated/resources/data/aether/advancements/recipes/decorations/icestone_wall_from_icestone_stonecutting.json @@ -30,5 +30,6 @@ "recipes": [ "aether:icestone_wall_from_icestone_stonecutting" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/decorations/incubator.json b/src/generated/resources/data/aether/advancements/recipes/decorations/incubator.json index 831ff25e12..ebb589cf6b 100644 --- a/src/generated/resources/data/aether/advancements/recipes/decorations/incubator.json +++ b/src/generated/resources/data/aether/advancements/recipes/decorations/incubator.json @@ -30,5 +30,6 @@ "recipes": [ "aether:incubator" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/decorations/mossy_holystone_wall.json b/src/generated/resources/data/aether/advancements/recipes/decorations/mossy_holystone_wall.json index 53171b31a0..907a9b4e5f 100644 --- a/src/generated/resources/data/aether/advancements/recipes/decorations/mossy_holystone_wall.json +++ b/src/generated/resources/data/aether/advancements/recipes/decorations/mossy_holystone_wall.json @@ -30,5 +30,6 @@ "recipes": [ "aether:mossy_holystone_wall" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/decorations/mossy_holystone_wall_from_mossy_holystone_stonecutting.json b/src/generated/resources/data/aether/advancements/recipes/decorations/mossy_holystone_wall_from_mossy_holystone_stonecutting.json index f5f4441e8b..a37a3dad64 100644 --- a/src/generated/resources/data/aether/advancements/recipes/decorations/mossy_holystone_wall_from_mossy_holystone_stonecutting.json +++ b/src/generated/resources/data/aether/advancements/recipes/decorations/mossy_holystone_wall_from_mossy_holystone_stonecutting.json @@ -30,5 +30,6 @@ "recipes": [ "aether:mossy_holystone_wall_from_mossy_holystone_stonecutting" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/decorations/quicksoil_glass_pane.json b/src/generated/resources/data/aether/advancements/recipes/decorations/quicksoil_glass_pane.json index ada673807f..a83021d4d4 100644 --- a/src/generated/resources/data/aether/advancements/recipes/decorations/quicksoil_glass_pane.json +++ b/src/generated/resources/data/aether/advancements/recipes/decorations/quicksoil_glass_pane.json @@ -30,5 +30,6 @@ "recipes": [ "aether:quicksoil_glass_pane" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/decorations/skyroot_barrel.json b/src/generated/resources/data/aether/advancements/recipes/decorations/skyroot_barrel.json index 82c5224cc4..6f811beaa1 100644 --- a/src/generated/resources/data/aether/advancements/recipes/decorations/skyroot_barrel.json +++ b/src/generated/resources/data/aether/advancements/recipes/decorations/skyroot_barrel.json @@ -39,5 +39,6 @@ "recipes": [ "aether:skyroot_barrel" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/decorations/skyroot_bed.json b/src/generated/resources/data/aether/advancements/recipes/decorations/skyroot_bed.json index 96acbeb8c9..97394e7f72 100644 --- a/src/generated/resources/data/aether/advancements/recipes/decorations/skyroot_bed.json +++ b/src/generated/resources/data/aether/advancements/recipes/decorations/skyroot_bed.json @@ -28,5 +28,6 @@ "recipes": [ "aether:skyroot_bed" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/decorations/skyroot_beehive.json b/src/generated/resources/data/aether/advancements/recipes/decorations/skyroot_beehive.json index d039e6139a..5b0aea403f 100644 --- a/src/generated/resources/data/aether/advancements/recipes/decorations/skyroot_beehive.json +++ b/src/generated/resources/data/aether/advancements/recipes/decorations/skyroot_beehive.json @@ -30,5 +30,6 @@ "recipes": [ "aether:skyroot_beehive" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/decorations/skyroot_cartography_table.json b/src/generated/resources/data/aether/advancements/recipes/decorations/skyroot_cartography_table.json index df2f0ba615..3bb650bb72 100644 --- a/src/generated/resources/data/aether/advancements/recipes/decorations/skyroot_cartography_table.json +++ b/src/generated/resources/data/aether/advancements/recipes/decorations/skyroot_cartography_table.json @@ -30,5 +30,6 @@ "recipes": [ "aether:skyroot_cartography_table" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/decorations/skyroot_chest.json b/src/generated/resources/data/aether/advancements/recipes/decorations/skyroot_chest.json index 0e3d9cf341..803c599efd 100644 --- a/src/generated/resources/data/aether/advancements/recipes/decorations/skyroot_chest.json +++ b/src/generated/resources/data/aether/advancements/recipes/decorations/skyroot_chest.json @@ -28,5 +28,6 @@ "recipes": [ "aether:skyroot_chest" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/decorations/skyroot_crafting_table.json b/src/generated/resources/data/aether/advancements/recipes/decorations/skyroot_crafting_table.json index 0f6902e68b..57ac698ba5 100644 --- a/src/generated/resources/data/aether/advancements/recipes/decorations/skyroot_crafting_table.json +++ b/src/generated/resources/data/aether/advancements/recipes/decorations/skyroot_crafting_table.json @@ -28,5 +28,6 @@ "recipes": [ "aether:skyroot_crafting_table" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/decorations/skyroot_fence.json b/src/generated/resources/data/aether/advancements/recipes/decorations/skyroot_fence.json index ad35b5fc89..518716ce98 100644 --- a/src/generated/resources/data/aether/advancements/recipes/decorations/skyroot_fence.json +++ b/src/generated/resources/data/aether/advancements/recipes/decorations/skyroot_fence.json @@ -30,5 +30,6 @@ "recipes": [ "aether:skyroot_fence" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/decorations/skyroot_fletching_table.json b/src/generated/resources/data/aether/advancements/recipes/decorations/skyroot_fletching_table.json index 6f81c7e7ee..680be20c33 100644 --- a/src/generated/resources/data/aether/advancements/recipes/decorations/skyroot_fletching_table.json +++ b/src/generated/resources/data/aether/advancements/recipes/decorations/skyroot_fletching_table.json @@ -30,5 +30,6 @@ "recipes": [ "aether:skyroot_fletching_table" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/decorations/skyroot_gravitite_jukebox.json b/src/generated/resources/data/aether/advancements/recipes/decorations/skyroot_gravitite_jukebox.json index 72a639d40b..c2d53f4da0 100644 --- a/src/generated/resources/data/aether/advancements/recipes/decorations/skyroot_gravitite_jukebox.json +++ b/src/generated/resources/data/aether/advancements/recipes/decorations/skyroot_gravitite_jukebox.json @@ -30,5 +30,6 @@ "recipes": [ "aether:skyroot_gravitite_jukebox" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/decorations/skyroot_grindstone.json b/src/generated/resources/data/aether/advancements/recipes/decorations/skyroot_grindstone.json index 255421d741..afb01e8924 100644 --- a/src/generated/resources/data/aether/advancements/recipes/decorations/skyroot_grindstone.json +++ b/src/generated/resources/data/aether/advancements/recipes/decorations/skyroot_grindstone.json @@ -30,5 +30,6 @@ "recipes": [ "aether:skyroot_grindstone" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/combat/old_netherite_gloves_smithing.json b/src/generated/resources/data/aether/advancements/recipes/decorations/skyroot_hanging_sign.json similarity index 66% rename from src/generated/resources/data/aether/advancements/recipes/combat/old_netherite_gloves_smithing.json rename to src/generated/resources/data/aether/advancements/recipes/decorations/skyroot_hanging_sign.json index 2184d00aee..cf0b7a9235 100644 --- a/src/generated/resources/data/aether/advancements/recipes/combat/old_netherite_gloves_smithing.json +++ b/src/generated/resources/data/aether/advancements/recipes/decorations/skyroot_hanging_sign.json @@ -1,12 +1,12 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_netherite_ingot": { + "has_stripped_logs": { "conditions": { "items": [ { "items": [ - "minecraft:netherite_ingot" + "aether:stripped_skyroot_log" ] } ] @@ -15,20 +15,21 @@ }, "has_the_recipe": { "conditions": { - "recipe": "aether:old_netherite_gloves_smithing" + "recipe": "aether:skyroot_hanging_sign" }, "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ - "has_netherite_ingot", + "has_stripped_logs", "has_the_recipe" ] ], "rewards": { "recipes": [ - "aether:old_netherite_gloves_smithing" + "aether:skyroot_hanging_sign" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/decorations/skyroot_jukebox.json b/src/generated/resources/data/aether/advancements/recipes/decorations/skyroot_jukebox.json index 885d41258b..de8354af80 100644 --- a/src/generated/resources/data/aether/advancements/recipes/decorations/skyroot_jukebox.json +++ b/src/generated/resources/data/aether/advancements/recipes/decorations/skyroot_jukebox.json @@ -28,5 +28,6 @@ "recipes": [ "aether:skyroot_jukebox" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/decorations/skyroot_loom.json b/src/generated/resources/data/aether/advancements/recipes/decorations/skyroot_loom.json index f050ea8bd7..0b009cea4d 100644 --- a/src/generated/resources/data/aether/advancements/recipes/decorations/skyroot_loom.json +++ b/src/generated/resources/data/aether/advancements/recipes/decorations/skyroot_loom.json @@ -28,5 +28,6 @@ "recipes": [ "aether:skyroot_loom" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/decorations/skyroot_sign.json b/src/generated/resources/data/aether/advancements/recipes/decorations/skyroot_sign.json index 417c8045ad..4d0409b7c1 100644 --- a/src/generated/resources/data/aether/advancements/recipes/decorations/skyroot_sign.json +++ b/src/generated/resources/data/aether/advancements/recipes/decorations/skyroot_sign.json @@ -30,5 +30,6 @@ "recipes": [ "aether:skyroot_sign" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/decorations/skyroot_smithing_table.json b/src/generated/resources/data/aether/advancements/recipes/decorations/skyroot_smithing_table.json index 600319ff14..7301efd7c8 100644 --- a/src/generated/resources/data/aether/advancements/recipes/decorations/skyroot_smithing_table.json +++ b/src/generated/resources/data/aether/advancements/recipes/decorations/skyroot_smithing_table.json @@ -28,5 +28,6 @@ "recipes": [ "aether:skyroot_smithing_table" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/food/enchanted_berry_enchanting.json b/src/generated/resources/data/aether/advancements/recipes/food/enchanted_berry_enchanting.json index 4a959d00ff..eb295b24d0 100644 --- a/src/generated/resources/data/aether/advancements/recipes/food/enchanted_berry_enchanting.json +++ b/src/generated/resources/data/aether/advancements/recipes/food/enchanted_berry_enchanting.json @@ -30,5 +30,6 @@ "recipes": [ "aether:enchanted_berry_enchanting" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/food/healing_stone_enchanting.json b/src/generated/resources/data/aether/advancements/recipes/food/healing_stone_enchanting.json index 851130239e..80a99559ee 100644 --- a/src/generated/resources/data/aether/advancements/recipes/food/healing_stone_enchanting.json +++ b/src/generated/resources/data/aether/advancements/recipes/food/healing_stone_enchanting.json @@ -30,5 +30,6 @@ "recipes": [ "aether:healing_stone_enchanting" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/food/moa_egg_cake.json b/src/generated/resources/data/aether/advancements/recipes/food/moa_egg_cake.json index 0a77c52601..d2a41330ec 100644 --- a/src/generated/resources/data/aether/advancements/recipes/food/moa_egg_cake.json +++ b/src/generated/resources/data/aether/advancements/recipes/food/moa_egg_cake.json @@ -28,5 +28,6 @@ "recipes": [ "aether:moa_egg_cake" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/food/moa_egg_pumpkin_pie.json b/src/generated/resources/data/aether/advancements/recipes/food/moa_egg_pumpkin_pie.json index 5342aefff8..4a58dc7a57 100644 --- a/src/generated/resources/data/aether/advancements/recipes/food/moa_egg_pumpkin_pie.json +++ b/src/generated/resources/data/aether/advancements/recipes/food/moa_egg_pumpkin_pie.json @@ -43,5 +43,6 @@ "recipes": [ "aether:moa_egg_pumpkin_pie" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/food/skyroot_milk_bucket_cake.json b/src/generated/resources/data/aether/advancements/recipes/food/skyroot_milk_bucket_cake.json index c6666e2a7b..b0ad8517f6 100644 --- a/src/generated/resources/data/aether/advancements/recipes/food/skyroot_milk_bucket_cake.json +++ b/src/generated/resources/data/aether/advancements/recipes/food/skyroot_milk_bucket_cake.json @@ -30,5 +30,6 @@ "recipes": [ "aether:skyroot_milk_bucket_cake" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/food/skyroot_milk_bucket_moa_egg_cake.json b/src/generated/resources/data/aether/advancements/recipes/food/skyroot_milk_bucket_moa_egg_cake.json index 96f81e3c85..f10c94842c 100644 --- a/src/generated/resources/data/aether/advancements/recipes/food/skyroot_milk_bucket_moa_egg_cake.json +++ b/src/generated/resources/data/aether/advancements/recipes/food/skyroot_milk_bucket_moa_egg_cake.json @@ -28,5 +28,6 @@ "recipes": [ "aether:skyroot_milk_bucket_moa_egg_cake" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/incubation/black_moa_incubation.json b/src/generated/resources/data/aether/advancements/recipes/incubation/black_moa_incubation.json index deb33fe76b..349447a0c3 100644 --- a/src/generated/resources/data/aether/advancements/recipes/incubation/black_moa_incubation.json +++ b/src/generated/resources/data/aether/advancements/recipes/incubation/black_moa_incubation.json @@ -30,5 +30,6 @@ "recipes": [ "aether:black_moa_incubation" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/incubation/blue_moa_incubation.json b/src/generated/resources/data/aether/advancements/recipes/incubation/blue_moa_incubation.json index c0ed4c6fa3..a624d9f767 100644 --- a/src/generated/resources/data/aether/advancements/recipes/incubation/blue_moa_incubation.json +++ b/src/generated/resources/data/aether/advancements/recipes/incubation/blue_moa_incubation.json @@ -30,5 +30,6 @@ "recipes": [ "aether:blue_moa_incubation" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/incubation/white_moa_incubation.json b/src/generated/resources/data/aether/advancements/recipes/incubation/white_moa_incubation.json index 8670518d25..ade345e0c8 100644 --- a/src/generated/resources/data/aether/advancements/recipes/incubation/white_moa_incubation.json +++ b/src/generated/resources/data/aether/advancements/recipes/incubation/white_moa_incubation.json @@ -30,5 +30,6 @@ "recipes": [ "aether:white_moa_incubation" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/misc/aether_gold_nugget_from_blasting.json b/src/generated/resources/data/aether/advancements/recipes/misc/aether_gold_nugget_from_blasting.json index a70adf8c62..50ee637471 100644 --- a/src/generated/resources/data/aether/advancements/recipes/misc/aether_gold_nugget_from_blasting.json +++ b/src/generated/resources/data/aether/advancements/recipes/misc/aether_gold_nugget_from_blasting.json @@ -56,5 +56,6 @@ "recipes": [ "aether:aether_gold_nugget_from_blasting" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/misc/aether_gold_nugget_from_smelting.json b/src/generated/resources/data/aether/advancements/recipes/misc/aether_gold_nugget_from_smelting.json index a6026bcd29..68da73b34e 100644 --- a/src/generated/resources/data/aether/advancements/recipes/misc/aether_gold_nugget_from_smelting.json +++ b/src/generated/resources/data/aether/advancements/recipes/misc/aether_gold_nugget_from_smelting.json @@ -56,5 +56,6 @@ "recipes": [ "aether:aether_gold_nugget_from_smelting" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/misc/aether_iron_nugget_from_blasting.json b/src/generated/resources/data/aether/advancements/recipes/misc/aether_iron_nugget_from_blasting.json index 615b4d1b86..1ae3c284e3 100644 --- a/src/generated/resources/data/aether/advancements/recipes/misc/aether_iron_nugget_from_blasting.json +++ b/src/generated/resources/data/aether/advancements/recipes/misc/aether_iron_nugget_from_blasting.json @@ -69,5 +69,6 @@ "recipes": [ "aether:aether_iron_nugget_from_blasting" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/misc/aether_iron_nugget_from_smelting.json b/src/generated/resources/data/aether/advancements/recipes/misc/aether_iron_nugget_from_smelting.json index c72d3c6d4d..bb5a5488ff 100644 --- a/src/generated/resources/data/aether/advancements/recipes/misc/aether_iron_nugget_from_smelting.json +++ b/src/generated/resources/data/aether/advancements/recipes/misc/aether_iron_nugget_from_smelting.json @@ -69,5 +69,6 @@ "recipes": [ "aether:aether_iron_nugget_from_smelting" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/misc/aether_tune_enchanting.json b/src/generated/resources/data/aether/advancements/recipes/misc/aether_tune_enchanting.json index 3f7125013e..abd1f8b010 100644 --- a/src/generated/resources/data/aether/advancements/recipes/misc/aether_tune_enchanting.json +++ b/src/generated/resources/data/aether/advancements/recipes/misc/aether_tune_enchanting.json @@ -28,5 +28,6 @@ "recipes": [ "aether:aether_tune_enchanting" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/misc/ambrosium_shard_from_ambrosium_block.json b/src/generated/resources/data/aether/advancements/recipes/misc/ambrosium_shard_from_ambrosium_block.json index ea1117c68a..b8198b32aa 100644 --- a/src/generated/resources/data/aether/advancements/recipes/misc/ambrosium_shard_from_ambrosium_block.json +++ b/src/generated/resources/data/aether/advancements/recipes/misc/ambrosium_shard_from_ambrosium_block.json @@ -30,5 +30,6 @@ "recipes": [ "aether:ambrosium_shard_from_ambrosium_block" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/misc/ambrosium_shard_from_blasting.json b/src/generated/resources/data/aether/advancements/recipes/misc/ambrosium_shard_from_blasting.json index fbbdee4475..1d708affee 100644 --- a/src/generated/resources/data/aether/advancements/recipes/misc/ambrosium_shard_from_blasting.json +++ b/src/generated/resources/data/aether/advancements/recipes/misc/ambrosium_shard_from_blasting.json @@ -30,5 +30,6 @@ "recipes": [ "aether:ambrosium_shard_from_blasting" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/misc/ambrosium_shard_from_smelting.json b/src/generated/resources/data/aether/advancements/recipes/misc/ambrosium_shard_from_smelting.json index b2f91b75ba..a9f4b3aae0 100644 --- a/src/generated/resources/data/aether/advancements/recipes/misc/ambrosium_shard_from_smelting.json +++ b/src/generated/resources/data/aether/advancements/recipes/misc/ambrosium_shard_from_smelting.json @@ -30,5 +30,6 @@ "recipes": [ "aether:ambrosium_shard_from_smelting" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/misc/book_of_lore.json b/src/generated/resources/data/aether/advancements/recipes/misc/book_of_lore.json index ed03a53080..01707297e0 100644 --- a/src/generated/resources/data/aether/advancements/recipes/misc/book_of_lore.json +++ b/src/generated/resources/data/aether/advancements/recipes/misc/book_of_lore.json @@ -30,5 +30,6 @@ "recipes": [ "aether:book_of_lore" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/misc/chinchilla_enchanting.json b/src/generated/resources/data/aether/advancements/recipes/misc/chinchilla_enchanting.json index a17896a882..ea9ff07ea1 100644 --- a/src/generated/resources/data/aether/advancements/recipes/misc/chinchilla_enchanting.json +++ b/src/generated/resources/data/aether/advancements/recipes/misc/chinchilla_enchanting.json @@ -30,5 +30,6 @@ "recipes": [ "aether:chinchilla_enchanting" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/misc/enchanted_dart_enchanting.json b/src/generated/resources/data/aether/advancements/recipes/misc/enchanted_dart_enchanting.json index 41e28ab0fb..91b201f03f 100644 --- a/src/generated/resources/data/aether/advancements/recipes/misc/enchanted_dart_enchanting.json +++ b/src/generated/resources/data/aether/advancements/recipes/misc/enchanted_dart_enchanting.json @@ -30,5 +30,6 @@ "recipes": [ "aether:enchanted_dart_enchanting" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/misc/enchanted_dart_shooter_enchanting.json b/src/generated/resources/data/aether/advancements/recipes/misc/enchanted_dart_shooter_enchanting.json index c8f72d1a20..bf2e5421f6 100644 --- a/src/generated/resources/data/aether/advancements/recipes/misc/enchanted_dart_shooter_enchanting.json +++ b/src/generated/resources/data/aether/advancements/recipes/misc/enchanted_dart_shooter_enchanting.json @@ -30,5 +30,6 @@ "recipes": [ "aether:enchanted_dart_shooter_enchanting" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/misc/flower_to_purple_dye.json b/src/generated/resources/data/aether/advancements/recipes/misc/flower_to_purple_dye.json index b72ee77da6..a2aa249beb 100644 --- a/src/generated/resources/data/aether/advancements/recipes/misc/flower_to_purple_dye.json +++ b/src/generated/resources/data/aether/advancements/recipes/misc/flower_to_purple_dye.json @@ -30,5 +30,6 @@ "recipes": [ "aether:flower_to_purple_dye" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/misc/flower_to_white_dye.json b/src/generated/resources/data/aether/advancements/recipes/misc/flower_to_white_dye.json index 9a33e0577a..12c2590061 100644 --- a/src/generated/resources/data/aether/advancements/recipes/misc/flower_to_white_dye.json +++ b/src/generated/resources/data/aether/advancements/recipes/misc/flower_to_white_dye.json @@ -30,5 +30,6 @@ "recipes": [ "aether:flower_to_white_dye" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/misc/high_freezing.json b/src/generated/resources/data/aether/advancements/recipes/misc/high_freezing.json index 219e86f681..69284a49f3 100644 --- a/src/generated/resources/data/aether/advancements/recipes/misc/high_freezing.json +++ b/src/generated/resources/data/aether/advancements/recipes/misc/high_freezing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:high_freezing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/misc/ice_pendant_from_freezing.json b/src/generated/resources/data/aether/advancements/recipes/misc/ice_pendant_from_freezing.json index 8b837e698b..eeaa5c1ca7 100644 --- a/src/generated/resources/data/aether/advancements/recipes/misc/ice_pendant_from_freezing.json +++ b/src/generated/resources/data/aether/advancements/recipes/misc/ice_pendant_from_freezing.json @@ -28,5 +28,6 @@ "recipes": [ "aether:ice_pendant_from_freezing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/misc/ice_ring_from_freezing.json b/src/generated/resources/data/aether/advancements/recipes/misc/ice_ring_from_freezing.json index 7736b82771..ae8a0923f0 100644 --- a/src/generated/resources/data/aether/advancements/recipes/misc/ice_ring_from_freezing.json +++ b/src/generated/resources/data/aether/advancements/recipes/misc/ice_ring_from_freezing.json @@ -28,5 +28,6 @@ "recipes": [ "aether:ice_ring_from_freezing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/misc/remedy_bucket_enchanting.json b/src/generated/resources/data/aether/advancements/recipes/misc/remedy_bucket_enchanting.json index 225e449ab5..16d5310703 100644 --- a/src/generated/resources/data/aether/advancements/recipes/misc/remedy_bucket_enchanting.json +++ b/src/generated/resources/data/aether/advancements/recipes/misc/remedy_bucket_enchanting.json @@ -30,5 +30,6 @@ "recipes": [ "aether:remedy_bucket_enchanting" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/misc/skyroot_bucket.json b/src/generated/resources/data/aether/advancements/recipes/misc/skyroot_bucket.json index a08afdc72b..c2ec39119a 100644 --- a/src/generated/resources/data/aether/advancements/recipes/misc/skyroot_bucket.json +++ b/src/generated/resources/data/aether/advancements/recipes/misc/skyroot_bucket.json @@ -28,5 +28,6 @@ "recipes": [ "aether:skyroot_bucket" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/misc/skyroot_stick.json b/src/generated/resources/data/aether/advancements/recipes/misc/skyroot_stick.json index 3f98abbc34..d5e1abd682 100644 --- a/src/generated/resources/data/aether/advancements/recipes/misc/skyroot_stick.json +++ b/src/generated/resources/data/aether/advancements/recipes/misc/skyroot_stick.json @@ -28,5 +28,6 @@ "recipes": [ "aether:skyroot_stick" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/misc/zanite_gemstone_from_blasting.json b/src/generated/resources/data/aether/advancements/recipes/misc/zanite_gemstone_from_blasting.json index 57a45f9316..e847c342ab 100644 --- a/src/generated/resources/data/aether/advancements/recipes/misc/zanite_gemstone_from_blasting.json +++ b/src/generated/resources/data/aether/advancements/recipes/misc/zanite_gemstone_from_blasting.json @@ -30,5 +30,6 @@ "recipes": [ "aether:zanite_gemstone_from_blasting" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/misc/zanite_gemstone_from_smelting.json b/src/generated/resources/data/aether/advancements/recipes/misc/zanite_gemstone_from_smelting.json index 144ec26033..66e39dc7c7 100644 --- a/src/generated/resources/data/aether/advancements/recipes/misc/zanite_gemstone_from_smelting.json +++ b/src/generated/resources/data/aether/advancements/recipes/misc/zanite_gemstone_from_smelting.json @@ -30,5 +30,6 @@ "recipes": [ "aether:zanite_gemstone_from_smelting" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/misc/zanite_gemstone_from_zanite_block.json b/src/generated/resources/data/aether/advancements/recipes/misc/zanite_gemstone_from_zanite_block.json index 940371f98e..a9d7d7b607 100644 --- a/src/generated/resources/data/aether/advancements/recipes/misc/zanite_gemstone_from_zanite_block.json +++ b/src/generated/resources/data/aether/advancements/recipes/misc/zanite_gemstone_from_zanite_block.json @@ -30,5 +30,6 @@ "recipes": [ "aether:zanite_gemstone_from_zanite_block" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/redstone/holystone_button.json b/src/generated/resources/data/aether/advancements/recipes/redstone/holystone_button.json index 08db649b21..c00356e5d3 100644 --- a/src/generated/resources/data/aether/advancements/recipes/redstone/holystone_button.json +++ b/src/generated/resources/data/aether/advancements/recipes/redstone/holystone_button.json @@ -30,5 +30,6 @@ "recipes": [ "aether:holystone_button" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/redstone/holystone_pressure_plate.json b/src/generated/resources/data/aether/advancements/recipes/redstone/holystone_pressure_plate.json index c6b2ae1f79..f8684df3e5 100644 --- a/src/generated/resources/data/aether/advancements/recipes/redstone/holystone_pressure_plate.json +++ b/src/generated/resources/data/aether/advancements/recipes/redstone/holystone_pressure_plate.json @@ -30,5 +30,6 @@ "recipes": [ "aether:holystone_pressure_plate" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/redstone/skyroot_button.json b/src/generated/resources/data/aether/advancements/recipes/redstone/skyroot_button.json index c8893cf4e5..4dbd4a7a88 100644 --- a/src/generated/resources/data/aether/advancements/recipes/redstone/skyroot_button.json +++ b/src/generated/resources/data/aether/advancements/recipes/redstone/skyroot_button.json @@ -30,5 +30,6 @@ "recipes": [ "aether:skyroot_button" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/redstone/skyroot_door.json b/src/generated/resources/data/aether/advancements/recipes/redstone/skyroot_door.json index 7e4f92479b..fd94954463 100644 --- a/src/generated/resources/data/aether/advancements/recipes/redstone/skyroot_door.json +++ b/src/generated/resources/data/aether/advancements/recipes/redstone/skyroot_door.json @@ -30,5 +30,6 @@ "recipes": [ "aether:skyroot_door" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/redstone/skyroot_fence_gate.json b/src/generated/resources/data/aether/advancements/recipes/redstone/skyroot_fence_gate.json index 7208beb6dc..602e80758a 100644 --- a/src/generated/resources/data/aether/advancements/recipes/redstone/skyroot_fence_gate.json +++ b/src/generated/resources/data/aether/advancements/recipes/redstone/skyroot_fence_gate.json @@ -30,5 +30,6 @@ "recipes": [ "aether:skyroot_fence_gate" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/redstone/skyroot_lectern.json b/src/generated/resources/data/aether/advancements/recipes/redstone/skyroot_lectern.json index b0925cbede..d0277886a9 100644 --- a/src/generated/resources/data/aether/advancements/recipes/redstone/skyroot_lectern.json +++ b/src/generated/resources/data/aether/advancements/recipes/redstone/skyroot_lectern.json @@ -30,5 +30,6 @@ "recipes": [ "aether:skyroot_lectern" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/redstone/skyroot_note_block.json b/src/generated/resources/data/aether/advancements/recipes/redstone/skyroot_note_block.json index 2f6308f640..76aba98010 100644 --- a/src/generated/resources/data/aether/advancements/recipes/redstone/skyroot_note_block.json +++ b/src/generated/resources/data/aether/advancements/recipes/redstone/skyroot_note_block.json @@ -28,5 +28,6 @@ "recipes": [ "aether:skyroot_note_block" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/redstone/skyroot_piston.json b/src/generated/resources/data/aether/advancements/recipes/redstone/skyroot_piston.json index b26d84b4c5..d4578b893b 100644 --- a/src/generated/resources/data/aether/advancements/recipes/redstone/skyroot_piston.json +++ b/src/generated/resources/data/aether/advancements/recipes/redstone/skyroot_piston.json @@ -28,5 +28,6 @@ "recipes": [ "aether:skyroot_piston" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/redstone/skyroot_pressure_plate.json b/src/generated/resources/data/aether/advancements/recipes/redstone/skyroot_pressure_plate.json index 359c112cb6..8a875f50ea 100644 --- a/src/generated/resources/data/aether/advancements/recipes/redstone/skyroot_pressure_plate.json +++ b/src/generated/resources/data/aether/advancements/recipes/redstone/skyroot_pressure_plate.json @@ -30,5 +30,6 @@ "recipes": [ "aether:skyroot_pressure_plate" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/redstone/skyroot_trapdoor.json b/src/generated/resources/data/aether/advancements/recipes/redstone/skyroot_trapdoor.json index 502ec9acad..f4eabb3305 100644 --- a/src/generated/resources/data/aether/advancements/recipes/redstone/skyroot_trapdoor.json +++ b/src/generated/resources/data/aether/advancements/recipes/redstone/skyroot_trapdoor.json @@ -30,5 +30,6 @@ "recipes": [ "aether:skyroot_trapdoor" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/redstone/skyroot_tripwire_hook.json b/src/generated/resources/data/aether/advancements/recipes/redstone/skyroot_tripwire_hook.json index 33e4cbf816..00a9e0671c 100644 --- a/src/generated/resources/data/aether/advancements/recipes/redstone/skyroot_tripwire_hook.json +++ b/src/generated/resources/data/aether/advancements/recipes/redstone/skyroot_tripwire_hook.json @@ -28,5 +28,6 @@ "recipes": [ "aether:skyroot_tripwire_hook" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/redstone/swet_slime_block.json b/src/generated/resources/data/aether/advancements/recipes/redstone/swet_slime_block.json index f4cba74489..cada4568b0 100644 --- a/src/generated/resources/data/aether/advancements/recipes/redstone/swet_slime_block.json +++ b/src/generated/resources/data/aether/advancements/recipes/redstone/swet_slime_block.json @@ -28,5 +28,6 @@ "recipes": [ "aether:swet_slime_block" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/redstone/swet_sticky_piston.json b/src/generated/resources/data/aether/advancements/recipes/redstone/swet_sticky_piston.json index 8f58a52b88..f51dccff79 100644 --- a/src/generated/resources/data/aether/advancements/recipes/redstone/swet_sticky_piston.json +++ b/src/generated/resources/data/aether/advancements/recipes/redstone/swet_sticky_piston.json @@ -28,5 +28,6 @@ "recipes": [ "aether:swet_sticky_piston" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/tools/aether_saddle.json b/src/generated/resources/data/aether/advancements/recipes/tools/aether_saddle.json index c953d2fa1e..ccf679aa9b 100644 --- a/src/generated/resources/data/aether/advancements/recipes/tools/aether_saddle.json +++ b/src/generated/resources/data/aether/advancements/recipes/tools/aether_saddle.json @@ -30,5 +30,6 @@ "recipes": [ "aether:aether_saddle" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/tools/cold_parachute.json b/src/generated/resources/data/aether/advancements/recipes/tools/cold_parachute.json index a529e7ac4d..0da0a95c1d 100644 --- a/src/generated/resources/data/aether/advancements/recipes/tools/cold_parachute.json +++ b/src/generated/resources/data/aether/advancements/recipes/tools/cold_parachute.json @@ -30,5 +30,6 @@ "recipes": [ "aether:cold_parachute" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/tools/diamond_axe_repairing.json b/src/generated/resources/data/aether/advancements/recipes/tools/diamond_axe_repairing.json index 150099ef4c..c1ec319779 100644 --- a/src/generated/resources/data/aether/advancements/recipes/tools/diamond_axe_repairing.json +++ b/src/generated/resources/data/aether/advancements/recipes/tools/diamond_axe_repairing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:diamond_axe_repairing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/tools/diamond_hoe_repairing.json b/src/generated/resources/data/aether/advancements/recipes/tools/diamond_hoe_repairing.json index 6c1be342c9..de92c966f7 100644 --- a/src/generated/resources/data/aether/advancements/recipes/tools/diamond_hoe_repairing.json +++ b/src/generated/resources/data/aether/advancements/recipes/tools/diamond_hoe_repairing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:diamond_hoe_repairing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/tools/diamond_pickaxe_repairing.json b/src/generated/resources/data/aether/advancements/recipes/tools/diamond_pickaxe_repairing.json index 9527ed9c83..13d1e690db 100644 --- a/src/generated/resources/data/aether/advancements/recipes/tools/diamond_pickaxe_repairing.json +++ b/src/generated/resources/data/aether/advancements/recipes/tools/diamond_pickaxe_repairing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:diamond_pickaxe_repairing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/tools/diamond_shovel_repairing.json b/src/generated/resources/data/aether/advancements/recipes/tools/diamond_shovel_repairing.json index 78d1b3f0c8..5c0f6856cd 100644 --- a/src/generated/resources/data/aether/advancements/recipes/tools/diamond_shovel_repairing.json +++ b/src/generated/resources/data/aether/advancements/recipes/tools/diamond_shovel_repairing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:diamond_shovel_repairing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/tools/fishing_rod_repairing.json b/src/generated/resources/data/aether/advancements/recipes/tools/fishing_rod_repairing.json index 5cff27f80a..8fe4cc0a07 100644 --- a/src/generated/resources/data/aether/advancements/recipes/tools/fishing_rod_repairing.json +++ b/src/generated/resources/data/aether/advancements/recipes/tools/fishing_rod_repairing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:fishing_rod_repairing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/tools/golden_axe_repairing.json b/src/generated/resources/data/aether/advancements/recipes/tools/golden_axe_repairing.json index 25dced622f..adbf772eae 100644 --- a/src/generated/resources/data/aether/advancements/recipes/tools/golden_axe_repairing.json +++ b/src/generated/resources/data/aether/advancements/recipes/tools/golden_axe_repairing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:golden_axe_repairing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/tools/golden_hoe_repairing.json b/src/generated/resources/data/aether/advancements/recipes/tools/golden_hoe_repairing.json index a155225b0b..4ccb9fa7e1 100644 --- a/src/generated/resources/data/aether/advancements/recipes/tools/golden_hoe_repairing.json +++ b/src/generated/resources/data/aether/advancements/recipes/tools/golden_hoe_repairing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:golden_hoe_repairing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/tools/golden_parachute.json b/src/generated/resources/data/aether/advancements/recipes/tools/golden_parachute.json index f60451baed..eeb09cd2e4 100644 --- a/src/generated/resources/data/aether/advancements/recipes/tools/golden_parachute.json +++ b/src/generated/resources/data/aether/advancements/recipes/tools/golden_parachute.json @@ -30,5 +30,6 @@ "recipes": [ "aether:golden_parachute" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/tools/golden_pickaxe_repairing.json b/src/generated/resources/data/aether/advancements/recipes/tools/golden_pickaxe_repairing.json index c229f2bd84..538f360316 100644 --- a/src/generated/resources/data/aether/advancements/recipes/tools/golden_pickaxe_repairing.json +++ b/src/generated/resources/data/aether/advancements/recipes/tools/golden_pickaxe_repairing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:golden_pickaxe_repairing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/tools/golden_shovel_repairing.json b/src/generated/resources/data/aether/advancements/recipes/tools/golden_shovel_repairing.json index 2e18231d2a..84492180ab 100644 --- a/src/generated/resources/data/aether/advancements/recipes/tools/golden_shovel_repairing.json +++ b/src/generated/resources/data/aether/advancements/recipes/tools/golden_shovel_repairing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:golden_shovel_repairing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/tools/gravitite_axe.json b/src/generated/resources/data/aether/advancements/recipes/tools/gravitite_axe.json index f4b5d2fccd..7654346703 100644 --- a/src/generated/resources/data/aether/advancements/recipes/tools/gravitite_axe.json +++ b/src/generated/resources/data/aether/advancements/recipes/tools/gravitite_axe.json @@ -30,5 +30,6 @@ "recipes": [ "aether:gravitite_axe" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/tools/gravitite_axe_repairing.json b/src/generated/resources/data/aether/advancements/recipes/tools/gravitite_axe_repairing.json index 6a9f43561f..36114f44c0 100644 --- a/src/generated/resources/data/aether/advancements/recipes/tools/gravitite_axe_repairing.json +++ b/src/generated/resources/data/aether/advancements/recipes/tools/gravitite_axe_repairing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:gravitite_axe_repairing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/tools/gravitite_hoe.json b/src/generated/resources/data/aether/advancements/recipes/tools/gravitite_hoe.json index 33b2bb24e7..2f2be2f18e 100644 --- a/src/generated/resources/data/aether/advancements/recipes/tools/gravitite_hoe.json +++ b/src/generated/resources/data/aether/advancements/recipes/tools/gravitite_hoe.json @@ -30,5 +30,6 @@ "recipes": [ "aether:gravitite_hoe" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/tools/gravitite_hoe_repairing.json b/src/generated/resources/data/aether/advancements/recipes/tools/gravitite_hoe_repairing.json index 6cca34b3ac..fb09b883a8 100644 --- a/src/generated/resources/data/aether/advancements/recipes/tools/gravitite_hoe_repairing.json +++ b/src/generated/resources/data/aether/advancements/recipes/tools/gravitite_hoe_repairing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:gravitite_hoe_repairing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/tools/gravitite_pickaxe.json b/src/generated/resources/data/aether/advancements/recipes/tools/gravitite_pickaxe.json index e5a2c0e636..d2679802a5 100644 --- a/src/generated/resources/data/aether/advancements/recipes/tools/gravitite_pickaxe.json +++ b/src/generated/resources/data/aether/advancements/recipes/tools/gravitite_pickaxe.json @@ -30,5 +30,6 @@ "recipes": [ "aether:gravitite_pickaxe" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/tools/gravitite_pickaxe_repairing.json b/src/generated/resources/data/aether/advancements/recipes/tools/gravitite_pickaxe_repairing.json index 92d0576467..0b7c72149b 100644 --- a/src/generated/resources/data/aether/advancements/recipes/tools/gravitite_pickaxe_repairing.json +++ b/src/generated/resources/data/aether/advancements/recipes/tools/gravitite_pickaxe_repairing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:gravitite_pickaxe_repairing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/tools/gravitite_shovel.json b/src/generated/resources/data/aether/advancements/recipes/tools/gravitite_shovel.json index 11fe5c7955..9f1e1d053c 100644 --- a/src/generated/resources/data/aether/advancements/recipes/tools/gravitite_shovel.json +++ b/src/generated/resources/data/aether/advancements/recipes/tools/gravitite_shovel.json @@ -30,5 +30,6 @@ "recipes": [ "aether:gravitite_shovel" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/tools/gravitite_shovel_repairing.json b/src/generated/resources/data/aether/advancements/recipes/tools/gravitite_shovel_repairing.json index e697ad0bb4..a20059c1db 100644 --- a/src/generated/resources/data/aether/advancements/recipes/tools/gravitite_shovel_repairing.json +++ b/src/generated/resources/data/aether/advancements/recipes/tools/gravitite_shovel_repairing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:gravitite_shovel_repairing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/tools/holystone_axe.json b/src/generated/resources/data/aether/advancements/recipes/tools/holystone_axe.json index 98f4df72f2..fcc67f3a3e 100644 --- a/src/generated/resources/data/aether/advancements/recipes/tools/holystone_axe.json +++ b/src/generated/resources/data/aether/advancements/recipes/tools/holystone_axe.json @@ -30,5 +30,6 @@ "recipes": [ "aether:holystone_axe" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/tools/holystone_axe_repairing.json b/src/generated/resources/data/aether/advancements/recipes/tools/holystone_axe_repairing.json index 8da45892dc..a07e831391 100644 --- a/src/generated/resources/data/aether/advancements/recipes/tools/holystone_axe_repairing.json +++ b/src/generated/resources/data/aether/advancements/recipes/tools/holystone_axe_repairing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:holystone_axe_repairing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/tools/holystone_hoe.json b/src/generated/resources/data/aether/advancements/recipes/tools/holystone_hoe.json index 5d6b221454..b742640c19 100644 --- a/src/generated/resources/data/aether/advancements/recipes/tools/holystone_hoe.json +++ b/src/generated/resources/data/aether/advancements/recipes/tools/holystone_hoe.json @@ -30,5 +30,6 @@ "recipes": [ "aether:holystone_hoe" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/tools/holystone_hoe_repairing.json b/src/generated/resources/data/aether/advancements/recipes/tools/holystone_hoe_repairing.json index 30875c0e73..f410af35c8 100644 --- a/src/generated/resources/data/aether/advancements/recipes/tools/holystone_hoe_repairing.json +++ b/src/generated/resources/data/aether/advancements/recipes/tools/holystone_hoe_repairing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:holystone_hoe_repairing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/tools/holystone_pickaxe.json b/src/generated/resources/data/aether/advancements/recipes/tools/holystone_pickaxe.json index 6d24f6d8a2..1813ac8df0 100644 --- a/src/generated/resources/data/aether/advancements/recipes/tools/holystone_pickaxe.json +++ b/src/generated/resources/data/aether/advancements/recipes/tools/holystone_pickaxe.json @@ -30,5 +30,6 @@ "recipes": [ "aether:holystone_pickaxe" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/tools/holystone_pickaxe_repairing.json b/src/generated/resources/data/aether/advancements/recipes/tools/holystone_pickaxe_repairing.json index c27122442d..5c6c4bd9a6 100644 --- a/src/generated/resources/data/aether/advancements/recipes/tools/holystone_pickaxe_repairing.json +++ b/src/generated/resources/data/aether/advancements/recipes/tools/holystone_pickaxe_repairing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:holystone_pickaxe_repairing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/tools/holystone_shovel.json b/src/generated/resources/data/aether/advancements/recipes/tools/holystone_shovel.json index 0dbf339159..d847484311 100644 --- a/src/generated/resources/data/aether/advancements/recipes/tools/holystone_shovel.json +++ b/src/generated/resources/data/aether/advancements/recipes/tools/holystone_shovel.json @@ -30,5 +30,6 @@ "recipes": [ "aether:holystone_shovel" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/tools/holystone_shovel_repairing.json b/src/generated/resources/data/aether/advancements/recipes/tools/holystone_shovel_repairing.json index 27549ae7ec..689784a849 100644 --- a/src/generated/resources/data/aether/advancements/recipes/tools/holystone_shovel_repairing.json +++ b/src/generated/resources/data/aether/advancements/recipes/tools/holystone_shovel_repairing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:holystone_shovel_repairing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/tools/iron_axe_repairing.json b/src/generated/resources/data/aether/advancements/recipes/tools/iron_axe_repairing.json index 2dfe1880bc..8c28fedaa2 100644 --- a/src/generated/resources/data/aether/advancements/recipes/tools/iron_axe_repairing.json +++ b/src/generated/resources/data/aether/advancements/recipes/tools/iron_axe_repairing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:iron_axe_repairing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/tools/iron_hoe_repairing.json b/src/generated/resources/data/aether/advancements/recipes/tools/iron_hoe_repairing.json index 29220386e5..677556b7e9 100644 --- a/src/generated/resources/data/aether/advancements/recipes/tools/iron_hoe_repairing.json +++ b/src/generated/resources/data/aether/advancements/recipes/tools/iron_hoe_repairing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:iron_hoe_repairing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/tools/iron_pickaxe_repairing.json b/src/generated/resources/data/aether/advancements/recipes/tools/iron_pickaxe_repairing.json index 06c86beb53..573781d231 100644 --- a/src/generated/resources/data/aether/advancements/recipes/tools/iron_pickaxe_repairing.json +++ b/src/generated/resources/data/aether/advancements/recipes/tools/iron_pickaxe_repairing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:iron_pickaxe_repairing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/tools/iron_shovel_repairing.json b/src/generated/resources/data/aether/advancements/recipes/tools/iron_shovel_repairing.json index 953ef096ac..891cfe8ba7 100644 --- a/src/generated/resources/data/aether/advancements/recipes/tools/iron_shovel_repairing.json +++ b/src/generated/resources/data/aether/advancements/recipes/tools/iron_shovel_repairing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:iron_shovel_repairing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/tools/nature_staff.json b/src/generated/resources/data/aether/advancements/recipes/tools/nature_staff.json index 4b8e92d88f..df5657dd7c 100644 --- a/src/generated/resources/data/aether/advancements/recipes/tools/nature_staff.json +++ b/src/generated/resources/data/aether/advancements/recipes/tools/nature_staff.json @@ -30,5 +30,6 @@ "recipes": [ "aether:nature_staff" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/tools/netherite_axe_repairing.json b/src/generated/resources/data/aether/advancements/recipes/tools/netherite_axe_repairing.json index 95a0958d65..a81958f17f 100644 --- a/src/generated/resources/data/aether/advancements/recipes/tools/netherite_axe_repairing.json +++ b/src/generated/resources/data/aether/advancements/recipes/tools/netherite_axe_repairing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:netherite_axe_repairing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/tools/netherite_hoe_repairing.json b/src/generated/resources/data/aether/advancements/recipes/tools/netherite_hoe_repairing.json index 8599f133c4..f754b93f7c 100644 --- a/src/generated/resources/data/aether/advancements/recipes/tools/netherite_hoe_repairing.json +++ b/src/generated/resources/data/aether/advancements/recipes/tools/netherite_hoe_repairing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:netherite_hoe_repairing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/tools/netherite_pickaxe_repairing.json b/src/generated/resources/data/aether/advancements/recipes/tools/netherite_pickaxe_repairing.json index f65d36159d..9f1b2df2c9 100644 --- a/src/generated/resources/data/aether/advancements/recipes/tools/netherite_pickaxe_repairing.json +++ b/src/generated/resources/data/aether/advancements/recipes/tools/netherite_pickaxe_repairing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:netherite_pickaxe_repairing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/tools/netherite_shovel_repairing.json b/src/generated/resources/data/aether/advancements/recipes/tools/netherite_shovel_repairing.json index 52be821aea..3bf262495a 100644 --- a/src/generated/resources/data/aether/advancements/recipes/tools/netherite_shovel_repairing.json +++ b/src/generated/resources/data/aether/advancements/recipes/tools/netherite_shovel_repairing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:netherite_shovel_repairing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/tools/skyroot_axe.json b/src/generated/resources/data/aether/advancements/recipes/tools/skyroot_axe.json index 21ed84d85e..0a3b4815eb 100644 --- a/src/generated/resources/data/aether/advancements/recipes/tools/skyroot_axe.json +++ b/src/generated/resources/data/aether/advancements/recipes/tools/skyroot_axe.json @@ -28,5 +28,6 @@ "recipes": [ "aether:skyroot_axe" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/tools/skyroot_axe_repairing.json b/src/generated/resources/data/aether/advancements/recipes/tools/skyroot_axe_repairing.json index ca4d3a556d..e2d4f224f6 100644 --- a/src/generated/resources/data/aether/advancements/recipes/tools/skyroot_axe_repairing.json +++ b/src/generated/resources/data/aether/advancements/recipes/tools/skyroot_axe_repairing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:skyroot_axe_repairing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/tools/skyroot_hoe.json b/src/generated/resources/data/aether/advancements/recipes/tools/skyroot_hoe.json index 87cd8d54db..c2ddb1e48c 100644 --- a/src/generated/resources/data/aether/advancements/recipes/tools/skyroot_hoe.json +++ b/src/generated/resources/data/aether/advancements/recipes/tools/skyroot_hoe.json @@ -28,5 +28,6 @@ "recipes": [ "aether:skyroot_hoe" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/tools/skyroot_hoe_repairing.json b/src/generated/resources/data/aether/advancements/recipes/tools/skyroot_hoe_repairing.json index 8631037905..468fc6da97 100644 --- a/src/generated/resources/data/aether/advancements/recipes/tools/skyroot_hoe_repairing.json +++ b/src/generated/resources/data/aether/advancements/recipes/tools/skyroot_hoe_repairing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:skyroot_hoe_repairing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/tools/skyroot_pickaxe.json b/src/generated/resources/data/aether/advancements/recipes/tools/skyroot_pickaxe.json index dc30115787..aa43ee631f 100644 --- a/src/generated/resources/data/aether/advancements/recipes/tools/skyroot_pickaxe.json +++ b/src/generated/resources/data/aether/advancements/recipes/tools/skyroot_pickaxe.json @@ -28,5 +28,6 @@ "recipes": [ "aether:skyroot_pickaxe" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/tools/skyroot_pickaxe_repairing.json b/src/generated/resources/data/aether/advancements/recipes/tools/skyroot_pickaxe_repairing.json index 0828e4f275..69bfadaab8 100644 --- a/src/generated/resources/data/aether/advancements/recipes/tools/skyroot_pickaxe_repairing.json +++ b/src/generated/resources/data/aether/advancements/recipes/tools/skyroot_pickaxe_repairing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:skyroot_pickaxe_repairing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/tools/skyroot_shovel.json b/src/generated/resources/data/aether/advancements/recipes/tools/skyroot_shovel.json index d2083f1d78..2b9ab2cfda 100644 --- a/src/generated/resources/data/aether/advancements/recipes/tools/skyroot_shovel.json +++ b/src/generated/resources/data/aether/advancements/recipes/tools/skyroot_shovel.json @@ -28,5 +28,6 @@ "recipes": [ "aether:skyroot_shovel" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/tools/skyroot_shovel_repairing.json b/src/generated/resources/data/aether/advancements/recipes/tools/skyroot_shovel_repairing.json index 61a29c2d9f..81c85d2a09 100644 --- a/src/generated/resources/data/aether/advancements/recipes/tools/skyroot_shovel_repairing.json +++ b/src/generated/resources/data/aether/advancements/recipes/tools/skyroot_shovel_repairing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:skyroot_shovel_repairing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/tools/stone_axe_repairing.json b/src/generated/resources/data/aether/advancements/recipes/tools/stone_axe_repairing.json index 6005ac74a1..7638bad634 100644 --- a/src/generated/resources/data/aether/advancements/recipes/tools/stone_axe_repairing.json +++ b/src/generated/resources/data/aether/advancements/recipes/tools/stone_axe_repairing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:stone_axe_repairing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/tools/stone_hoe_repairing.json b/src/generated/resources/data/aether/advancements/recipes/tools/stone_hoe_repairing.json index d14290a5d5..fc96dbf36b 100644 --- a/src/generated/resources/data/aether/advancements/recipes/tools/stone_hoe_repairing.json +++ b/src/generated/resources/data/aether/advancements/recipes/tools/stone_hoe_repairing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:stone_hoe_repairing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/tools/stone_pickaxe_repairing.json b/src/generated/resources/data/aether/advancements/recipes/tools/stone_pickaxe_repairing.json index 358f832913..012b1fe959 100644 --- a/src/generated/resources/data/aether/advancements/recipes/tools/stone_pickaxe_repairing.json +++ b/src/generated/resources/data/aether/advancements/recipes/tools/stone_pickaxe_repairing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:stone_pickaxe_repairing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/tools/stone_shovel_repairing.json b/src/generated/resources/data/aether/advancements/recipes/tools/stone_shovel_repairing.json index dc8b05dd5e..e7f3e9f6f1 100644 --- a/src/generated/resources/data/aether/advancements/recipes/tools/stone_shovel_repairing.json +++ b/src/generated/resources/data/aether/advancements/recipes/tools/stone_shovel_repairing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:stone_shovel_repairing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/tools/swet_lead.json b/src/generated/resources/data/aether/advancements/recipes/tools/swet_lead.json index fdc947dad5..0035ad56ce 100644 --- a/src/generated/resources/data/aether/advancements/recipes/tools/swet_lead.json +++ b/src/generated/resources/data/aether/advancements/recipes/tools/swet_lead.json @@ -28,5 +28,6 @@ "recipes": [ "aether:swet_lead" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/tools/wooden_axe_repairing.json b/src/generated/resources/data/aether/advancements/recipes/tools/wooden_axe_repairing.json index 41f3f61c7f..166beae130 100644 --- a/src/generated/resources/data/aether/advancements/recipes/tools/wooden_axe_repairing.json +++ b/src/generated/resources/data/aether/advancements/recipes/tools/wooden_axe_repairing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:wooden_axe_repairing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/tools/wooden_hoe_repairing.json b/src/generated/resources/data/aether/advancements/recipes/tools/wooden_hoe_repairing.json index 1d1990b6a1..46d308ba3d 100644 --- a/src/generated/resources/data/aether/advancements/recipes/tools/wooden_hoe_repairing.json +++ b/src/generated/resources/data/aether/advancements/recipes/tools/wooden_hoe_repairing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:wooden_hoe_repairing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/tools/wooden_pickaxe_repairing.json b/src/generated/resources/data/aether/advancements/recipes/tools/wooden_pickaxe_repairing.json index 1ef57b927b..050cffc201 100644 --- a/src/generated/resources/data/aether/advancements/recipes/tools/wooden_pickaxe_repairing.json +++ b/src/generated/resources/data/aether/advancements/recipes/tools/wooden_pickaxe_repairing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:wooden_pickaxe_repairing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/tools/wooden_shovel_repairing.json b/src/generated/resources/data/aether/advancements/recipes/tools/wooden_shovel_repairing.json index 96b48cd200..21c96535e6 100644 --- a/src/generated/resources/data/aether/advancements/recipes/tools/wooden_shovel_repairing.json +++ b/src/generated/resources/data/aether/advancements/recipes/tools/wooden_shovel_repairing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:wooden_shovel_repairing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/tools/zanite_axe.json b/src/generated/resources/data/aether/advancements/recipes/tools/zanite_axe.json index c9319e166a..660c69fc02 100644 --- a/src/generated/resources/data/aether/advancements/recipes/tools/zanite_axe.json +++ b/src/generated/resources/data/aether/advancements/recipes/tools/zanite_axe.json @@ -30,5 +30,6 @@ "recipes": [ "aether:zanite_axe" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/tools/zanite_axe_repairing.json b/src/generated/resources/data/aether/advancements/recipes/tools/zanite_axe_repairing.json index 97084ab6fd..cc4c611bef 100644 --- a/src/generated/resources/data/aether/advancements/recipes/tools/zanite_axe_repairing.json +++ b/src/generated/resources/data/aether/advancements/recipes/tools/zanite_axe_repairing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:zanite_axe_repairing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/tools/zanite_hoe.json b/src/generated/resources/data/aether/advancements/recipes/tools/zanite_hoe.json index 23f4ba1318..26f3da1ade 100644 --- a/src/generated/resources/data/aether/advancements/recipes/tools/zanite_hoe.json +++ b/src/generated/resources/data/aether/advancements/recipes/tools/zanite_hoe.json @@ -30,5 +30,6 @@ "recipes": [ "aether:zanite_hoe" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/tools/zanite_hoe_repairing.json b/src/generated/resources/data/aether/advancements/recipes/tools/zanite_hoe_repairing.json index f8ea1ec4a5..2fb9df6c64 100644 --- a/src/generated/resources/data/aether/advancements/recipes/tools/zanite_hoe_repairing.json +++ b/src/generated/resources/data/aether/advancements/recipes/tools/zanite_hoe_repairing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:zanite_hoe_repairing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/tools/zanite_pickaxe.json b/src/generated/resources/data/aether/advancements/recipes/tools/zanite_pickaxe.json index 1a3a4ca5e2..fb43f1d1d1 100644 --- a/src/generated/resources/data/aether/advancements/recipes/tools/zanite_pickaxe.json +++ b/src/generated/resources/data/aether/advancements/recipes/tools/zanite_pickaxe.json @@ -30,5 +30,6 @@ "recipes": [ "aether:zanite_pickaxe" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/tools/zanite_pickaxe_repairing.json b/src/generated/resources/data/aether/advancements/recipes/tools/zanite_pickaxe_repairing.json index d84d8429b5..f82c0f3653 100644 --- a/src/generated/resources/data/aether/advancements/recipes/tools/zanite_pickaxe_repairing.json +++ b/src/generated/resources/data/aether/advancements/recipes/tools/zanite_pickaxe_repairing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:zanite_pickaxe_repairing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/tools/zanite_shovel.json b/src/generated/resources/data/aether/advancements/recipes/tools/zanite_shovel.json index 7b9b0e05e9..19e8cbb101 100644 --- a/src/generated/resources/data/aether/advancements/recipes/tools/zanite_shovel.json +++ b/src/generated/resources/data/aether/advancements/recipes/tools/zanite_shovel.json @@ -30,5 +30,6 @@ "recipes": [ "aether:zanite_shovel" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/tools/zanite_shovel_repairing.json b/src/generated/resources/data/aether/advancements/recipes/tools/zanite_shovel_repairing.json index 2bfb674c93..c28ee1d98e 100644 --- a/src/generated/resources/data/aether/advancements/recipes/tools/zanite_shovel_repairing.json +++ b/src/generated/resources/data/aether/advancements/recipes/tools/zanite_shovel_repairing.json @@ -30,5 +30,6 @@ "recipes": [ "aether:zanite_shovel_repairing" ] - } + }, + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/transportation/skyroot_boat.json b/src/generated/resources/data/aether/advancements/recipes/transportation/skyroot_boat.json index ee1ab73eba..2124041b8a 100644 --- a/src/generated/resources/data/aether/advancements/recipes/transportation/skyroot_boat.json +++ b/src/generated/resources/data/aether/advancements/recipes/transportation/skyroot_boat.json @@ -24,5 +24,6 @@ "recipes": [ "aether:skyroot_boat" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/transportation/skyroot_chest_boat.json b/src/generated/resources/data/aether/advancements/recipes/transportation/skyroot_chest_boat.json index 050ebd99a0..b37daef854 100644 --- a/src/generated/resources/data/aether/advancements/recipes/transportation/skyroot_chest_boat.json +++ b/src/generated/resources/data/aether/advancements/recipes/transportation/skyroot_chest_boat.json @@ -28,5 +28,6 @@ "recipes": [ "aether:skyroot_chest_boat" ] - } + }, + "sends_telemetry_event": false } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/regen_stone.json b/src/generated/resources/data/aether/advancements/regen_stone.json index 0c16f1a5e8..f8c9629378 100644 --- a/src/generated/resources/data/aether/advancements/regen_stone.json +++ b/src/generated/resources/data/aether/advancements/regen_stone.json @@ -33,5 +33,6 @@ [ "regen_stone" ] - ] + ], + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/silver_dungeon.json b/src/generated/resources/data/aether/advancements/silver_dungeon.json index 7e98d61ae6..f3cba754c0 100644 --- a/src/generated/resources/data/aether/advancements/silver_dungeon.json +++ b/src/generated/resources/data/aether/advancements/silver_dungeon.json @@ -35,5 +35,6 @@ [ "kill_valkyrie_queen" ] - ] + ], + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/the_aether.json b/src/generated/resources/data/aether/advancements/the_aether.json index 5d771dab4b..8b6b5a9dd1 100644 --- a/src/generated/resources/data/aether/advancements/the_aether.json +++ b/src/generated/resources/data/aether/advancements/the_aether.json @@ -27,5 +27,6 @@ [ "the_aether" ] - ] + ], + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/valkyrie_hoe.json b/src/generated/resources/data/aether/advancements/valkyrie_hoe.json index d7ad87eece..6280fb3131 100644 --- a/src/generated/resources/data/aether/advancements/valkyrie_hoe.json +++ b/src/generated/resources/data/aether/advancements/valkyrie_hoe.json @@ -3,21 +3,29 @@ "criteria": { "valkyrie_hoe": { "conditions": { - "item": { - "items": [ - "aether:valkyrie_hoe" - ] - }, - "location": { - "block": { - "blocks": [ - "aether:aether_dirt", - "aether:aether_grass_block", - "aether:enchanted_aether_grass_block", - "aether:aether_dirt_path" - ] + "location": [ + { + "condition": "minecraft:location_check", + "predicate": { + "block": { + "blocks": [ + "aether:aether_dirt", + "aether:aether_grass_block", + "aether:enchanted_aether_grass_block", + "aether:aether_dirt_path" + ] + } + } + }, + { + "condition": "minecraft:match_tool", + "predicate": { + "items": [ + "aether:valkyrie_hoe" + ] + } } - } + ] }, "trigger": "minecraft:item_used_on_block" } @@ -41,5 +49,6 @@ [ "valkyrie_hoe" ] - ] + ], + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/valkyrie_loot.json b/src/generated/resources/data/aether/advancements/valkyrie_loot.json index 5c37e6f913..927ea03a8f 100644 --- a/src/generated/resources/data/aether/advancements/valkyrie_loot.json +++ b/src/generated/resources/data/aether/advancements/valkyrie_loot.json @@ -138,5 +138,6 @@ "valkyrie_boots", "valkyrie_gloves" ] - ] + ], + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/zanite.json b/src/generated/resources/data/aether/advancements/zanite.json index aec9b7b426..aa6b34b137 100644 --- a/src/generated/resources/data/aether/advancements/zanite.json +++ b/src/generated/resources/data/aether/advancements/zanite.json @@ -33,5 +33,6 @@ [ "zanite" ] - ] + ], + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/zephyr_hammer.json b/src/generated/resources/data/aether/advancements/zephyr_hammer.json index 8725f47591..e7dc54333a 100644 --- a/src/generated/resources/data/aether/advancements/zephyr_hammer.json +++ b/src/generated/resources/data/aether/advancements/zephyr_hammer.json @@ -46,5 +46,6 @@ [ "zephyr_hammer" ] - ] + ], + "sends_telemetry_event": true } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_modifiers/remove_seeds.json b/src/generated/resources/data/aether/loot_modifiers/remove_seeds.json index c26574dd85..f10f4c02df 100644 --- a/src/generated/resources/data/aether/loot_modifiers/remove_seeds.json +++ b/src/generated/resources/data/aether/loot_modifiers/remove_seeds.json @@ -2,7 +2,7 @@ "type": "aether:remove_seeds", "conditions": [ { - "condition": "minecraft:alternative", + "condition": "minecraft:any_of", "terms": [ { "block": "minecraft:grass", diff --git a/src/generated/resources/data/aether/loot_tables/advancements/enter_aether.json b/src/generated/resources/data/aether/loot_tables/advancements/enter_aether.json index be142c3c12..4ce739cc10 100644 --- a/src/generated/resources/data/aether/loot_tables/advancements/enter_aether.json +++ b/src/generated/resources/data/aether/loot_tables/advancements/enter_aether.json @@ -33,5 +33,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:advancements/enter_aether" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/aerogel.json b/src/generated/resources/data/aether/loot_tables/blocks/aerogel.json index 60ee2ca67b..68ef98c1f6 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/aerogel.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/aerogel.json @@ -16,5 +16,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/aerogel" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/aerogel_slab.json b/src/generated/resources/data/aether/loot_tables/blocks/aerogel_slab.json index ae4c029d05..8d46c169a4 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/aerogel_slab.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/aerogel_slab.json @@ -30,5 +30,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/aerogel_slab" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/aerogel_stairs.json b/src/generated/resources/data/aether/loot_tables/blocks/aerogel_stairs.json index ed9abcfb04..988ae51501 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/aerogel_stairs.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/aerogel_stairs.json @@ -16,5 +16,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/aerogel_stairs" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/aerogel_wall.json b/src/generated/resources/data/aether/loot_tables/blocks/aerogel_wall.json index 878eac6c43..4aa9223db3 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/aerogel_wall.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/aerogel_wall.json @@ -16,5 +16,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/aerogel_wall" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/aether_dirt.json b/src/generated/resources/data/aether/loot_tables/blocks/aether_dirt.json index fd8f6a23de..63436cc608 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/aether_dirt.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/aether_dirt.json @@ -21,5 +21,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/aether_dirt" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/aether_dirt_path.json b/src/generated/resources/data/aether/loot_tables/blocks/aether_dirt_path.json index 0681bbbb1f..f8902e35e2 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/aether_dirt_path.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/aether_dirt_path.json @@ -16,5 +16,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/aether_dirt_path" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/aether_farmland.json b/src/generated/resources/data/aether/loot_tables/blocks/aether_farmland.json index 0681bbbb1f..91ac642cd6 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/aether_farmland.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/aether_farmland.json @@ -16,5 +16,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/aether_farmland" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/aether_grass_block.json b/src/generated/resources/data/aether/loot_tables/blocks/aether_grass_block.json index 8ddbefc493..6ec8784a3e 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/aether_grass_block.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/aether_grass_block.json @@ -45,5 +45,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/aether_grass_block" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/aether_portal.json b/src/generated/resources/data/aether/loot_tables/blocks/aether_portal.json index 68701f9f6e..a4ca95b965 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/aether_portal.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/aether_portal.json @@ -1,3 +1,4 @@ { - "type": "minecraft:block" + "type": "minecraft:block", + "random_sequence": "aether:blocks/aether_portal" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/altar.json b/src/generated/resources/data/aether/loot_tables/blocks/altar.json index bb4c34ea95..3958d61d92 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/altar.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/altar.json @@ -22,5 +22,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/altar" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/ambrosium_block.json b/src/generated/resources/data/aether/loot_tables/blocks/ambrosium_block.json index 4ef6a0d785..6db9f89d60 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/ambrosium_block.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/ambrosium_block.json @@ -16,5 +16,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/ambrosium_block" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/ambrosium_ore.json b/src/generated/resources/data/aether/loot_tables/blocks/ambrosium_ore.json index 3a36e4245e..21ad1e0325 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/ambrosium_ore.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/ambrosium_ore.json @@ -50,5 +50,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/ambrosium_ore" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/ambrosium_torch.json b/src/generated/resources/data/aether/loot_tables/blocks/ambrosium_torch.json index 97349d8537..0eed7591e6 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/ambrosium_torch.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/ambrosium_torch.json @@ -16,5 +16,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/ambrosium_torch" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/ambrosium_wall_torch.json b/src/generated/resources/data/aether/loot_tables/blocks/ambrosium_wall_torch.json index 97349d8537..9137b19057 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/ambrosium_wall_torch.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/ambrosium_wall_torch.json @@ -16,5 +16,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/ambrosium_wall_torch" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/angelic_slab.json b/src/generated/resources/data/aether/loot_tables/blocks/angelic_slab.json index c4a9bb674a..e8f713e861 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/angelic_slab.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/angelic_slab.json @@ -30,5 +30,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/angelic_slab" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/angelic_stairs.json b/src/generated/resources/data/aether/loot_tables/blocks/angelic_stairs.json index 2fa85e43ea..fe330f86cf 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/angelic_stairs.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/angelic_stairs.json @@ -16,5 +16,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/angelic_stairs" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/angelic_stone.json b/src/generated/resources/data/aether/loot_tables/blocks/angelic_stone.json index 426f0bfd97..f9aa8b2e13 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/angelic_stone.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/angelic_stone.json @@ -16,5 +16,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/angelic_stone" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/angelic_wall.json b/src/generated/resources/data/aether/loot_tables/blocks/angelic_wall.json index f5cc113ed5..5f671aa518 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/angelic_wall.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/angelic_wall.json @@ -16,5 +16,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/angelic_wall" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/berry_bush.json b/src/generated/resources/data/aether/loot_tables/blocks/berry_bush.json index 2275984b80..62d13bad37 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/berry_bush.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/berry_bush.json @@ -101,5 +101,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/berry_bush" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/berry_bush_stem.json b/src/generated/resources/data/aether/loot_tables/blocks/berry_bush_stem.json index 17672e4047..1cb6f62b39 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/berry_bush_stem.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/berry_bush_stem.json @@ -21,5 +21,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/berry_bush_stem" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/blue_aercloud.json b/src/generated/resources/data/aether/loot_tables/blocks/blue_aercloud.json index bcda1855e9..9e4ccbb88f 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/blue_aercloud.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/blue_aercloud.json @@ -21,5 +21,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/blue_aercloud" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/boss_doorway_angelic_stone.json b/src/generated/resources/data/aether/loot_tables/blocks/boss_doorway_angelic_stone.json index 68701f9f6e..076c593bc0 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/boss_doorway_angelic_stone.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/boss_doorway_angelic_stone.json @@ -1,3 +1,4 @@ { - "type": "minecraft:block" + "type": "minecraft:block", + "random_sequence": "aether:blocks/boss_doorway_angelic_stone" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/boss_doorway_carved_stone.json b/src/generated/resources/data/aether/loot_tables/blocks/boss_doorway_carved_stone.json index 68701f9f6e..8d1477aca7 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/boss_doorway_carved_stone.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/boss_doorway_carved_stone.json @@ -1,3 +1,4 @@ { - "type": "minecraft:block" + "type": "minecraft:block", + "random_sequence": "aether:blocks/boss_doorway_carved_stone" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/boss_doorway_hellfire_stone.json b/src/generated/resources/data/aether/loot_tables/blocks/boss_doorway_hellfire_stone.json index 68701f9f6e..0bf3290ac4 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/boss_doorway_hellfire_stone.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/boss_doorway_hellfire_stone.json @@ -1,3 +1,4 @@ { - "type": "minecraft:block" + "type": "minecraft:block", + "random_sequence": "aether:blocks/boss_doorway_hellfire_stone" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/boss_doorway_light_angelic_stone.json b/src/generated/resources/data/aether/loot_tables/blocks/boss_doorway_light_angelic_stone.json index 68701f9f6e..d445791ae8 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/boss_doorway_light_angelic_stone.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/boss_doorway_light_angelic_stone.json @@ -1,3 +1,4 @@ { - "type": "minecraft:block" + "type": "minecraft:block", + "random_sequence": "aether:blocks/boss_doorway_light_angelic_stone" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/boss_doorway_light_hellfire_stone.json b/src/generated/resources/data/aether/loot_tables/blocks/boss_doorway_light_hellfire_stone.json index 68701f9f6e..dd97bea926 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/boss_doorway_light_hellfire_stone.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/boss_doorway_light_hellfire_stone.json @@ -1,3 +1,4 @@ { - "type": "minecraft:block" + "type": "minecraft:block", + "random_sequence": "aether:blocks/boss_doorway_light_hellfire_stone" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/boss_doorway_sentry_stone.json b/src/generated/resources/data/aether/loot_tables/blocks/boss_doorway_sentry_stone.json index 68701f9f6e..ebf5819089 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/boss_doorway_sentry_stone.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/boss_doorway_sentry_stone.json @@ -1,3 +1,4 @@ { - "type": "minecraft:block" + "type": "minecraft:block", + "random_sequence": "aether:blocks/boss_doorway_sentry_stone" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/carved_slab.json b/src/generated/resources/data/aether/loot_tables/blocks/carved_slab.json index 0e98fd596a..8967dfe6b1 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/carved_slab.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/carved_slab.json @@ -30,5 +30,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/carved_slab" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/carved_stairs.json b/src/generated/resources/data/aether/loot_tables/blocks/carved_stairs.json index e6d8440c8b..cc34548615 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/carved_stairs.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/carved_stairs.json @@ -16,5 +16,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/carved_stairs" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/carved_stone.json b/src/generated/resources/data/aether/loot_tables/blocks/carved_stone.json index 429c664c42..9d8b792c0a 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/carved_stone.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/carved_stone.json @@ -16,5 +16,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/carved_stone" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/carved_wall.json b/src/generated/resources/data/aether/loot_tables/blocks/carved_wall.json index 613a859cf0..40bdb873f0 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/carved_wall.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/carved_wall.json @@ -16,5 +16,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/carved_wall" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/chest_mimic.json b/src/generated/resources/data/aether/loot_tables/blocks/chest_mimic.json index 68701f9f6e..a7ab50988d 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/chest_mimic.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/chest_mimic.json @@ -1,3 +1,4 @@ { - "type": "minecraft:block" + "type": "minecraft:block", + "random_sequence": "aether:blocks/chest_mimic" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/cold_aercloud.json b/src/generated/resources/data/aether/loot_tables/blocks/cold_aercloud.json index d01d719b4c..d68a0ca182 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/cold_aercloud.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/cold_aercloud.json @@ -21,5 +21,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/cold_aercloud" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/crystal_fruit_leaves.json b/src/generated/resources/data/aether/loot_tables/blocks/crystal_fruit_leaves.json index 52ba041e8f..c1e751c572 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/crystal_fruit_leaves.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/crystal_fruit_leaves.json @@ -16,7 +16,7 @@ "type": "minecraft:item", "conditions": [ { - "condition": "minecraft:alternative", + "condition": "minecraft:any_of", "terms": [ { "condition": "minecraft:match_tool", @@ -62,7 +62,7 @@ { "condition": "minecraft:inverted", "term": { - "condition": "minecraft:alternative", + "condition": "minecraft:any_of", "terms": [ { "condition": "minecraft:match_tool", @@ -124,5 +124,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/crystal_fruit_leaves" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/crystal_leaves.json b/src/generated/resources/data/aether/loot_tables/blocks/crystal_leaves.json index f05ff4c200..592aa7e00a 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/crystal_leaves.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/crystal_leaves.json @@ -16,7 +16,7 @@ "type": "minecraft:item", "conditions": [ { - "condition": "minecraft:alternative", + "condition": "minecraft:any_of", "terms": [ { "condition": "minecraft:match_tool", @@ -78,5 +78,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/crystal_leaves" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/decorated_holiday_leaves.json b/src/generated/resources/data/aether/loot_tables/blocks/decorated_holiday_leaves.json index a124dab7c8..8bf8d08a42 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/decorated_holiday_leaves.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/decorated_holiday_leaves.json @@ -16,7 +16,7 @@ "type": "minecraft:item", "conditions": [ { - "condition": "minecraft:alternative", + "condition": "minecraft:any_of", "terms": [ { "condition": "minecraft:match_tool", @@ -78,5 +78,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/decorated_holiday_leaves" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/enchanted_aether_grass_block.json b/src/generated/resources/data/aether/loot_tables/blocks/enchanted_aether_grass_block.json index 1f38cc6410..471d416979 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/enchanted_aether_grass_block.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/enchanted_aether_grass_block.json @@ -40,5 +40,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/enchanted_aether_grass_block" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/enchanted_gravitite.json b/src/generated/resources/data/aether/loot_tables/blocks/enchanted_gravitite.json index a587f8ba4b..63e9fd6416 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/enchanted_gravitite.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/enchanted_gravitite.json @@ -16,5 +16,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/enchanted_gravitite" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/freezer.json b/src/generated/resources/data/aether/loot_tables/blocks/freezer.json index 42ce4dbaf2..1beb8c572d 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/freezer.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/freezer.json @@ -22,5 +22,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/freezer" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/frosted_ice.json b/src/generated/resources/data/aether/loot_tables/blocks/frosted_ice.json index 68701f9f6e..434acc4237 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/frosted_ice.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/frosted_ice.json @@ -1,3 +1,4 @@ { - "type": "minecraft:block" + "type": "minecraft:block", + "random_sequence": "aether:blocks/frosted_ice" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/golden_aercloud.json b/src/generated/resources/data/aether/loot_tables/blocks/golden_aercloud.json index ab999591b0..cda1246162 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/golden_aercloud.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/golden_aercloud.json @@ -21,5 +21,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/golden_aercloud" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/golden_oak_leaves.json b/src/generated/resources/data/aether/loot_tables/blocks/golden_oak_leaves.json index 2f0d8726d1..8f99d30ee3 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/golden_oak_leaves.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/golden_oak_leaves.json @@ -16,7 +16,7 @@ "type": "minecraft:item", "conditions": [ { - "condition": "minecraft:alternative", + "condition": "minecraft:any_of", "terms": [ { "condition": "minecraft:match_tool", @@ -72,7 +72,7 @@ { "condition": "minecraft:inverted", "term": { - "condition": "minecraft:alternative", + "condition": "minecraft:any_of", "terms": [ { "condition": "minecraft:match_tool", @@ -140,7 +140,7 @@ { "condition": "minecraft:inverted", "term": { - "condition": "minecraft:alternative", + "condition": "minecraft:any_of", "terms": [ { "condition": "minecraft:match_tool", @@ -191,5 +191,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/golden_oak_leaves" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/golden_oak_log.json b/src/generated/resources/data/aether/loot_tables/blocks/golden_oak_log.json index 5b0c47f05e..6ce77f4a19 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/golden_oak_log.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/golden_oak_log.json @@ -124,5 +124,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/golden_oak_log" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/golden_oak_sapling.json b/src/generated/resources/data/aether/loot_tables/blocks/golden_oak_sapling.json index 92cbf07953..f24c1a0178 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/golden_oak_sapling.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/golden_oak_sapling.json @@ -16,5 +16,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/golden_oak_sapling" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/golden_oak_wood.json b/src/generated/resources/data/aether/loot_tables/blocks/golden_oak_wood.json index bf9d214fec..a0fe21732b 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/golden_oak_wood.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/golden_oak_wood.json @@ -124,5 +124,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/golden_oak_wood" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/gravitite_ore.json b/src/generated/resources/data/aether/loot_tables/blocks/gravitite_ore.json index 7627a32f4d..67380a83cb 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/gravitite_ore.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/gravitite_ore.json @@ -16,5 +16,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/gravitite_ore" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/hellfire_slab.json b/src/generated/resources/data/aether/loot_tables/blocks/hellfire_slab.json index f4be7dae7f..373b3779bd 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/hellfire_slab.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/hellfire_slab.json @@ -30,5 +30,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/hellfire_slab" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/hellfire_stairs.json b/src/generated/resources/data/aether/loot_tables/blocks/hellfire_stairs.json index 9d3eefe1f5..b94683e2a6 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/hellfire_stairs.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/hellfire_stairs.json @@ -16,5 +16,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/hellfire_stairs" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/hellfire_stone.json b/src/generated/resources/data/aether/loot_tables/blocks/hellfire_stone.json index 123d8a4424..f2ca9a7310 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/hellfire_stone.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/hellfire_stone.json @@ -16,5 +16,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/hellfire_stone" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/hellfire_wall.json b/src/generated/resources/data/aether/loot_tables/blocks/hellfire_wall.json index 3da76e246e..e7660c9abb 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/hellfire_wall.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/hellfire_wall.json @@ -16,5 +16,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/hellfire_wall" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/holiday_leaves.json b/src/generated/resources/data/aether/loot_tables/blocks/holiday_leaves.json index 808ad24334..3eeaa540a9 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/holiday_leaves.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/holiday_leaves.json @@ -16,7 +16,7 @@ "type": "minecraft:item", "conditions": [ { - "condition": "minecraft:alternative", + "condition": "minecraft:any_of", "terms": [ { "condition": "minecraft:match_tool", @@ -78,5 +78,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/holiday_leaves" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/holystone.json b/src/generated/resources/data/aether/loot_tables/blocks/holystone.json index 13455d638a..3b8037e3c3 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/holystone.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/holystone.json @@ -21,5 +21,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/holystone" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/holystone_brick_slab.json b/src/generated/resources/data/aether/loot_tables/blocks/holystone_brick_slab.json index dd05709e10..a10fb18afd 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/holystone_brick_slab.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/holystone_brick_slab.json @@ -30,5 +30,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/holystone_brick_slab" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/holystone_brick_stairs.json b/src/generated/resources/data/aether/loot_tables/blocks/holystone_brick_stairs.json index 2ce2975176..fd103ea273 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/holystone_brick_stairs.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/holystone_brick_stairs.json @@ -16,5 +16,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/holystone_brick_stairs" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/holystone_brick_wall.json b/src/generated/resources/data/aether/loot_tables/blocks/holystone_brick_wall.json index 6b7f6ec5db..e17f9c2636 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/holystone_brick_wall.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/holystone_brick_wall.json @@ -16,5 +16,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/holystone_brick_wall" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/holystone_bricks.json b/src/generated/resources/data/aether/loot_tables/blocks/holystone_bricks.json index 4402bfed69..c19d3000b2 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/holystone_bricks.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/holystone_bricks.json @@ -16,5 +16,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/holystone_bricks" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/holystone_button.json b/src/generated/resources/data/aether/loot_tables/blocks/holystone_button.json index 27c10eb7a4..6d27b17e0d 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/holystone_button.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/holystone_button.json @@ -16,5 +16,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/holystone_button" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/holystone_pressure_plate.json b/src/generated/resources/data/aether/loot_tables/blocks/holystone_pressure_plate.json index c43cc0ccfe..1dd0471eb1 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/holystone_pressure_plate.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/holystone_pressure_plate.json @@ -16,5 +16,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/holystone_pressure_plate" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/holystone_slab.json b/src/generated/resources/data/aether/loot_tables/blocks/holystone_slab.json index 6cce0553c2..e83da6a5b3 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/holystone_slab.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/holystone_slab.json @@ -30,5 +30,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/holystone_slab" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/holystone_stairs.json b/src/generated/resources/data/aether/loot_tables/blocks/holystone_stairs.json index 58dfe481bc..17b560bddc 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/holystone_stairs.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/holystone_stairs.json @@ -16,5 +16,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/holystone_stairs" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/holystone_wall.json b/src/generated/resources/data/aether/loot_tables/blocks/holystone_wall.json index 5c8d487824..83fae4c92c 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/holystone_wall.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/holystone_wall.json @@ -16,5 +16,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/holystone_wall" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/icestone.json b/src/generated/resources/data/aether/loot_tables/blocks/icestone.json index 210064ccc7..30ffa66725 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/icestone.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/icestone.json @@ -16,5 +16,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/icestone" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/icestone_slab.json b/src/generated/resources/data/aether/loot_tables/blocks/icestone_slab.json index 067e64b6c0..0fa786ef31 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/icestone_slab.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/icestone_slab.json @@ -30,5 +30,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/icestone_slab" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/icestone_stairs.json b/src/generated/resources/data/aether/loot_tables/blocks/icestone_stairs.json index 0e1fd2a468..d8212593f9 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/icestone_stairs.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/icestone_stairs.json @@ -16,5 +16,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/icestone_stairs" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/icestone_wall.json b/src/generated/resources/data/aether/loot_tables/blocks/icestone_wall.json index ab4d517d4e..fe9c277200 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/icestone_wall.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/icestone_wall.json @@ -16,5 +16,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/icestone_wall" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/incubator.json b/src/generated/resources/data/aether/loot_tables/blocks/incubator.json index 24211a92ee..86e159b510 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/incubator.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/incubator.json @@ -22,5 +22,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/incubator" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/light_angelic_stone.json b/src/generated/resources/data/aether/loot_tables/blocks/light_angelic_stone.json index cb693264b7..199dac5c3e 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/light_angelic_stone.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/light_angelic_stone.json @@ -16,5 +16,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/light_angelic_stone" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/light_hellfire_stone.json b/src/generated/resources/data/aether/loot_tables/blocks/light_hellfire_stone.json index 5af38a1b30..67322db175 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/light_hellfire_stone.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/light_hellfire_stone.json @@ -16,5 +16,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/light_hellfire_stone" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/locked_angelic_stone.json b/src/generated/resources/data/aether/loot_tables/blocks/locked_angelic_stone.json index 68701f9f6e..8b48e18a64 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/locked_angelic_stone.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/locked_angelic_stone.json @@ -1,3 +1,4 @@ { - "type": "minecraft:block" + "type": "minecraft:block", + "random_sequence": "aether:blocks/locked_angelic_stone" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/locked_carved_stone.json b/src/generated/resources/data/aether/loot_tables/blocks/locked_carved_stone.json index 68701f9f6e..741ad41884 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/locked_carved_stone.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/locked_carved_stone.json @@ -1,3 +1,4 @@ { - "type": "minecraft:block" + "type": "minecraft:block", + "random_sequence": "aether:blocks/locked_carved_stone" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/locked_hellfire_stone.json b/src/generated/resources/data/aether/loot_tables/blocks/locked_hellfire_stone.json index 68701f9f6e..87043294cb 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/locked_hellfire_stone.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/locked_hellfire_stone.json @@ -1,3 +1,4 @@ { - "type": "minecraft:block" + "type": "minecraft:block", + "random_sequence": "aether:blocks/locked_hellfire_stone" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/locked_light_angelic_stone.json b/src/generated/resources/data/aether/loot_tables/blocks/locked_light_angelic_stone.json index 68701f9f6e..ceab500049 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/locked_light_angelic_stone.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/locked_light_angelic_stone.json @@ -1,3 +1,4 @@ { - "type": "minecraft:block" + "type": "minecraft:block", + "random_sequence": "aether:blocks/locked_light_angelic_stone" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/locked_light_hellfire_stone.json b/src/generated/resources/data/aether/loot_tables/blocks/locked_light_hellfire_stone.json index 68701f9f6e..49695a20df 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/locked_light_hellfire_stone.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/locked_light_hellfire_stone.json @@ -1,3 +1,4 @@ { - "type": "minecraft:block" + "type": "minecraft:block", + "random_sequence": "aether:blocks/locked_light_hellfire_stone" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/locked_sentry_stone.json b/src/generated/resources/data/aether/loot_tables/blocks/locked_sentry_stone.json index 68701f9f6e..d37cbac972 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/locked_sentry_stone.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/locked_sentry_stone.json @@ -1,3 +1,4 @@ { - "type": "minecraft:block" + "type": "minecraft:block", + "random_sequence": "aether:blocks/locked_sentry_stone" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/mossy_holystone.json b/src/generated/resources/data/aether/loot_tables/blocks/mossy_holystone.json index 81a009d499..0624166164 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/mossy_holystone.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/mossy_holystone.json @@ -21,5 +21,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/mossy_holystone" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/mossy_holystone_slab.json b/src/generated/resources/data/aether/loot_tables/blocks/mossy_holystone_slab.json index 806f79d486..db1cf33853 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/mossy_holystone_slab.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/mossy_holystone_slab.json @@ -30,5 +30,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/mossy_holystone_slab" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/mossy_holystone_stairs.json b/src/generated/resources/data/aether/loot_tables/blocks/mossy_holystone_stairs.json index 54fbb71985..d184244860 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/mossy_holystone_stairs.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/mossy_holystone_stairs.json @@ -16,5 +16,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/mossy_holystone_stairs" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/mossy_holystone_wall.json b/src/generated/resources/data/aether/loot_tables/blocks/mossy_holystone_wall.json index 986323066e..215d60bb72 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/mossy_holystone_wall.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/mossy_holystone_wall.json @@ -16,5 +16,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/mossy_holystone_wall" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/pillar.json b/src/generated/resources/data/aether/loot_tables/blocks/pillar.json index 88a1b568be..2ef5ed7e53 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/pillar.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/pillar.json @@ -16,5 +16,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/pillar" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/pillar_top.json b/src/generated/resources/data/aether/loot_tables/blocks/pillar_top.json index 7c59b08bb5..58566e7562 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/pillar_top.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/pillar_top.json @@ -16,5 +16,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/pillar_top" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/potted_berry_bush.json b/src/generated/resources/data/aether/loot_tables/blocks/potted_berry_bush.json index 18434c21a6..ed3f7d3270 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/potted_berry_bush.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/potted_berry_bush.json @@ -31,5 +31,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/potted_berry_bush" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/potted_berry_bush_stem.json b/src/generated/resources/data/aether/loot_tables/blocks/potted_berry_bush_stem.json index ff79d73728..a12ce9a66f 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/potted_berry_bush_stem.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/potted_berry_bush_stem.json @@ -31,5 +31,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/potted_berry_bush_stem" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/potted_golden_oak_sapling.json b/src/generated/resources/data/aether/loot_tables/blocks/potted_golden_oak_sapling.json index a0a29ac695..27285bcfe5 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/potted_golden_oak_sapling.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/potted_golden_oak_sapling.json @@ -31,5 +31,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/potted_golden_oak_sapling" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/potted_purple_flower.json b/src/generated/resources/data/aether/loot_tables/blocks/potted_purple_flower.json index 9718838569..a607aefcec 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/potted_purple_flower.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/potted_purple_flower.json @@ -31,5 +31,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/potted_purple_flower" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/potted_skyroot_sapling.json b/src/generated/resources/data/aether/loot_tables/blocks/potted_skyroot_sapling.json index be465420eb..7cc85f2ae7 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/potted_skyroot_sapling.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/potted_skyroot_sapling.json @@ -31,5 +31,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/potted_skyroot_sapling" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/potted_white_flower.json b/src/generated/resources/data/aether/loot_tables/blocks/potted_white_flower.json index 5138f98d2e..c94f5088b6 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/potted_white_flower.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/potted_white_flower.json @@ -31,5 +31,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/potted_white_flower" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/present.json b/src/generated/resources/data/aether/loot_tables/blocks/present.json index 98a91a6fe0..e37d770249 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/present.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/present.json @@ -98,5 +98,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/present" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/purple_flower.json b/src/generated/resources/data/aether/loot_tables/blocks/purple_flower.json index abae31af34..43c1baf8a0 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/purple_flower.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/purple_flower.json @@ -16,5 +16,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/purple_flower" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/quicksoil.json b/src/generated/resources/data/aether/loot_tables/blocks/quicksoil.json index 8842172da9..e9f90f4e75 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/quicksoil.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/quicksoil.json @@ -21,5 +21,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/quicksoil" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/quicksoil_glass.json b/src/generated/resources/data/aether/loot_tables/blocks/quicksoil_glass.json index 7f0098c85b..adab08a823 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/quicksoil_glass.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/quicksoil_glass.json @@ -26,5 +26,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/quicksoil_glass" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/quicksoil_glass_pane.json b/src/generated/resources/data/aether/loot_tables/blocks/quicksoil_glass_pane.json index 2be1cc652a..77e036d628 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/quicksoil_glass_pane.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/quicksoil_glass_pane.json @@ -26,5 +26,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/quicksoil_glass_pane" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/sentry_stone.json b/src/generated/resources/data/aether/loot_tables/blocks/sentry_stone.json index f70d77e114..7582b4b7b2 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/sentry_stone.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/sentry_stone.json @@ -16,5 +16,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/sentry_stone" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/skyroot_bed.json b/src/generated/resources/data/aether/loot_tables/blocks/skyroot_bed.json index f98d492d56..72beed32da 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/skyroot_bed.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/skyroot_bed.json @@ -25,5 +25,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/skyroot_bed" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/skyroot_bookshelf.json b/src/generated/resources/data/aether/loot_tables/blocks/skyroot_bookshelf.json index faade3c472..18a8f73915 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/skyroot_bookshelf.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/skyroot_bookshelf.json @@ -45,5 +45,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/skyroot_bookshelf" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/skyroot_button.json b/src/generated/resources/data/aether/loot_tables/blocks/skyroot_button.json index dfcd6b0a09..875231c769 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/skyroot_button.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/skyroot_button.json @@ -16,5 +16,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/skyroot_button" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/skyroot_door.json b/src/generated/resources/data/aether/loot_tables/blocks/skyroot_door.json index 770821e940..f629459633 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/skyroot_door.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/skyroot_door.json @@ -25,5 +25,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/skyroot_door" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/skyroot_fence.json b/src/generated/resources/data/aether/loot_tables/blocks/skyroot_fence.json index ef41dff60b..1a1b0cef41 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/skyroot_fence.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/skyroot_fence.json @@ -16,5 +16,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/skyroot_fence" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/skyroot_fence_gate.json b/src/generated/resources/data/aether/loot_tables/blocks/skyroot_fence_gate.json index 900a44c2db..4ecdaabfa3 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/skyroot_fence_gate.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/skyroot_fence_gate.json @@ -16,5 +16,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/skyroot_fence_gate" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/skyroot_hanging_sign.json b/src/generated/resources/data/aether/loot_tables/blocks/skyroot_hanging_sign.json new file mode 100644 index 0000000000..f0eb2397ba --- /dev/null +++ b/src/generated/resources/data/aether/loot_tables/blocks/skyroot_hanging_sign.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "aether:skyroot_hanging_sign" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "aether:blocks/skyroot_hanging_sign" +} \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/skyroot_leaves.json b/src/generated/resources/data/aether/loot_tables/blocks/skyroot_leaves.json index a78ef134ea..603da03e16 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/skyroot_leaves.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/skyroot_leaves.json @@ -16,7 +16,7 @@ "type": "minecraft:item", "conditions": [ { - "condition": "minecraft:alternative", + "condition": "minecraft:any_of", "terms": [ { "condition": "minecraft:match_tool", @@ -72,7 +72,7 @@ { "condition": "minecraft:inverted", "term": { - "condition": "minecraft:alternative", + "condition": "minecraft:any_of", "terms": [ { "condition": "minecraft:match_tool", @@ -134,5 +134,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/skyroot_leaves" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/skyroot_log.json b/src/generated/resources/data/aether/loot_tables/blocks/skyroot_log.json index 72f0abd8e0..427bbba41e 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/skyroot_log.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/skyroot_log.json @@ -21,5 +21,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/skyroot_log" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/skyroot_planks.json b/src/generated/resources/data/aether/loot_tables/blocks/skyroot_planks.json index 1264957d4b..d5924776fb 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/skyroot_planks.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/skyroot_planks.json @@ -16,5 +16,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/skyroot_planks" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/skyroot_pressure_plate.json b/src/generated/resources/data/aether/loot_tables/blocks/skyroot_pressure_plate.json index acf68d5696..631162d625 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/skyroot_pressure_plate.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/skyroot_pressure_plate.json @@ -16,5 +16,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/skyroot_pressure_plate" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/skyroot_sapling.json b/src/generated/resources/data/aether/loot_tables/blocks/skyroot_sapling.json index eaece7c3c4..272b7b61b2 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/skyroot_sapling.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/skyroot_sapling.json @@ -16,5 +16,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/skyroot_sapling" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/skyroot_sign.json b/src/generated/resources/data/aether/loot_tables/blocks/skyroot_sign.json index e6b6bd02ea..3f61afba5a 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/skyroot_sign.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/skyroot_sign.json @@ -16,5 +16,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/skyroot_sign" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/skyroot_slab.json b/src/generated/resources/data/aether/loot_tables/blocks/skyroot_slab.json index eb4c517a38..352740bc2a 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/skyroot_slab.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/skyroot_slab.json @@ -30,5 +30,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/skyroot_slab" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/skyroot_stairs.json b/src/generated/resources/data/aether/loot_tables/blocks/skyroot_stairs.json index 469279787e..d16f85a25b 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/skyroot_stairs.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/skyroot_stairs.json @@ -16,5 +16,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/skyroot_stairs" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/skyroot_trapdoor.json b/src/generated/resources/data/aether/loot_tables/blocks/skyroot_trapdoor.json index e1ed554f04..c769fff22e 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/skyroot_trapdoor.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/skyroot_trapdoor.json @@ -16,5 +16,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/skyroot_trapdoor" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/skyroot_wall_hanging_sign.json b/src/generated/resources/data/aether/loot_tables/blocks/skyroot_wall_hanging_sign.json new file mode 100644 index 0000000000..43e95d385e --- /dev/null +++ b/src/generated/resources/data/aether/loot_tables/blocks/skyroot_wall_hanging_sign.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "aether:skyroot_hanging_sign" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "aether:blocks/skyroot_wall_hanging_sign" +} \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/skyroot_wood.json b/src/generated/resources/data/aether/loot_tables/blocks/skyroot_wood.json index d2a801d346..6ae7a5d84b 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/skyroot_wood.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/skyroot_wood.json @@ -21,5 +21,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/skyroot_wood" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/stripped_skyroot_log.json b/src/generated/resources/data/aether/loot_tables/blocks/stripped_skyroot_log.json index 7b06a0c485..184913f450 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/stripped_skyroot_log.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/stripped_skyroot_log.json @@ -16,5 +16,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/stripped_skyroot_log" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/stripped_skyroot_wood.json b/src/generated/resources/data/aether/loot_tables/blocks/stripped_skyroot_wood.json index 7aee3b9ac1..7f48f9450f 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/stripped_skyroot_wood.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/stripped_skyroot_wood.json @@ -16,5 +16,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/stripped_skyroot_wood" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/sun_altar.json b/src/generated/resources/data/aether/loot_tables/blocks/sun_altar.json index eb188fc31b..0488f733e0 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/sun_altar.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/sun_altar.json @@ -22,5 +22,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/sun_altar" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/trapped_angelic_stone.json b/src/generated/resources/data/aether/loot_tables/blocks/trapped_angelic_stone.json index 68701f9f6e..ddcf09a3a0 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/trapped_angelic_stone.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/trapped_angelic_stone.json @@ -1,3 +1,4 @@ { - "type": "minecraft:block" + "type": "minecraft:block", + "random_sequence": "aether:blocks/trapped_angelic_stone" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/trapped_carved_stone.json b/src/generated/resources/data/aether/loot_tables/blocks/trapped_carved_stone.json index 68701f9f6e..9b5f8184b1 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/trapped_carved_stone.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/trapped_carved_stone.json @@ -1,3 +1,4 @@ { - "type": "minecraft:block" + "type": "minecraft:block", + "random_sequence": "aether:blocks/trapped_carved_stone" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/trapped_hellfire_stone.json b/src/generated/resources/data/aether/loot_tables/blocks/trapped_hellfire_stone.json index 68701f9f6e..46b13dac7a 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/trapped_hellfire_stone.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/trapped_hellfire_stone.json @@ -1,3 +1,4 @@ { - "type": "minecraft:block" + "type": "minecraft:block", + "random_sequence": "aether:blocks/trapped_hellfire_stone" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/trapped_light_angelic_stone.json b/src/generated/resources/data/aether/loot_tables/blocks/trapped_light_angelic_stone.json index 68701f9f6e..44636e90d3 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/trapped_light_angelic_stone.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/trapped_light_angelic_stone.json @@ -1,3 +1,4 @@ { - "type": "minecraft:block" + "type": "minecraft:block", + "random_sequence": "aether:blocks/trapped_light_angelic_stone" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/trapped_light_hellfire_stone.json b/src/generated/resources/data/aether/loot_tables/blocks/trapped_light_hellfire_stone.json index 68701f9f6e..1886eefa85 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/trapped_light_hellfire_stone.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/trapped_light_hellfire_stone.json @@ -1,3 +1,4 @@ { - "type": "minecraft:block" + "type": "minecraft:block", + "random_sequence": "aether:blocks/trapped_light_hellfire_stone" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/trapped_sentry_stone.json b/src/generated/resources/data/aether/loot_tables/blocks/trapped_sentry_stone.json index 68701f9f6e..ec27e032fd 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/trapped_sentry_stone.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/trapped_sentry_stone.json @@ -1,3 +1,4 @@ { - "type": "minecraft:block" + "type": "minecraft:block", + "random_sequence": "aether:blocks/trapped_sentry_stone" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/treasure_chest.json b/src/generated/resources/data/aether/loot_tables/blocks/treasure_chest.json index 3c033ed1f7..7631b562b8 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/treasure_chest.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/treasure_chest.json @@ -33,5 +33,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/treasure_chest" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/treasure_doorway_angelic_stone.json b/src/generated/resources/data/aether/loot_tables/blocks/treasure_doorway_angelic_stone.json index 68701f9f6e..0ee7d23e7f 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/treasure_doorway_angelic_stone.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/treasure_doorway_angelic_stone.json @@ -1,3 +1,4 @@ { - "type": "minecraft:block" + "type": "minecraft:block", + "random_sequence": "aether:blocks/treasure_doorway_angelic_stone" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/treasure_doorway_carved_stone.json b/src/generated/resources/data/aether/loot_tables/blocks/treasure_doorway_carved_stone.json index 68701f9f6e..3d8bbb0944 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/treasure_doorway_carved_stone.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/treasure_doorway_carved_stone.json @@ -1,3 +1,4 @@ { - "type": "minecraft:block" + "type": "minecraft:block", + "random_sequence": "aether:blocks/treasure_doorway_carved_stone" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/treasure_doorway_hellfire_stone.json b/src/generated/resources/data/aether/loot_tables/blocks/treasure_doorway_hellfire_stone.json index 68701f9f6e..52f1df06bf 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/treasure_doorway_hellfire_stone.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/treasure_doorway_hellfire_stone.json @@ -1,3 +1,4 @@ { - "type": "minecraft:block" + "type": "minecraft:block", + "random_sequence": "aether:blocks/treasure_doorway_hellfire_stone" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/treasure_doorway_light_angelic_stone.json b/src/generated/resources/data/aether/loot_tables/blocks/treasure_doorway_light_angelic_stone.json index 68701f9f6e..eac87bef33 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/treasure_doorway_light_angelic_stone.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/treasure_doorway_light_angelic_stone.json @@ -1,3 +1,4 @@ { - "type": "minecraft:block" + "type": "minecraft:block", + "random_sequence": "aether:blocks/treasure_doorway_light_angelic_stone" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/treasure_doorway_light_hellfire_stone.json b/src/generated/resources/data/aether/loot_tables/blocks/treasure_doorway_light_hellfire_stone.json index 68701f9f6e..0b9e9dad01 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/treasure_doorway_light_hellfire_stone.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/treasure_doorway_light_hellfire_stone.json @@ -1,3 +1,4 @@ { - "type": "minecraft:block" + "type": "minecraft:block", + "random_sequence": "aether:blocks/treasure_doorway_light_hellfire_stone" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/treasure_doorway_sentry_stone.json b/src/generated/resources/data/aether/loot_tables/blocks/treasure_doorway_sentry_stone.json index 68701f9f6e..51ef69558a 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/treasure_doorway_sentry_stone.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/treasure_doorway_sentry_stone.json @@ -1,3 +1,4 @@ { - "type": "minecraft:block" + "type": "minecraft:block", + "random_sequence": "aether:blocks/treasure_doorway_sentry_stone" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/unstable_obsidian.json b/src/generated/resources/data/aether/loot_tables/blocks/unstable_obsidian.json index 68701f9f6e..c443cd8fd2 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/unstable_obsidian.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/unstable_obsidian.json @@ -1,3 +1,4 @@ { - "type": "minecraft:block" + "type": "minecraft:block", + "random_sequence": "aether:blocks/unstable_obsidian" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/white_flower.json b/src/generated/resources/data/aether/loot_tables/blocks/white_flower.json index 37d79280f0..b419f99b61 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/white_flower.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/white_flower.json @@ -16,5 +16,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/white_flower" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/zanite_block.json b/src/generated/resources/data/aether/loot_tables/blocks/zanite_block.json index 60d8aa8b98..300a1d1174 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/zanite_block.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/zanite_block.json @@ -16,5 +16,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/zanite_block" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/blocks/zanite_ore.json b/src/generated/resources/data/aether/loot_tables/blocks/zanite_ore.json index 01ace1a23d..471cada98a 100644 --- a/src/generated/resources/data/aether/loot_tables/blocks/zanite_ore.json +++ b/src/generated/resources/data/aether/loot_tables/blocks/zanite_ore.json @@ -45,5 +45,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:blocks/zanite_ore" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/chests/dungeon/bronze/bronze_dungeon.json b/src/generated/resources/data/aether/loot_tables/chests/dungeon/bronze/bronze_dungeon.json index ac60ebe32d..6444b6dce3 100644 --- a/src/generated/resources/data/aether/loot_tables/chests/dungeon/bronze/bronze_dungeon.json +++ b/src/generated/resources/data/aether/loot_tables/chests/dungeon/bronze/bronze_dungeon.json @@ -24,5 +24,6 @@ "min": 1.0 } } - ] + ], + "random_sequence": "aether:chests/dungeon/bronze/bronze_dungeon" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/chests/dungeon/bronze/bronze_dungeon_disc.json b/src/generated/resources/data/aether/loot_tables/chests/dungeon/bronze/bronze_dungeon_disc.json index 3afb90beab..aac7db8d2c 100644 --- a/src/generated/resources/data/aether/loot_tables/chests/dungeon/bronze/bronze_dungeon_disc.json +++ b/src/generated/resources/data/aether/loot_tables/chests/dungeon/bronze/bronze_dungeon_disc.json @@ -88,5 +88,6 @@ "min": 3.0 } } - ] + ], + "random_sequence": "aether:chests/dungeon/bronze/bronze_dungeon_disc" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/chests/dungeon/bronze/bronze_dungeon_gummies.json b/src/generated/resources/data/aether/loot_tables/chests/dungeon/bronze/bronze_dungeon_gummies.json index 2c6a45c32c..d1a36413bb 100644 --- a/src/generated/resources/data/aether/loot_tables/chests/dungeon/bronze/bronze_dungeon_gummies.json +++ b/src/generated/resources/data/aether/loot_tables/chests/dungeon/bronze/bronze_dungeon_gummies.json @@ -21,5 +21,6 @@ "min": 2.0 } } - ] + ], + "random_sequence": "aether:chests/dungeon/bronze/bronze_dungeon_gummies" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/chests/dungeon/bronze/bronze_dungeon_loot.json b/src/generated/resources/data/aether/loot_tables/chests/dungeon/bronze/bronze_dungeon_loot.json index ef171af6b1..6c42d8979c 100644 --- a/src/generated/resources/data/aether/loot_tables/chests/dungeon/bronze/bronze_dungeon_loot.json +++ b/src/generated/resources/data/aether/loot_tables/chests/dungeon/bronze/bronze_dungeon_loot.json @@ -274,5 +274,6 @@ "min": 1.0 } } - ] + ], + "random_sequence": "aether:chests/dungeon/bronze/bronze_dungeon_loot" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/chests/dungeon/bronze/bronze_dungeon_neptune.json b/src/generated/resources/data/aether/loot_tables/chests/dungeon/bronze/bronze_dungeon_neptune.json index df31d859d2..ada619074c 100644 --- a/src/generated/resources/data/aether/loot_tables/chests/dungeon/bronze/bronze_dungeon_neptune.json +++ b/src/generated/resources/data/aether/loot_tables/chests/dungeon/bronze/bronze_dungeon_neptune.json @@ -27,5 +27,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:chests/dungeon/bronze/bronze_dungeon_neptune" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/chests/dungeon/bronze/bronze_dungeon_reward.json b/src/generated/resources/data/aether/loot_tables/chests/dungeon/bronze/bronze_dungeon_reward.json index 0158332bc7..3d70151d97 100644 --- a/src/generated/resources/data/aether/loot_tables/chests/dungeon/bronze/bronze_dungeon_reward.json +++ b/src/generated/resources/data/aether/loot_tables/chests/dungeon/bronze/bronze_dungeon_reward.json @@ -190,5 +190,6 @@ "min": 4.0 } } - ] + ], + "random_sequence": "aether:chests/dungeon/bronze/bronze_dungeon_reward" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/chests/dungeon/bronze/bronze_dungeon_trash.json b/src/generated/resources/data/aether/loot_tables/chests/dungeon/bronze/bronze_dungeon_trash.json index 3d535dadc6..b4dd80b260 100644 --- a/src/generated/resources/data/aether/loot_tables/chests/dungeon/bronze/bronze_dungeon_trash.json +++ b/src/generated/resources/data/aether/loot_tables/chests/dungeon/bronze/bronze_dungeon_trash.json @@ -83,5 +83,6 @@ "min": 2.0 } } - ] + ], + "random_sequence": "aether:chests/dungeon/bronze/bronze_dungeon_trash" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/chests/dungeon/bronze/bronze_dungeon_treasure.json b/src/generated/resources/data/aether/loot_tables/chests/dungeon/bronze/bronze_dungeon_treasure.json index 8eee2b69b7..3586c2fee2 100644 --- a/src/generated/resources/data/aether/loot_tables/chests/dungeon/bronze/bronze_dungeon_treasure.json +++ b/src/generated/resources/data/aether/loot_tables/chests/dungeon/bronze/bronze_dungeon_treasure.json @@ -26,5 +26,6 @@ "min": 1.0 } } - ] + ], + "random_sequence": "aether:chests/dungeon/bronze/bronze_dungeon_treasure" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/chests/dungeon/gold/gold_dungeon_reward.json b/src/generated/resources/data/aether/loot_tables/chests/dungeon/gold/gold_dungeon_reward.json index 146984a375..53d6ae817f 100644 --- a/src/generated/resources/data/aether/loot_tables/chests/dungeon/gold/gold_dungeon_reward.json +++ b/src/generated/resources/data/aether/loot_tables/chests/dungeon/gold/gold_dungeon_reward.json @@ -168,5 +168,6 @@ "min": 0.0 } } - ] + ], + "random_sequence": "aether:chests/dungeon/gold/gold_dungeon_reward" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/chests/dungeon/gold/gold_dungeon_treasure.json b/src/generated/resources/data/aether/loot_tables/chests/dungeon/gold/gold_dungeon_treasure.json index 24c9df8a38..57d35edb0c 100644 --- a/src/generated/resources/data/aether/loot_tables/chests/dungeon/gold/gold_dungeon_treasure.json +++ b/src/generated/resources/data/aether/loot_tables/chests/dungeon/gold/gold_dungeon_treasure.json @@ -40,5 +40,6 @@ "min": 2.0 } } - ] + ], + "random_sequence": "aether:chests/dungeon/gold/gold_dungeon_treasure" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/chests/dungeon/silver/silver_dungeon.json b/src/generated/resources/data/aether/loot_tables/chests/dungeon/silver/silver_dungeon.json index dfdf36911c..4a1cfa85c8 100644 --- a/src/generated/resources/data/aether/loot_tables/chests/dungeon/silver/silver_dungeon.json +++ b/src/generated/resources/data/aether/loot_tables/chests/dungeon/silver/silver_dungeon.json @@ -25,5 +25,6 @@ "min": 1.0 } } - ] + ], + "random_sequence": "aether:chests/dungeon/silver/silver_dungeon" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/chests/dungeon/silver/silver_dungeon_cape_config.json b/src/generated/resources/data/aether/loot_tables/chests/dungeon/silver/silver_dungeon_cape_config.json index 4c67476c2e..f3bee6d093 100644 --- a/src/generated/resources/data/aether/loot_tables/chests/dungeon/silver/silver_dungeon_cape_config.json +++ b/src/generated/resources/data/aether/loot_tables/chests/dungeon/silver/silver_dungeon_cape_config.json @@ -41,5 +41,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:chests/dungeon/silver/silver_dungeon_cape_config" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/chests/dungeon/silver/silver_dungeon_disc.json b/src/generated/resources/data/aether/loot_tables/chests/dungeon/silver/silver_dungeon_disc.json index ef0b0f226f..93a8786e05 100644 --- a/src/generated/resources/data/aether/loot_tables/chests/dungeon/silver/silver_dungeon_disc.json +++ b/src/generated/resources/data/aether/loot_tables/chests/dungeon/silver/silver_dungeon_disc.json @@ -130,5 +130,6 @@ "min": 3.0 } } - ] + ], + "random_sequence": "aether:chests/dungeon/silver/silver_dungeon_disc" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/chests/dungeon/silver/silver_dungeon_gravitite.json b/src/generated/resources/data/aether/loot_tables/chests/dungeon/silver/silver_dungeon_gravitite.json index b4c4d492b4..52999c2a0a 100644 --- a/src/generated/resources/data/aether/loot_tables/chests/dungeon/silver/silver_dungeon_gravitite.json +++ b/src/generated/resources/data/aether/loot_tables/chests/dungeon/silver/silver_dungeon_gravitite.json @@ -51,5 +51,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:chests/dungeon/silver/silver_dungeon_gravitite" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/chests/dungeon/silver/silver_dungeon_gummies.json b/src/generated/resources/data/aether/loot_tables/chests/dungeon/silver/silver_dungeon_gummies.json index 286f7fdad8..ed957d759b 100644 --- a/src/generated/resources/data/aether/loot_tables/chests/dungeon/silver/silver_dungeon_gummies.json +++ b/src/generated/resources/data/aether/loot_tables/chests/dungeon/silver/silver_dungeon_gummies.json @@ -43,5 +43,6 @@ "min": 1.0 } } - ] + ], + "random_sequence": "aether:chests/dungeon/silver/silver_dungeon_gummies" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/chests/dungeon/silver/silver_dungeon_loot.json b/src/generated/resources/data/aether/loot_tables/chests/dungeon/silver/silver_dungeon_loot.json index 34bc41ac38..6f14ed4486 100644 --- a/src/generated/resources/data/aether/loot_tables/chests/dungeon/silver/silver_dungeon_loot.json +++ b/src/generated/resources/data/aether/loot_tables/chests/dungeon/silver/silver_dungeon_loot.json @@ -369,5 +369,6 @@ "min": 1.0 } } - ] + ], + "random_sequence": "aether:chests/dungeon/silver/silver_dungeon_loot" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/chests/dungeon/silver/silver_dungeon_reward.json b/src/generated/resources/data/aether/loot_tables/chests/dungeon/silver/silver_dungeon_reward.json index a192dd7eb0..2b0f0c94d3 100644 --- a/src/generated/resources/data/aether/loot_tables/chests/dungeon/silver/silver_dungeon_reward.json +++ b/src/generated/resources/data/aether/loot_tables/chests/dungeon/silver/silver_dungeon_reward.json @@ -181,5 +181,6 @@ "min": 6.0 } } - ] + ], + "random_sequence": "aether:chests/dungeon/silver/silver_dungeon_reward" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/chests/dungeon/silver/silver_dungeon_trash.json b/src/generated/resources/data/aether/loot_tables/chests/dungeon/silver/silver_dungeon_trash.json index 53a767a33e..9d57aafa92 100644 --- a/src/generated/resources/data/aether/loot_tables/chests/dungeon/silver/silver_dungeon_trash.json +++ b/src/generated/resources/data/aether/loot_tables/chests/dungeon/silver/silver_dungeon_trash.json @@ -109,5 +109,6 @@ "min": 5.0 } } - ] + ], + "random_sequence": "aether:chests/dungeon/silver/silver_dungeon_trash" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/chests/dungeon/silver/silver_dungeon_treasure.json b/src/generated/resources/data/aether/loot_tables/chests/dungeon/silver/silver_dungeon_treasure.json index b20197981f..e3250d7046 100644 --- a/src/generated/resources/data/aether/loot_tables/chests/dungeon/silver/silver_dungeon_treasure.json +++ b/src/generated/resources/data/aether/loot_tables/chests/dungeon/silver/silver_dungeon_treasure.json @@ -31,5 +31,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:chests/dungeon/silver/silver_dungeon_treasure" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/chests/dungeon/silver/silver_dungeon_valkyrie.json b/src/generated/resources/data/aether/loot_tables/chests/dungeon/silver/silver_dungeon_valkyrie.json index 7f68623cf7..88ea47ee55 100644 --- a/src/generated/resources/data/aether/loot_tables/chests/dungeon/silver/silver_dungeon_valkyrie.json +++ b/src/generated/resources/data/aether/loot_tables/chests/dungeon/silver/silver_dungeon_valkyrie.json @@ -57,5 +57,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:chests/dungeon/silver/silver_dungeon_valkyrie" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/chests/ruined_portal.json b/src/generated/resources/data/aether/loot_tables/chests/ruined_portal.json index 133c3a2ccb..9e910ca7f3 100644 --- a/src/generated/resources/data/aether/loot_tables/chests/ruined_portal.json +++ b/src/generated/resources/data/aether/loot_tables/chests/ruined_portal.json @@ -252,5 +252,6 @@ "min": 4.0 } } - ] + ], + "random_sequence": "aether:chests/ruined_portal" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/entities/aechor_plant.json b/src/generated/resources/data/aether/loot_tables/entities/aechor_plant.json index a79d74a6d7..dbd6bab008 100644 --- a/src/generated/resources/data/aether/loot_tables/entities/aechor_plant.json +++ b/src/generated/resources/data/aether/loot_tables/entities/aechor_plant.json @@ -30,5 +30,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:entities/aechor_plant" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/entities/aerbunny.json b/src/generated/resources/data/aether/loot_tables/entities/aerbunny.json index c20c76f882..d81497d14d 100644 --- a/src/generated/resources/data/aether/loot_tables/entities/aerbunny.json +++ b/src/generated/resources/data/aether/loot_tables/entities/aerbunny.json @@ -30,5 +30,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:entities/aerbunny" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/entities/aerwhale.json b/src/generated/resources/data/aether/loot_tables/entities/aerwhale.json index 601c1935a9..64e08862f9 100644 --- a/src/generated/resources/data/aether/loot_tables/entities/aerwhale.json +++ b/src/generated/resources/data/aether/loot_tables/entities/aerwhale.json @@ -1,3 +1,4 @@ { - "type": "minecraft:entity" + "type": "minecraft:entity", + "random_sequence": "aether:entities/aerwhale" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/entities/blue_swet.json b/src/generated/resources/data/aether/loot_tables/entities/blue_swet.json index cb3a06fa4f..b49993f1fb 100644 --- a/src/generated/resources/data/aether/loot_tables/entities/blue_swet.json +++ b/src/generated/resources/data/aether/loot_tables/entities/blue_swet.json @@ -59,5 +59,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:entities/blue_swet" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/entities/cockatrice.json b/src/generated/resources/data/aether/loot_tables/entities/cockatrice.json index 17831d1284..7f18dde14f 100644 --- a/src/generated/resources/data/aether/loot_tables/entities/cockatrice.json +++ b/src/generated/resources/data/aether/loot_tables/entities/cockatrice.json @@ -30,5 +30,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:entities/cockatrice" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/entities/evil_whirlwind.json b/src/generated/resources/data/aether/loot_tables/entities/evil_whirlwind.json index 601c1935a9..2ee1a0e908 100644 --- a/src/generated/resources/data/aether/loot_tables/entities/evil_whirlwind.json +++ b/src/generated/resources/data/aether/loot_tables/entities/evil_whirlwind.json @@ -1,3 +1,4 @@ { - "type": "minecraft:entity" + "type": "minecraft:entity", + "random_sequence": "aether:entities/evil_whirlwind" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/entities/fire_minion.json b/src/generated/resources/data/aether/loot_tables/entities/fire_minion.json index 601c1935a9..640f6dcf7a 100644 --- a/src/generated/resources/data/aether/loot_tables/entities/fire_minion.json +++ b/src/generated/resources/data/aether/loot_tables/entities/fire_minion.json @@ -1,3 +1,4 @@ { - "type": "minecraft:entity" + "type": "minecraft:entity", + "random_sequence": "aether:entities/fire_minion" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/entities/flying_cow.json b/src/generated/resources/data/aether/loot_tables/entities/flying_cow.json index 42e9b64dbd..7436dc6085 100644 --- a/src/generated/resources/data/aether/loot_tables/entities/flying_cow.json +++ b/src/generated/resources/data/aether/loot_tables/entities/flying_cow.json @@ -73,5 +73,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:entities/flying_cow" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/entities/golden_swet.json b/src/generated/resources/data/aether/loot_tables/entities/golden_swet.json index 97254e0380..0798936400 100644 --- a/src/generated/resources/data/aether/loot_tables/entities/golden_swet.json +++ b/src/generated/resources/data/aether/loot_tables/entities/golden_swet.json @@ -30,5 +30,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:entities/golden_swet" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/entities/mimic.json b/src/generated/resources/data/aether/loot_tables/entities/mimic.json index 4664044ea5..8f043a75c9 100644 --- a/src/generated/resources/data/aether/loot_tables/entities/mimic.json +++ b/src/generated/resources/data/aether/loot_tables/entities/mimic.json @@ -161,5 +161,6 @@ "min": 1.0 } } - ] + ], + "random_sequence": "aether:entities/mimic" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/entities/moa.json b/src/generated/resources/data/aether/loot_tables/entities/moa.json index 17831d1284..32fb60ae16 100644 --- a/src/generated/resources/data/aether/loot_tables/entities/moa.json +++ b/src/generated/resources/data/aether/loot_tables/entities/moa.json @@ -30,5 +30,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:entities/moa" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/entities/phyg.json b/src/generated/resources/data/aether/loot_tables/entities/phyg.json index b8cc835859..e07d0abd18 100644 --- a/src/generated/resources/data/aether/loot_tables/entities/phyg.json +++ b/src/generated/resources/data/aether/loot_tables/entities/phyg.json @@ -73,5 +73,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:entities/phyg" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/entities/sentry.json b/src/generated/resources/data/aether/loot_tables/entities/sentry.json index d833feac9c..e7eea22ab3 100644 --- a/src/generated/resources/data/aether/loot_tables/entities/sentry.json +++ b/src/generated/resources/data/aether/loot_tables/entities/sentry.json @@ -54,5 +54,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:entities/sentry" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/entities/sheepuff.json b/src/generated/resources/data/aether/loot_tables/entities/sheepuff.json index e9f6de94ba..b0a6267ef2 100644 --- a/src/generated/resources/data/aether/loot_tables/entities/sheepuff.json +++ b/src/generated/resources/data/aether/loot_tables/entities/sheepuff.json @@ -44,5 +44,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:entities/sheepuff" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/entities/sheepuff/black.json b/src/generated/resources/data/aether/loot_tables/entities/sheepuff/black.json index 7dae887473..dfd031c904 100644 --- a/src/generated/resources/data/aether/loot_tables/entities/sheepuff/black.json +++ b/src/generated/resources/data/aether/loot_tables/entities/sheepuff/black.json @@ -21,5 +21,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:entities/sheepuff/black" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/entities/sheepuff/blue.json b/src/generated/resources/data/aether/loot_tables/entities/sheepuff/blue.json index 9391316d23..70c7e7ad56 100644 --- a/src/generated/resources/data/aether/loot_tables/entities/sheepuff/blue.json +++ b/src/generated/resources/data/aether/loot_tables/entities/sheepuff/blue.json @@ -21,5 +21,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:entities/sheepuff/blue" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/entities/sheepuff/brown.json b/src/generated/resources/data/aether/loot_tables/entities/sheepuff/brown.json index 8b573d5fe1..3b692f4533 100644 --- a/src/generated/resources/data/aether/loot_tables/entities/sheepuff/brown.json +++ b/src/generated/resources/data/aether/loot_tables/entities/sheepuff/brown.json @@ -21,5 +21,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:entities/sheepuff/brown" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/entities/sheepuff/cyan.json b/src/generated/resources/data/aether/loot_tables/entities/sheepuff/cyan.json index 920c4afc3a..7a932f7007 100644 --- a/src/generated/resources/data/aether/loot_tables/entities/sheepuff/cyan.json +++ b/src/generated/resources/data/aether/loot_tables/entities/sheepuff/cyan.json @@ -21,5 +21,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:entities/sheepuff/cyan" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/entities/sheepuff/gray.json b/src/generated/resources/data/aether/loot_tables/entities/sheepuff/gray.json index 570605069f..27e1e43227 100644 --- a/src/generated/resources/data/aether/loot_tables/entities/sheepuff/gray.json +++ b/src/generated/resources/data/aether/loot_tables/entities/sheepuff/gray.json @@ -21,5 +21,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:entities/sheepuff/gray" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/entities/sheepuff/green.json b/src/generated/resources/data/aether/loot_tables/entities/sheepuff/green.json index 85609f2c70..d7c08ad7ec 100644 --- a/src/generated/resources/data/aether/loot_tables/entities/sheepuff/green.json +++ b/src/generated/resources/data/aether/loot_tables/entities/sheepuff/green.json @@ -21,5 +21,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:entities/sheepuff/green" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/entities/sheepuff/light_blue.json b/src/generated/resources/data/aether/loot_tables/entities/sheepuff/light_blue.json index a8065b4d3d..7db042ce60 100644 --- a/src/generated/resources/data/aether/loot_tables/entities/sheepuff/light_blue.json +++ b/src/generated/resources/data/aether/loot_tables/entities/sheepuff/light_blue.json @@ -21,5 +21,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:entities/sheepuff/light_blue" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/entities/sheepuff/light_gray.json b/src/generated/resources/data/aether/loot_tables/entities/sheepuff/light_gray.json index 4e72530a9f..a80e0ff63e 100644 --- a/src/generated/resources/data/aether/loot_tables/entities/sheepuff/light_gray.json +++ b/src/generated/resources/data/aether/loot_tables/entities/sheepuff/light_gray.json @@ -21,5 +21,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:entities/sheepuff/light_gray" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/entities/sheepuff/lime.json b/src/generated/resources/data/aether/loot_tables/entities/sheepuff/lime.json index 9ef58b20e8..7f09a1a358 100644 --- a/src/generated/resources/data/aether/loot_tables/entities/sheepuff/lime.json +++ b/src/generated/resources/data/aether/loot_tables/entities/sheepuff/lime.json @@ -21,5 +21,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:entities/sheepuff/lime" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/entities/sheepuff/magenta.json b/src/generated/resources/data/aether/loot_tables/entities/sheepuff/magenta.json index 235bf7ef8c..88c4b8d1e0 100644 --- a/src/generated/resources/data/aether/loot_tables/entities/sheepuff/magenta.json +++ b/src/generated/resources/data/aether/loot_tables/entities/sheepuff/magenta.json @@ -21,5 +21,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:entities/sheepuff/magenta" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/entities/sheepuff/orange.json b/src/generated/resources/data/aether/loot_tables/entities/sheepuff/orange.json index 68fd15f9e6..593a5fd1ed 100644 --- a/src/generated/resources/data/aether/loot_tables/entities/sheepuff/orange.json +++ b/src/generated/resources/data/aether/loot_tables/entities/sheepuff/orange.json @@ -21,5 +21,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:entities/sheepuff/orange" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/entities/sheepuff/pink.json b/src/generated/resources/data/aether/loot_tables/entities/sheepuff/pink.json index 5e37363291..35da1ea394 100644 --- a/src/generated/resources/data/aether/loot_tables/entities/sheepuff/pink.json +++ b/src/generated/resources/data/aether/loot_tables/entities/sheepuff/pink.json @@ -21,5 +21,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:entities/sheepuff/pink" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/entities/sheepuff/purple.json b/src/generated/resources/data/aether/loot_tables/entities/sheepuff/purple.json index 796341e50a..08c507b638 100644 --- a/src/generated/resources/data/aether/loot_tables/entities/sheepuff/purple.json +++ b/src/generated/resources/data/aether/loot_tables/entities/sheepuff/purple.json @@ -21,5 +21,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:entities/sheepuff/purple" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/entities/sheepuff/red.json b/src/generated/resources/data/aether/loot_tables/entities/sheepuff/red.json index 64639bbbf2..699d37afe4 100644 --- a/src/generated/resources/data/aether/loot_tables/entities/sheepuff/red.json +++ b/src/generated/resources/data/aether/loot_tables/entities/sheepuff/red.json @@ -21,5 +21,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:entities/sheepuff/red" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/entities/sheepuff/white.json b/src/generated/resources/data/aether/loot_tables/entities/sheepuff/white.json index 116b6cdaf8..e72f824b1b 100644 --- a/src/generated/resources/data/aether/loot_tables/entities/sheepuff/white.json +++ b/src/generated/resources/data/aether/loot_tables/entities/sheepuff/white.json @@ -21,5 +21,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:entities/sheepuff/white" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/entities/sheepuff/yellow.json b/src/generated/resources/data/aether/loot_tables/entities/sheepuff/yellow.json index 6a61c55050..1db5c497db 100644 --- a/src/generated/resources/data/aether/loot_tables/entities/sheepuff/yellow.json +++ b/src/generated/resources/data/aether/loot_tables/entities/sheepuff/yellow.json @@ -21,5 +21,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:entities/sheepuff/yellow" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/entities/slider.json b/src/generated/resources/data/aether/loot_tables/entities/slider.json index 35f00037df..9db2ca5958 100644 --- a/src/generated/resources/data/aether/loot_tables/entities/slider.json +++ b/src/generated/resources/data/aether/loot_tables/entities/slider.json @@ -39,5 +39,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:entities/slider" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/entities/sun_spirit.json b/src/generated/resources/data/aether/loot_tables/entities/sun_spirit.json index 921a0f208a..90b950b21b 100644 --- a/src/generated/resources/data/aether/loot_tables/entities/sun_spirit.json +++ b/src/generated/resources/data/aether/loot_tables/entities/sun_spirit.json @@ -35,5 +35,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:entities/sun_spirit" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/entities/valkyrie.json b/src/generated/resources/data/aether/loot_tables/entities/valkyrie.json index 1531e6504e..6ff762d0eb 100644 --- a/src/generated/resources/data/aether/loot_tables/entities/valkyrie.json +++ b/src/generated/resources/data/aether/loot_tables/entities/valkyrie.json @@ -18,5 +18,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:entities/valkyrie" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/entities/valkyrie_queen.json b/src/generated/resources/data/aether/loot_tables/entities/valkyrie_queen.json index 8b31636dd7..d210df6317 100644 --- a/src/generated/resources/data/aether/loot_tables/entities/valkyrie_queen.json +++ b/src/generated/resources/data/aether/loot_tables/entities/valkyrie_queen.json @@ -35,5 +35,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:entities/valkyrie_queen" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/entities/whirlwind.json b/src/generated/resources/data/aether/loot_tables/entities/whirlwind.json index 601c1935a9..45c783a3ed 100644 --- a/src/generated/resources/data/aether/loot_tables/entities/whirlwind.json +++ b/src/generated/resources/data/aether/loot_tables/entities/whirlwind.json @@ -1,3 +1,4 @@ { - "type": "minecraft:entity" + "type": "minecraft:entity", + "random_sequence": "aether:entities/whirlwind" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/entities/zephyr.json b/src/generated/resources/data/aether/loot_tables/entities/zephyr.json index 5be6928d26..08fa0d0a4a 100644 --- a/src/generated/resources/data/aether/loot_tables/entities/zephyr.json +++ b/src/generated/resources/data/aether/loot_tables/entities/zephyr.json @@ -30,5 +30,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:entities/zephyr" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/selectors/evil_whirlwind_junk.json b/src/generated/resources/data/aether/loot_tables/selectors/evil_whirlwind_junk.json index 5eec95f355..4353d6fe89 100644 --- a/src/generated/resources/data/aether/loot_tables/selectors/evil_whirlwind_junk.json +++ b/src/generated/resources/data/aether/loot_tables/selectors/evil_whirlwind_junk.json @@ -73,5 +73,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:selectors/evil_whirlwind_junk" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/selectors/whirlwind_junk.json b/src/generated/resources/data/aether/loot_tables/selectors/whirlwind_junk.json index f619fe9303..1af510b8b3 100644 --- a/src/generated/resources/data/aether/loot_tables/selectors/whirlwind_junk.json +++ b/src/generated/resources/data/aether/loot_tables/selectors/whirlwind_junk.json @@ -61,5 +61,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:selectors/whirlwind_junk" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/loot_tables/stripping/strip_golden_oak.json b/src/generated/resources/data/aether/loot_tables/stripping/strip_golden_oak.json index feae03717e..f3a00ac879 100644 --- a/src/generated/resources/data/aether/loot_tables/stripping/strip_golden_oak.json +++ b/src/generated/resources/data/aether/loot_tables/stripping/strip_golden_oak.json @@ -27,5 +27,6 @@ ], "rolls": 1.0 } - ] + ], + "random_sequence": "aether:stripping/strip_golden_oak" } \ No newline at end of file diff --git a/src/generated/resources/data/aether/recipes/old_netherite_gloves_smithing.json b/src/generated/resources/data/aether/recipes/old_netherite_gloves_smithing.json deleted file mode 100644 index c439009e9c..0000000000 --- a/src/generated/resources/data/aether/recipes/old_netherite_gloves_smithing.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "minecraft:smithing", - "addition": { - "item": "minecraft:netherite_ingot" - }, - "base": { - "item": "aether:diamond_gloves" - }, - "result": { - "item": "aether:netherite_gloves" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/aether/recipes/skyroot_bed.json b/src/generated/resources/data/aether/recipes/skyroot_bed.json index 45c9d02e9d..79582e8697 100644 --- a/src/generated/resources/data/aether/recipes/skyroot_bed.json +++ b/src/generated/resources/data/aether/recipes/skyroot_bed.json @@ -3,7 +3,7 @@ "category": "misc", "key": { "P": { - "item": "aether:skyroot_planks" + "tag": "aether:planks_crafting" }, "W": { "tag": "minecraft:wool" diff --git a/src/generated/resources/data/aether/recipes/skyroot_hanging_sign.json b/src/generated/resources/data/aether/recipes/skyroot_hanging_sign.json new file mode 100644 index 0000000000..6dd84f9e3c --- /dev/null +++ b/src/generated/resources/data/aether/recipes/skyroot_hanging_sign.json @@ -0,0 +1,23 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "group": "hanging_sign", + "key": { + "#": { + "item": "aether:stripped_skyroot_log" + }, + "X": { + "item": "minecraft:chain" + } + }, + "pattern": [ + "X X", + "###", + "###" + ], + "result": { + "count": 6, + "item": "aether:skyroot_hanging_sign" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/generated/resources/data/aether/trim_material/gravitite.json b/src/generated/resources/data/aether/trim_material/gravitite.json new file mode 100644 index 0000000000..3378865980 --- /dev/null +++ b/src/generated/resources/data/aether/trim_material/gravitite.json @@ -0,0 +1,9 @@ +{ + "asset_name": "gravitite", + "description": { + "color": "#CC54C3", + "translate": "trim_material.aether.gravitite" + }, + "ingredient": "aether:enchanted_gravitite", + "item_model_index": 1.0 +} \ No newline at end of file diff --git a/src/generated/resources/data/aether/trim_material/zanite.json b/src/generated/resources/data/aether/trim_material/zanite.json new file mode 100644 index 0000000000..0122cc35a1 --- /dev/null +++ b/src/generated/resources/data/aether/trim_material/zanite.json @@ -0,0 +1,9 @@ +{ + "asset_name": "zanite", + "description": { + "color": "#7A36E0", + "translate": "trim_material.aether.zanite" + }, + "ingredient": "aether:zanite_gemstone", + "item_model_index": 1.0 +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/ceiling_hanging_signs.json b/src/generated/resources/data/minecraft/tags/blocks/ceiling_hanging_signs.json new file mode 100644 index 0000000000..797de9ca29 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/ceiling_hanging_signs.json @@ -0,0 +1,5 @@ +{ + "values": [ + "aether:skyroot_hanging_sign" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/enchantment_power_provider.json b/src/generated/resources/data/minecraft/tags/blocks/enchantment_power_provider.json new file mode 100644 index 0000000000..5b5ef678a0 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/enchantment_power_provider.json @@ -0,0 +1,5 @@ +{ + "values": [ + "aether:skyroot_bookshelf" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/mineable/axe.json b/src/generated/resources/data/minecraft/tags/blocks/mineable/axe.json index 7ab42d747d..94a11b3d89 100644 --- a/src/generated/resources/data/minecraft/tags/blocks/mineable/axe.json +++ b/src/generated/resources/data/minecraft/tags/blocks/mineable/axe.json @@ -9,6 +9,8 @@ "aether:skyroot_planks", "aether:skyroot_sign", "aether:skyroot_wall_sign", + "aether:skyroot_hanging_sign", + "aether:skyroot_wall_hanging_sign", "aether:berry_bush_stem", "aether:chest_mimic", "aether:skyroot_fence", diff --git a/src/generated/resources/data/minecraft/tags/blocks/sniffer_diggable_block.json b/src/generated/resources/data/minecraft/tags/blocks/sniffer_diggable_block.json new file mode 100644 index 0000000000..ca17f37245 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/sniffer_diggable_block.json @@ -0,0 +1,7 @@ +{ + "values": [ + "aether:aether_grass_block", + "aether:aether_dirt", + "aether:enchanted_aether_grass_block" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/stone_buttons.json b/src/generated/resources/data/minecraft/tags/blocks/stone_buttons.json new file mode 100644 index 0000000000..64e37f45b0 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/stone_buttons.json @@ -0,0 +1,5 @@ +{ + "values": [ + "aether:holystone_button" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/sword_efficient.json b/src/generated/resources/data/minecraft/tags/blocks/sword_efficient.json new file mode 100644 index 0000000000..14a15587ec --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/sword_efficient.json @@ -0,0 +1,6 @@ +{ + "values": [ + "aether:berry_bush", + "aether:berry_bush_stem" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/wall_hanging_signs.json b/src/generated/resources/data/minecraft/tags/blocks/wall_hanging_signs.json new file mode 100644 index 0000000000..832612cf77 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/wall_hanging_signs.json @@ -0,0 +1,5 @@ +{ + "values": [ + "aether:skyroot_wall_hanging_sign" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/items/hanging_signs.json b/src/generated/resources/data/minecraft/tags/items/hanging_signs.json new file mode 100644 index 0000000000..797de9ca29 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/items/hanging_signs.json @@ -0,0 +1,5 @@ +{ + "values": [ + "aether:skyroot_hanging_sign" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/items/stone_buttons.json b/src/generated/resources/data/minecraft/tags/items/stone_buttons.json new file mode 100644 index 0000000000..64e37f45b0 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/items/stone_buttons.json @@ -0,0 +1,5 @@ +{ + "values": [ + "aether:holystone_button" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/items/trim_materials.json b/src/generated/resources/data/minecraft/tags/items/trim_materials.json new file mode 100644 index 0000000000..34aa797c4d --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/items/trim_materials.json @@ -0,0 +1,6 @@ +{ + "values": [ + "aether:zanite_gemstone", + "aether:enchanted_gravitite" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/items/trimmable_armor.json b/src/generated/resources/data/minecraft/tags/items/trimmable_armor.json new file mode 100644 index 0000000000..bf782c29c2 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/items/trimmable_armor.json @@ -0,0 +1,35 @@ +{ + "values": [ + "aether:zanite_helmet", + "aether:zanite_chestplate", + "aether:zanite_leggings", + "aether:zanite_boots", + "aether:zanite_gloves", + "aether:gravitite_helmet", + "aether:gravitite_chestplate", + "aether:gravitite_leggings", + "aether:gravitite_boots", + "aether:gravitite_gloves", + "aether:neptune_helmet", + "aether:neptune_chestplate", + "aether:neptune_leggings", + "aether:neptune_boots", + "aether:neptune_gloves", + "aether:phoenix_helmet", + "aether:phoenix_chestplate", + "aether:phoenix_leggings", + "aether:phoenix_boots", + "aether:phoenix_gloves", + "aether:obsidian_helmet", + "aether:obsidian_chestplate", + "aether:obsidian_leggings", + "aether:obsidian_boots", + "aether:obsidian_gloves", + "aether:leather_gloves", + "aether:iron_gloves", + "aether:golden_gloves", + "aether:diamond_gloves", + "aether:netherite_gloves", + "aether:chainmail_gloves" + ] +} \ No newline at end of file diff --git a/src/generated/resources/pack.mcmeta b/src/generated/resources/pack.mcmeta index d66c0a2011..976a441653 100644 --- a/src/generated/resources/pack.mcmeta +++ b/src/generated/resources/pack.mcmeta @@ -3,7 +3,6 @@ "description": { "translate": "pack.aether.mod.description" }, - "forge:server_data_pack_format": 12, - "pack_format": 13 + "pack_format": 15 } } \ No newline at end of file diff --git a/src/main/java/com/aetherteam/aether/Aether.java b/src/main/java/com/aetherteam/aether/Aether.java index 2631fb77f8..a7db8d5987 100644 --- a/src/main/java/com/aetherteam/aether/Aether.java +++ b/src/main/java/com/aetherteam/aether/Aether.java @@ -24,6 +24,7 @@ import com.aetherteam.aether.entity.ai.brain.sensing.AetherSensorTypes; import com.aetherteam.aether.inventory.AetherRecipeBookTypes; import com.aetherteam.aether.inventory.menu.AetherMenuTypes; +import com.aetherteam.aether.item.AetherCreativeTabs; import com.aetherteam.aether.item.AetherItems; import com.aetherteam.aether.loot.conditions.AetherLootConditions; import com.aetherteam.aether.loot.functions.AetherLootFunctions; @@ -51,7 +52,6 @@ import net.minecraft.data.PackOutput; import net.minecraft.data.metadata.PackMetadataGenerator; import net.minecraft.network.chat.Component; -import net.minecraft.resources.ResourceLocation; import net.minecraft.server.packs.PackType; import net.minecraft.server.packs.metadata.pack.PackMetadataSection; import net.minecraft.server.packs.repository.Pack; @@ -65,19 +65,16 @@ import net.minecraftforge.event.AddPackFindersEvent; import net.minecraftforge.eventbus.api.IEventBus; import net.minecraftforge.fml.DistExecutor; -import net.minecraftforge.fml.InterModComms; import net.minecraftforge.fml.ModList; import net.minecraftforge.fml.ModLoadingContext; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.config.ModConfig; import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; -import net.minecraftforge.fml.event.lifecycle.InterModEnqueueEvent; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; import net.minecraftforge.fml.loading.FMLPaths; import net.minecraftforge.registries.DeferredRegister; import net.minecraftforge.resource.PathPackResources; import org.slf4j.Logger; -import top.theillusivec4.curios.api.SlotTypeMessage; import java.nio.file.Path; import java.util.List; @@ -97,7 +94,6 @@ public Aether() { IEventBus modEventBus = FMLJavaModLoadingContext.get().getModEventBus(); modEventBus.addListener(this::commonSetup); - modEventBus.addListener(this::curiosSetup); modEventBus.addListener(this::dataSetup); modEventBus.addListener(this::packSetup); @@ -126,7 +122,8 @@ public Aether() { AetherGameEvents.GAME_EVENTS, AetherMoaTypes.MOA_TYPES, AetherSensorTypes.SENSOR_TYPES, - AetherMemoryModuleTypes.MEMORY_TYPES + AetherMemoryModuleTypes.MEMORY_TYPES, + AetherCreativeTabs.CREATIVE_MODE_TABS }; for (DeferredRegister register : registers) { @@ -173,25 +170,6 @@ public void commonSetup(FMLCommonSetupEvent event) { }); } - public void curiosSetup(InterModEnqueueEvent event) { - if (!AetherConfig.COMMON.use_curios_menu.get()) { - // All slots are marked with .hide() so they don't appear in the Curios GUI, as they are only added to the Aether's accessory menu which is done manually in its code. - InterModComms.sendTo("curios", SlotTypeMessage.REGISTER_TYPE, () -> new SlotTypeMessage.Builder("aether_pendant").icon(new ResourceLocation(Aether.MODID, "gui/slots/pendant")).hide().build()); - InterModComms.sendTo("curios", SlotTypeMessage.REGISTER_TYPE, () -> new SlotTypeMessage.Builder("aether_cape").icon(new ResourceLocation(Aether.MODID, "gui/slots/cape")).hide().build()); - InterModComms.sendTo("curios", SlotTypeMessage.REGISTER_TYPE, () -> new SlotTypeMessage.Builder("aether_ring").icon(new ResourceLocation(Aether.MODID, "gui/slots/ring")).size(2).hide().build()); - InterModComms.sendTo("curios", SlotTypeMessage.REGISTER_TYPE, () -> new SlotTypeMessage.Builder("aether_shield").icon(new ResourceLocation(Aether.MODID, "gui/slots/shield")).hide().build()); - InterModComms.sendTo("curios", SlotTypeMessage.REGISTER_TYPE, () -> new SlotTypeMessage.Builder("aether_gloves").icon(new ResourceLocation(Aether.MODID, "gui/slots/gloves")).hide().build()); - InterModComms.sendTo("curios", SlotTypeMessage.REGISTER_TYPE, () -> new SlotTypeMessage.Builder("aether_accessory").icon(new ResourceLocation(Aether.MODID, "gui/slots/misc")).size(2).hide().build()); - } else { - InterModComms.sendTo("curios", SlotTypeMessage.REGISTER_TYPE, () -> new SlotTypeMessage.Builder("necklace").build()); - InterModComms.sendTo("curios", SlotTypeMessage.REGISTER_TYPE, () -> new SlotTypeMessage.Builder("back").build()); - InterModComms.sendTo("curios", SlotTypeMessage.REGISTER_TYPE, () -> new SlotTypeMessage.Builder("ring").size(2).build()); - InterModComms.sendTo("curios", SlotTypeMessage.REGISTER_TYPE, () -> new SlotTypeMessage.Builder("body").build()); - InterModComms.sendTo("curios", SlotTypeMessage.REGISTER_TYPE, () -> new SlotTypeMessage.Builder("hands").build()); - InterModComms.sendTo("curios", SlotTypeMessage.REGISTER_TYPE, () -> new SlotTypeMessage.Builder("charm").size(2).build()); - } - } - public void dataSetup(GatherDataEvent event) { DataGenerator generator = event.getGenerator(); ExistingFileHelper fileHelper = event.getExistingFileHelper(); @@ -236,7 +214,8 @@ public void packSetup(AddPackFindersEvent event) { this.setupColorblindPack(event); // Data Packs - this.setupCuriosTagsPack(event); + this.setupAccessoriesPack(event); + this.setupCuriosOverridePack(event); this.setupTemporaryFreezingPack(event); this.setupRuinedPortalPack(event); } @@ -343,17 +322,42 @@ private void setupColorblindPack(AddPackFindersEvent event) { } /** - * A built-in data pack to empty the Aether's curio slot tags and use the default curio slot tags instead.

+ * A built-in data pack to set up the default slots for Curios.

+ * The pack is loaded and automatically applied if the {@link AetherConfig.Common#use_curios_menu} config isn't enabled. + */ + private void setupAccessoriesPack(AddPackFindersEvent event) { + if (event.getPackType() == PackType.SERVER_DATA && !AetherConfig.COMMON.use_curios_menu.get()) { + Path resourcePath = ModList.get().getModFileById(Aether.MODID).getFile().findResource("packs/accessories"); + PathPackResources pack = new PathPackResources(ModList.get().getModFileById(Aether.MODID).getFile().getFileName() + ":" + resourcePath, true, resourcePath); + PackMetadataSection metadata = new PackMetadataSection(Component.translatable("pack.aether.accessories.description"), SharedConstants.getCurrentVersion().getPackVersion(PackType.SERVER_DATA)); + event.addRepositorySource((source) -> + source.accept(Pack.create( + "builtin/aether_accessories", + Component.translatable("pack.aether.accessories.title"), + true, + (string) -> pack, + new Pack.Info(metadata.getDescription(), metadata.getPackFormat(PackType.SERVER_DATA), metadata.getPackFormat(PackType.CLIENT_RESOURCES), FeatureFlagSet.of(), pack.isHidden()), + PackType.SERVER_DATA, + Pack.Position.TOP, + false, + PackSource.BUILT_IN) + ) + ); + } + } + + /** + * A built-in data pack to empty the Aether's curio slot tags and use the default curio slot tags instead, as well as register the default Curios slots.

* The pack is loaded and automatically applied if the {@link AetherConfig.Common#use_curios_menu} config is enabled. */ - private void setupCuriosTagsPack(AddPackFindersEvent event) { + private void setupCuriosOverridePack(AddPackFindersEvent event) { if (event.getPackType() == PackType.SERVER_DATA && AetherConfig.COMMON.use_curios_menu.get()) { - Path resourcePath = ModList.get().getModFileById(Aether.MODID).getFile().findResource("packs/curios_tags"); + Path resourcePath = ModList.get().getModFileById(Aether.MODID).getFile().findResource("packs/curios_override"); PathPackResources pack = new PathPackResources(ModList.get().getModFileById(Aether.MODID).getFile().getFileName() + ":" + resourcePath, true, resourcePath); PackMetadataSection metadata = new PackMetadataSection(Component.translatable("pack.aether.curios.description"), SharedConstants.getCurrentVersion().getPackVersion(PackType.SERVER_DATA)); event.addRepositorySource((source) -> source.accept(Pack.create( - "builtin/aether_curios_tags", + "builtin/aether_curios_override", Component.translatable("pack.aether.curios.title"), true, (string) -> pack, diff --git a/src/main/java/com/aetherteam/aether/advancement/IncubationTrigger.java b/src/main/java/com/aetherteam/aether/advancement/IncubationTrigger.java index d5734f6bc4..08e106f0f8 100644 --- a/src/main/java/com/aetherteam/aether/advancement/IncubationTrigger.java +++ b/src/main/java/com/aetherteam/aether/advancement/IncubationTrigger.java @@ -20,9 +20,9 @@ public ResourceLocation getId() { } @Override - public IncubationTrigger.Instance createInstance(JsonObject json, EntityPredicate.Composite entity, DeserializationContext context) { + public IncubationTrigger.Instance createInstance(JsonObject json, ContextAwarePredicate predicate, DeserializationContext context) { ItemPredicate itemPredicate = ItemPredicate.fromJson(json.get("item")); - return new IncubationTrigger.Instance(entity, itemPredicate); + return new IncubationTrigger.Instance(predicate, itemPredicate); } public void trigger(ServerPlayer player, ItemStack stack) { @@ -32,13 +32,13 @@ public void trigger(ServerPlayer player, ItemStack stack) { public static class Instance extends AbstractCriterionTriggerInstance { private final ItemPredicate item; - public Instance(EntityPredicate.Composite entity, ItemPredicate item) { - super(IncubationTrigger.ID, entity); + public Instance(ContextAwarePredicate predicate, ItemPredicate item) { + super(IncubationTrigger.ID, predicate); this.item = item; } public static IncubationTrigger.Instance forItem(ItemPredicate item) { - return new IncubationTrigger.Instance(EntityPredicate.Composite.ANY, item); + return new IncubationTrigger.Instance(ContextAwarePredicate.ANY, item); } public boolean test(ItemStack stack) { diff --git a/src/main/java/com/aetherteam/aether/advancement/LoreTrigger.java b/src/main/java/com/aetherteam/aether/advancement/LoreTrigger.java index dc0a9fe73b..bfc1a3c558 100644 --- a/src/main/java/com/aetherteam/aether/advancement/LoreTrigger.java +++ b/src/main/java/com/aetherteam/aether/advancement/LoreTrigger.java @@ -21,9 +21,9 @@ public ResourceLocation getId() { } @Override - public LoreTrigger.Instance createInstance(JsonObject json, EntityPredicate.Composite entity, DeserializationContext context) { + protected Instance createInstance(JsonObject json, ContextAwarePredicate predicate, DeserializationContext context) { ItemPredicate itemPredicate = ItemPredicate.fromJson(json.get("item")); - return new LoreTrigger.Instance(entity, itemPredicate); + return new LoreTrigger.Instance(predicate, itemPredicate); } public void trigger(ServerPlayer player, ItemStack stack) { @@ -33,13 +33,13 @@ public void trigger(ServerPlayer player, ItemStack stack) { public static class Instance extends AbstractCriterionTriggerInstance { private final ItemPredicate item; - public Instance(EntityPredicate.Composite entity, ItemPredicate item) { - super(LoreTrigger.ID, entity); + public Instance(ContextAwarePredicate predicate, ItemPredicate item) { + super(LoreTrigger.ID, predicate); this.item = item; } public static LoreTrigger.Instance forItem(ItemPredicate item) { - return new LoreTrigger.Instance(EntityPredicate.Composite.ANY, item); + return new LoreTrigger.Instance(ContextAwarePredicate.ANY, item); } public static LoreTrigger.Instance forItem(ItemLike item) { diff --git a/src/main/java/com/aetherteam/aether/block/AetherBlocks.java b/src/main/java/com/aetherteam/aether/block/AetherBlocks.java index e871a44542..01aa38767b 100644 --- a/src/main/java/com/aetherteam/aether/block/AetherBlocks.java +++ b/src/main/java/com/aetherteam/aether/block/AetherBlocks.java @@ -33,9 +33,10 @@ import net.minecraft.world.level.block.state.BlockBehaviour; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.properties.BlockSetType; +import net.minecraft.world.level.block.state.properties.NoteBlockInstrument; import net.minecraft.world.level.block.state.properties.WoodType; -import net.minecraft.world.level.material.Material; -import net.minecraft.world.level.material.MaterialColor; +import net.minecraft.world.level.material.MapColor; +import net.minecraft.world.level.material.PushReaction; import net.minecraftforge.common.ForgeMod; import net.minecraftforge.fluids.FluidInteractionRegistry; import net.minecraftforge.registries.DeferredRegister; @@ -51,30 +52,30 @@ public class AetherBlocks { public static final RegistryObject AETHER_PORTAL = BLOCKS.register("aether_portal", () -> new AetherPortalBlock(Block.Properties.copy(Blocks.NETHER_PORTAL))); - public static final RegistryObject AETHER_GRASS_BLOCK = register("aether_grass_block", () -> new AetherGrassBlock(Block.Properties.of(Material.GRASS, MaterialColor.WARPED_WART_BLOCK).randomTicks().strength(0.2F).sound(SoundType.GRASS))); - public static final RegistryObject ENCHANTED_AETHER_GRASS_BLOCK = register("enchanted_aether_grass_block", () -> new EnchantedAetherGrassBlock(Block.Properties.of(Material.GRASS, MaterialColor.GOLD).randomTicks().strength(0.2F).sound(SoundType.GRASS))); - public static final RegistryObject AETHER_DIRT = register("aether_dirt", () -> new AetherDoubleDropBlock(Block.Properties.of(Material.DIRT, MaterialColor.TERRACOTTA_CYAN).strength(0.2F).sound(SoundType.GRAVEL))); - public static final RegistryObject QUICKSOIL = register("quicksoil", () -> new QuicksoilBlock(Block.Properties.of(Material.SAND, MaterialColor.COLOR_YELLOW).strength(0.5F).friction(1.1F).sound(SoundType.SAND))); - public static final RegistryObject HOLYSTONE = register("holystone", () -> new AetherDoubleDropBlock(Block.Properties.of(Material.STONE, MaterialColor.WOOL).strength(0.5F).requiresCorrectToolForDrops())); + public static final RegistryObject AETHER_GRASS_BLOCK = register("aether_grass_block", () -> new AetherGrassBlock(Block.Properties.of().mapColor(MapColor.WARPED_WART_BLOCK).randomTicks().strength(0.2F).sound(SoundType.GRASS))); + public static final RegistryObject ENCHANTED_AETHER_GRASS_BLOCK = register("enchanted_aether_grass_block", () -> new EnchantedAetherGrassBlock(Block.Properties.of().mapColor(MapColor.GOLD).randomTicks().strength(0.2F).sound(SoundType.GRASS))); + public static final RegistryObject AETHER_DIRT = register("aether_dirt", () -> new AetherDoubleDropBlock(Block.Properties.of().mapColor(MapColor.TERRACOTTA_CYAN).strength(0.2F).sound(SoundType.GRAVEL))); + public static final RegistryObject QUICKSOIL = register("quicksoil", () -> new QuicksoilBlock(Block.Properties.of().mapColor(MapColor.COLOR_YELLOW).instrument(NoteBlockInstrument.SNARE).strength(0.5F).friction(1.1F).sound(SoundType.SAND))); + public static final RegistryObject HOLYSTONE = register("holystone", () -> new AetherDoubleDropBlock(Block.Properties.of().mapColor(MapColor.WOOL).instrument(NoteBlockInstrument.BASEDRUM).strength(0.5F).requiresCorrectToolForDrops())); public static final RegistryObject MOSSY_HOLYSTONE = register("mossy_holystone", () -> new AetherDoubleDropBlock(Block.Properties.copy(AetherBlocks.HOLYSTONE.get()))); - public static final RegistryObject AETHER_FARMLAND = register("aether_farmland", () -> new AetherFarmBlock(Block.Properties.of(Material.DIRT, MaterialColor.TERRACOTTA_CYAN).randomTicks().strength(0.2F).sound(SoundType.GRAVEL).isViewBlocking(AetherBlocks::always).isSuffocating(AetherBlocks::always))); - public static final RegistryObject AETHER_DIRT_PATH = register("aether_dirt_path", () -> new AetherDirtPathBlock(Block.Properties.of(Material.DIRT, MaterialColor.TERRACOTTA_CYAN).strength(0.2F).sound(SoundType.GRASS).isViewBlocking(AetherBlocks::always).isSuffocating(AetherBlocks::always))); + public static final RegistryObject AETHER_FARMLAND = register("aether_farmland", () -> new AetherFarmBlock(Block.Properties.of().mapColor(MapColor.TERRACOTTA_CYAN).randomTicks().strength(0.2F).sound(SoundType.GRAVEL).isViewBlocking(AetherBlocks::always).isSuffocating(AetherBlocks::always))); + public static final RegistryObject AETHER_DIRT_PATH = register("aether_dirt_path", () -> new AetherDirtPathBlock(Block.Properties.of().mapColor(MapColor.TERRACOTTA_CYAN).strength(0.2F).sound(SoundType.GRASS).isViewBlocking(AetherBlocks::always).isSuffocating(AetherBlocks::always))); - public static final RegistryObject COLD_AERCLOUD = register("cold_aercloud", () -> new AercloudBlock(Block.Properties.of(Material.ICE, MaterialColor.SNOW).strength(0.3F).sound(SoundType.WOOL).noOcclusion().dynamicShape().isRedstoneConductor(AetherBlocks::never).isSuffocating(AetherBlocks::never).isViewBlocking(AetherBlocks::never))); - public static final RegistryObject BLUE_AERCLOUD = register("blue_aercloud", () -> new BlueAercloudBlock(Block.Properties.of(Material.ICE, MaterialColor.COLOR_LIGHT_BLUE).strength(0.3F).sound(SoundType.WOOL).noOcclusion().dynamicShape().isRedstoneConductor(AetherBlocks::never).isSuffocating(AetherBlocks::never).isViewBlocking(AetherBlocks::never))); - public static final RegistryObject GOLDEN_AERCLOUD = register("golden_aercloud", () -> new AercloudBlock(Block.Properties.of(Material.ICE, MaterialColor.COLOR_YELLOW).strength(0.3F).sound(SoundType.WOOL).noOcclusion().dynamicShape().isRedstoneConductor(AetherBlocks::never).isSuffocating(AetherBlocks::never).isViewBlocking(AetherBlocks::never))); + public static final RegistryObject COLD_AERCLOUD = register("cold_aercloud", () -> new AercloudBlock(Block.Properties.of().mapColor(MapColor.SNOW).strength(0.3F).sound(SoundType.WOOL).noOcclusion().dynamicShape().isRedstoneConductor(AetherBlocks::never).isSuffocating(AetherBlocks::never).isViewBlocking(AetherBlocks::never))); + public static final RegistryObject BLUE_AERCLOUD = register("blue_aercloud", () -> new BlueAercloudBlock(Block.Properties.of().mapColor(MapColor.COLOR_LIGHT_BLUE).strength(0.3F).sound(SoundType.WOOL).noOcclusion().dynamicShape().isRedstoneConductor(AetherBlocks::never).isSuffocating(AetherBlocks::never).isViewBlocking(AetherBlocks::never))); + public static final RegistryObject GOLDEN_AERCLOUD = register("golden_aercloud", () -> new AercloudBlock(Block.Properties.of().mapColor(MapColor.COLOR_YELLOW).strength(0.3F).sound(SoundType.WOOL).noOcclusion().dynamicShape().isRedstoneConductor(AetherBlocks::never).isSuffocating(AetherBlocks::never).isViewBlocking(AetherBlocks::never))); - public static final RegistryObject ICESTONE = register("icestone", () -> new IcestoneBlock(Block.Properties.of(Material.STONE, MaterialColor.ICE).strength(0.5F).randomTicks().sound(SoundType.GLASS).requiresCorrectToolForDrops())); - public static final RegistryObject AMBROSIUM_ORE = register("ambrosium_ore", () -> new AetherDoubleDropsOreBlock(Block.Properties.of(Material.STONE, MaterialColor.WOOL).strength(3.0F).requiresCorrectToolForDrops(), UniformInt.of(0, 2))); - public static final RegistryObject ZANITE_ORE = register("zanite_ore", () -> new DropExperienceBlock(Block.Properties.of(Material.STONE, MaterialColor.WOOL).strength(3.0F).requiresCorrectToolForDrops(), UniformInt.of(3, 5))); - public static final RegistryObject GRAVITITE_ORE = register("gravitite_ore", () -> new FloatingBlock(false, Block.Properties.of(Material.STONE, MaterialColor.WOOL).strength(3.0F).randomTicks().requiresCorrectToolForDrops())); + public static final RegistryObject ICESTONE = register("icestone", () -> new IcestoneBlock(Block.Properties.of().mapColor(MapColor.ICE).instrument(NoteBlockInstrument.BASEDRUM).strength(0.5F).randomTicks().sound(SoundType.GLASS).requiresCorrectToolForDrops())); + public static final RegistryObject AMBROSIUM_ORE = register("ambrosium_ore", () -> new AetherDoubleDropsOreBlock(Block.Properties.of().mapColor(MapColor.WOOL).instrument(NoteBlockInstrument.BASEDRUM).strength(3.0F).requiresCorrectToolForDrops(), UniformInt.of(0, 2))); + public static final RegistryObject ZANITE_ORE = register("zanite_ore", () -> new DropExperienceBlock(Block.Properties.of().mapColor(MapColor.WOOL).instrument(NoteBlockInstrument.BASEDRUM).strength(3.0F).requiresCorrectToolForDrops(), UniformInt.of(3, 5))); + public static final RegistryObject GRAVITITE_ORE = register("gravitite_ore", () -> new FloatingBlock(false, Block.Properties.of().mapColor(MapColor.WOOL).instrument(NoteBlockInstrument.BASEDRUM).strength(3.0F).randomTicks().requiresCorrectToolForDrops())); - public static final RegistryObject SKYROOT_LEAVES = register("skyroot_leaves", () -> new AetherDoubleDropsLeaves(Block.Properties.of(Material.LEAVES, MaterialColor.GRASS).strength(0.2F).randomTicks().sound(SoundType.GRASS).noOcclusion().isValidSpawn(AetherBlocks::ocelotOrParrot).isSuffocating(AetherBlocks::never).isViewBlocking(AetherBlocks::never))); - public static final RegistryObject GOLDEN_OAK_LEAVES = register("golden_oak_leaves", () -> new LeavesWithParticlesBlock(AetherParticleTypes.GOLDEN_OAK_LEAVES, Block.Properties.of(Material.LEAVES, MaterialColor.GOLD).strength(0.2F).randomTicks().sound(SoundType.GRASS).noOcclusion().isValidSpawn(AetherBlocks::ocelotOrParrot).isSuffocating(AetherBlocks::never).isViewBlocking(AetherBlocks::never))); - public static final RegistryObject CRYSTAL_LEAVES = register("crystal_leaves", () -> new LeavesWithParticlesBlock(AetherParticleTypes.CRYSTAL_LEAVES, Block.Properties.of(Material.LEAVES, MaterialColor.DIAMOND).strength(0.2F).randomTicks().sound(SoundType.GRASS).noOcclusion().isValidSpawn(AetherBlocks::ocelotOrParrot).isSuffocating(AetherBlocks::never).isViewBlocking(AetherBlocks::never))); - public static final RegistryObject CRYSTAL_FRUIT_LEAVES = register("crystal_fruit_leaves", () -> new LeavesWithParticlesBlock(AetherParticleTypes.CRYSTAL_LEAVES, Block.Properties.of(Material.LEAVES, MaterialColor.DIAMOND).strength(0.2F).randomTicks().sound(SoundType.GRASS).noOcclusion().isValidSpawn(AetherBlocks::ocelotOrParrot).isSuffocating(AetherBlocks::never).isViewBlocking(AetherBlocks::never))); - public static final RegistryObject HOLIDAY_LEAVES = register("holiday_leaves", () -> new LeavesWithParticlesBlock(AetherParticleTypes.HOLIDAY_LEAVES, Block.Properties.of(Material.LEAVES, MaterialColor.COLOR_PURPLE).strength(0.2F).randomTicks().sound(SoundType.GRASS).noOcclusion().isValidSpawn(AetherBlocks::ocelotOrParrot).isSuffocating(AetherBlocks::never).isViewBlocking(AetherBlocks::never))); - public static final RegistryObject DECORATED_HOLIDAY_LEAVES = register("decorated_holiday_leaves", () -> new LeavesWithParticlesBlock(AetherParticleTypes.HOLIDAY_LEAVES, Block.Properties.of(Material.LEAVES, MaterialColor.COLOR_PURPLE).strength(0.2F).randomTicks().sound(SoundType.GRASS).noOcclusion().isValidSpawn(AetherBlocks::ocelotOrParrot).isSuffocating(AetherBlocks::never).isViewBlocking(AetherBlocks::never))); + public static final RegistryObject SKYROOT_LEAVES = register("skyroot_leaves", () -> new AetherDoubleDropsLeaves(Block.Properties.of().mapColor(MapColor.GRASS).ignitedByLava().pushReaction(PushReaction.DESTROY).strength(0.2F).randomTicks().sound(SoundType.GRASS).noOcclusion().isValidSpawn(AetherBlocks::ocelotOrParrot).isRedstoneConductor(AetherBlocks::never).isSuffocating(AetherBlocks::never).isViewBlocking(AetherBlocks::never))); + public static final RegistryObject GOLDEN_OAK_LEAVES = register("golden_oak_leaves", () -> new LeavesWithParticlesBlock(AetherParticleTypes.GOLDEN_OAK_LEAVES, Block.Properties.of().mapColor(MapColor.GOLD).ignitedByLava().pushReaction(PushReaction.DESTROY).strength(0.2F).randomTicks().sound(SoundType.GRASS).noOcclusion().isValidSpawn(AetherBlocks::ocelotOrParrot).isRedstoneConductor(AetherBlocks::never).isSuffocating(AetherBlocks::never).isViewBlocking(AetherBlocks::never))); + public static final RegistryObject CRYSTAL_LEAVES = register("crystal_leaves", () -> new LeavesWithParticlesBlock(AetherParticleTypes.CRYSTAL_LEAVES, Block.Properties.of().mapColor(MapColor.DIAMOND).ignitedByLava().pushReaction(PushReaction.DESTROY).strength(0.2F).randomTicks().sound(SoundType.GRASS).noOcclusion().isValidSpawn(AetherBlocks::ocelotOrParrot).isRedstoneConductor(AetherBlocks::never).isSuffocating(AetherBlocks::never).isViewBlocking(AetherBlocks::never))); + public static final RegistryObject CRYSTAL_FRUIT_LEAVES = register("crystal_fruit_leaves", () -> new LeavesWithParticlesBlock(AetherParticleTypes.CRYSTAL_LEAVES, Block.Properties.of().mapColor(MapColor.DIAMOND).ignitedByLava().pushReaction(PushReaction.DESTROY).strength(0.2F).randomTicks().sound(SoundType.GRASS).noOcclusion().isValidSpawn(AetherBlocks::ocelotOrParrot).isRedstoneConductor(AetherBlocks::never).isSuffocating(AetherBlocks::never).isViewBlocking(AetherBlocks::never))); + public static final RegistryObject HOLIDAY_LEAVES = register("holiday_leaves", () -> new LeavesWithParticlesBlock(AetherParticleTypes.HOLIDAY_LEAVES, Block.Properties.of().mapColor(MapColor.COLOR_PURPLE).ignitedByLava().pushReaction(PushReaction.DESTROY).strength(0.2F).randomTicks().sound(SoundType.GRASS).noOcclusion().isValidSpawn(AetherBlocks::ocelotOrParrot).isRedstoneConductor(AetherBlocks::never).isSuffocating(AetherBlocks::never).isViewBlocking(AetherBlocks::never))); + public static final RegistryObject DECORATED_HOLIDAY_LEAVES = register("decorated_holiday_leaves", () -> new LeavesWithParticlesBlock(AetherParticleTypes.HOLIDAY_LEAVES, Block.Properties.of().mapColor(MapColor.COLOR_PURPLE).ignitedByLava().pushReaction(PushReaction.DESTROY).strength(0.2F).randomTicks().sound(SoundType.GRASS).noOcclusion().isValidSpawn(AetherBlocks::ocelotOrParrot).isRedstoneConductor(AetherBlocks::never).isSuffocating(AetherBlocks::never).isViewBlocking(AetherBlocks::never))); public static final RegistryObject SKYROOT_LOG = register("skyroot_log", () -> new AetherLogBlock(Block.Properties.copy(Blocks.OAK_LOG))); public static final RegistryObject GOLDEN_OAK_LOG = register("golden_oak_log", () -> new AetherLogBlock(Block.Properties.copy(Blocks.OAK_LOG))); @@ -84,27 +85,29 @@ public class AetherBlocks { public static final RegistryObject STRIPPED_SKYROOT_WOOD = register("stripped_skyroot_wood", () -> new RotatedPillarBlock(Block.Properties.copy(Blocks.STRIPPED_OAK_WOOD))); public static final RegistryObject SKYROOT_PLANKS = register("skyroot_planks", () -> new Block(Block.Properties.copy(Blocks.OAK_PLANKS))); - public static final RegistryObject HOLYSTONE_BRICKS = register("holystone_bricks", () -> new Block(Block.Properties.of(Material.STONE, MaterialColor.WOOL).strength(2.0F, 10.0F).requiresCorrectToolForDrops())); - public static final RegistryObject QUICKSOIL_GLASS = register("quicksoil_glass", () -> new QuicksoilGlassBlock(Block.Properties.of(Material.GLASS, MaterialColor.COLOR_YELLOW).strength(0.2F).friction(1.1F).lightLevel(AetherBlocks::lightLevel11).sound(SoundType.GLASS).noOcclusion().isValidSpawn(AetherBlocks::never).isRedstoneConductor(AetherBlocks::never).isSuffocating(AetherBlocks::never).isViewBlocking(AetherBlocks::never))); - public static final RegistryObject QUICKSOIL_GLASS_PANE = register("quicksoil_glass_pane", () -> new QuicksoilGlassPaneBlock(Block.Properties.of(Material.GLASS, MaterialColor.COLOR_YELLOW).strength(0.2F).friction(1.1F).lightLevel(AetherBlocks::lightLevel11).sound(SoundType.GLASS).noOcclusion())); - public static final RegistryObject AEROGEL = register("aerogel", () -> new AerogelBlock(Block.Properties.of(Material.STONE, MaterialColor.DIAMOND).strength(1.0F, 2000.0F).sound(SoundType.METAL).noOcclusion().requiresCorrectToolForDrops().isViewBlocking(AetherBlocks::never))); + public static final RegistryObject HOLYSTONE_BRICKS = register("holystone_bricks", () -> new Block(Block.Properties.of().mapColor(MapColor.WOOL).instrument(NoteBlockInstrument.BASEDRUM).strength(2.0F, 10.0F).requiresCorrectToolForDrops())); + public static final RegistryObject QUICKSOIL_GLASS = register("quicksoil_glass", () -> new QuicksoilGlassBlock(Block.Properties.of().mapColor(MapColor.COLOR_YELLOW).instrument(NoteBlockInstrument.HAT).strength(0.2F).friction(1.1F).lightLevel(AetherBlocks::lightLevel11).sound(SoundType.GLASS).noOcclusion().isValidSpawn(AetherBlocks::never).isRedstoneConductor(AetherBlocks::never).isSuffocating(AetherBlocks::never).isViewBlocking(AetherBlocks::never))); + public static final RegistryObject QUICKSOIL_GLASS_PANE = register("quicksoil_glass_pane", () -> new QuicksoilGlassPaneBlock(Block.Properties.of().mapColor(MapColor.COLOR_YELLOW).instrument(NoteBlockInstrument.HAT).strength(0.2F).friction(1.1F).lightLevel(AetherBlocks::lightLevel11).sound(SoundType.GLASS).noOcclusion())); + public static final RegistryObject AEROGEL = register("aerogel", () -> new AerogelBlock(Block.Properties.of().mapColor(MapColor.DIAMOND).instrument(NoteBlockInstrument.BASEDRUM).strength(1.0F, 2000.0F).sound(SoundType.METAL).noOcclusion().requiresCorrectToolForDrops().isViewBlocking(AetherBlocks::never))); - public static final RegistryObject AMBROSIUM_BLOCK = register("ambrosium_block", () -> new Block(Block.Properties.of(Material.METAL, MaterialColor.COLOR_YELLOW).strength(5.0F, 6.0F).requiresCorrectToolForDrops().sound(SoundType.METAL))); - public static final RegistryObject ZANITE_BLOCK = register("zanite_block", () -> new Block(Block.Properties.of(Material.METAL, MaterialColor.COLOR_PURPLE).strength(5.0F, 6.0F).requiresCorrectToolForDrops().sound(SoundType.METAL))); - public static final RegistryObject ENCHANTED_GRAVITITE = register("enchanted_gravitite", () -> new FloatingBlock(true, Block.Properties.of(Material.METAL, MaterialColor.COLOR_PINK).strength(5.0F, 6.0F).requiresCorrectToolForDrops().sound(SoundType.METAL))); + public static final RegistryObject AMBROSIUM_BLOCK = register("ambrosium_block", () -> new Block(Block.Properties.of().mapColor(MapColor.COLOR_YELLOW).strength(5.0F, 6.0F).requiresCorrectToolForDrops().sound(SoundType.METAL))); + public static final RegistryObject ZANITE_BLOCK = register("zanite_block", () -> new Block(Block.Properties.of().mapColor(MapColor.COLOR_PURPLE).strength(5.0F, 6.0F).requiresCorrectToolForDrops().sound(SoundType.METAL))); + public static final RegistryObject ENCHANTED_GRAVITITE = register("enchanted_gravitite", () -> new FloatingBlock(true, Block.Properties.of().mapColor(MapColor.COLOR_PINK).strength(5.0F, 6.0F).requiresCorrectToolForDrops().sound(SoundType.METAL))); - public static final RegistryObject ALTAR = register("altar", () -> new AltarBlock(Block.Properties.of(Material.STONE, MaterialColor.WOOD).strength(2.5F))); - public static final RegistryObject FREEZER = register("freezer", () -> new FreezerBlock(Block.Properties.of(Material.STONE, MaterialColor.WOOD).strength(2.0F))); - public static final RegistryObject INCUBATOR = register("incubator", () -> new IncubatorBlock(Block.Properties.of(Material.STONE, MaterialColor.WOOD).strength(2.0F))); + public static final RegistryObject ALTAR = register("altar", () -> new AltarBlock(Block.Properties.of().mapColor(MapColor.WOOD).instrument(NoteBlockInstrument.BASEDRUM).strength(2.5F))); + public static final RegistryObject FREEZER = register("freezer", () -> new FreezerBlock(Block.Properties.of().mapColor(MapColor.WOOD).instrument(NoteBlockInstrument.BASEDRUM).strength(2.0F))); + public static final RegistryObject INCUBATOR = register("incubator", () -> new IncubatorBlock(Block.Properties.of().mapColor(MapColor.WOOD).instrument(NoteBlockInstrument.BASEDRUM).strength(2.0F))); public static final RegistryObject AMBROSIUM_WALL_TORCH = BLOCKS.register("ambrosium_wall_torch", () -> new WallTorchBlock(Block.Properties.copy(Blocks.WALL_TORCH), ParticleTypes.SMOKE)); public static final RegistryObject AMBROSIUM_TORCH = register("ambrosium_torch", () -> new TorchBlock(Block.Properties.copy(Blocks.TORCH), ParticleTypes.SMOKE)); - public static final RegistryObject SKYROOT_SIGN = register("skyroot_sign", () -> new SkyrootSignBlock(Block.Properties.of(Material.WOOD, MaterialColor.SAND).noCollission().strength(1.0F).sound(SoundType.WOOD), AetherWoodTypes.SKYROOT)); - public static final RegistryObject SKYROOT_WALL_SIGN = BLOCKS.register("skyroot_wall_sign", () -> new SkyrootWallSignBlock(Block.Properties.of(Material.WOOD, MaterialColor.SAND).noCollission().strength(1.0F).sound(SoundType.WOOD).lootFrom(SKYROOT_SIGN), AetherWoodTypes.SKYROOT)); + public static final RegistryObject SKYROOT_SIGN = register("skyroot_sign", () -> new SkyrootSignBlock(Block.Properties.of().mapColor(MapColor.SAND).forceSolidOn().ignitedByLava().instrument(NoteBlockInstrument.BASS).noCollission().strength(1.0F).sound(SoundType.WOOD), AetherWoodTypes.SKYROOT)); + public static final RegistryObject SKYROOT_WALL_SIGN = BLOCKS.register("skyroot_wall_sign", () -> new SkyrootWallSignBlock(Block.Properties.of().mapColor(MapColor.SAND).forceSolidOn().ignitedByLava().instrument(NoteBlockInstrument.BASS).noCollission().strength(1.0F).sound(SoundType.WOOD).lootFrom(SKYROOT_SIGN), AetherWoodTypes.SKYROOT)); + public static final RegistryObject SKYROOT_HANGING_SIGN = register("skyroot_hanging_sign", () -> new SkyrootCeilingHangingSignBlock(BlockBehaviour.Properties.of().mapColor(Blocks.OAK_LOG.defaultMapColor()).forceSolidOn().instrument(NoteBlockInstrument.BASS).noCollission().strength(1.0F).ignitedByLava(), AetherWoodTypes.SKYROOT)); + public static final RegistryObject SKYROOT_WALL_HANGING_SIGN = BLOCKS.register("skyroot_wall_hanging_sign", () -> new SkyrootWallHangingSignBlock(BlockBehaviour.Properties.of().mapColor(Blocks.OAK_LOG.defaultMapColor()).forceSolidOn().instrument(NoteBlockInstrument.BASS).noCollission().strength(1.0F).ignitedByLava(), AetherWoodTypes.SKYROOT)); - public static final RegistryObject BERRY_BUSH = register("berry_bush", () -> new BerryBushBlock(Block.Properties.of(Material.PLANT, MaterialColor.GRASS).strength(0.2F).sound(SoundType.GRASS).noOcclusion().isValidSpawn(AetherBlocks::ocelotOrParrot).isSuffocating(AetherBlocks::never).isViewBlocking(AetherBlocks::never))); - public static final RegistryObject BERRY_BUSH_STEM = register("berry_bush_stem", () -> new BerryBushStemBlock(Block.Properties.of(Material.PLANT, MaterialColor.GRASS).strength(0.2F).sound(SoundType.GRASS).noCollission())); + public static final RegistryObject BERRY_BUSH = register("berry_bush", () -> new BerryBushBlock(Block.Properties.of().mapColor(MapColor.GRASS).pushReaction(PushReaction.DESTROY).strength(0.2F).sound(SoundType.GRASS).noOcclusion().isValidSpawn(AetherBlocks::ocelotOrParrot).isRedstoneConductor(AetherBlocks::never).isSuffocating(AetherBlocks::never).isViewBlocking(AetherBlocks::never))); + public static final RegistryObject BERRY_BUSH_STEM = register("berry_bush_stem", () -> new BerryBushStemBlock(Block.Properties.of().mapColor(MapColor.GRASS).pushReaction(PushReaction.DESTROY).strength(0.2F).sound(SoundType.GRASS).noCollission())); public static final RegistryObject POTTED_BERRY_BUSH = BLOCKS.register("potted_berry_bush", () -> new FlowerPotBlock(() -> (FlowerPotBlock) Blocks.FLOWER_POT, BERRY_BUSH, Block.Properties.copy(Blocks.FLOWER_POT))); public static final RegistryObject POTTED_BERRY_BUSH_STEM = BLOCKS.register("potted_berry_bush_stem", () -> new FlowerPotBlock(() -> (FlowerPotBlock) Blocks.FLOWER_POT, BERRY_BUSH_STEM, Block.Properties.copy(Blocks.FLOWER_POT))); @@ -118,18 +121,18 @@ public class AetherBlocks { public static final RegistryObject POTTED_SKYROOT_SAPLING = BLOCKS.register("potted_skyroot_sapling", () -> new FlowerPotBlock(() -> (FlowerPotBlock) Blocks.FLOWER_POT, SKYROOT_SAPLING, Block.Properties.copy(Blocks.FLOWER_POT))); public static final RegistryObject POTTED_GOLDEN_OAK_SAPLING = BLOCKS.register("potted_golden_oak_sapling", () -> new FlowerPotBlock(() -> (FlowerPotBlock) Blocks.FLOWER_POT, GOLDEN_OAK_SAPLING, Block.Properties.copy(Blocks.FLOWER_POT))); - public static final RegistryObject CARVED_STONE = register("carved_stone", () -> new Block(Block.Properties.of(Material.STONE).strength(0.5F, 6.0F).requiresCorrectToolForDrops())); + public static final RegistryObject CARVED_STONE = register("carved_stone", () -> new Block(Block.Properties.of().mapColor(MapColor.STONE).instrument(NoteBlockInstrument.BASEDRUM).strength(0.5F, 6.0F).requiresCorrectToolForDrops())); public static final RegistryObject SENTRY_STONE = register("sentry_stone", () -> new Block(Block.Properties.copy(CARVED_STONE.get()).lightLevel(AetherBlocks::lightLevel11))); - public static final RegistryObject ANGELIC_STONE = register("angelic_stone", () -> new Block(Block.Properties.of(Material.STONE, MaterialColor.SAND).strength(0.5F, 6.0F).requiresCorrectToolForDrops())); + public static final RegistryObject ANGELIC_STONE = register("angelic_stone", () -> new Block(Block.Properties.of().mapColor(MapColor.SAND).instrument(NoteBlockInstrument.BASEDRUM).strength(0.5F, 6.0F).requiresCorrectToolForDrops())); public static final RegistryObject LIGHT_ANGELIC_STONE = register("light_angelic_stone", () -> new Block(Block.Properties.copy(ANGELIC_STONE.get()).lightLevel(AetherBlocks::lightLevel11))); - public static final RegistryObject HELLFIRE_STONE = register("hellfire_stone", () -> new Block(Block.Properties.of(Material.STONE, MaterialColor.NETHER).strength(0.5F, 6.0F).requiresCorrectToolForDrops())); + public static final RegistryObject HELLFIRE_STONE = register("hellfire_stone", () -> new Block(Block.Properties.of().mapColor(MapColor.NETHER).instrument(NoteBlockInstrument.BASEDRUM).strength(0.5F, 6.0F).requiresCorrectToolForDrops())); public static final RegistryObject LIGHT_HELLFIRE_STONE = register("light_hellfire_stone", () -> new Block(Block.Properties.copy(HELLFIRE_STONE.get()).lightLevel(AetherBlocks::lightLevel11))); - public static final RegistryObject LOCKED_CARVED_STONE = register("locked_carved_stone", () -> new Block(Block.Properties.of(Material.STONE).strength(-1.0F, 3600000.0F))); + public static final RegistryObject LOCKED_CARVED_STONE = register("locked_carved_stone", () -> new Block(Block.Properties.of().mapColor(MapColor.STONE).instrument(NoteBlockInstrument.BASEDRUM).strength(-1.0F, 3600000.0F))); public static final RegistryObject LOCKED_SENTRY_STONE = register("locked_sentry_stone", () -> new Block(Block.Properties.copy(LOCKED_CARVED_STONE.get()).lightLevel(AetherBlocks::lightLevel11))); - public static final RegistryObject LOCKED_ANGELIC_STONE = register("locked_angelic_stone", () -> new Block(Block.Properties.of(Material.STONE, MaterialColor.SAND).strength(-1.0F, 3600000.0F))); + public static final RegistryObject LOCKED_ANGELIC_STONE = register("locked_angelic_stone", () -> new Block(Block.Properties.of().mapColor(MapColor.SAND).instrument(NoteBlockInstrument.BASEDRUM).strength(-1.0F, 3600000.0F))); public static final RegistryObject LOCKED_LIGHT_ANGELIC_STONE = register("locked_light_angelic_stone", () -> new Block(Block.Properties.copy(LOCKED_ANGELIC_STONE.get()).lightLevel(AetherBlocks::lightLevel11))); - public static final RegistryObject LOCKED_HELLFIRE_STONE = register("locked_hellfire_stone", () -> new Block(Block.Properties.of(Material.STONE, MaterialColor.NETHER).strength(-1.0F, 3600000.0F))); + public static final RegistryObject LOCKED_HELLFIRE_STONE = register("locked_hellfire_stone", () -> new Block(Block.Properties.of().mapColor(MapColor.NETHER).instrument(NoteBlockInstrument.BASEDRUM).strength(-1.0F, 3600000.0F))); public static final RegistryObject LOCKED_LIGHT_HELLFIRE_STONE = register("locked_light_hellfire_stone", () -> new Block(Block.Properties.copy(LOCKED_HELLFIRE_STONE.get()).lightLevel(AetherBlocks::lightLevel11))); public static final RegistryObject TRAPPED_CARVED_STONE = register("trapped_carved_stone", () -> new TrappedBlock(AetherEntityTypes.SENTRY::get, () -> CARVED_STONE.get().defaultBlockState(), Block.Properties.copy(CARVED_STONE.get()))); @@ -154,15 +157,15 @@ public class AetherBlocks { public static final RegistryObject TREASURE_DOORWAY_LIGHT_HELLFIRE_STONE = register("treasure_doorway_light_hellfire_stone", () -> new TreasureDoorwayBlock(BlockBehaviour.Properties.copy(LOCKED_LIGHT_HELLFIRE_STONE.get()))); public static final RegistryObject CHEST_MIMIC = register("chest_mimic", () -> new ChestMimicBlock(Block.Properties.copy(Blocks.CHEST))); - public static final RegistryObject TREASURE_CHEST = register("treasure_chest", () -> new TreasureChestBlock(Block.Properties.of(Material.STONE).strength(-1.0F, 3600000.0F).requiresCorrectToolForDrops())); + public static final RegistryObject TREASURE_CHEST = register("treasure_chest", () -> new TreasureChestBlock(Block.Properties.of().mapColor(MapColor.STONE).instrument(NoteBlockInstrument.BASEDRUM).strength(-1.0F, 3600000.0F).requiresCorrectToolForDrops())); public static final RegistryObject PILLAR = register("pillar", - () -> new RotatedPillarBlock(Block.Properties.of(Material.STONE, MaterialColor.QUARTZ).strength(0.5F).sound(SoundType.METAL).requiresCorrectToolForDrops())); + () -> new RotatedPillarBlock(Block.Properties.of().mapColor(MapColor.QUARTZ).instrument(NoteBlockInstrument.BASEDRUM).strength(0.5F).sound(SoundType.METAL).requiresCorrectToolForDrops())); public static final RegistryObject PILLAR_TOP = register("pillar_top", - () -> new FacingPillarBlock(Block.Properties.of(Material.STONE, MaterialColor.QUARTZ).strength(0.5F).sound(SoundType.METAL).requiresCorrectToolForDrops())); + () -> new FacingPillarBlock(Block.Properties.of().mapColor(MapColor.QUARTZ).instrument(NoteBlockInstrument.BASEDRUM).strength(0.5F).sound(SoundType.METAL).requiresCorrectToolForDrops())); public static final RegistryObject PRESENT = register("present", - () -> new Block(Block.Properties.of(Material.GRASS, MaterialColor.COLOR_GREEN).strength(0.1F).sound(SoundType.WOOL))); + () -> new Block(Block.Properties.of().mapColor(MapColor.COLOR_GREEN).strength(0.1F).sound(SoundType.WOOL))); public static final RegistryObject SKYROOT_FENCE = register("skyroot_fence", () -> new FenceBlock(Block.Properties.copy(Blocks.OAK_FENCE))); public static final RegistryObject SKYROOT_FENCE_GATE = register("skyroot_fence_gate", () -> new FenceGateBlock(Block.Properties.copy(Blocks.OAK_FENCE_GATE), AetherWoodTypes.SKYROOT)); @@ -172,16 +175,16 @@ public class AetherBlocks { public static final RegistryObject SKYROOT_PRESSURE_PLATE = register("skyroot_pressure_plate", () -> new PressurePlateBlock(PressurePlateBlock.Sensitivity.EVERYTHING, Block.Properties.copy(Blocks.OAK_PRESSURE_PLATE), AetherWoodTypes.SKYROOT_BLOCK_SET)); public static final RegistryObject HOLYSTONE_BUTTON = register("holystone_button", () -> new ButtonBlock(Block.Properties.copy(Blocks.STONE_BUTTON), BlockSetType.STONE, 20, false)); - public static final RegistryObject HOLYSTONE_PRESSURE_PLATE = register("holystone_pressure_plate", () -> new PressurePlateBlock(PressurePlateBlock.Sensitivity.MOBS, Block.Properties.of(Material.STONE, MaterialColor.WOOL).requiresCorrectToolForDrops().noCollission().strength(0.5F), BlockSetType.STONE)); + public static final RegistryObject HOLYSTONE_PRESSURE_PLATE = register("holystone_pressure_plate", () -> new PressurePlateBlock(PressurePlateBlock.Sensitivity.MOBS, Block.Properties.of().mapColor(MapColor.WOOL).forceSolidOn().instrument(NoteBlockInstrument.BASEDRUM).requiresCorrectToolForDrops().noCollission().strength(0.5F), BlockSetType.STONE)); - public static final RegistryObject CARVED_WALL = register("carved_wall", () -> new WallBlock(Block.Properties.copy(AetherBlocks.CARVED_STONE.get()))); - public static final RegistryObject ANGELIC_WALL = register("angelic_wall", () -> new WallBlock(Block.Properties.copy(AetherBlocks.ANGELIC_STONE.get()))); - public static final RegistryObject HELLFIRE_WALL = register("hellfire_wall", () -> new WallBlock(Block.Properties.copy(AetherBlocks.HELLFIRE_STONE.get()))); - public static final RegistryObject HOLYSTONE_WALL = register("holystone_wall", () -> new WallBlock(Block.Properties.copy(AetherBlocks.HOLYSTONE.get()))); - public static final RegistryObject MOSSY_HOLYSTONE_WALL = register("mossy_holystone_wall", () -> new WallBlock(Block.Properties.copy(AetherBlocks.MOSSY_HOLYSTONE.get()))); - public static final RegistryObject ICESTONE_WALL = register("icestone_wall", () -> new IcestoneWallBlock(Block.Properties.copy(AetherBlocks.ICESTONE.get()))); - public static final RegistryObject HOLYSTONE_BRICK_WALL = register("holystone_brick_wall", () -> new WallBlock(Block.Properties.copy(AetherBlocks.HOLYSTONE_BRICKS.get()))); - public static final RegistryObject AEROGEL_WALL = register("aerogel_wall", () -> new AerogelWallBlock(Block.Properties.of(Material.STONE, MaterialColor.DIAMOND).strength(1.0F, 2000.0F).sound(SoundType.METAL).requiresCorrectToolForDrops().isViewBlocking(AetherBlocks::never))); + public static final RegistryObject CARVED_WALL = register("carved_wall", () -> new WallBlock(Block.Properties.copy(AetherBlocks.CARVED_STONE.get()).forceSolidOn())); + public static final RegistryObject ANGELIC_WALL = register("angelic_wall", () -> new WallBlock(Block.Properties.copy(AetherBlocks.ANGELIC_STONE.get()).forceSolidOn())); + public static final RegistryObject HELLFIRE_WALL = register("hellfire_wall", () -> new WallBlock(Block.Properties.copy(AetherBlocks.HELLFIRE_STONE.get()).forceSolidOn())); + public static final RegistryObject HOLYSTONE_WALL = register("holystone_wall", () -> new WallBlock(Block.Properties.copy(AetherBlocks.HOLYSTONE.get()).forceSolidOn())); + public static final RegistryObject MOSSY_HOLYSTONE_WALL = register("mossy_holystone_wall", () -> new WallBlock(Block.Properties.copy(AetherBlocks.MOSSY_HOLYSTONE.get()).forceSolidOn())); + public static final RegistryObject ICESTONE_WALL = register("icestone_wall", () -> new IcestoneWallBlock(Block.Properties.copy(AetherBlocks.ICESTONE.get()).forceSolidOn())); + public static final RegistryObject HOLYSTONE_BRICK_WALL = register("holystone_brick_wall", () -> new WallBlock(Block.Properties.copy(AetherBlocks.HOLYSTONE_BRICKS.get()).forceSolidOn())); + public static final RegistryObject AEROGEL_WALL = register("aerogel_wall", () -> new AerogelWallBlock(Block.Properties.of().mapColor(MapColor.DIAMOND).forceSolidOn().instrument(NoteBlockInstrument.BASEDRUM).strength(1.0F, 2000.0F).sound(SoundType.METAL).requiresCorrectToolForDrops().isViewBlocking(AetherBlocks::never))); public static final RegistryObject SKYROOT_STAIRS = register("skyroot_stairs", () -> new StairBlock(() -> SKYROOT_PLANKS.get().defaultBlockState(), Block.Properties.copy(AetherBlocks.SKYROOT_PLANKS.get()))); @@ -222,14 +225,14 @@ public class AetherBlocks { () -> new AerogelSlabBlock(Block.Properties.copy(AetherBlocks.AEROGEL.get()).strength(1.0F, 2000.0F).isViewBlocking(AetherBlocks::never))); public static final RegistryObject SUN_ALTAR = register("sun_altar", - () -> new SunAltarBlock(Block.Properties.of(Material.STONE, MaterialColor.NETHER).strength(2.0F).sound(SoundType.METAL))); + () -> new SunAltarBlock(Block.Properties.of().mapColor(MapColor.NETHER).instrument(NoteBlockInstrument.BASEDRUM).strength(2.0F).sound(SoundType.METAL))); public static final RegistryObject SKYROOT_BOOKSHELF = register("skyroot_bookshelf", () -> new BookshelfBlock(Block.Properties.copy(Blocks.BOOKSHELF))); public static final RegistryObject SKYROOT_BED = register("skyroot_bed", () -> new SkyrootBedBlock(Block.Properties.copy(Blocks.CYAN_BED))); - public static final RegistryObject FROSTED_ICE = BLOCKS.register("frosted_ice", () -> new AetherFrostedIceBlock(BlockBehaviour.Properties.of(Material.ICE).friction(0.98F).randomTicks().strength(0.5F).sound(SoundType.GLASS).noOcclusion().isValidSpawn((state, level, pos, entityType) -> entityType == EntityType.POLAR_BEAR))); - public static final RegistryObject UNSTABLE_OBSIDIAN = BLOCKS.register("unstable_obsidian", () -> new UnstableObsidianBlock(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.COLOR_BLACK).randomTicks().requiresCorrectToolForDrops().strength(50.0F, 1200.0F))); + public static final RegistryObject FROSTED_ICE = BLOCKS.register("frosted_ice", () -> new AetherFrostedIceBlock(BlockBehaviour.Properties.of().mapColor(MapColor.ICE).friction(0.98F).randomTicks().strength(0.5F).sound(SoundType.GLASS).noOcclusion().isValidSpawn((state, level, pos, entityType) -> entityType == EntityType.POLAR_BEAR).isRedstoneConductor(AetherBlocks::never))); + public static final RegistryObject UNSTABLE_OBSIDIAN = BLOCKS.register("unstable_obsidian", () -> new UnstableObsidianBlock(BlockBehaviour.Properties.of().mapColor(MapColor.COLOR_BLACK).instrument(NoteBlockInstrument.BASEDRUM).randomTicks().requiresCorrectToolForDrops().strength(50.0F, 1200.0F))); public static void registerFuels() { AltarBlockEntity.addItemEnchantingTime(AetherItems.AMBROSIUM_SHARD.get(), 250); @@ -317,7 +320,9 @@ private static Supplier registerBlockItem(final Reg } else if (block == AMBROSIUM_TORCH.get()) { return new StandingAndWallBlockItem(AMBROSIUM_TORCH.get(), AMBROSIUM_WALL_TORCH.get(), new Item.Properties(), Direction.DOWN); } else if (block == SKYROOT_SIGN.get()) { - return new SignItem((new Item.Properties()).stacksTo(16), SKYROOT_SIGN.get(), SKYROOT_WALL_SIGN.get()); + return new SignItem(new Item.Properties().stacksTo(16), SKYROOT_SIGN.get(), SKYROOT_WALL_SIGN.get()); + } else if (block == SKYROOT_HANGING_SIGN.get()) { + return new HangingSignItem(SKYROOT_HANGING_SIGN.get(), SKYROOT_WALL_HANGING_SIGN.get(), new Item.Properties().stacksTo(16)); } else if (block == CHEST_MIMIC.get()) { return new EntityBlockItem(block, ChestMimicBlockEntity::new, new Item.Properties()); } else if (block == TREASURE_CHEST.get()) { diff --git a/src/main/java/com/aetherteam/aether/block/Floatable.java b/src/main/java/com/aetherteam/aether/block/Floatable.java index a5fbc297cb..0d6720a7c4 100644 --- a/src/main/java/com/aetherteam/aether/block/Floatable.java +++ b/src/main/java/com/aetherteam/aether/block/Floatable.java @@ -1,6 +1,6 @@ package com.aetherteam.aether.block; -import com.aetherteam.aether.data.resources.AetherDamageTypes; +import com.aetherteam.aether.data.resources.registries.AetherDamageTypes; import com.aetherteam.aether.entity.block.FloatingBlockEntity; import net.minecraft.core.BlockPos; import net.minecraft.world.damagesource.DamageSource; @@ -20,7 +20,7 @@ default void onCollide(Level level, BlockPos pos, BlockState state, BlockState o default void onBrokenAfterCollide(Level level, BlockPos pos, FloatingBlockEntity floatingBlock) { } default DamageSource getFallDamageSource(Entity entity) { - return AetherDamageTypes.damageSource(entity.level, AetherDamageTypes.FLOATING_BLOCK); + return AetherDamageTypes.damageSource(entity.level(), AetherDamageTypes.FLOATING_BLOCK); } default Predicate getHurtsEntitySelector() { diff --git a/src/main/java/com/aetherteam/aether/block/construction/AetherFarmBlock.java b/src/main/java/com/aetherteam/aether/block/construction/AetherFarmBlock.java index 46c8158a98..e564949bbe 100644 --- a/src/main/java/com/aetherteam/aether/block/construction/AetherFarmBlock.java +++ b/src/main/java/com/aetherteam/aether/block/construction/AetherFarmBlock.java @@ -52,7 +52,7 @@ public void randomTick(BlockState state, ServerLevel level, BlockPos pos, Random if (!isNearWater(level, pos) && !level.isRainingAt(pos.above())) { if (i > 0) { level.setBlock(pos, state.setValue(MOISTURE, i - 1), 2); - } else if (!isUnderCrops(level, pos)) { + } else if (!shouldMaintainFarmland(level, pos)) { turnToDirt(state, level, pos); } } else if (i < 7) { @@ -79,9 +79,9 @@ public static void turnToDirt(BlockState state, Level level, BlockPos pos) { } /** - * [CODE COPY] - {@link FarmBlock#isUnderCrops(BlockGetter, BlockPos)}. + * [CODE COPY] - {@link FarmBlock#shouldMaintainFarmland(BlockGetter, BlockPos)}. */ - private boolean isUnderCrops(BlockGetter level, BlockPos pos) { + private static boolean shouldMaintainFarmland(BlockGetter level, BlockPos pos) { BlockState plant = level.getBlockState(pos.above()); BlockState state = level.getBlockState(pos); return plant.getBlock() instanceof IPlantable plantable && state.canSustainPlant(level, pos, Direction.UP, plantable); diff --git a/src/main/java/com/aetherteam/aether/block/construction/SkyrootCeilingHangingSignBlock.java b/src/main/java/com/aetherteam/aether/block/construction/SkyrootCeilingHangingSignBlock.java new file mode 100644 index 0000000000..4a1800ccaf --- /dev/null +++ b/src/main/java/com/aetherteam/aether/block/construction/SkyrootCeilingHangingSignBlock.java @@ -0,0 +1,19 @@ +package com.aetherteam.aether.block.construction; + +import com.aetherteam.aether.blockentity.SkyrootHangingSignBlockEntity; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.block.CeilingHangingSignBlock; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.properties.WoodType; + +public class SkyrootCeilingHangingSignBlock extends CeilingHangingSignBlock { + public SkyrootCeilingHangingSignBlock(Properties properties, WoodType type) { + super(properties, type); + } + + @Override + public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { + return new SkyrootHangingSignBlockEntity(pos, state); + } +} diff --git a/src/main/java/com/aetherteam/aether/block/construction/SkyrootWallHangingSignBlock.java b/src/main/java/com/aetherteam/aether/block/construction/SkyrootWallHangingSignBlock.java new file mode 100644 index 0000000000..f9ab9bc882 --- /dev/null +++ b/src/main/java/com/aetherteam/aether/block/construction/SkyrootWallHangingSignBlock.java @@ -0,0 +1,19 @@ +package com.aetherteam.aether.block.construction; + +import com.aetherteam.aether.blockentity.SkyrootHangingSignBlockEntity; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.block.WallHangingSignBlock; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.properties.WoodType; + +public class SkyrootWallHangingSignBlock extends WallHangingSignBlock { + public SkyrootWallHangingSignBlock(Properties properties, WoodType type) { + super(properties, type); + } + + @Override + public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { + return new SkyrootHangingSignBlockEntity(pos, state); + } +} diff --git a/src/main/java/com/aetherteam/aether/block/dispenser/AetherDispenseBehaviors.java b/src/main/java/com/aetherteam/aether/block/dispenser/AetherDispenseBehaviors.java index 2b7aeb838c..e6d0935b0e 100644 --- a/src/main/java/com/aetherteam/aether/block/dispenser/AetherDispenseBehaviors.java +++ b/src/main/java/com/aetherteam/aether/block/dispenser/AetherDispenseBehaviors.java @@ -1,9 +1,18 @@ package com.aetherteam.aether.block.dispenser; +import com.aetherteam.aether.AetherConfig; +import com.aetherteam.aether.AetherTags; +import com.aetherteam.aether.capability.accessory.MobAccessory; import com.aetherteam.aether.entity.projectile.weapon.HammerProjectile; import com.aetherteam.aether.entity.projectile.weapon.ThrownLightningKnife; +import com.aetherteam.aether.event.hooks.EntityHooks; import com.aetherteam.aether.inventory.menu.AccessoriesMenu; import com.aetherteam.aether.item.AetherItems; +import com.aetherteam.aether.item.accessories.AccessoryItem; +import com.aetherteam.aether.item.accessories.cape.CapeItem; +import com.aetherteam.aether.item.accessories.gloves.GlovesItem; +import com.aetherteam.aether.item.accessories.miscellaneous.ShieldOfRepulsionItem; +import com.aetherteam.aether.item.accessories.pendant.PendantItem; import com.aetherteam.aether.item.miscellaneous.bucket.SkyrootBucketItem; import net.minecraft.Util; import net.minecraft.core.BlockPos; @@ -13,8 +22,11 @@ import net.minecraft.core.dispenser.AbstractProjectileDispenseBehavior; import net.minecraft.core.dispenser.DefaultDispenseItemBehavior; import net.minecraft.core.dispenser.DispenseItemBehavior; +import net.minecraft.sounds.SoundEvents; import net.minecraft.world.entity.EntitySelector; import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.Mob; +import net.minecraft.world.entity.decoration.ArmorStand; import net.minecraft.world.entity.projectile.Projectile; import net.minecraft.world.item.DispensibleContainerItem; import net.minecraft.world.item.Item; @@ -33,10 +45,10 @@ import top.theillusivec4.curios.api.SlotContext; import top.theillusivec4.curios.api.type.inventory.ICurioStacksHandler; import top.theillusivec4.curios.api.type.inventory.IDynamicStackHandler; -import top.theillusivec4.curios.api.type.util.ICuriosHelper; import java.util.List; import java.util.Map; +import java.util.Optional; public class AetherDispenseBehaviors { /** @@ -64,27 +76,73 @@ public static boolean dispenseAccessory(BlockSource blockSource, ItemStack stack } else { LivingEntity livingEntity = list.get(0); ItemStack itemStack = stack.split(1); - ICuriosHelper curiosHelper = CuriosApi.getCuriosHelper(); - curiosHelper.getCurio(itemStack).ifPresent(curio -> curiosHelper.getCuriosHandler(livingEntity).ifPresent(handler -> { - Map curios = handler.getCurios(); - for (Map.Entry entry : curios.entrySet()) { // Curios entries. - if (List.of(AccessoriesMenu.AETHER_IDENTIFIERS).contains(entry.getKey())) { // Check if Curios entries match the ones in the Aether accessories menu. - IDynamicStackHandler stackHandler = entry.getValue().getStacks(); - for (int i = 0; i < stackHandler.getSlots(); i++) { - String id = entry.getKey(); - SlotContext slotContext = new SlotContext(id, livingEntity, i, false, true); // Get slot that a Curio entry has. - if (curiosHelper.isStackValid(slotContext, itemStack) && curio.canEquip(slotContext) && curio.canEquipFromUse(slotContext)) { - ItemStack slotStack = stackHandler.getStackInSlot(i); - if (slotStack.isEmpty()) { // Check if Curio slot is empty. - stackHandler.setStackInSlot(i, itemStack.copy()); // Put copy of stack from dispenser into slot. - int count = itemStack.getCount(); - itemStack.shrink(count); // Shrink stack in dispenser. + if (!(livingEntity instanceof ArmorStand armorStand)) { + CuriosApi.getCurio(itemStack).ifPresent(curio -> CuriosApi.getCuriosInventory(livingEntity).ifPresent(handler -> { + Map curios = handler.getCurios(); + for (Map.Entry entry : curios.entrySet()) { // Curios entries. + if (List.of(AccessoriesMenu.AETHER_IDENTIFIERS).contains(entry.getKey())) { // Check if Curios entries match the ones in the Aether accessories menu. + IDynamicStackHandler stackHandler = entry.getValue().getStacks(); + for (int i = 0; i < stackHandler.getSlots(); i++) { + String id = entry.getKey(); + SlotContext slotContext = new SlotContext(id, livingEntity, i, false, true); // Get slot that a Curio entry has. + if (curio.canEquip(slotContext) && curio.canEquipFromUse(slotContext)) { + ItemStack slotStack = stackHandler.getStackInSlot(i); + if (slotStack.isEmpty()) { // Check if Curio slot is empty. + stackHandler.setStackInSlot(i, itemStack.copy()); // Put copy of stack from dispenser into slot. + int count = itemStack.getCount(); + itemStack.shrink(count); // Shrink stack in dispenser. + if (livingEntity instanceof Mob mob && EntityHooks.canMobSpawnWithAccessories(mob)) { + MobAccessory.get(mob).ifPresent((accessoryMob) -> { + accessoryMob.setGuaranteedDrop(id); + accessoryMob.getMob().setPersistenceRequired(); + }); + } + } } } } } - } - })); + })); + } else { + CuriosApi.getCurio(itemStack).ifPresent(curio -> CuriosApi.getCuriosInventory(livingEntity).ifPresent(handler -> { + if (itemStack.is(AetherTags.Items.ACCESSORIES)) { + String identifier = ""; + if (itemStack.getItem() instanceof GlovesItem) { + identifier = AetherConfig.COMMON.use_curios_menu.get() ? "hands" : "aether_gloves"; + } else if (itemStack.getItem() instanceof PendantItem) { + identifier = AetherConfig.COMMON.use_curios_menu.get() ? "necklace" : "aether_pendant"; + } else if (itemStack.getItem() instanceof CapeItem) { + identifier = AetherConfig.COMMON.use_curios_menu.get() ? "back" : "aether_cape"; + } else if (itemStack.getItem() instanceof ShieldOfRepulsionItem) { + identifier = AetherConfig.COMMON.use_curios_menu.get() ? "body" : "aether_shield"; + } + Optional stacksHandler = handler.getStacksHandler(identifier); + if (stacksHandler.isPresent()) { + IDynamicStackHandler stackHandler = stacksHandler.get().getCosmeticStacks(); + if (0 < stackHandler.getSlots()) { + if (stackHandler.getStackInSlot(0).isEmpty()) { + if (itemStack.getItem() instanceof AccessoryItem accessoryItem) { + SlotContext slotContext = new SlotContext(identifier, armorStand, 0, true, true); + if (accessoryItem.canEquip(slotContext, itemStack)) { + stackHandler.setStackInSlot(0, itemStack.copy()); + if (accessoryItem instanceof GlovesItem glovesItem) { + armorStand.level().playSound(null, armorStand.blockPosition(), glovesItem.getEquipSound(slotContext, itemStack).soundEvent(), armorStand.getSoundSource(), 1, 1); + } else if (accessoryItem instanceof PendantItem pendantItem) { + armorStand.level().playSound(null, armorStand.blockPosition(), pendantItem.getEquipSound(slotContext, itemStack).soundEvent(), armorStand.getSoundSource(), 1, 1); + } else { + armorStand.level().playSound(null, armorStand.blockPosition(), SoundEvents.ARMOR_EQUIP_GENERIC, armorStand.getSoundSource(), 1, 1); + } + if (identifier.equals("hands") || identifier.equals("aether_gloves")) { + armorStand.setShowArms(true); + } + } + } + } + } + } + } + })); + } return true; } } diff --git a/src/main/java/com/aetherteam/aether/block/miscellaneous/FloatingBlock.java b/src/main/java/com/aetherteam/aether/block/miscellaneous/FloatingBlock.java index 051fcc6091..3a46c2620c 100644 --- a/src/main/java/com/aetherteam/aether/block/miscellaneous/FloatingBlock.java +++ b/src/main/java/com/aetherteam/aether/block/miscellaneous/FloatingBlock.java @@ -12,7 +12,6 @@ import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.material.Material; /** * [CODE COPY] - {@link net.minecraft.world.level.block.FallingBlock}.

@@ -67,9 +66,12 @@ public void tick(BlockState state, ServerLevel level, BlockPos pos, RandomSource protected void floating(FloatingBlockEntity entity) { } + /** + * Warning for "deprecation" is suppressed because {@link BlockState#liquid()} is necessary to call. + */ + @SuppressWarnings("deprecation") public static boolean isFree(BlockState state) { - Material material = state.getMaterial(); - return state.isAir() || state.is(BlockTags.FIRE) || material.isLiquid() || material.isReplaceable(); + return state.isAir() || state.is(BlockTags.FIRE) || state.liquid() || state.canBeReplaced(); } protected int getDelayAfterPlace() { diff --git a/src/main/java/com/aetherteam/aether/block/miscellaneous/UnstableObsidianBlock.java b/src/main/java/com/aetherteam/aether/block/miscellaneous/UnstableObsidianBlock.java index 520950746d..1a1afb711c 100644 --- a/src/main/java/com/aetherteam/aether/block/miscellaneous/UnstableObsidianBlock.java +++ b/src/main/java/com/aetherteam/aether/block/miscellaneous/UnstableObsidianBlock.java @@ -76,10 +76,6 @@ public ItemStack getCloneItemStack(BlockGetter level, BlockPos pos, BlockState s return ItemStack.EMPTY; } - /** - * Warning for "deprecation" is suppressed because the method is fine to override. - */ - @SuppressWarnings("deprecation") @Override public PushReaction getPistonPushReaction(BlockState state) { return PushReaction.NORMAL; diff --git a/src/main/java/com/aetherteam/aether/block/portal/AetherPortalBlock.java b/src/main/java/com/aetherteam/aether/block/portal/AetherPortalBlock.java index e45532133e..637e6ab021 100644 --- a/src/main/java/com/aetherteam/aether/block/portal/AetherPortalBlock.java +++ b/src/main/java/com/aetherteam/aether/block/portal/AetherPortalBlock.java @@ -58,7 +58,7 @@ public void entityInside(BlockState state, Level level, BlockPos pos, Entity ent if (entity.isOnPortalCooldown()) { entity.setPortalCooldown(); } else { - if (!entity.getLevel().isClientSide() && !pos.equals(entityAccessor.aether$getPortalEntrancePos())) { + if (!entity.level().isClientSide() && !pos.equals(entityAccessor.aether$getPortalEntrancePos())) { entityAccessor.aether$setPortalEntrancePos(pos.immutable()); } LazyOptional aetherPlayer = entity.getCapability(AetherCapabilities.AETHER_PLAYER_CAPABILITY); @@ -82,15 +82,15 @@ public void entityInside(BlockState state, Level level, BlockPos pos, Entity ent * [CODE COPY] - {@link Entity#handleNetherPortal()}. */ private void handleTeleportation(Entity entity) { - MinecraftServer server = entity.getLevel().getServer(); - ResourceKey destinationKey = entity.getLevel().dimension() == LevelUtil.destinationDimension() ? LevelUtil.returnDimension() : LevelUtil.destinationDimension(); + MinecraftServer server = entity.level().getServer(); + ResourceKey destinationKey = entity.level().dimension() == LevelUtil.destinationDimension() ? LevelUtil.returnDimension() : LevelUtil.destinationDimension(); if (server != null) { ServerLevel destinationLevel = server.getLevel(destinationKey); if (destinationLevel != null && !entity.isPassenger()) { - entity.getLevel().getProfiler().push("aether_portal"); + entity.level().getProfiler().push("aether_portal"); entity.setPortalCooldown(); entity.changeDimension(destinationLevel, new AetherPortalForcer(destinationLevel, true)); - entity.getLevel().getProfiler().pop(); + entity.level().getProfiler().pop(); } } } diff --git a/src/main/java/com/aetherteam/aether/block/portal/AetherPortalForcer.java b/src/main/java/com/aetherteam/aether/block/portal/AetherPortalForcer.java index 75815475db..2cd9c9f4f8 100644 --- a/src/main/java/com/aetherteam/aether/block/portal/AetherPortalForcer.java +++ b/src/main/java/com/aetherteam/aether/block/portal/AetherPortalForcer.java @@ -70,7 +70,7 @@ public boolean playTeleportSound(ServerPlayer player, ServerLevel sourceLevel, S public PortalInfo getPortalInfo(Entity entity, ServerLevel destinationLevel, Function defaultPortalInfo) { EntityAccessor entityAccessor = (EntityAccessor) entity; boolean isAether = destinationLevel.dimension() == LevelUtil.destinationDimension(); - if (entity.getLevel().dimension() != LevelUtil.destinationDimension() && !isAether) { + if (entity.level().dimension() != LevelUtil.destinationDimension() && !isAether) { return null; } else if (this.isStartup) { return new PortalInfo(this.checkPositionsForInitialSpawn(destinationLevel, entity.blockPosition()).getCenter(), Vec3.ZERO, entity.getYRot(), entity.getXRot()); @@ -233,15 +233,17 @@ public Optional createPortal(BlockPos pos, Direction.A } /** - * Based on {@link net.minecraft.world.level.portal.PortalForcer#canHostFrame(BlockPos, BlockPos.MutableBlockPos, Direction, int)}. + * Based on {@link net.minecraft.world.level.portal.PortalForcer#canHostFrame(BlockPos, BlockPos.MutableBlockPos, Direction, int)}.

+ * Warning for "deprecation" is suppressed because {@link BlockState#isSolid()} is necessary to call. */ + @SuppressWarnings("deprecation") private boolean canHostFrame(BlockPos originalPos, BlockPos.MutableBlockPos offsetPos, Direction direction, int offsetScale) { Direction clockWiseDirection = direction.getClockWise(); for (int i = -1; i < 3; ++i) { for (int j = -1; j < 4; ++j) { offsetPos.setWithOffset(originalPos, direction.getStepX() * i + clockWiseDirection.getStepX() * offsetScale, j, direction.getStepZ() * i + clockWiseDirection.getStepZ() * offsetScale); BlockState blockState = this.level.getBlockState(offsetPos); - if (j < 0 && (!blockState.getMaterial().isSolid() + if (j < 0 && (!blockState.isSolid() || blockState.is(AetherTags.Blocks.AETHER_PORTAL_BLACKLIST))) { return false; } diff --git a/src/main/java/com/aetherteam/aether/block/portal/PortalSoundUtil.java b/src/main/java/com/aetherteam/aether/block/portal/PortalSoundUtil.java index b263b51b66..bf18f9abf1 100644 --- a/src/main/java/com/aetherteam/aether/block/portal/PortalSoundUtil.java +++ b/src/main/java/com/aetherteam/aether/block/portal/PortalSoundUtil.java @@ -11,6 +11,6 @@ public final class PortalSoundUtil { * Based on {@link net.minecraft.client.renderer.LevelRenderer#levelEvent(int, BlockPos, int)}, event 1032. */ public static void playPortalSound(LocalPlayer localPlayer) { - Minecraft.getInstance().getSoundManager().play(SimpleSoundInstance.forLocalAmbience(AetherSoundEvents.BLOCK_AETHER_PORTAL_TRAVEL.get(), localPlayer.level.random.nextFloat() * 0.4F + 0.8F, 0.25F)); + Minecraft.getInstance().getSoundManager().play(SimpleSoundInstance.forLocalAmbience(AetherSoundEvents.BLOCK_AETHER_PORTAL_TRAVEL.get(), localPlayer.level().getRandom().nextFloat() * 0.4F + 0.8F, 0.25F)); } } diff --git a/src/main/java/com/aetherteam/aether/blockentity/AbstractAetherFurnaceBlockEntity.java b/src/main/java/com/aetherteam/aether/blockentity/AbstractAetherFurnaceBlockEntity.java index 01c5d365e4..e66bdcb857 100644 --- a/src/main/java/com/aetherteam/aether/blockentity/AbstractAetherFurnaceBlockEntity.java +++ b/src/main/java/com/aetherteam/aether/blockentity/AbstractAetherFurnaceBlockEntity.java @@ -181,7 +181,7 @@ public boolean canPlaceItem(int index, ItemStack stack) { @Override public boolean canTakeItemThroughFace(int index, ItemStack stack, Direction direction) { AbstractFurnaceBlockEntityAccessor abstractFurnaceBlockEntityAccessor = (AbstractFurnaceBlockEntityAccessor) this; - Optional> ingredient = abstractFurnaceBlockEntityAccessor.aether$getQuickCheck().getRecipeFor(this, this.getLevel()).map(AbstractCookingRecipe::getIngredients); + Optional> ingredient = abstractFurnaceBlockEntityAccessor.aether$getQuickCheck().getRecipeFor(this, this.level).map(AbstractCookingRecipe::getIngredients); if (this.remainderItem.isEmpty()) { ingredient.ifPresent(ing -> this.remainderItem = stack.getCraftingRemainingItem()); // Stores the correlating crafting remainder item. } diff --git a/src/main/java/com/aetherteam/aether/blockentity/AetherBlockEntityTypes.java b/src/main/java/com/aetherteam/aether/blockentity/AetherBlockEntityTypes.java index da35700704..aa4efd4d25 100644 --- a/src/main/java/com/aetherteam/aether/blockentity/AetherBlockEntityTypes.java +++ b/src/main/java/com/aetherteam/aether/blockentity/AetherBlockEntityTypes.java @@ -34,6 +34,9 @@ public class AetherBlockEntityTypes { public static final RegistryObject> SKYROOT_SIGN = BLOCK_ENTITY_TYPES.register("skyroot_sign", () -> BlockEntityType.Builder.of(SkyrootSignBlockEntity::new, AetherBlocks.SKYROOT_WALL_SIGN.get(), AetherBlocks.SKYROOT_SIGN.get()).build(null)); + public static final RegistryObject> SKYROOT_HANGING_SIGN = BLOCK_ENTITY_TYPES.register("skyroot_hanging_sign", () -> + BlockEntityType.Builder.of(SkyrootHangingSignBlockEntity::new, AetherBlocks.SKYROOT_WALL_HANGING_SIGN.get(), AetherBlocks.SKYROOT_HANGING_SIGN.get()).build(null)); + public static final RegistryObject> SUN_ALTAR = BLOCK_ENTITY_TYPES.register("sun_altar", () -> BlockEntityType.Builder.of(SunAltarBlockEntity::new, AetherBlocks.SUN_ALTAR.get()).build(null)); } \ No newline at end of file diff --git a/src/main/java/com/aetherteam/aether/blockentity/IncubatorBlockEntity.java b/src/main/java/com/aetherteam/aether/blockentity/IncubatorBlockEntity.java index de38eb3520..a96f5c8c58 100644 --- a/src/main/java/com/aetherteam/aether/blockentity/IncubatorBlockEntity.java +++ b/src/main/java/com/aetherteam/aether/blockentity/IncubatorBlockEntity.java @@ -50,6 +50,7 @@ import javax.annotation.Nullable; import java.util.LinkedHashMap; +import java.util.List; import java.util.Map; import java.util.stream.Stream; @@ -238,7 +239,7 @@ private boolean incubate(@Nullable IncubationRecipe recipe, NonNullList entityType = recipe.getEntity(); BlockPos spawnPos = this.getBlockPos().above(); - if (this.getLevel() != null && !this.getLevel().isClientSide() && this.getLevel() instanceof ServerLevel serverLevel) { + if (this.level != null && !this.level.isClientSide() && this.level instanceof ServerLevel serverLevel) { CompoundTag tag = recipe.getTag(); Component customName = itemStack.hasCustomHoverName() ? itemStack.getHoverName() : null; Entity entity = entityType.spawn(serverLevel, tag, null, spawnPos, MobSpawnType.TRIGGERED, true, false); @@ -349,7 +350,7 @@ public void clearContent() { @Override public void setItem(int index, ItemStack stack) { ItemStack itemstack = this.items.get(index); - boolean flag = !stack.isEmpty() && stack.sameItem(itemstack) && ItemStack.tagMatches(stack, itemstack); + boolean flag = !stack.isEmpty() && ItemStack.isSameItemSameTags(itemstack, stack); this.items.set(index, stack); if (stack.getCount() > this.getMaxStackSize()) { stack.setCount(this.getMaxStackSize()); @@ -416,11 +417,11 @@ public Recipe getRecipeUsed() { } @Override - public void awardUsedRecipes(Player player) { } + public void awardUsedRecipes(Player player, List items) { } @Override public boolean stillValid(Player player) { - if (this.getLevel().getBlockEntity(this.getBlockPos()) != this) { + if (this.level.getBlockEntity(this.getBlockPos()) != this) { return false; } else { return player.distanceToSqr(this.getBlockPos().getX() + 0.5, this.getBlockPos().getY() + 0.5, this.getBlockPos().getZ() + 0.5) <= 64.0; diff --git a/src/main/java/com/aetherteam/aether/blockentity/SkyrootHangingSignBlockEntity.java b/src/main/java/com/aetherteam/aether/blockentity/SkyrootHangingSignBlockEntity.java new file mode 100644 index 0000000000..5cf502dedd --- /dev/null +++ b/src/main/java/com/aetherteam/aether/blockentity/SkyrootHangingSignBlockEntity.java @@ -0,0 +1,17 @@ +package com.aetherteam.aether.blockentity; + +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.entity.HangingSignBlockEntity; +import net.minecraft.world.level.block.state.BlockState; + +public class SkyrootHangingSignBlockEntity extends HangingSignBlockEntity { + public SkyrootHangingSignBlockEntity(BlockPos pos, BlockState state) { + super(pos, state); + } + + @Override + public BlockEntityType getType() { + return AetherBlockEntityTypes.SKYROOT_HANGING_SIGN.get(); + } +} diff --git a/src/main/java/com/aetherteam/aether/blockentity/TreasureChestBlockEntity.java b/src/main/java/com/aetherteam/aether/blockentity/TreasureChestBlockEntity.java index 8f51626c15..14524dc176 100644 --- a/src/main/java/com/aetherteam/aether/blockentity/TreasureChestBlockEntity.java +++ b/src/main/java/com/aetherteam/aether/blockentity/TreasureChestBlockEntity.java @@ -17,6 +17,7 @@ import net.minecraft.world.CompoundContainer; import net.minecraft.world.Container; import net.minecraft.world.ContainerHelper; +import net.minecraft.world.WorldlyContainer; import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.entity.player.Player; import net.minecraft.world.inventory.AbstractContainerMenu; @@ -34,12 +35,13 @@ import net.minecraftforge.items.wrapper.InvWrapper; import javax.annotation.Nullable; +import java.util.stream.IntStream; /** * [CODE COPY] - {@link ChestBlockEntity}.

* Has additional locking behavior. */ -public class TreasureChestBlockEntity extends RandomizableContainerBlockEntity implements LidBlockEntity { +public class TreasureChestBlockEntity extends RandomizableContainerBlockEntity implements LidBlockEntity, WorldlyContainer { private NonNullList items = NonNullList.withSize(27, ItemStack.EMPTY); private final ContainerOpenersCounter openersCounter = new ContainerOpenersCounter() { protected void onOpen(Level level, BlockPos pos, BlockState state) { @@ -91,10 +93,10 @@ protected TreasureChestBlockEntity(BlockEntityType tileEntityType, BlockPos p public boolean tryUnlock(Player player) { ItemStack stack = player.getMainHandItem(); boolean keyMatches = stack.getItem() instanceof DungeonKeyItem dungeonKeyItem && this.getKind().equals(dungeonKeyItem.getDungeonType()); - if (this.getLocked() && keyMatches && this.getLevel() != null) { + if (this.getLocked() && keyMatches && this.level != null) { this.setLocked(false); this.setChanged(); - this.getLevel().markAndNotifyBlock(this.worldPosition, this.getLevel().getChunkAt(this.worldPosition), this.getBlockState(), this.getBlockState(), 2, 512); + this.level.markAndNotifyBlock(this.worldPosition, this.level.getChunkAt(this.worldPosition), this.getBlockState(), this.getBlockState(), 2, 512); return true; } else { player.displayClientMessage(Component.translatable(this.getKind().getNamespace() + "." + this.getKind().getPath() + "_treasure_chest_locked"), true); @@ -105,8 +107,9 @@ public boolean tryUnlock(Player player) { @Override public LazyOptional getCapability(Capability capability, Direction side) { if (!this.remove && capability == ForgeCapabilities.ITEM_HANDLER) { - if (this.chestHandler == null) + if (this.chestHandler == null) { this.chestHandler = LazyOptional.of(this::createHandler); + } return this.chestHandler.cast(); } return super.getCapability(capability, side); @@ -115,9 +118,17 @@ public LazyOptional getCapability(Capability capability, Direction sid private IItemHandlerModifiable createHandler() { BlockState blockState = this.getBlockState(); if (!(blockState.getBlock() instanceof ChestBlock)) { - return new InvWrapper(this); + return new InvWrapper(this) { + @Override + public ItemStack extractItem(int slot, int amount, boolean simulate) { + if (TreasureChestBlockEntity.this.getLocked()) { + return ItemStack.EMPTY; + } + return super.extractItem(slot, amount, simulate); + } + }; } - Container inv = ChestBlock.getContainer((ChestBlock) blockState.getBlock(), blockState, this.getLevel(), getBlockPos(), true); + Container inv = ChestBlock.getContainer((ChestBlock) blockState.getBlock(), blockState, this.level, getBlockPos(), true); return new InvWrapper(inv == null ? this : inv); } @@ -138,7 +149,7 @@ public void invalidateCaps() { public void setBlockState(BlockState state) { super.setBlockState(state); if (this.chestHandler != null) { - net.minecraftforge.common.util.LazyOptional oldHandler = this.chestHandler; + LazyOptional oldHandler = this.chestHandler; this.chestHandler = null; oldHandler.invalidate(); } @@ -149,6 +160,43 @@ protected AbstractContainerMenu createMenu(int id, Inventory inventory) { return ChestMenu.threeRows(id, inventory, this); } + @Override + public int[] getSlotsForFace(Direction direction) { + return IntStream.range(0, this.getContainerSize()).toArray(); + } + + @Override + public boolean canPlaceItemThroughFace(int index, ItemStack stack, Direction direction) { + if (direction != Direction.DOWN && stack.getItem().canFitInsideContainerItems()) { + return this.canPlaceItem(index, stack); + } + return false; + } + + @Override + public boolean canTakeItemThroughFace(int index, ItemStack stack, Direction direction) { + if (direction == Direction.DOWN) { + return this.canTakeItem(this, index, stack); + } + return false; + } + + @Override + public boolean canPlaceItem(int index, ItemStack stack) { + if (this.getLocked()) { + return false; + } + return super.canPlaceItem(index, stack); + } + + @Override + public boolean canTakeItem(Container container, int index, ItemStack stack) { + if (this.getLocked()) { + return false; + } + return super.canTakeItem(container, index, stack); + } + @Override protected NonNullList getItems() { return this.items; @@ -195,20 +243,20 @@ public boolean getLocked() { @Override public void startOpen(Player player) { if (!this.remove && !player.isSpectator()) { - this.openersCounter.incrementOpeners(player, this.getLevel(), this.getBlockPos(), this.getBlockState()); + this.openersCounter.incrementOpeners(player, this.level, this.getBlockPos(), this.getBlockState()); } } @Override public void stopOpen(Player player) { if (!this.remove && !player.isSpectator()) { - this.openersCounter.decrementOpeners(player, this.getLevel(), this.getBlockPos(), this.getBlockState()); + this.openersCounter.decrementOpeners(player, this.level, this.getBlockPos(), this.getBlockState()); } } public void recheckOpen() { if (!this.remove) { - this.openersCounter.recheckOpeners(this.getLevel(), this.getBlockPos(), this.getBlockState()); + this.openersCounter.recheckOpeners(this.level, this.getBlockPos(), this.getBlockState()); } } diff --git a/src/main/java/com/aetherteam/aether/capability/AetherCapabilities.java b/src/main/java/com/aetherteam/aether/capability/AetherCapabilities.java index 817d07de44..4cbaed17b6 100644 --- a/src/main/java/com/aetherteam/aether/capability/AetherCapabilities.java +++ b/src/main/java/com/aetherteam/aether/capability/AetherCapabilities.java @@ -1,6 +1,8 @@ package com.aetherteam.aether.capability; import com.aetherteam.aether.Aether; +import com.aetherteam.aether.capability.accessory.MobAccessory; +import com.aetherteam.aether.capability.accessory.MobAccessoryCapability; import com.aetherteam.aether.capability.arrow.PhoenixArrow; import com.aetherteam.aether.capability.arrow.PhoenixArrowCapability; import com.aetherteam.aether.capability.item.DroppedItem; @@ -17,6 +19,7 @@ import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.LightningBolt; import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.Mob; import net.minecraft.world.entity.item.ItemEntity; import net.minecraft.world.entity.player.Player; import net.minecraft.world.entity.projectile.AbstractArrow; @@ -33,6 +36,7 @@ @Mod.EventBusSubscriber(modid = Aether.MODID, bus = Mod.EventBusSubscriber.Bus.MOD) public class AetherCapabilities { public static final Capability AETHER_PLAYER_CAPABILITY = CapabilityManager.get(new CapabilityToken<>() { }); + public static final Capability MOB_ACCESSORY_CAPABILITY = CapabilityManager.get(new CapabilityToken<>() { }); public static final Capability PHOENIX_ARROW_CAPABILITY = CapabilityManager.get(new CapabilityToken<>() { }); public static final Capability LIGHTNING_TRACKER_CAPABILITY = CapabilityManager.get(new CapabilityToken<>() { }); public static final Capability DROPPED_ITEM_CAPABILITY = CapabilityManager.get(new CapabilityToken<>() { }); @@ -41,6 +45,7 @@ public class AetherCapabilities { @SubscribeEvent public static void register(RegisterCapabilitiesEvent event) { event.register(AetherPlayer.class); + event.register(MobAccessory.class); event.register(PhoenixArrow.class); event.register(LightningTracker.class); event.register(DroppedItem.class); @@ -54,6 +59,8 @@ public static void attachEntityCapabilities(AttachCapabilitiesEvent even if (event.getObject() instanceof LivingEntity livingEntity) { if (livingEntity instanceof Player player) { event.addCapability(new ResourceLocation(Aether.MODID, "aether_player"), new CapabilityProvider(AetherCapabilities.AETHER_PLAYER_CAPABILITY, new AetherPlayerCapability(player))); + } else if (livingEntity instanceof Mob mob) { + event.addCapability(new ResourceLocation(Aether.MODID, "mob_accessory"), new CapabilityProvider(AetherCapabilities.MOB_ACCESSORY_CAPABILITY, new MobAccessoryCapability(mob))); } } if (event.getObject() instanceof AbstractArrow abstractArrow) { diff --git a/src/main/java/com/aetherteam/aether/capability/accessory/MobAccessory.java b/src/main/java/com/aetherteam/aether/capability/accessory/MobAccessory.java new file mode 100644 index 0000000000..b97bac8122 --- /dev/null +++ b/src/main/java/com/aetherteam/aether/capability/accessory/MobAccessory.java @@ -0,0 +1,25 @@ +package com.aetherteam.aether.capability.accessory; + +import com.aetherteam.aether.capability.AetherCapabilities; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.world.entity.Mob; +import net.minecraftforge.common.util.INBTSerializable; +import net.minecraftforge.common.util.LazyOptional; + +import java.util.Map; + +public interface MobAccessory extends INBTSerializable { + Mob getMob(); + + static LazyOptional get(Mob mob) { + return mob.getCapability(AetherCapabilities.MOB_ACCESSORY_CAPABILITY); + } + + void setGuaranteedDrop(String identifier); + + float getEquipmentDropChance(String identifier); + + void setDropChance(String identifier, float chance); + + Map getAccessoryDropChances(); +} diff --git a/src/main/java/com/aetherteam/aether/capability/accessory/MobAccessoryCapability.java b/src/main/java/com/aetherteam/aether/capability/accessory/MobAccessoryCapability.java new file mode 100644 index 0000000000..934cede0ba --- /dev/null +++ b/src/main/java/com/aetherteam/aether/capability/accessory/MobAccessoryCapability.java @@ -0,0 +1,72 @@ +package com.aetherteam.aether.capability.accessory; + +import net.minecraft.nbt.CompoundTag; +import net.minecraft.world.entity.Mob; + +import java.util.HashMap; +import java.util.Map; + +public class MobAccessoryCapability implements MobAccessory { + private final Mob mob; + + private final Map accessoryDropChances = new HashMap<>(Map.ofEntries( + Map.entry("hands", 0.085F), + Map.entry("necklace", 0.085F), + Map.entry("aether_gloves", 0.085F), + Map.entry("aether_pendant", 0.085F) + )); + + public MobAccessoryCapability(Mob mob) { + this.mob = mob; + } + + @Override + public Mob getMob() { + return this.mob; + } + + @Override + public CompoundTag serializeNBT() { + CompoundTag tag = new CompoundTag(); + CompoundTag entryTag = new CompoundTag(); + for (Map.Entry entry : this.getAccessoryDropChances().entrySet()) { + entryTag.putFloat(entry.getKey(), entry.getValue()); + } + tag.put("DropChances", entryTag); + return tag; + } + + @Override + public void deserializeNBT(CompoundTag tag) { + if (tag.contains("DropChances")) { + CompoundTag entryTag = tag.getCompound("DropChances"); + for (String key : entryTag.getAllKeys()) { + Float value = entryTag.getFloat(key); + this.getAccessoryDropChances().put(key, value); + } + } + } + + public void setGuaranteedDrop(String identifier) { + if (identifier.equals("hands") || identifier.equals("necklace") || identifier.equals("aether_gloves") || identifier.equals("aether_pendant")) { + this.getAccessoryDropChances().put(identifier, 2.0F); + } + } + + public float getEquipmentDropChance(String identifier) { + if (identifier.equals("hands") || identifier.equals("necklace") || identifier.equals("aether_gloves") || identifier.equals("aether_pendant")) { + return this.getAccessoryDropChances().get(identifier); + } + return 0.0F; + } + + public void setDropChance(String identifier, float chance) { + if (identifier.equals("hands") || identifier.equals("necklace") || identifier.equals("aether_gloves") || identifier.equals("aether_pendant")) { + this.getAccessoryDropChances().put(identifier, chance); + } + } + + public Map getAccessoryDropChances() { + return this.accessoryDropChances; + } +} diff --git a/src/main/java/com/aetherteam/aether/capability/item/DroppedItemCapability.java b/src/main/java/com/aetherteam/aether/capability/item/DroppedItemCapability.java index e82135cab1..265bc17cde 100644 --- a/src/main/java/com/aetherteam/aether/capability/item/DroppedItemCapability.java +++ b/src/main/java/com/aetherteam/aether/capability/item/DroppedItemCapability.java @@ -45,7 +45,7 @@ public CompoundTag serializeNBT() { @Override public void deserializeNBT(CompoundTag tag) { if (tag.contains("Owner")) { - this.setOwner(this.getItemEntity().level.getEntity(tag.getInt("Owner"))); + this.setOwner(this.getItemEntity().level().getEntity(tag.getInt("Owner"))); } } diff --git a/src/main/java/com/aetherteam/aether/capability/lightning/LightningTrackerCapability.java b/src/main/java/com/aetherteam/aether/capability/lightning/LightningTrackerCapability.java index 0464ec0015..a220caf938 100644 --- a/src/main/java/com/aetherteam/aether/capability/lightning/LightningTrackerCapability.java +++ b/src/main/java/com/aetherteam/aether/capability/lightning/LightningTrackerCapability.java @@ -40,7 +40,7 @@ public CompoundTag serializeNBT() { @Override public void deserializeNBT(CompoundTag tag) { if (tag.contains("Owner")) { - this.setOwner(this.getLightningBolt().level.getEntity(tag.getInt("Owner"))); + this.setOwner(this.getLightningBolt().level().getEntity(tag.getInt("Owner"))); } } diff --git a/src/main/java/com/aetherteam/aether/capability/player/AetherPlayerCapability.java b/src/main/java/com/aetherteam/aether/capability/player/AetherPlayerCapability.java index 3461287a35..1b1b860597 100644 --- a/src/main/java/com/aetherteam/aether/capability/player/AetherPlayerCapability.java +++ b/src/main/java/com/aetherteam/aether/capability/player/AetherPlayerCapability.java @@ -248,7 +248,7 @@ public void onLogin() { */ @Override public void onJoinLevel() { - if (this.getPlayer().getLevel().isClientSide()) { + if (this.getPlayer().level().isClientSide()) { CustomizationsOptions.INSTANCE.load(); } } @@ -330,7 +330,7 @@ private void handleGivePortal() { * On the client, this will also help to set the portal overlay. */ private void handleAetherPortal() { - if (this.getPlayer().getLevel().isClientSide()) { + if (this.getPlayer().level().isClientSide()) { this.prevPortalAnimTime = this.portalAnimTime; Minecraft minecraft = Minecraft.getInstance(); if (this.isInAetherPortal) { @@ -349,7 +349,7 @@ private void handleAetherPortal() { if (this.isInPortal()) { ++this.aetherPortalTimer; - if (this.getPlayer().getLevel().isClientSide()) { + if (this.getPlayer().level().isClientSide()) { this.portalAnimTime += 0.0125F; if (this.getPortalAnimTime() > 1.0F) { this.portalAnimTime = 1.0F; @@ -358,7 +358,7 @@ private void handleAetherPortal() { this.isInAetherPortal = false; } else { - if (this.getPlayer().getLevel().isClientSide()) { + if (this.getPlayer().level().isClientSide()) { if (this.getPortalAnimTime() > 0.0F) { this.portalAnimTime -= 0.05F; } @@ -388,7 +388,7 @@ private void playPortalSound(Minecraft minecraft) { private void activateParachute() { Player player = this.getPlayer(); Inventory inventory = this.getPlayer().getInventory(); - Level level = player.getLevel(); + Level level = player.level(); if (!player.isCreative() && !player.isShiftKeyDown() && !player.isFallFlying() && !player.isPassenger()) { if (player.getDeltaMovement().y() < -1.5) { if (inventory.contains(AetherTags.Items.DEPLOYABLE_PARACHUTES)) { @@ -417,7 +417,7 @@ private void activateParachute() { * Slowly removes darts that are rendered as stuck on the player by {@link com.aetherteam.aether.client.renderer.player.layer.DartLayer}. */ private void handleRemoveDarts() { - if (!this.getPlayer().getLevel().isClientSide()) { + if (!this.getPlayer().level().isClientSide()) { if (this.getGoldenDartCount() > 0) { if (this.removeGoldenDartTime <= 0) { this.removeGoldenDartTime = 20 * (30 - this.getGoldenDartCount()); @@ -463,7 +463,7 @@ private void removeRemedyDuration() { * Decreases the opacity of the Shield of Repulsion overlay vignette. */ private void tickDownProjectileImpact() { - if (this.getPlayer().getLevel().isClientSide()) { + if (this.getPlayer().level().isClientSide()) { if (this.getProjectileImpactedTimer() > 0) { this.setProjectileImpactedTimer(this.getProjectileImpactedTimer() - 1); } else { @@ -477,7 +477,7 @@ private void tickDownProjectileImpact() { * Handles the rotation for the Valkyrie Armor wings layer renderer at {@link com.aetherteam.aether.client.renderer.player.layer.PlayerWingsLayer}. */ private void handleWingRotation() { - if (this.getPlayer().getLevel().isClientSide()) { + if (this.getPlayer().level().isClientSide()) { this.wingRotationO = this.getWingRotation(); if (EquipmentUtil.hasFullValkyrieSet(this.getPlayer())) { this.wingRotation = this.getPlayer().tickCount; @@ -491,7 +491,7 @@ private void handleWingRotation() { * Decreases the attack cooldown after a player has attacked. This is used for when the player has attacked while wearing an Invisibility Cloak. */ private void handleAttackCooldown() { - if (!this.getPlayer().getLevel().isClientSide()) { + if (!this.getPlayer().level().isClientSide()) { if (this.attackedWithInvisibility()) { --this.invisibilityAttackCooldown; if (this.invisibilityAttackCooldown <= 0) { @@ -507,7 +507,7 @@ private void handleAttackCooldown() { * Used for healing the player with a Vampire Blade. This method exists to get around a bug with heart rendering. */ private void handleVampireHealing() { - if (!this.getPlayer().getLevel().isClientSide() && this.performVampireHealing()) { + if (!this.getPlayer().level().isClientSide() && this.performVampireHealing()) { this.getPlayer().heal(1.0F); this.setVampireHealing(false); } @@ -541,10 +541,10 @@ private void removeAerbunny() { */ private void remountAerbunny() { if (this.getMountedAerbunnyTag() != null) { - if (!this.getPlayer().getLevel().isClientSide()) { - Aerbunny aerbunny = new Aerbunny(AetherEntityTypes.AERBUNNY.get(), this.getPlayer().getLevel()); + if (!this.getPlayer().level().isClientSide()) { + Aerbunny aerbunny = new Aerbunny(AetherEntityTypes.AERBUNNY.get(), this.getPlayer().level()); aerbunny.load(this.getMountedAerbunnyTag()); - this.getPlayer().getLevel().addFreshEntity(aerbunny); + this.getPlayer().level().addFreshEntity(aerbunny); aerbunny.startRiding(this.getPlayer()); this.setMountedAerbunny(aerbunny); if (this.getPlayer() instanceof ServerPlayer serverPlayer) { @@ -583,7 +583,7 @@ private void handleSavedHealth() { * Sets up the attribute modifier for extra Life Shard hearts. */ private void handleLifeShardModifier() { - if (!this.getPlayer().getLevel().isClientSide()) { + if (!this.getPlayer().level().isClientSide()) { AttributeInstance health = this.getPlayer().getAttribute(Attributes.MAX_HEALTH); AttributeModifier lifeShardHealth = this.getLifeShardHealthAttributeModifier(); if (health != null) { @@ -624,7 +624,7 @@ private void handlePatreonMessage() { if (this.getPlayer() instanceof ServerPlayer serverPlayer) { if (AetherConfig.COMMON.show_patreon_message.get() && this.canShowPatreonMessage) { if (this.loginsUntilPatreonMessage < 0) { - if (serverPlayer.getLevel().dimension() == AetherDimensions.AETHER_LEVEL + if (serverPlayer.level().dimension() == AetherDimensions.AETHER_LEVEL && (serverPlayer.getStats().getValue(Stats.ENTITY_KILLED.get(AetherEntityTypes.SLIDER.get())) > 0 || serverPlayer.getStats().getValue(Stats.ENTITY_KILLED.get(AetherEntityTypes.VALKYRIE_QUEEN.get())) > 0 || serverPlayer.getStats().getValue(Stats.ENTITY_KILLED.get(AetherEntityTypes.SUN_SPIRIT.get())) > 0)) { @@ -1140,7 +1140,7 @@ public AttributeModifier getLifeShardHealthAttributeModifier() { * @param cloudMinionLeft The left {@link CloudMinion}. */ private void sendCloudMinionPacket(CloudMinion cloudMinionRight, CloudMinion cloudMinionLeft) { - if (this.getPlayer() instanceof ServerPlayer serverPlayer && !this.getPlayer().level.isClientSide) { + if (this.getPlayer() instanceof ServerPlayer serverPlayer && !this.getPlayer().level().isClientSide) { PacketRelay.sendToPlayer(AetherPacketHandler.INSTANCE, new CloudMinionPacket(this.getPlayer().getId(), cloudMinionRight.getId(), cloudMinionLeft.getId()), serverPlayer); } } diff --git a/src/main/java/com/aetherteam/aether/client/AetherMusicManager.java b/src/main/java/com/aetherteam/aether/client/AetherMusicManager.java index 2331b439c4..43a600e5ba 100644 --- a/src/main/java/com/aetherteam/aether/client/AetherMusicManager.java +++ b/src/main/java/com/aetherteam/aether/client/AetherMusicManager.java @@ -104,7 +104,7 @@ public static Music getSituationalMusic() { } else if (isVanillaWorldPreviewEnabled()) { // Play Minecraft menu music when the Minecraft menu world preview is enabled. return Menus.MINECRAFT.get().getMusic(); } else if (minecraft.player != null) { // Otherwise replace creative music with biome music in the Aether. - Holder holder = minecraft.player.getLevel().getBiome(minecraft.player.blockPosition()); + Holder holder = minecraft.player.level().getBiome(minecraft.player.blockPosition()); if (isCreative(holder, minecraft.player)) { return (holder.value().getBackgroundMusic().orElse(Musics.GAME)); } @@ -139,7 +139,7 @@ public static boolean isWorldPreviewEnabled() { * Based on vanilla creative music checks, but also checks if the biome plays Aether music. */ public static boolean isCreative(Holder holder, Player player) { - return player.getLevel().dimension() != Level.END && player.getLevel().dimension() != Level.NETHER && holder.is(AetherTags.Biomes.AETHER_MUSIC) + return player.level().dimension() != Level.END && player.level().dimension() != Level.NETHER && holder.is(AetherTags.Biomes.AETHER_MUSIC) && !musicManager.isPlayingMusic(Musics.UNDER_WATER) && (!player.isUnderWater() || !holder.is(BiomeTags.PLAYS_UNDERWATER_MUSIC)) && player.getAbilities().instabuild && player.getAbilities().mayfly; } diff --git a/src/main/java/com/aetherteam/aether/client/event/hooks/DimensionClientHooks.java b/src/main/java/com/aetherteam/aether/client/event/hooks/DimensionClientHooks.java index 885d500c19..0ae5132fc3 100644 --- a/src/main/java/com/aetherteam/aether/client/event/hooks/DimensionClientHooks.java +++ b/src/main/java/com/aetherteam/aether/client/event/hooks/DimensionClientHooks.java @@ -30,7 +30,7 @@ public class DimensionClientHooks { */ @Nullable public static Float renderNearFog(Camera camera, FogRenderer.FogMode mode, float farDistance) { - if (camera.getEntity().getLevel() instanceof ClientLevel clientLevel) { + if (camera.getEntity().level() instanceof ClientLevel clientLevel) { if (clientLevel.effects() instanceof AetherSkyRenderEffects) { FogType fluidState = camera.getFluidInCamera(); if (mode == FogRenderer.FogMode.FOG_TERRAIN && fluidState == FogType.NONE) { @@ -50,7 +50,7 @@ public static Float renderNearFog(Camera camera, FogRenderer.FogMode mode, float */ @Nullable public static Float reduceLavaFog(Camera camera, float nearDistance) { - if (camera.getEntity().getLevel() instanceof ClientLevel) { + if (camera.getEntity().level() instanceof ClientLevel) { if (camera.getEntity() instanceof LivingEntity livingEntity && EquipmentUtil.hasFullPhoenixSet(livingEntity)) { FogType fluidState = camera.getFluidInCamera(); if (fluidState == FogType.LAVA) { @@ -73,7 +73,7 @@ public static Float reduceLavaFog(Camera camera, float nearDistance) { */ @Nullable public static Triple renderFogColors(Camera camera, float red, float green, float blue) { - if (camera.getEntity().getLevel() instanceof ClientLevel clientLevel) { + if (camera.getEntity().level() instanceof ClientLevel clientLevel) { if (clientLevel.effects() instanceof AetherSkyRenderEffects) { ClientLevel.ClientLevelData worldInfo = clientLevel.getLevelData(); double d0 = (camera.getPosition().y() - (double) clientLevel.getMinBuildHeight()) * worldInfo.getClearColorScale(); @@ -103,7 +103,7 @@ public static Triple renderFogColors(Camera camera, float r */ @Nullable public static Triple adjustWeatherFogColors(Camera camera, float red, float green, float blue) { - if (camera.getEntity().getLevel() instanceof ClientLevel clientLevel) { + if (camera.getEntity().level() instanceof ClientLevel clientLevel) { if (clientLevel.effects() instanceof AetherSkyRenderEffects) { FogType fluidState = camera.getFluidInCamera(); if (fluidState == FogType.NONE) { diff --git a/src/main/java/com/aetherteam/aether/client/event/hooks/GuiHooks.java b/src/main/java/com/aetherteam/aether/client/event/hooks/GuiHooks.java index 41fe780f38..da30615b9d 100644 --- a/src/main/java/com/aetherteam/aether/client/event/hooks/GuiHooks.java +++ b/src/main/java/com/aetherteam/aether/client/event/hooks/GuiHooks.java @@ -17,11 +17,9 @@ import com.aetherteam.nitrogen.api.users.UserData; import com.aetherteam.nitrogen.network.PacketRelay; import com.mojang.blaze3d.platform.InputConstants; -import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.blaze3d.vertex.PoseStack; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.Font; -import net.minecraft.client.gui.GuiComponent; +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.ImageButton; import net.minecraft.client.gui.components.LerpingBossEvent; import net.minecraft.client.gui.components.Tooltip; @@ -186,10 +184,10 @@ private static void createCustomizationsButton(Screen screen, GridLayout.RowHelp /** * Generates and draws the Aether's trivia lines in various loading screens. * @param screen The current {@link Screen}. - * @param poseStack The link rendering {@link PoseStack}. - * @see com.aetherteam.aether.client.event.listeners.GuiListener#onGuiDraw(ScreenEvent.Render) + * @param guiGraphics The rendering {@link GuiGraphics}. + * @see com.aetherteam.aether.client.event.listeners.GuiListener#onGuiDraw(ScreenEvent.Render.Post) */ - public static void drawTrivia(Screen screen, PoseStack poseStack) { + public static void drawTrivia(Screen screen, GuiGraphics guiGraphics) { generateTrivia(screen); if (screen instanceof GenericDirtMessageScreen || screen instanceof LevelLoadingScreen || screen instanceof ReceivingLevelScreen) { Component triviaLine = Aether.TRIVIA_READER.getTriviaLine(); // Get the current trivia line to display. @@ -197,7 +195,7 @@ public static void drawTrivia(Screen screen, PoseStack poseStack) { Font font = Minecraft.getInstance().font; int y = (screen.height - 7) - font.wordWrapHeight(triviaLine, screen.width); for (FormattedCharSequence sequence : font.split(triviaLine, screen.width)) { - Screen.drawCenteredString(poseStack, font, sequence, screen.width / 2, y, 16777113); + guiGraphics.drawCenteredString(font, sequence, screen.width / 2, y, 16777113); y += 9; } } @@ -236,17 +234,17 @@ private static void generateTrivia(Screen screen) { * Draws text for leaving and entering the Aether. * Checks for when to display different text are handled by {@link DimensionHooks}. * @param screen The current {@link Screen}. - * @param poseStack The link rendering {@link PoseStack}. - * @see com.aetherteam.aether.client.event.listeners.GuiListener#onGuiDraw(ScreenEvent.Render) + * @param guiGraphics The rendering {@link GuiGraphics}. + * @see com.aetherteam.aether.client.event.listeners.GuiListener#onGuiDraw(ScreenEvent.Render.Post) */ - public static void drawAetherTravelMessage(Screen screen, PoseStack poseStack) { + public static void drawAetherTravelMessage(Screen screen, GuiGraphics guiGraphics) { if (screen instanceof ReceivingLevelScreen || screen instanceof ProgressScreen) { if (Minecraft.getInstance().player != null) { if (DimensionHooks.displayAetherTravel) { if (DimensionHooks.playerLeavingAether) { - Screen.drawCenteredString(poseStack, screen.getMinecraft().font, Component.translatable("gui.aether.descending"), screen.width / 2, 50, 16777215); + guiGraphics.drawCenteredString(screen.getMinecraft().font, Component.translatable("gui.aether.descending"), screen.width / 2, 50, 16777215); } else { - Screen.drawCenteredString(poseStack, screen.getMinecraft().font, Component.translatable("gui.aether.ascending"), screen.width / 2, 50, 16777215); + guiGraphics.drawCenteredString(screen.getMinecraft().font, Component.translatable("gui.aether.ascending"), screen.width / 2, 50, 16777215); } } } @@ -274,7 +272,7 @@ public static void handlePatreonRefreshRebound() { */ public static void openAccessoryMenu() { Minecraft minecraft = Minecraft.getInstance(); - if (minecraft.player != null && minecraft.getOverlay() == null && (minecraft.screen == null || minecraft.screen.passEvents)) { + if (minecraft.player != null && minecraft.getOverlay() == null && minecraft.screen == null) { if (!AetherConfig.CLIENT.disable_accessory_button.get() && AetherKeys.OPEN_ACCESSORY_INVENTORY.consumeClick()) { PacketRelay.sendToServer(AetherPacketHandler.INSTANCE, new OpenAccessoriesPacket(ItemStack.EMPTY)); shouldAddButton = false; // The AccessoryButton is not added to menus opened with the key. @@ -290,7 +288,7 @@ public static void openAccessoryMenu() { */ public static void closeContainerMenu(int key, int action) { Minecraft minecraft = Minecraft.getInstance(); - if (minecraft.screen instanceof AbstractContainerScreen abstractContainerScreen && !abstractContainerScreen.passEvents) { + if (minecraft.screen instanceof AbstractContainerScreen abstractContainerScreen) { if (!AetherConfig.CLIENT.disable_accessory_button.get() && AetherKeys.OPEN_ACCESSORY_INVENTORY.getKey().getValue() == key && (action == InputConstants.PRESS || action == InputConstants.REPEAT)) { abstractContainerScreen.onClose(); } @@ -298,31 +296,29 @@ public static void closeContainerMenu(int key, int action) { } /** - * [CODE COPY] - {@link net.minecraft.client.gui.components.BossHealthOverlay#render(PoseStack)} + * [CODE COPY] - {@link net.minecraft.client.gui.components.BossHealthOverlay#render(GuiGraphics)} * Modified to draw the Aether's custom boss health bars. * @see com.aetherteam.aether.client.event.listeners.GuiListener#onRenderBossBar(CustomizeGuiOverlayEvent.BossEventProgress) */ - public static void drawBossHealthBar(PoseStack poseStack, int x, int y, LerpingBossEvent bossEvent) { - RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); - RenderSystem.setShaderTexture(0, AETHER_BARS_LOCATION); - drawBar(poseStack, x + 2, y + 2, bossEvent); + public static void drawBossHealthBar(GuiGraphics guiGraphics, int x, int y, LerpingBossEvent bossEvent) { + drawBar(guiGraphics, x + 2, y + 2, bossEvent); Component component = bossEvent.getName(); int nameLength = Minecraft.getInstance().font.width(component); int nameX = Minecraft.getInstance().getWindow().getGuiScaledWidth() / 2 - nameLength / 2; int nameY = y - 9; - Minecraft.getInstance().font.drawShadow(poseStack, component, (float) nameX, (float) nameY, 16777215); + guiGraphics.drawString(Minecraft.getInstance().font, component, nameX, nameY, 16777215); } /** - * [CODE COPY] - {@link net.minecraft.client.gui.components.BossHealthOverlay#drawBar(PoseStack, int, int, BossEvent)} + * [CODE COPY] - {@link net.minecraft.client.gui.components.BossHealthOverlay#drawBar(GuiGraphics, int, int, BossEvent)} * This version of the method doesn't account for other types of boss bars because the Aether only has one. */ - public static void drawBar(PoseStack poseStack, int x, int y, BossEvent pBossEvent) { + public static void drawBar(GuiGraphics guiGraphics, int x, int y, BossEvent pBossEvent) { x -= 37; // The default boss health bar is offset by -91. We need -128. - GuiComponent.blit(poseStack, x, y, -90, 0, 16, 256, 16, 256, 256); + guiGraphics.blit(AETHER_BARS_LOCATION, x, y, -90, 0, 16, 256, 16, 256, 256); int health = (int) (pBossEvent.getProgress() * 256.0F); if (health > 0) { - GuiComponent.blit(poseStack, x, y, -90, 0, 0, health, 16, 256, 256); + guiGraphics.blit(AETHER_BARS_LOCATION, x, y, -90, 0, 0, health, 16, 256, 256); } } diff --git a/src/main/java/com/aetherteam/aether/client/event/hooks/HandRenderHooks.java b/src/main/java/com/aetherteam/aether/client/event/hooks/HandRenderHooks.java index e777f2dd36..1ba8545916 100644 --- a/src/main/java/com/aetherteam/aether/client/event/hooks/HandRenderHooks.java +++ b/src/main/java/com/aetherteam/aether/client/event/hooks/HandRenderHooks.java @@ -3,6 +3,7 @@ import com.aetherteam.aether.capability.player.AetherPlayer; import com.aetherteam.aether.client.renderer.accessory.GlovesRenderer; import com.aetherteam.aether.client.renderer.accessory.ShieldOfRepulsionRenderer; +import com.aetherteam.aether.item.EquipmentUtil; import com.aetherteam.aether.item.accessories.gloves.GlovesItem; import com.aetherteam.aether.item.accessories.miscellaneous.ShieldOfRepulsionItem; import com.aetherteam.aether.mixin.mixins.client.accessor.ItemInHandRendererAccessor; @@ -41,11 +42,11 @@ public static void renderGloveHandOverlay(ItemInHandRenderer itemInHandRenderer, if (player != null) { AetherPlayer.get(player).ifPresent((aetherPlayer) -> { if (!aetherPlayer.isWearingInvisibilityCloak()) { // Check for Invisibility Cloak. - CuriosApi.getCuriosHelper().findFirstCurio(player, (item) -> item.getItem() instanceof GlovesItem).ifPresent((slotResult) -> { + EquipmentUtil.findFirstCurio(player, (item) -> item.getItem() instanceof GlovesItem).ifPresent((slotResult) -> { String identifier = slotResult.slotContext().identifier(); int id = slotResult.slotContext().index(); ItemStack itemStack = slotResult.stack(); - CuriosApi.getCuriosHelper().getCuriosHandler(player).ifPresent(handler -> handler.getStacksHandler(identifier).ifPresent(stacksHandler -> { + CuriosApi.getCuriosInventory(player).ifPresent(handler -> handler.getStacksHandler(identifier).ifPresent(stacksHandler -> { if (stacksHandler.getRenders().get(id)) { // Check if Gloves are visible. CuriosRendererRegistry.getRenderer(itemStack.getItem()).ifPresent((renderer) -> { if (renderer instanceof GlovesRenderer glovesRenderer) { @@ -78,11 +79,11 @@ public static void renderShieldOfRepulsionHandOverlay(ItemInHandRenderer itemInH if (player != null) { AetherPlayer.get(player).ifPresent((aetherPlayer) -> { if (!aetherPlayer.isWearingInvisibilityCloak()) { // Check for Invisibility Cloak. - CuriosApi.getCuriosHelper().findFirstCurio(player, (item) -> item.getItem() instanceof ShieldOfRepulsionItem).ifPresent((slotResult) -> { + EquipmentUtil.findFirstCurio(player, (item) -> item.getItem() instanceof ShieldOfRepulsionItem).ifPresent((slotResult) -> { String identifier = slotResult.slotContext().identifier(); int id = slotResult.slotContext().index(); ItemStack itemStack = slotResult.stack(); - CuriosApi.getCuriosHelper().getCuriosHandler(player).ifPresent(handler -> handler.getStacksHandler(identifier).ifPresent(stacksHandler -> { + CuriosApi.getCuriosInventory(player).ifPresent(handler -> handler.getStacksHandler(identifier).ifPresent(stacksHandler -> { if (stacksHandler.getRenders().get(id)) { // Check if Shield of Repulsion is visible. CuriosRendererRegistry.getRenderer(itemStack.getItem()).ifPresent((renderer) -> { if (renderer instanceof ShieldOfRepulsionRenderer shieldRenderer) { diff --git a/src/main/java/com/aetherteam/aether/client/event/hooks/WorldPreviewHooks.java b/src/main/java/com/aetherteam/aether/client/event/hooks/WorldPreviewHooks.java index 4dd27c1867..7f716cdec9 100644 --- a/src/main/java/com/aetherteam/aether/client/event/hooks/WorldPreviewHooks.java +++ b/src/main/java/com/aetherteam/aether/client/event/hooks/WorldPreviewHooks.java @@ -33,7 +33,7 @@ public static void setupWorldPreview(Screen screen) { * doesn't show up briefly during the loading screen process when the world preview is being set up. * @param screen The currently rendered {@link Screen}. * @return Whether to hide the screen, as a {@link Boolean}. - * @see com.aetherteam.aether.client.event.listeners.WorldPreviewListener#onScreenRender(ScreenEvent.Render) + * @see com.aetherteam.aether.client.event.listeners.WorldPreviewListener#onScreenRender(ScreenEvent.Render.Pre) */ public static boolean hideScreen(Screen screen) { return screen instanceof TitleScreen && AetherConfig.CLIENT.enable_world_preview.get() && Minecraft.getInstance().level == null; diff --git a/src/main/java/com/aetherteam/aether/client/event/listeners/GuiListener.java b/src/main/java/com/aetherteam/aether/client/event/listeners/GuiListener.java index 0048e8f21d..0ca62078f7 100644 --- a/src/main/java/com/aetherteam/aether/client/event/listeners/GuiListener.java +++ b/src/main/java/com/aetherteam/aether/client/event/listeners/GuiListener.java @@ -4,7 +4,7 @@ import com.aetherteam.aether.client.event.hooks.GuiHooks; import com.aetherteam.aether.client.gui.component.inventory.AccessoryButton; import com.aetherteam.aether.client.gui.screen.inventory.AccessoriesScreen; -import com.mojang.blaze3d.vertex.PoseStack; +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.LerpingBossEvent; import net.minecraft.client.gui.layouts.GridLayout; import net.minecraft.client.gui.screens.Screen; @@ -44,15 +44,15 @@ public static void onGuiInitialize(ScreenEvent.Init.Post event) { } /** - * @see GuiHooks#drawTrivia(Screen, PoseStack) - * @see GuiHooks#drawAetherTravelMessage(Screen, PoseStack) + * @see GuiHooks#drawTrivia(Screen, GuiGraphics) + * @see GuiHooks#drawAetherTravelMessage(Screen, GuiGraphics) */ @SubscribeEvent - public static void onGuiDraw(ScreenEvent.Render event) { + public static void onGuiDraw(ScreenEvent.Render.Post event) { Screen screen = event.getScreen(); - PoseStack poseStack = event.getPoseStack(); - GuiHooks.drawTrivia(screen, poseStack); - GuiHooks.drawAetherTravelMessage(screen, poseStack); + GuiGraphics guiGraphics = event.getGuiGraphics(); + GuiHooks.drawTrivia(screen, guiGraphics); + GuiHooks.drawAetherTravelMessage(screen, guiGraphics); } /** @@ -78,14 +78,15 @@ public static void onKeyPress(InputEvent.Key event) { /** * This event is cancelled in BossHealthOverlayMixin. See it for more info. * @see com.aetherteam.aether.mixin.mixins.client.BossHealthOverlayMixin#event(CustomizeGuiOverlayEvent.BossEventProgress) - * @see GuiHooks#drawBossHealthBar(PoseStack, int, int, LerpingBossEvent) + * @see GuiHooks#drawBossHealthBar(GuiGraphics, int, int, LerpingBossEvent) */ @SubscribeEvent public static void onRenderBossBar(CustomizeGuiOverlayEvent.BossEventProgress event) { + GuiGraphics guiGraphics = event.getGuiGraphics(); LerpingBossEvent bossEvent = event.getBossEvent(); UUID bossUUID = bossEvent.getId(); if (GuiHooks.isAetherBossBar(bossUUID)) { - GuiHooks.drawBossHealthBar(event.getPoseStack(), event.getX(), event.getY(), bossEvent); + GuiHooks.drawBossHealthBar(guiGraphics, event.getX(), event.getY(), bossEvent); event.setIncrement(event.getIncrement() + 13); } } diff --git a/src/main/java/com/aetherteam/aether/client/event/listeners/WorldPreviewListener.java b/src/main/java/com/aetherteam/aether/client/event/listeners/WorldPreviewListener.java index 0b5671708e..74bc435f99 100644 --- a/src/main/java/com/aetherteam/aether/client/event/listeners/WorldPreviewListener.java +++ b/src/main/java/com/aetherteam/aether/client/event/listeners/WorldPreviewListener.java @@ -30,7 +30,7 @@ public static void onGuiOpenLowest(ScreenEvent.Opening event) { * @see WorldPreviewHooks#hideScreen(Screen) */ @SubscribeEvent - public static void onScreenRender(ScreenEvent.Render event) { + public static void onScreenRender(ScreenEvent.Render.Pre event) { Screen screen = event.getScreen(); if (WorldPreviewHooks.hideScreen(screen)) { event.setCanceled(true); diff --git a/src/main/java/com/aetherteam/aether/client/gui/component/customization/ColorBox.java b/src/main/java/com/aetherteam/aether/client/gui/component/customization/ColorBox.java index 6c415464ec..89ffa4e9c0 100644 --- a/src/main/java/com/aetherteam/aether/client/gui/component/customization/ColorBox.java +++ b/src/main/java/com/aetherteam/aether/client/gui/component/customization/ColorBox.java @@ -1,8 +1,8 @@ package com.aetherteam.aether.client.gui.component.customization; import com.aetherteam.aether.client.gui.screen.perks.AetherCustomizationsScreen; -import com.mojang.blaze3d.vertex.PoseStack; import net.minecraft.client.gui.Font; +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.EditBox; import net.minecraft.network.chat.Component; @@ -17,7 +17,7 @@ public ColorBox(AetherCustomizationsScreen screen, Font font, int x, int y, int } @Override - public void renderWidget(PoseStack poseStack, int mouseX, int mouseY, float partialTicks) { + public void renderWidget(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTicks) { if (this.getValue().length() == 6) { try { // Attempt to parse the input as a valid hex code and convert it to decimal. int decimal = Integer.parseInt(this.getValue(), 16); @@ -34,7 +34,7 @@ public void renderWidget(PoseStack poseStack, int mouseX, int mouseY, float part this.setTextColor(14737632); this.hasValidColor = false; } - super.renderWidget(poseStack, mouseX, mouseY, partialTicks); + super.renderWidget(guiGraphics, mouseX, mouseY, partialTicks); } public boolean hasValidColor() { diff --git a/src/main/java/com/aetherteam/aether/client/gui/component/customization/InactiveImageButton.java b/src/main/java/com/aetherteam/aether/client/gui/component/customization/InactiveImageButton.java index ddc9c47308..65c76528c2 100644 --- a/src/main/java/com/aetherteam/aether/client/gui/component/customization/InactiveImageButton.java +++ b/src/main/java/com/aetherteam/aether/client/gui/component/customization/InactiveImageButton.java @@ -1,10 +1,7 @@ package com.aetherteam.aether.client.gui.component.customization; -import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.blaze3d.vertex.PoseStack; -import net.minecraft.client.gui.GuiComponent; +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.ImageButton; -import net.minecraft.client.renderer.GameRenderer; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; @@ -14,20 +11,17 @@ public InactiveImageButton(int x, int y, int width, int height, int xTexStart, i } /** - * [CODE COPY] - {@link net.minecraft.client.gui.components.AbstractWidget#renderTexture(PoseStack, ResourceLocation, int, int, int, int, int, int, int, int, int)}.

+ * [CODE COPY] - {@link net.minecraft.client.gui.components.AbstractWidget#renderTexture(GuiGraphics, ResourceLocation, int, int, int, int, int, int, int, int, int)}.

* Supports a third texture for the inactive state of this image button. */ @Override - public void renderWidget(PoseStack poseStack, int mouseX, int mouseY, float partialTicks) { - RenderSystem.setShader(GameRenderer::getPositionTexShader); - RenderSystem.setShaderTexture(0, this.resourceLocation); + public void renderWidget(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTicks) { int v = this.yTexStart; if (!this.isActive()) { v -= this.yDiffTex; } else if (this.isHoveredOrFocused()) { v += this.yDiffTex; } - RenderSystem.enableDepthTest(); - GuiComponent.blit(poseStack, this.getX(), this.getY(), (float) this.xTexStart, (float) v, this.width, this.height, this.textureWidth, this.textureHeight); + guiGraphics.blit(this.resourceLocation, this.getX(), this.getY(), (float) this.xTexStart, (float) v, this.width, this.height, this.textureWidth, this.textureHeight); } } \ No newline at end of file diff --git a/src/main/java/com/aetherteam/aether/client/gui/component/dialogue/DialogueAnswerComponent.java b/src/main/java/com/aetherteam/aether/client/gui/component/dialogue/DialogueAnswerComponent.java index e52fb1e238..08fb34a938 100644 --- a/src/main/java/com/aetherteam/aether/client/gui/component/dialogue/DialogueAnswerComponent.java +++ b/src/main/java/com/aetherteam/aether/client/gui/component/dialogue/DialogueAnswerComponent.java @@ -1,8 +1,7 @@ package com.aetherteam.aether.client.gui.component.dialogue; -import com.mojang.blaze3d.vertex.PoseStack; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiComponent; +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.network.chat.Component; import net.minecraft.util.FormattedCharSequence; @@ -12,7 +11,7 @@ /** * A widget to handle an NPC's name and their response inside the dialogue screen. */ -public class DialogueAnswerComponent extends GuiComponent { +public class DialogueAnswerComponent { private final List splitLines; public int height; @@ -21,8 +20,8 @@ public DialogueAnswerComponent(Component message) { this.updateDialogue(message); } - public void render(PoseStack poseStack) { - this.splitLines.forEach(element -> element.render(poseStack)); + public void render(GuiGraphics guiGraphics) { + this.splitLines.forEach(element -> element.render(guiGraphics)); } /** @@ -64,9 +63,9 @@ public NpcDialogueElement(int x, int y, int width, FormattedCharSequence text) { this.width = width; } - public void render(PoseStack poseStack) { - GuiComponent.fillGradient(poseStack, this.x, this.y, this.x + width, this.y + 12, 0x66000000, 0x66000000); - GuiComponent.drawString(poseStack, Minecraft.getInstance().font, this.text, this.x + 1, this.y + 1, 0xFFFFFF); + public void render(GuiGraphics guiGraphics) { + guiGraphics.fillGradient(this.x, this.y, this.x + width, this.y + 12, 0x66000000, 0x66000000); + guiGraphics.drawString(Minecraft.getInstance().font, this.text, this.x + 1, this.y + 1, 0xFFFFFF); } } } diff --git a/src/main/java/com/aetherteam/aether/client/gui/component/dialogue/DialogueChoiceComponent.java b/src/main/java/com/aetherteam/aether/client/gui/component/dialogue/DialogueChoiceComponent.java index 6ad25c61b6..d909933fc1 100644 --- a/src/main/java/com/aetherteam/aether/client/gui/component/dialogue/DialogueChoiceComponent.java +++ b/src/main/java/com/aetherteam/aether/client/gui/component/dialogue/DialogueChoiceComponent.java @@ -1,8 +1,7 @@ package com.aetherteam.aether.client.gui.component.dialogue; -import com.mojang.blaze3d.vertex.PoseStack; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiComponent; +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.Button; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.MutableComponent; @@ -17,9 +16,9 @@ public DialogueChoiceComponent(MutableComponent message, Button.OnPress onPress) } @Override - public void renderWidget(PoseStack poseStack, int mouseX, int mouseY, float partialTicks) { - GuiComponent.fillGradient(poseStack, this.getX(), this.getY(), this.getX() + this.width, this.getY() + this.height, 0x66000000, 0x66000000); - GuiComponent.drawString(poseStack, Minecraft.getInstance().font, this.getMessage(), this.getX() + 1, this.getY() + 1, this.isHovered() ? 0xFFFF55: 0xFFFFFF); + public void renderWidget(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTicks) { + guiGraphics.fillGradient(this.getX(), this.getY(), this.getX() + this.width, this.getY() + this.height, 0x66000000, 0x66000000); + guiGraphics.drawString(Minecraft.getInstance().font, this.getMessage(), this.getX() + 1, this.getY() + 1, this.isHovered() ? 0xFFFF55: 0xFFFFFF); } public static MutableComponent appendBrackets(MutableComponent component) { diff --git a/src/main/java/com/aetherteam/aether/client/gui/component/inventory/AccessoryButton.java b/src/main/java/com/aetherteam/aether/client/gui/component/inventory/AccessoryButton.java index 80a93aa318..4da27ac118 100644 --- a/src/main/java/com/aetherteam/aether/client/gui/component/inventory/AccessoryButton.java +++ b/src/main/java/com/aetherteam/aether/client/gui/component/inventory/AccessoryButton.java @@ -5,8 +5,8 @@ import com.aetherteam.aether.network.packet.serverbound.OpenAccessoriesPacket; import com.aetherteam.aether.network.packet.serverbound.OpenInventoryPacket; import com.aetherteam.nitrogen.network.PacketRelay; -import com.mojang.blaze3d.vertex.PoseStack; import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.ImageButton; import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; import net.minecraft.client.gui.screens.inventory.CreativeModeInventoryScreen; @@ -46,7 +46,7 @@ public AccessoryButton(AbstractContainerScreen parentScreen, int x, int y, Re } @Override - public void render(PoseStack pPoseStack, int pMouseX, int pMouseY, float pPartialTick) { + public void render(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTicks) { Tuple offsets = AccessoriesScreen.getButtonOffset(this.parentScreen); this.setX(this.parentScreen.getGuiLeft() + offsets.getA()); this.setY(this.parentScreen.getGuiTop() + offsets.getB()); @@ -54,14 +54,14 @@ public void render(PoseStack pPoseStack, int pMouseX, int pMouseY, float pPartia boolean isInventoryTab = screen.isInventoryOpen(); this.active = isInventoryTab; if (isInventoryTab) { - super.render(pPoseStack, pMouseX, pMouseY, pPartialTick); + super.render(guiGraphics, mouseX, mouseY, partialTicks); } } else if (this.parentScreen instanceof AccessoriesScreen screen) { if (screen.getMenu().hasButton) { - super.render(pPoseStack, pMouseX, pMouseY, pPartialTick); + super.render(guiGraphics, mouseX, mouseY, partialTicks); } } else { - super.render(pPoseStack, pMouseX, pMouseY, pPartialTick); + super.render(guiGraphics, mouseX, mouseY, partialTicks); } } } diff --git a/src/main/java/com/aetherteam/aether/client/gui/component/inventory/LorePageButton.java b/src/main/java/com/aetherteam/aether/client/gui/component/inventory/LorePageButton.java index 58ad0d3b43..3d307d718e 100644 --- a/src/main/java/com/aetherteam/aether/client/gui/component/inventory/LorePageButton.java +++ b/src/main/java/com/aetherteam/aether/client/gui/component/inventory/LorePageButton.java @@ -1,14 +1,11 @@ package com.aetherteam.aether.client.gui.component.inventory; import com.aetherteam.aether.Aether; -import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.blaze3d.vertex.PoseStack; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.Font; -import net.minecraft.client.gui.GuiComponent; +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.AbstractButton; import net.minecraft.client.gui.components.Button; -import net.minecraft.client.renderer.GameRenderer; import net.minecraft.resources.ResourceLocation; public class LorePageButton extends Button { @@ -26,16 +23,14 @@ public void onPress() { } @Override - public void renderWidget(PoseStack poseStack, int mouseX, int mouseY, float partialTicks) { + public void renderWidget(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTicks) { Minecraft minecraft = Minecraft.getInstance(); Font fontRenderer = minecraft.font; int textureY = this.getTextureY(); - RenderSystem.setShader(GameRenderer::getPositionTexShader); - RenderSystem.setShaderTexture(0, BUTTON_TEXTURES); - GuiComponent.blit(poseStack, this.getX(), this.getY(), 0, textureY, this.width / 2, this.height); - GuiComponent.blit(poseStack, this.getX() + this.width / 2, this.getY(), 200 - this.width / 2, textureY, this.width / 2, this.height); + guiGraphics.blit(BUTTON_TEXTURES, this.getX(), this.getY(), 0, textureY, this.width / 2, this.height); + guiGraphics.blit(BUTTON_TEXTURES, this.getX() + this.width / 2, this.getY(), 200 - this.width / 2, textureY, this.width / 2, this.height); int color = this.getFGColor(); - GuiComponent.drawCenteredString(poseStack, fontRenderer, this.getMessage(), this.getX() + this.width / 2, this.getY() + (this.height - 8) / 2, color | 255 << 24); + guiGraphics.drawCenteredString(fontRenderer, this.getMessage(), this.getX() + this.width / 2, this.getY() + (this.height - 8) / 2, color | 255 << 24); } /** diff --git a/src/main/java/com/aetherteam/aether/client/gui/component/menu/AetherMenuButton.java b/src/main/java/com/aetherteam/aether/client/gui/component/menu/AetherMenuButton.java index 93835dcb07..5d79cc0691 100644 --- a/src/main/java/com/aetherteam/aether/client/gui/component/menu/AetherMenuButton.java +++ b/src/main/java/com/aetherteam/aether/client/gui/component/menu/AetherMenuButton.java @@ -7,7 +7,7 @@ import com.mojang.blaze3d.vertex.PoseStack; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.Font; -import net.minecraft.client.gui.GuiComponent; +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.AbstractButton; import net.minecraft.client.gui.components.Button; import net.minecraft.resources.ResourceLocation; @@ -46,7 +46,8 @@ public AetherMenuButton(AetherTitleScreen screen, Button oldButton) { } @Override - public void renderWidget(PoseStack poseStack, int mouseX, int mouseY, float partialTick) { + public void renderWidget(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTick) { + PoseStack poseStack = guiGraphics.pose(); Minecraft minecraft = Minecraft.getInstance(); Font font = minecraft.font; int i = this.getTextureY(); @@ -63,14 +64,9 @@ public void renderWidget(PoseStack poseStack, int mouseX, int mouseY, float part } this.setHeight((int) (BUTTON_HEIGHT / scale)); - RenderSystem.setShaderTexture(0, AETHER_WIDGETS); - RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, this.alpha); RenderSystem.enableBlend(); - RenderSystem.defaultBlendFunc(); - RenderSystem.enableDepthTest(); - GuiComponent.blit(poseStack, this.getX() + this.hoverOffset, this.getY(), 0, Mth.ceil(i / scale), this.getWidth(), this.getHeight(), (int) (TEXTURE_SIZE / scale), (int) (TEXTURE_SIZE / scale)); - RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); - RenderSystem.disableDepthTest(); + guiGraphics.setColor(1.0F, 1.0F, 1.0F, this.alpha); + guiGraphics.blit(AETHER_WIDGETS, this.getX() + this.hoverOffset, this.getY(), 0, Mth.ceil(i / scale), this.getWidth(), this.getHeight(), (int) (TEXTURE_SIZE / scale), (int) (TEXTURE_SIZE / scale)); RenderSystem.disableBlend(); poseStack.pushPose(); @@ -79,7 +75,7 @@ public void renderWidget(PoseStack poseStack, int mouseX, int mouseY, float part float textY = this.getY() + (this.height - (8 * textScale)) / 2.0F; poseStack.translate(textX, textY, 0.0F); poseStack.scale(textScale, textScale, textScale); - GuiComponent.drawString(poseStack, font, this.getMessage(), 0, 0, this.getTextColor(mouseX, mouseY) | Mth.ceil(this.alpha * 255.0F) << 24); + guiGraphics.drawString(font, this.getMessage(), 0, 0, this.getTextColor(mouseX, mouseY) | Mth.ceil(this.alpha * 255.0F) << 24); poseStack.popPose(); } diff --git a/src/main/java/com/aetherteam/aether/client/gui/component/menu/DynamicMenuButton.java b/src/main/java/com/aetherteam/aether/client/gui/component/menu/DynamicMenuButton.java index e98e65fabb..bb7c217788 100644 --- a/src/main/java/com/aetherteam/aether/client/gui/component/menu/DynamicMenuButton.java +++ b/src/main/java/com/aetherteam/aether/client/gui/component/menu/DynamicMenuButton.java @@ -1,6 +1,6 @@ package com.aetherteam.aether.client.gui.component.menu; -import com.mojang.blaze3d.vertex.PoseStack; +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.Button; import net.minecraftforge.common.ForgeConfigSpec; @@ -22,11 +22,11 @@ public DynamicMenuButton(Builder builder) { } @Override - public void render(PoseStack poseStack, int mouseX, int mouseY, float partialTicks) { + public void render(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTicks) { if (this.shouldRender()) { this.enabled = true; this.setX(this.getOriginX() + gatherOffsets(this.offsetConfigs)); - super.render(poseStack, mouseX, mouseY, partialTicks); + super.render(guiGraphics, mouseX, mouseY, partialTicks); } else { this.enabled = false; } diff --git a/src/main/java/com/aetherteam/aether/client/gui/component/skins/ChangeSkinButton.java b/src/main/java/com/aetherteam/aether/client/gui/component/skins/ChangeSkinButton.java index 23f127cdd6..c108a89e0c 100644 --- a/src/main/java/com/aetherteam/aether/client/gui/component/skins/ChangeSkinButton.java +++ b/src/main/java/com/aetherteam/aether/client/gui/component/skins/ChangeSkinButton.java @@ -1,11 +1,8 @@ package com.aetherteam.aether.client.gui.component.skins; import com.aetherteam.aether.client.gui.screen.perks.MoaSkinsScreen; -import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.blaze3d.vertex.PoseStack; -import net.minecraft.client.gui.GuiComponent; +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.Button; -import net.minecraft.client.renderer.GameRenderer; public class ChangeSkinButton extends Button { private final ButtonType buttonType; @@ -23,9 +20,7 @@ public void onPress() { } @Override - public void renderWidget(PoseStack poseStack, int mouseX, int mouseY, float partialTicks) { - RenderSystem.setShader(GameRenderer::getPositionTexShader); - RenderSystem.setShaderTexture(0, MoaSkinsScreen.MOA_SKINS_GUI); + public void renderWidget(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTicks) { int u = 0; if (this.buttonType == ButtonType.REMOVE) { u += 3; @@ -36,7 +31,7 @@ public void renderWidget(PoseStack poseStack, int mouseX, int mouseY, float part u += 1; } } - GuiComponent.blit(poseStack, this.getX(), this.getY(), u * 7, 184, 7, 7); + guiGraphics.blit(MoaSkinsScreen.MOA_SKINS_GUI, this.getX(), this.getY(), u * 7, 184, 7, 7); } public enum ButtonType { diff --git a/src/main/java/com/aetherteam/aether/client/gui/component/skins/PatreonButton.java b/src/main/java/com/aetherteam/aether/client/gui/component/skins/PatreonButton.java index b6bd1f2c59..d12e0c9c2a 100644 --- a/src/main/java/com/aetherteam/aether/client/gui/component/skins/PatreonButton.java +++ b/src/main/java/com/aetherteam/aether/client/gui/component/skins/PatreonButton.java @@ -1,12 +1,9 @@ package com.aetherteam.aether.client.gui.component.skins; import com.aetherteam.aether.client.gui.screen.perks.MoaSkinsScreen; -import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.blaze3d.vertex.PoseStack; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiComponent; +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.Button; -import net.minecraft.client.renderer.GameRenderer; public class PatreonButton extends Button { public PatreonButton(Builder builder) { @@ -14,16 +11,14 @@ public PatreonButton(Builder builder) { } @Override - public void renderWidget(PoseStack poseStack, int mouseX, int mouseY, float partialTicks) { + public void renderWidget(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTicks) { Minecraft minecraft = Minecraft.getInstance(); - RenderSystem.setShader(GameRenderer::getPositionTexShader); - RenderSystem.setShaderTexture(0, MoaSkinsScreen.MOA_SKINS_GUI); int u = 0; int v = 215; if (this.isHovered()) { u = 54; } - GuiComponent.blit(poseStack, this.getX(), this.getY(), u, v, this.getWidth(), this.getHeight()); - GuiComponent.drawCenteredString(poseStack, minecraft.font, this.getMessage(), this.getX() + (this.getWidth() / 2), this.getY() + (this.getHeight() / 2) - 4, 16777215); + guiGraphics.blit(MoaSkinsScreen.MOA_SKINS_GUI, this.getX(), this.getY(), u, v, this.getWidth(), this.getHeight()); + guiGraphics.drawCenteredString(minecraft.font, this.getMessage(), this.getX() + (this.getWidth() / 2), this.getY() + (this.getHeight() / 2) - 4, 16777215); } } diff --git a/src/main/java/com/aetherteam/aether/client/gui/component/skins/RefreshButton.java b/src/main/java/com/aetherteam/aether/client/gui/component/skins/RefreshButton.java index dafd9027f3..35982d246e 100644 --- a/src/main/java/com/aetherteam/aether/client/gui/component/skins/RefreshButton.java +++ b/src/main/java/com/aetherteam/aether/client/gui/component/skins/RefreshButton.java @@ -1,12 +1,9 @@ package com.aetherteam.aether.client.gui.component.skins; import com.aetherteam.aether.client.gui.screen.perks.MoaSkinsScreen; -import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.blaze3d.vertex.PoseStack; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiComponent; +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.Button; -import net.minecraft.client.renderer.GameRenderer; public class RefreshButton extends Button { public static final int reboundMax = 1200; @@ -17,16 +14,14 @@ public RefreshButton(Builder builder) { } @Override - public void renderWidget(PoseStack poseStack, int mouseX, int mouseY, float partialTicks) { + public void renderWidget(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTicks) { Minecraft minecraft = Minecraft.getInstance(); - RenderSystem.setShader(GameRenderer::getPositionTexShader); - RenderSystem.setShaderTexture(0, MoaSkinsScreen.MOA_SKINS_GUI); int u = 108; int v = 215; if (this.isHovered() || reboundTimer > 0) { // Checks for reboundTimer to see if it is ticking, if so then this button is on cooldown. u = 126; } - GuiComponent.blit(poseStack, this.getX(), this.getY(), u, v, this.getWidth(), this.getHeight()); - GuiComponent.drawCenteredString(poseStack, minecraft.font, this.getMessage(), this.getX() + (this.getWidth() / 2), this.getY() + (this.getHeight() / 2) - 4, 16777215); + guiGraphics.blit(MoaSkinsScreen.MOA_SKINS_GUI, this.getX(), this.getY(), u, v, this.getWidth(), this.getHeight()); + guiGraphics.drawCenteredString(minecraft.font, this.getMessage(), this.getX() + (this.getWidth() / 2), this.getY() + (this.getHeight() / 2) - 4, 16777215); } } diff --git a/src/main/java/com/aetherteam/aether/client/gui/screen/ValkyrieQueenDialogueScreen.java b/src/main/java/com/aetherteam/aether/client/gui/screen/ValkyrieQueenDialogueScreen.java index bff2dbfeba..eb5330556a 100644 --- a/src/main/java/com/aetherteam/aether/client/gui/screen/ValkyrieQueenDialogueScreen.java +++ b/src/main/java/com/aetherteam/aether/client/gui/screen/ValkyrieQueenDialogueScreen.java @@ -7,9 +7,9 @@ import com.aetherteam.aether.network.AetherPacketHandler; import com.aetherteam.aether.network.packet.serverbound.NpcPlayerInteractPacket; import com.aetherteam.nitrogen.network.PacketRelay; -import com.mojang.blaze3d.vertex.PoseStack; import net.minecraft.ChatFormatting; import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.Renderable; import net.minecraft.client.gui.screens.Screen; import net.minecraft.network.chat.Component; @@ -121,20 +121,20 @@ private void finishChat(byte interactionID) { } @Override - public void render(PoseStack poseStack, int mouseX, int mouseY, float partialTicks) { - this.renderBackground(poseStack); - this.dialogueAnswer.render(poseStack); - super.render(poseStack, mouseX, mouseY, partialTicks); + public void render(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTicks) { + this.renderBackground(guiGraphics); + this.dialogueAnswer.render(guiGraphics); + super.render(guiGraphics, mouseX, mouseY, partialTicks); } /** - * [CODE COPY] - {@link Screen#renderBackground(PoseStack)}.

+ * [CODE COPY] - {@link Screen#renderBackground(GuiGraphics)}.

* Remove code for dark gradient and dirt background. */ @Override - public void renderBackground(PoseStack poseStack) { + public void renderBackground(GuiGraphics guiGraphics) { if (this.getMinecraft().level != null) { - MinecraftForge.EVENT_BUS.post(new ScreenEvent.BackgroundRendered(this, poseStack)); + MinecraftForge.EVENT_BUS.post(new ScreenEvent.BackgroundRendered(this, guiGraphics)); } } diff --git a/src/main/java/com/aetherteam/aether/client/gui/screen/inventory/AbstractAetherFurnaceScreen.java b/src/main/java/com/aetherteam/aether/client/gui/screen/inventory/AbstractAetherFurnaceScreen.java index d23f4c6ddd..a52c45cae2 100644 --- a/src/main/java/com/aetherteam/aether/client/gui/screen/inventory/AbstractAetherFurnaceScreen.java +++ b/src/main/java/com/aetherteam/aether/client/gui/screen/inventory/AbstractAetherFurnaceScreen.java @@ -1,11 +1,8 @@ package com.aetherteam.aether.client.gui.screen.inventory; import com.aetherteam.aether.inventory.menu.AbstractAetherFurnaceMenu; -import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.blaze3d.vertex.PoseStack; -import net.minecraft.client.gui.GuiComponent; +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.screens.recipebook.AbstractFurnaceRecipeBookComponent; -import net.minecraft.client.renderer.GameRenderer; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.player.Inventory; @@ -25,18 +22,15 @@ public void init() { } @Override - protected void renderBg(PoseStack poseStack, float partialTicks, int x, int y) { - RenderSystem.setShader(GameRenderer::getPositionTexShader); - RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); - RenderSystem.setShaderTexture(0, this.texture); + protected void renderBg(GuiGraphics guiGraphics, float partialTicks, int x, int y) { int left = this.getGuiLeft(); int top = this.getGuiTop(); - GuiComponent.blit(poseStack, left, top, 0, 0, this.getXSize(), this.getYSize()); + guiGraphics.blit(this.texture, left, top, 0, 0, this.getXSize(), this.getYSize()); if (this.getMenu().isLit()) { int litProgress = this.getMenu().getLitProgress(); - GuiComponent.blit(poseStack, left + 56, top + 36 + 12 - litProgress, 176, 12 - litProgress, 14, litProgress + 1); + guiGraphics.blit(this.texture, left + 56, top + 36 + 12 - litProgress, 176, 12 - litProgress, 14, litProgress + 1); } int burnProgress = this.getMenu().getBurnProgress(); - GuiComponent.blit(poseStack, left + 79, top + 34, 176, 14, burnProgress + 1, 16); + guiGraphics.blit(this.texture, left + 79, top + 34, 176, 14, burnProgress + 1, 16); } } \ No newline at end of file diff --git a/src/main/java/com/aetherteam/aether/client/gui/screen/inventory/AbstractRecipeBookScreen.java b/src/main/java/com/aetherteam/aether/client/gui/screen/inventory/AbstractRecipeBookScreen.java index 7f551c69e5..0141de09cb 100644 --- a/src/main/java/com/aetherteam/aether/client/gui/screen/inventory/AbstractRecipeBookScreen.java +++ b/src/main/java/com/aetherteam/aether/client/gui/screen/inventory/AbstractRecipeBookScreen.java @@ -1,6 +1,6 @@ package com.aetherteam.aether.client.gui.screen.inventory; -import com.mojang.blaze3d.vertex.PoseStack; +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.ImageButton; import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; import net.minecraft.client.gui.screens.recipebook.RecipeBookComponent; @@ -46,18 +46,18 @@ public void containerTick() { } @Override - public void render(PoseStack poseStack, int mouseX, int mouseY, float partialTicks) { - this.renderBackground(poseStack); + public void render(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTicks) { + this.renderBackground(guiGraphics); if (this.getRecipeBookComponent().isVisible() && this.widthTooNarrow) { - this.renderBg(poseStack, partialTicks, mouseX, mouseY); - this.getRecipeBookComponent().render(poseStack, mouseX, mouseY, partialTicks); + this.renderBg(guiGraphics, partialTicks, mouseX, mouseY); + this.getRecipeBookComponent().render(guiGraphics, mouseX, mouseY, partialTicks); } else { - this.getRecipeBookComponent().render(poseStack, mouseX, mouseY, partialTicks); - super.render(poseStack, mouseX, mouseY, partialTicks); - this.getRecipeBookComponent().renderGhostRecipe(poseStack, this.getGuiLeft(), this.getGuiTop(), true, partialTicks); + this.getRecipeBookComponent().render(guiGraphics, mouseX, mouseY, partialTicks); + super.render(guiGraphics, mouseX, mouseY, partialTicks); + this.getRecipeBookComponent().renderGhostRecipe(guiGraphics, this.getGuiLeft(), this.getGuiTop(), true, partialTicks); } - this.renderTooltip(poseStack, mouseX, mouseY); - this.getRecipeBookComponent().renderTooltip(poseStack, this.getGuiLeft(), this.getGuiTop(), mouseX, mouseY); + this.renderTooltip(guiGraphics, mouseX, mouseY); + this.getRecipeBookComponent().renderTooltip(guiGraphics, this.getGuiLeft(), this.getGuiTop(), mouseX, mouseY); } @Override diff --git a/src/main/java/com/aetherteam/aether/client/gui/screen/inventory/AccessoriesScreen.java b/src/main/java/com/aetherteam/aether/client/gui/screen/inventory/AccessoriesScreen.java index 57b9240d45..5082a3b10c 100644 --- a/src/main/java/com/aetherteam/aether/client/gui/screen/inventory/AccessoriesScreen.java +++ b/src/main/java/com/aetherteam/aether/client/gui/screen/inventory/AccessoriesScreen.java @@ -14,10 +14,8 @@ import com.aetherteam.nitrogen.api.users.UserData; import com.aetherteam.nitrogen.network.PacketRelay; import com.mojang.blaze3d.platform.InputConstants; -import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.blaze3d.vertex.PoseStack; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiComponent; +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.ImageButton; import net.minecraft.client.gui.components.Renderable; import net.minecraft.client.gui.components.Tooltip; @@ -28,7 +26,6 @@ import net.minecraft.client.gui.screens.recipebook.RecipeBookComponent; import net.minecraft.client.gui.screens.recipebook.RecipeUpdateListener; import net.minecraft.client.player.LocalPlayer; -import net.minecraft.client.renderer.GameRenderer; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; import net.minecraft.util.Tuple; @@ -74,7 +71,6 @@ public class AccessoriesScreen extends EffectRenderingInventoryScreen this.getMinecraft().setScreen(new MoaSkinsScreen(this)), Component.translatable("gui.aether.accessories.skins_button")) { @Override - public void render(PoseStack poseStack, int mouseX, int mouseY, float partialTick) { - super.render(poseStack, mouseX, mouseY, partialTick); + public void render(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTick) { + super.render(guiGraphics, mouseX, mouseY, partialTick); if (!AccessoriesScreen.this.getRecipeBookComponent().isVisible()) { this.setX(AccessoriesScreen.this.getGuiLeft() - 22); this.setY(AccessoriesScreen.this.getGuiTop() + 2); @@ -169,8 +165,8 @@ private ImageButton createCustomizationButton() { (pressed) -> this.getMinecraft().setScreen(new AetherCustomizationsScreen(this)), Component.translatable("gui.aether.accessories.customization_button")) { @Override - public void render(PoseStack poseStack, int mouseX, int mouseY, float partialTick) { - super.render(poseStack, mouseX, mouseY, partialTick); + public void render(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTick) { + super.render(guiGraphics, mouseX, mouseY, partialTick); if (!AccessoriesScreen.this.getRecipeBookComponent().isVisible()) { this.setX(AccessoriesScreen.this.getGuiLeft() - 22); this.setY(AccessoriesScreen.this.getGuiTop() + 24); @@ -194,7 +190,7 @@ private void updateRenderButtons() { this.addRenderableWidget(new RenderButton(curioSlot, this.getGuiLeft() + inventorySlot.x + 11, this.getGuiTop() + inventorySlot.y - 3, 8, 8, 75, 0, 8, CURIO_INVENTORY, (button) -> NetworkHandler.INSTANCE.send(PacketDistributor.SERVER.noArg(), new CPacketToggleRender(curioSlot.getIdentifier(), inventorySlot.getSlotIndex()))) { @Override - public void render(PoseStack poseStack, int mouseX, int mouseY, float partialTick) { + public void render(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTick) { this.setX(AccessoriesScreen.this.getGuiLeft() + inventorySlot.x + 11); this.setY(AccessoriesScreen.this.getGuiTop() + inventorySlot.y - 3); } @@ -204,20 +200,20 @@ public void render(PoseStack poseStack, int mouseX, int mouseY, float partialTic } @Override - public void render(PoseStack poseStack, int mouseX, int mouseY, float partialTicks) { - this.renderBackground(poseStack); + public void render(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTicks) { + this.renderBackground(guiGraphics); if (this.getRecipeBookComponent().isVisible() && this.widthTooNarrow) { - this.renderBg(poseStack, partialTicks, mouseX, mouseY); - this.getRecipeBookComponent().render(poseStack, mouseX, mouseY, partialTicks); + this.renderBg(guiGraphics, partialTicks, mouseX, mouseY); + this.getRecipeBookComponent().render(guiGraphics, mouseX, mouseY, partialTicks); } else { - this.getRecipeBookComponent().render(poseStack, mouseX, mouseY, partialTicks); - super.render(poseStack, mouseX, mouseY, partialTicks); - this.getRecipeBookComponent().renderGhostRecipe(poseStack, this.getGuiLeft(), this.getGuiTop(), false, partialTicks); + this.getRecipeBookComponent().render(guiGraphics, mouseX, mouseY, partialTicks); + super.render(guiGraphics, mouseX, mouseY, partialTicks); + this.getRecipeBookComponent().renderGhostRecipe(guiGraphics, this.getGuiLeft(), this.getGuiTop(), false, partialTicks); boolean isButtonHovered = false; for (Renderable renderable : this.renderables) { if (renderable instanceof RenderButton renderButton) { - renderButton.renderButtonOverlay(poseStack, mouseX, mouseY, partialTicks); + renderButton.renderButtonOverlay(guiGraphics, mouseX, mouseY, partialTicks); if (renderButton.isHovered()) { isButtonHovered = true; } @@ -228,7 +224,7 @@ public void render(PoseStack poseStack, int mouseX, int mouseY, float partialTic if (!this.isRenderButtonHovered && clientPlayer != null && clientPlayer.inventoryMenu.getCarried().isEmpty() && this.getSlotUnderMouse() != null) { Slot slot = this.getSlotUnderMouse(); if (slot instanceof CurioSlot curioSlot && !slot.hasItem()) { - this.renderTooltip(poseStack, Component.literal(curioSlot.getSlotName()), mouseX, mouseY); + guiGraphics.renderTooltip(this.font, Component.literal(curioSlot.getSlotName()), mouseX, mouseY); } } @@ -243,27 +239,24 @@ public void render(PoseStack poseStack, int mouseX, int mouseY, float partialTic } if (this.destroyItemSlot != null && this.isHovering(this.destroyItemSlot.x, this.destroyItemSlot.y, 16, 16, mouseX, mouseY)) { - this.renderTooltip(poseStack, Component.translatable("inventory.binSlot"), mouseX, mouseY); + guiGraphics.renderTooltip(this.font, Component.translatable("inventory.binSlot"), mouseX, mouseY); } if (this.getMinecraft().player != null) { this.imageWidth = this.getMinecraft().player.isCreative() ? 176 + this.creativeXOffset() : 176; } } - this.renderTooltip(poseStack, mouseX, mouseY); - this.getRecipeBookComponent().renderTooltip(poseStack, this.getGuiLeft(), this.getGuiTop(), mouseX, mouseY); + this.renderTooltip(guiGraphics, mouseX, mouseY); + this.getRecipeBookComponent().renderTooltip(guiGraphics, this.getGuiLeft(), this.getGuiTop(), mouseX, mouseY); } @Override - protected void renderBg(PoseStack poseStack, float partialTicks, int mouseX, int mouseY) { + protected void renderBg(GuiGraphics guiGraphics, float partialTicks, int mouseX, int mouseY) { if (this.getMinecraft().player != null) { - RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); - RenderSystem.setShader(GameRenderer::getPositionTexShader); - RenderSystem.setShaderTexture(0, this.getMinecraft().player.isCreative() ? ACCESSORIES_INVENTORY_CREATIVE : ACCESSORIES_INVENTORY); int i = this.getGuiLeft(); int j = this.getGuiTop(); - GuiComponent.blit(poseStack, i, j, 0, 0, this.getXSize() + this.creativeXOffset(), this.getYSize()); - InventoryScreen.renderEntityInInventoryFollowsMouse(poseStack, i + 33, j + 75, 30, (float) (i + 31) - mouseX, (float) (j + 75 - 50) - mouseY, this.getMinecraft().player); + guiGraphics.blit(this.getMinecraft().player.isCreative() ? ACCESSORIES_INVENTORY_CREATIVE : ACCESSORIES_INVENTORY, i, j, 0, 0, this.getXSize() + this.creativeXOffset(), this.getYSize()); + InventoryScreen.renderEntityInInventoryFollowsMouse(guiGraphics, i + 33, j + 75, 30, (float) (i + 31) - mouseX, (float) (j + 75 - 50) - mouseY, this.getMinecraft().player); } } @@ -275,22 +268,22 @@ private int creativeXOffset() { } @Override - protected void renderTooltip(PoseStack poseStack, int mouseX, int mouseY) { + protected void renderTooltip(GuiGraphics guiGraphics, int mouseX, int mouseY) { Minecraft minecraft = this.getMinecraft(); LocalPlayer clientPlayer = minecraft.player; if (clientPlayer != null && clientPlayer.inventoryMenu.getCarried().isEmpty()) { if (this.isRenderButtonHovered) { - this.renderTooltip(poseStack, Component.translatable("gui.curios.toggle"), mouseX, mouseY); + guiGraphics.renderTooltip(this.font, Component.translatable("gui.curios.toggle"), mouseX, mouseY); } else if (this.hoveredSlot != null && this.hoveredSlot.hasItem()) { - this.renderTooltip(poseStack, this.hoveredSlot.getItem(), mouseX, mouseY); + guiGraphics.renderTooltip(this.font, this.hoveredSlot.getItem(), mouseX, mouseY); } } } @Override - protected void renderLabels(PoseStack poseStack, int mouseX, int mouseY) { + protected void renderLabels(GuiGraphics guiGraphics, int mouseX, int mouseY) { if (this.getMinecraft().player != null) { - this.font.draw(poseStack, this.title, 115, 6, 4210752); + guiGraphics.drawString(this.font, this.title, 115, 6, 4210752, false); } } diff --git a/src/main/java/com/aetherteam/aether/client/gui/screen/inventory/IncubatorScreen.java b/src/main/java/com/aetherteam/aether/client/gui/screen/inventory/IncubatorScreen.java index 94e50a998d..42db2254fe 100644 --- a/src/main/java/com/aetherteam/aether/client/gui/screen/inventory/IncubatorScreen.java +++ b/src/main/java/com/aetherteam/aether/client/gui/screen/inventory/IncubatorScreen.java @@ -3,10 +3,7 @@ import com.aetherteam.aether.Aether; import com.aetherteam.aether.client.gui.screen.inventory.recipebook.IncubatorRecipeBookComponent; import com.aetherteam.aether.inventory.menu.IncubatorMenu; -import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.blaze3d.vertex.PoseStack; -import net.minecraft.client.gui.GuiComponent; -import net.minecraft.client.renderer.GameRenderer; +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.player.Inventory; @@ -25,18 +22,15 @@ public void init() { } @Override - protected void renderBg(PoseStack poseStack, float partialTicks, int x, int y) { - RenderSystem.clearColor(1.0F, 1.0F, 1.0F, 1.0F); - RenderSystem.setShader(GameRenderer::getPositionTexShader); - RenderSystem.setShaderTexture(0, INCUBATOR_GUI_TEXTURES); + protected void renderBg(GuiGraphics guiGraphics, float partialTicks, int x, int y) { int left = this.getGuiLeft(); int top = this.getGuiTop(); - GuiComponent.blit(poseStack, left, top, 0, 0, this.getXSize(), this.getYSize()); + guiGraphics.blit(INCUBATOR_GUI_TEXTURES, left, top, 0, 0, this.getXSize(), this.getYSize()); if (this.getMenu().isIncubating()) { int incubationTimeRemaining = this.getMenu().getIncubationTimeRemaining(); - GuiComponent.blit(poseStack, left + 74, (top + 48) - incubationTimeRemaining, 176, 13 - incubationTimeRemaining, 14, incubationTimeRemaining + 1); + guiGraphics.blit(INCUBATOR_GUI_TEXTURES, left + 74, (top + 48) - incubationTimeRemaining, 176, 13 - incubationTimeRemaining, 14, incubationTimeRemaining + 1); } int incubationProgressScaled = this.getMenu().getIncubationProgressScaled(); - GuiComponent.blit(poseStack, left + 103, top + 70 - incubationProgressScaled, 179, 70 - incubationProgressScaled, 10, incubationProgressScaled); + guiGraphics.blit(INCUBATOR_GUI_TEXTURES, left + 103, top + 70 - incubationProgressScaled, 179, 70 - incubationProgressScaled, 10, incubationProgressScaled); } } diff --git a/src/main/java/com/aetherteam/aether/client/gui/screen/inventory/LoreBookScreen.java b/src/main/java/com/aetherteam/aether/client/gui/screen/inventory/LoreBookScreen.java index 0b74680cd5..5442d12b4e 100644 --- a/src/main/java/com/aetherteam/aether/client/gui/screen/inventory/LoreBookScreen.java +++ b/src/main/java/com/aetherteam/aether/client/gui/screen/inventory/LoreBookScreen.java @@ -4,13 +4,10 @@ import com.aetherteam.aether.client.gui.component.inventory.LorePageButton; import com.aetherteam.aether.inventory.menu.LoreBookMenu; import com.google.common.collect.Lists; -import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.blaze3d.vertex.PoseStack; import net.minecraft.client.gui.Font; -import net.minecraft.client.gui.GuiComponent; +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.Button; import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; -import net.minecraft.client.renderer.GameRenderer; import net.minecraft.client.resources.language.I18n; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; @@ -57,30 +54,30 @@ protected void init() { } @Override - public void render(PoseStack poseStack, int mouseX, int mouseY, float partialTicks) { - this.renderBackground(poseStack); - this.renderBg(poseStack, partialTicks, mouseX, mouseY); - super.render(poseStack, mouseX, mouseY, partialTicks); - this.renderTooltip(poseStack, mouseX, mouseY); + public void render(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTicks) { + this.renderBackground(guiGraphics); + this.renderBg(guiGraphics, partialTicks, mouseX, mouseY); + super.render(guiGraphics, mouseX, mouseY, partialTicks); + this.renderTooltip(guiGraphics, mouseX, mouseY); } @Override - protected void renderLabels(PoseStack poseStack, int x, int y) { + protected void renderLabels(GuiGraphics guiGraphics, int x, int y) { // Draws text for the page switching buttons. Component previous = Component.translatable("gui.aether.book_of_lore.previous"); Component next = Component.translatable("gui.aether.book_of_lore.next"); - this.drawNormalBookText(poseStack, this.font, previous, 13, 158); - this.drawNormalBookText(poseStack, this.font, next, 221, 158); + this.drawNormalBookText(guiGraphics, this.font, previous, 13, 158); + this.drawNormalBookText(guiGraphics, this.font, next, 221, 158); // Draws "Book of Lore" text. Component book = Component.translatable("gui.aether.book_of_lore.book"); Component ofLore = Component.translatable("gui.aether.book_of_lore.of_lore"); - this.drawCenteredBookText(poseStack, this.font, book, 75, 20); - this.drawCenteredBookText(poseStack, this.font, ofLore, 75, 20 + 10); + this.drawCenteredBookText(guiGraphics, this.font, book, 75, 20); + this.drawCenteredBookText(guiGraphics, this.font, ofLore, 75, 20 + 10); // Draws "Item:" text. Component item = Component.translatable("gui.aether.book_of_lore.item"); - this.drawRightBookText(poseStack, this.font, item, 78, 67); + this.drawRightBookText(guiGraphics, this.font, item, 78, 67); ItemStack itemStack = this.getMenu().slots.get(0).getItem(); if (!itemStack.isEmpty()) { // Checks if there is an item placed in the book. @@ -92,11 +89,11 @@ protected void renderLabels(PoseStack poseStack, int x, int y) { if (this.currentPageNumber == 0) { // Behavior for first page. Component title = itemStack.getHoverName(); - this.createText(poseStack, this.font.split(title, 98), 136, 10); // Draw text for the item name. + this.createText(guiGraphics, this.font.split(title, 98), 136, 10); // Draw text for the item name. - this.createText(poseStack, this.pages.get(0), 136, 32); // Draw lines for first page. + this.createText(guiGraphics, this.pages.get(0), 136, 32); // Draw lines for first page. } else { // Behavior for subsequent pages. - this.createText(poseStack, this.pages.get(this.currentPageNumber), 136, 10); // Draw lines for the given page. + this.createText(guiGraphics, this.pages.get(this.currentPageNumber), 136, 10); // Draw lines for the given page. } } } @@ -138,50 +135,43 @@ private void createPages(Component loreEntry) { /** * Draws the given lines of text on a book page. - * @param poseStack The rendering {@link PoseStack}. + * @param guiGraphics The rendering {@link GuiGraphics}. * @param reorderingProcessors The {@link List} of {@link FormattedCharSequence} to render text with. * @param x The {@link Integer} for the text x-position. * @param y The {@link Integer} for the text y-position. */ - private void createText(PoseStack poseStack, List reorderingProcessors, int x, int y) { + private void createText(GuiGraphics guiGraphics, List reorderingProcessors, int x, int y) { int length = 0; for (FormattedCharSequence line : reorderingProcessors) { - this.drawBookText(poseStack, this.font, line, x, y + (length * 10)); + this.drawBookText(guiGraphics, this.font, line, x, y + (length * 10)); length++; } } @Override - protected void renderBg(PoseStack poseStack, float partialTicks, int x, int y) { - RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); + protected void renderBg(GuiGraphics guiGraphics, float partialTicks, int x, int y) { int xPos = (this.width - this.getXSize()) / 2; int yPos = (this.height - (this.getYSize())) / 2; - - RenderSystem.setShader(GameRenderer::getPositionTexShader); - RenderSystem.setShaderTexture(0, TEXTURE_LORE_BACKING); // Draws the grey GUI backing. - GuiComponent.blit(poseStack, xPos, yPos - 4, 0, 0, this.getXSize(), this.getYSize() + 56, 256, 256); - - RenderSystem.setShader(GameRenderer::getPositionTexShader); - RenderSystem.setShaderTexture(0, TEXTURE_LORE_BOOK); // Draws the book GUI on top of backing. - GuiComponent.blit(poseStack, xPos + 12, yPos + 2, 0, 0, this.getXSize(), this.getYSize() + 56, 256, 256); + guiGraphics.blit(TEXTURE_LORE_BACKING, xPos, yPos - 4, 0, 0, this.getXSize(), this.getYSize() + 56, 256, 256); // Draws the grey GUI backing. + guiGraphics.blit(TEXTURE_LORE_BOOK, xPos + 12, yPos + 2, 0, 0, this.getXSize(), this.getYSize() + 56, 256, 256); // Draws the book GUI on top of backing. } - private void drawNormalBookText(PoseStack poseStack, Font fontRenderer, Component component, int x, int y) { + private void drawNormalBookText(GuiGraphics guiGraphics, Font fontRenderer, Component component, int x, int y) { FormattedCharSequence sequence = component.getVisualOrderText(); - this.drawBookText(poseStack, fontRenderer, sequence, x, y); + this.drawBookText(guiGraphics, fontRenderer, sequence, x, y); } - private void drawRightBookText(PoseStack poseStack, Font fontRenderer, Component component, int x, int y) { + private void drawRightBookText(GuiGraphics guiGraphics, Font fontRenderer, Component component, int x, int y) { FormattedCharSequence sequence = component.getVisualOrderText(); - this.drawBookText(poseStack, fontRenderer, sequence, x - fontRenderer.width(sequence), y); + this.drawBookText(guiGraphics, fontRenderer, sequence, x - fontRenderer.width(sequence), y); } - private void drawCenteredBookText(PoseStack poseStack, Font fontRenderer, Component component, int x, int y) { + private void drawCenteredBookText(GuiGraphics guiGraphics, Font fontRenderer, Component component, int x, int y) { FormattedCharSequence sequence = component.getVisualOrderText(); - this.drawBookText(poseStack, fontRenderer, sequence, x - fontRenderer.width(sequence) / 2, y); + this.drawBookText(guiGraphics, fontRenderer, sequence, x - fontRenderer.width(sequence) / 2, y); } - private void drawBookText(PoseStack poseStack, Font fontRenderer, FormattedCharSequence sequence, int x, int y) { - fontRenderer.draw(poseStack, sequence, (float) x, (float) y, 4210752); + private void drawBookText(GuiGraphics guiGraphics, Font fontRenderer, FormattedCharSequence sequence, int x, int y) { + guiGraphics.drawString(fontRenderer, sequence, x, y, 4210752, false); } } diff --git a/src/main/java/com/aetherteam/aether/client/gui/screen/inventory/SunAltarScreen.java b/src/main/java/com/aetherteam/aether/client/gui/screen/inventory/SunAltarScreen.java index cdcff9cd9a..6c05d9ae38 100644 --- a/src/main/java/com/aetherteam/aether/client/gui/screen/inventory/SunAltarScreen.java +++ b/src/main/java/com/aetherteam/aether/client/gui/screen/inventory/SunAltarScreen.java @@ -3,9 +3,7 @@ import com.aetherteam.aether.Aether; import com.aetherteam.aether.client.gui.component.inventory.SunAltarSlider; import com.aetherteam.aether.data.resources.registries.AetherDimensions; -import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.blaze3d.vertex.PoseStack; -import net.minecraft.client.gui.GuiComponent; +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.screens.Screen; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; @@ -28,20 +26,18 @@ public void init() { } @Override - public void render(PoseStack poseStack, int mouseX, int mouseY, float partialTicks) { - this.renderBackground(poseStack); - RenderSystem.setShaderTexture(0, TEXTURE); - RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); + public void render(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTicks) { + this.renderBackground(guiGraphics); int xSize = 176; int ySize = 79; int x = (this.width - xSize) / 2; int y = (this.height - ySize) / 2; - GuiComponent.blit(poseStack, x, y, 0, 0, xSize, ySize); + guiGraphics.blit(TEXTURE, x, y, 0, 0, xSize, ySize); FormattedCharSequence sequence = this.title.getVisualOrderText(); - this.font.draw(poseStack, this.title, (this.width - this.font.width(sequence)) / 2F, y + 20, 0x404040); + guiGraphics.drawString(this.font, this.title, (int) ((this.width - this.font.width(sequence)) / 2.0F), y + 20, 0x404040, false); - super.render(poseStack, mouseX, mouseY, partialTicks); + super.render(guiGraphics, mouseX, mouseY, partialTicks); } @Override diff --git a/src/main/java/com/aetherteam/aether/client/gui/screen/menu/AetherModUpdateIndicator.java b/src/main/java/com/aetherteam/aether/client/gui/screen/menu/AetherModUpdateIndicator.java index 41d386ee3a..36c0aed9d4 100644 --- a/src/main/java/com/aetherteam/aether/client/gui/screen/menu/AetherModUpdateIndicator.java +++ b/src/main/java/com/aetherteam/aether/client/gui/screen/menu/AetherModUpdateIndicator.java @@ -1,9 +1,7 @@ package com.aetherteam.aether.client.gui.screen.menu; -import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.blaze3d.vertex.PoseStack; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiComponent; +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.resources.ResourceLocation; import net.minecraftforge.client.gui.TitleScreenModUpdateIndicator; import net.minecraftforge.client.loading.ClientModLoader; @@ -37,16 +35,14 @@ public void init() { /** * Renders Forge's mod update indicator next to the "# mods loaded" text on the title screen. - * @param poseStack The rendering {@link PoseStack}. + * @param graphics The rendering {@link GuiGraphics}. * @param mouseX The {@link Integer} for the mouse's x-position. * @param mouseY The {@link Integer} for the mouse's y-position. * @param partialTicks The {@link Float} for the game's partial ticks. */ @Override - public void render(PoseStack poseStack, int mouseX, int mouseY, float partialTicks) { - if (this.showNotification != null && this.showNotification.shouldDraw() && FMLConfig.runVersionCheck() && Minecraft.getInstance().screen != null) { - RenderSystem.setShaderTexture(0, VERSION_CHECK_ICONS); - + public void render(GuiGraphics graphics, int mouseX, int mouseY, float partialTicks) { + if (this.showNotification != null && this.showNotification.shouldDraw() && !FMLConfig.getBoolConfigValue(FMLConfig.ConfigValue.VERSION_CHECK) && Minecraft.getInstance().screen != null) { this.width = Minecraft.getInstance().screen.width; this.height = Minecraft.getInstance().screen.height; this.font = Minecraft.getInstance().font; @@ -61,7 +57,7 @@ public void render(PoseStack poseStack, int mouseX, int mouseY, float partialTic y = this.height - this.font.lineHeight - 1; } - GuiComponent.blit(poseStack, x, y, this.showNotification.getSheetOffset() * 8, (this.showNotification.isAnimated() && ((System.currentTimeMillis() / 800 & 1) == 1)) ? 8 : 0, 8, 8, 64, 16); + graphics.blit(VERSION_CHECK_ICONS, x, y, this.showNotification.getSheetOffset() * 8, (this.showNotification.isAnimated() && ((System.currentTimeMillis() / 800 & 1) == 1)) ? 8 : 0, 8, 8, 64, 16); } } } diff --git a/src/main/java/com/aetherteam/aether/client/gui/screen/menu/AetherTitleScreen.java b/src/main/java/com/aetherteam/aether/client/gui/screen/menu/AetherTitleScreen.java index d69fb254ee..a0a95af4a1 100644 --- a/src/main/java/com/aetherteam/aether/client/gui/screen/menu/AetherTitleScreen.java +++ b/src/main/java/com/aetherteam/aether/client/gui/screen/menu/AetherTitleScreen.java @@ -1,16 +1,17 @@ package com.aetherteam.aether.client.gui.screen.menu; import com.aetherteam.aether.Aether; +import com.aetherteam.aether.api.AetherMenus; import com.aetherteam.aether.client.AetherSoundEvents; import com.aetherteam.aether.client.gui.component.menu.AetherMenuButton; import com.aetherteam.aether.client.gui.component.menu.DynamicMenuButton; import com.aetherteam.aether.mixin.mixins.client.accessor.TitleScreenAccessor; -import com.mojang.blaze3d.systems.RenderSystem; +import com.aetherteam.cumulus.mixin.mixins.client.accessor.SplashRendererAccessor; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.math.Axis; import net.minecraft.Util; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiComponent; +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.AbstractWidget; import net.minecraft.client.gui.components.Button; import net.minecraft.client.gui.components.Renderable; @@ -24,6 +25,7 @@ import net.minecraft.util.Mth; import net.minecraftforge.client.ForgeHooksClient; import net.minecraftforge.internal.BrandingControl; +import org.jetbrains.annotations.Nullable; public class AetherTitleScreen extends TitleScreen implements TitleScreenBehavior { private static final ResourceLocation PANORAMA_OVERLAY = new ResourceLocation("textures/gui/title/background/panorama_overlay.png"); @@ -76,43 +78,49 @@ public void setupButtons() { } @Override - public void render(PoseStack poseStack, int mouseX, int mouseY, float partialTicks) { + public void render(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTicks) { TitleScreenAccessor titleScreenAccessor = (TitleScreenAccessor) this; - float fadeAmount = TitleScreenBehavior.super.handleFading(poseStack, this, titleScreenAccessor, this.panorama, PANORAMA_OVERLAY, partialTicks); + if (this.minecraft != null && titleScreenAccessor.aether$getSplash() == null) { + titleScreenAccessor.aether$setSplash(this.minecraft.getSplashManager().getSplash()); + } + float fadeAmount = TitleScreenBehavior.super.handleFading(guiGraphics, this, titleScreenAccessor, this.panorama, PANORAMA_OVERLAY, partialTicks); float scale = getScale(this, this.getMinecraft()); - this.setupLogo(poseStack, fadeAmount, scale); + this.setupLogo(guiGraphics, fadeAmount, scale); int roundedFadeAmount = Mth.ceil(fadeAmount * 255.0F) << 24; if ((roundedFadeAmount & -67108864) != 0) { - ForgeHooksClient.renderMainMenu(this, poseStack, this.font, this.width, this.height, roundedFadeAmount); + ForgeHooksClient.renderMainMenu(this, guiGraphics, this.font, this.width, this.height, roundedFadeAmount); if (titleScreenAccessor.aether$getSplash() != null) { - float splashX = this.alignedLeft ? 400.0F / scale : (float) this.width / 2 + (175 / scale); - float splashY = this.alignedLeft ? 100.0F / scale : (int) (20 + (76 / scale)); - poseStack.pushPose(); - poseStack.translate(splashX, splashY, 0.0F); - poseStack.mulPose(Axis.ZP.rotationDegrees(-20.0F)); - float textSize = 1.8F - Mth.abs(Mth.sin((float) (Util.getMillis() % 1000L) / 1000.0F * Mth.TWO_PI) * 0.1F); - String splash = titleScreenAccessor.aether$getSplash(); - textSize = textSize * (200.0F / scale) / (this.font.width(splash) + (64 / scale)); - poseStack.scale(textSize, textSize, textSize); - GuiComponent.drawCenteredString(poseStack, this.font, splash, 0, (int) (-16 / scale), 16776960 | roundedFadeAmount); - poseStack.popPose(); + SplashRendererAccessor splashRendererAccessor = (SplashRendererAccessor) titleScreenAccessor.aether$getSplash(); + if (splashRendererAccessor.cumulus$getSplash() != null && !splashRendererAccessor.cumulus$getSplash().isEmpty()) { + PoseStack poseStack = guiGraphics.pose(); + float splashX = AetherTitleScreen.this.alignedLeft ? 400.0F / scale : (float) AetherTitleScreen.this.width / 2 + (175 / scale); + float splashY = AetherTitleScreen.this.alignedLeft ? 100.0F / scale : (int) (20 + (76 / scale)); + poseStack.pushPose(); + poseStack.translate(splashX, splashY, 0.0F); + poseStack.mulPose(Axis.ZP.rotationDegrees(-20.0F)); + float textSize = 1.8F - Mth.abs(Mth.sin((float) (Util.getMillis() % 1000L) / 1000.0F * Mth.TWO_PI) * 0.1F); + textSize = textSize * (200.0F / scale) / (AetherTitleScreen.this.font.width(splashRendererAccessor.cumulus$getSplash()) + (64 / scale)); + poseStack.scale(textSize, textSize, textSize); + guiGraphics.drawCenteredString(AetherTitleScreen.this.font, splashRendererAccessor.cumulus$getSplash(), 0, (int) (-16 / scale), 16776960 | roundedFadeAmount); + poseStack.popPose(); + } } if (this.alignedLeft) { - TitleScreenBehavior.super.renderRightBranding(poseStack, this, this.font, roundedFadeAmount); + TitleScreenBehavior.super.renderRightBranding(guiGraphics, this, this.font, roundedFadeAmount); } else { BrandingControl.forEachLine(true, true, (brandingLine, branding) -> - drawString(poseStack, this.font, branding, 2, this.height - (10 + brandingLine * (this.font.lineHeight + 1)), 16777215 | roundedFadeAmount) + guiGraphics.drawString(this.font, branding, 2, this.height - (10 + brandingLine * (this.font.lineHeight + 1)), 16777215 | roundedFadeAmount) ); BrandingControl.forEachAboveCopyrightLine((brandingLine, branding) -> - drawString(poseStack, this.font, branding, this.width - this.font.width(branding), this.height - (10 + (brandingLine + 1) * (this.font.lineHeight + 1)), 16777215 | roundedFadeAmount) + guiGraphics.drawString(this.font, branding, this.width - this.font.width(branding), this.height - (10 + (brandingLine + 1) * (this.font.lineHeight + 1)), 16777215 | roundedFadeAmount) ); } } int xOffset = TitleScreenBehavior.super.handleButtonVisibility(this, fadeAmount); for (Renderable renderable : this.renderables) { - renderable.render(poseStack, mouseX, mouseY, partialTicks); + renderable.render(guiGraphics, mouseX, mouseY, partialTicks); if (renderable instanceof AetherMenuButton aetherButton) { // Smoothly shifts the Aether-styled buttons to the right slightly when hovered over. if (aetherButton.isMouseOver(mouseX, mouseY)) { if (aetherButton.hoverOffset < 15) { @@ -133,25 +141,23 @@ public void render(PoseStack poseStack, int mouseX, int mouseY, float partialTic TitleScreenBehavior.super.handleImageButtons(this, xOffset); if (fadeAmount >= 1.0F) { - this.modUpdateNotification.render(poseStack, mouseX, mouseY, partialTicks); + this.modUpdateNotification.render(guiGraphics, mouseX, mouseY, partialTicks); } } /** * Renders the Aether logo on the title screen. - * @param poseStack The rendering {@link PoseStack}. + * @param guiGraphics The rendering {@link GuiGraphics}. * @param transparency The transparency {@link Float} for the logo. * @param scale The {@link Float} for the scaling of the logo relative to the true screen scale. */ - private void setupLogo(PoseStack poseStack, float transparency, float scale) { - RenderSystem.setShaderTexture(0, AETHER_LOGO); - RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, transparency); + private void setupLogo(GuiGraphics guiGraphics, float transparency, float scale) { int width = (int) (350 / scale); int height = (int) (76 / scale); int logoX = this.alignedLeft ? (int) (10 + (18 / scale)) : (int) ((this.width / 2 - 175 / scale)); int logoY = this.alignedLeft ? (int) (15 + (10 / scale)) : (int) (25 + (10 / scale)); - GuiComponent.blit(poseStack, logoX, logoY, 0, 0, width, height, width, height); - RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); + guiGraphics.setColor(1.0F, 1.0F, 1.0F, transparency); + guiGraphics.blit(AETHER_LOGO, logoX, logoY, 0, 0, width, height, width, height); } /** @@ -205,4 +211,10 @@ protected T addRende public boolean isAlignedLeft() { return this.alignedLeft; } + + @Nullable + @Override + public Music getBackgroundMusic() { + return !this.isAlignedLeft() ? AetherMenus.THE_AETHER.get().getMusic() : AetherMenus.THE_AETHER_LEFT.get().getMusic(); + } } diff --git a/src/main/java/com/aetherteam/aether/client/gui/screen/menu/TitleScreenBehavior.java b/src/main/java/com/aetherteam/aether/client/gui/screen/menu/TitleScreenBehavior.java index d4f27daa79..eae6b48812 100644 --- a/src/main/java/com/aetherteam/aether/client/gui/screen/menu/TitleScreenBehavior.java +++ b/src/main/java/com/aetherteam/aether/client/gui/screen/menu/TitleScreenBehavior.java @@ -3,10 +3,9 @@ import com.aetherteam.aether.mixin.mixins.client.accessor.TitleScreenAccessor; import com.aetherteam.cumulus.CumulusConfig; import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.blaze3d.vertex.PoseStack; import net.minecraft.Util; import net.minecraft.client.gui.Font; -import net.minecraft.client.gui.GuiComponent; +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.AbstractWidget; import net.minecraft.client.gui.components.Button; import net.minecraft.client.gui.components.Renderable; @@ -20,38 +19,36 @@ public interface TitleScreenBehavior { /** - * [CODE COPY] - {@link TitleScreen#render(PoseStack, int, int, float)}.

+ * [CODE COPY] - {@link TitleScreen#render(GuiGraphics, int, int, float)}.

* Copied fading behavior segment from render code, with use of {@link TitleScreenAccessor}. */ - default float handleFading(PoseStack poseStack, TitleScreen titleScreen, TitleScreenAccessor titleScreenAccessor, PanoramaRenderer panorama, ResourceLocation panoramaOverlay, float partialTicks) { + default float handleFading(GuiGraphics guiGraphics, TitleScreen titleScreen, TitleScreenAccessor titleScreenAccessor, PanoramaRenderer panorama, ResourceLocation panoramaOverlay, float partialTicks) { if (titleScreenAccessor.aether$getFadeInStart() == 0L && titleScreenAccessor.aether$isFading()) { titleScreenAccessor.aether$setFadeInStart(Util.getMillis()); } float fadeAmount = titleScreenAccessor.aether$isFading() ? (float) (Util.getMillis() - titleScreenAccessor.aether$getFadeInStart()) / 1000.0F : 1.0F; panorama.render(partialTicks, Mth.clamp(fadeAmount, 0.0F, 1.0F)); - RenderSystem.setShaderTexture(0, panoramaOverlay); RenderSystem.enableBlend(); - RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, titleScreenAccessor.aether$isFading() ? (float) Mth.ceil(Mth.clamp(fadeAmount, 0.0F, 1.0F)) : 1.0F); - GuiComponent.blit(poseStack, 0, 0, titleScreen.width, titleScreen.height, 0.0F, 0.0F, 16, 128, 16, 128); - RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); + guiGraphics.setColor(1.0F, 1.0F, 1.0F, titleScreenAccessor.aether$isFading() ? (float) Mth.ceil(Mth.clamp(fadeAmount, 0.0F, 1.0F)) : 1.0F); + guiGraphics.blit(panoramaOverlay, 0, 0, titleScreen.width, titleScreen.height, 0.0F, 0.0F, 16, 128, 16, 128); return titleScreenAccessor.aether$isFading() ? Mth.clamp(fadeAmount - 1.0F, 0.0F, 1.0F) : 1.0F; } /** - * [CODE COPY] - {@link TitleScreen#render(PoseStack, int, int, float)}.

+ * [CODE COPY] - {@link TitleScreen#render(GuiGraphics, int, int, float)}.

* Copied branding render segment from render code, but aligned it right. */ - default void renderRightBranding(PoseStack poseStack, TitleScreen titleScreen, Font font, int roundedFadeAmount) { + default void renderRightBranding(GuiGraphics guiGraphics, TitleScreen titleScreen, Font font, int roundedFadeAmount) { BrandingControl.forEachLine(true, true, (brandingLine, branding) -> - GuiComponent.drawString(poseStack, font, branding, titleScreen.width - font.width(branding) - 1, titleScreen.height - (10 + (brandingLine + 1) * (font.lineHeight + 1)), 16777215 | roundedFadeAmount) + guiGraphics.drawString(font, branding, titleScreen.width - font.width(branding) - 1, titleScreen.height - (10 + (brandingLine + 1) * (font.lineHeight + 1)), 16777215 | roundedFadeAmount) ); BrandingControl.forEachAboveCopyrightLine((brandingLine, branding) -> - GuiComponent.drawString(poseStack, font, branding, 1, titleScreen.height - (brandingLine + 1) * (font.lineHeight + 1), 16777215 | roundedFadeAmount) + guiGraphics.drawString(font, branding, 1, titleScreen.height - (brandingLine + 1) * (font.lineHeight + 1), 16777215 | roundedFadeAmount) ); } /** - * [CODE COPY] - {@link TitleScreen#render(PoseStack, int, int, float)}.

+ * [CODE COPY] - {@link TitleScreen#render(GuiGraphics, int, int, float)}.

* Copied render segment for determining button transparency from screen fade-in. * Also modified the code to change the button visibility, and also set a button offset at the end from configs. */ diff --git a/src/main/java/com/aetherteam/aether/client/gui/screen/menu/VanillaLeftTitleScreen.java b/src/main/java/com/aetherteam/aether/client/gui/screen/menu/VanillaLeftTitleScreen.java index 79ac19d5bd..20fbc3a92e 100644 --- a/src/main/java/com/aetherteam/aether/client/gui/screen/menu/VanillaLeftTitleScreen.java +++ b/src/main/java/com/aetherteam/aether/client/gui/screen/menu/VanillaLeftTitleScreen.java @@ -2,11 +2,11 @@ import com.aetherteam.aether.client.gui.component.menu.DynamicMenuButton; import com.aetherteam.aether.mixin.mixins.client.accessor.TitleScreenAccessor; -import com.mojang.blaze3d.systems.RenderSystem; +import com.aetherteam.cumulus.mixin.mixins.client.accessor.SplashRendererAccessor; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.math.Axis; import net.minecraft.Util; -import net.minecraft.client.gui.GuiComponent; +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.AbstractWidget; import net.minecraft.client.gui.components.Button; import net.minecraft.client.gui.components.LogoRenderer; @@ -66,35 +66,42 @@ public void setupButtons() { } /** - * [CODE COPY] - {@link TitleScreen#render(PoseStack, int, int, float)}.

+ * [CODE COPY] - {@link TitleScreen#render(GuiGraphics, int, int, float)}.

* Modified and abstracted using {@link TitleScreenBehavior}. */ @Override - public void render(PoseStack poseStack, int mouseX, int mouseY, float partialTicks) { + public void render(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTicks) { TitleScreenAccessor titleScreenAccessor = (TitleScreenAccessor) this; - float fadeAmount = TitleScreenBehavior.super.handleFading(poseStack, this, titleScreenAccessor, this.panorama, PANORAMA_OVERLAY, partialTicks); - this.renderLogo(poseStack, fadeAmount); + if (this.minecraft != null && titleScreenAccessor.aether$getSplash() == null) { + titleScreenAccessor.aether$setSplash(this.minecraft.getSplashManager().getSplash()); + } + float fadeAmount = TitleScreenBehavior.super.handleFading(guiGraphics, this, titleScreenAccessor, this.panorama, PANORAMA_OVERLAY, partialTicks); + this.renderLogo(guiGraphics, fadeAmount); int roundedFadeAmount = Mth.ceil(fadeAmount * 255.0F) << 24; if ((roundedFadeAmount & -67108864) != 0) { if (titleScreenAccessor.getWarningLabel() != null) { - titleScreenAccessor.getWarningLabel().render(poseStack, roundedFadeAmount); + titleScreenAccessor.getWarningLabel().render(guiGraphics, roundedFadeAmount); } - ForgeHooksClient.renderMainMenu(this, poseStack, this.font, this.width, this.height, roundedFadeAmount); + ForgeHooksClient.renderMainMenu(this, guiGraphics, this.font, this.width, this.height, roundedFadeAmount); if (titleScreenAccessor.aether$getSplash() != null) { - poseStack.pushPose(); - poseStack.translate(250.0F, 50.0F, 0.0F); - poseStack.mulPose(Axis.ZP.rotationDegrees(-20.0F)); - float textSize = 1.8F - Mth.abs(Mth.sin((float) (Util.getMillis() % 1000L) / 1000.0F * Mth.TWO_PI) * 0.1F); - textSize = textSize * 100.0F / (float) (this.font.width(titleScreenAccessor.aether$getSplash()) + 32); poseStack.scale(textSize, textSize, textSize); - GuiComponent.drawCenteredString(poseStack, this.font, titleScreenAccessor.aether$getSplash(), 0, -8, 16776960 | roundedFadeAmount); - poseStack.popPose(); + SplashRendererAccessor splashRendererAccessor = (SplashRendererAccessor) titleScreenAccessor.aether$getSplash(); + if (splashRendererAccessor.cumulus$getSplash() != null && !splashRendererAccessor.cumulus$getSplash().isEmpty()) { + PoseStack poseStack = guiGraphics.pose(); + poseStack.pushPose(); + poseStack.translate(250.0F, 50.0F, 0.0F); + poseStack.mulPose(Axis.ZP.rotationDegrees(-20.0F)); + float textSize = 1.8F - Mth.abs(Mth.sin((float) (Util.getMillis() % 1000L) / 1000.0F * Mth.TWO_PI) * 0.1F); + textSize = textSize * 100.0F / (float) (VanillaLeftTitleScreen.this.font.width(splashRendererAccessor.cumulus$getSplash()) + 32); poseStack.scale(textSize, textSize, textSize); + guiGraphics.drawCenteredString(VanillaLeftTitleScreen.this.font, splashRendererAccessor.cumulus$getSplash(), 0, -8, 16776960 | roundedFadeAmount); + poseStack.popPose(); + } } - TitleScreenBehavior.super.renderRightBranding(poseStack, this, this.font, roundedFadeAmount); + TitleScreenBehavior.super.renderRightBranding(guiGraphics, this, this.font, roundedFadeAmount); } int xOffset = TitleScreenBehavior.super.handleButtonVisibility(this, fadeAmount); for (Renderable renderable : this.renderables) { // Increases the x-offset to the left for image buttons if there are menu buttons on the screen. - renderable.render(poseStack, mouseX, mouseY, partialTicks); + renderable.render(guiGraphics, mouseX, mouseY, partialTicks); if (renderable instanceof DynamicMenuButton dynamicMenuButton) { if (dynamicMenuButton.enabled) { xOffset -= 24; @@ -104,42 +111,27 @@ public void render(PoseStack poseStack, int mouseX, int mouseY, float partialTic TitleScreenBehavior.super.handleImageButtons(this, xOffset); if (fadeAmount >= 1.0F) { - this.modUpdateNotification.render(poseStack, mouseX, mouseY, partialTicks); + this.modUpdateNotification.render(guiGraphics, mouseX, mouseY, partialTicks); } } /** - * [CODE COPY] - {@link LogoRenderer#renderLogo(PoseStack, int, float)}. + * [CODE COPY] - {@link LogoRenderer#renderLogo(GuiGraphics, int, float)}. */ - public void renderLogo(PoseStack poseStack, float transparency) { - this.renderLogo(poseStack, transparency, 30); + public void renderLogo(GuiGraphics guiGraphics, float transparency) { + this.renderLogo(guiGraphics, transparency, 30); } /** - * [CODE COPY] - {@link LogoRenderer#renderLogo(PoseStack, int, float, int)}.

+ * [CODE COPY] - {@link LogoRenderer#renderLogo(GuiGraphics, int, float, int)}.

* Modified to align the logo to the left instead of the center. */ - public void renderLogo(PoseStack poseStack, float transparency, int height) { - RenderSystem.setShaderTexture(0, LogoRenderer.MINECRAFT_LOGO); - RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, transparency); - int xOffset = 11; + public void renderLogo(GuiGraphics guiGraphics, float transparency, int height) { + int xOffset = 16; int yOffset = -11; - if (this.showMinceraftEasterEgg) { - GuiComponent.blitOutlineBlack(xOffset, height, (x, y) -> { - GuiComponent.blit(poseStack, x, y + yOffset, 0, 0, 99, 44); - GuiComponent.blit(poseStack, x + 99, y + yOffset, 129, 0, 27, 44); - GuiComponent.blit(poseStack, x + 99 + 26, y + yOffset, 126, 0, 3, 44); - GuiComponent.blit(poseStack, x + 99 + 26 + 3, y + yOffset, 99, 0, 26, 44); - GuiComponent.blit(poseStack, x + 155, y + yOffset, 0, 45, 155, 44); - }); - } else { - GuiComponent.blitOutlineBlack(xOffset, height, (x, y) -> { - GuiComponent.blit(poseStack, x, y + yOffset, 0, 0, 155, 44); - GuiComponent.blit(poseStack, x + 155, y + yOffset, 0, 45, 155, 44); - }); - } - RenderSystem.setShaderTexture(0, LogoRenderer.MINECRAFT_EDITION); - GuiComponent.blit(poseStack, xOffset + 88, height + 37 + yOffset, 0.0F, 0.0F, 98, 14, 128, 16); - RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); + guiGraphics.setColor(1.0F, 1.0F, 1.0F, transparency); + guiGraphics.blit(this.showMinceraftEasterEgg ? LogoRenderer.EASTER_EGG_LOGO : LogoRenderer.MINECRAFT_LOGO, xOffset, yOffset + 22, 0.0F, 0.0F, 256, 44, 256, 64); + guiGraphics.blit(LogoRenderer.MINECRAFT_EDITION, xOffset + 67, height + 37 + yOffset, 0.0F, 0.0F, 128, 14, 128, 16); + guiGraphics.setColor(1.0F, 1.0F, 1.0F, 1.0F); } } diff --git a/src/main/java/com/aetherteam/aether/client/gui/screen/perks/AetherCustomizationsScreen.java b/src/main/java/com/aetherteam/aether/client/gui/screen/perks/AetherCustomizationsScreen.java index f9d1f91bec..17ad8a0971 100644 --- a/src/main/java/com/aetherteam/aether/client/gui/screen/perks/AetherCustomizationsScreen.java +++ b/src/main/java/com/aetherteam/aether/client/gui/screen/perks/AetherCustomizationsScreen.java @@ -12,8 +12,7 @@ import com.aetherteam.nitrogen.api.users.User; import com.aetherteam.nitrogen.api.users.UserData; import com.aetherteam.nitrogen.network.PacketRelay; -import com.mojang.blaze3d.vertex.PoseStack; -import net.minecraft.client.gui.GuiComponent; +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.Button; import net.minecraft.client.gui.components.Tooltip; import net.minecraft.client.gui.screens.Screen; @@ -224,14 +223,14 @@ private void setupDeveloperGlowOptions(int xPos, int yPos, int i) { } @Override - public void render(PoseStack poseStack, int mouseX, int mouseY, float partialTicks) { - this.renderBackground(poseStack); - GuiComponent.drawCenteredString(poseStack, this.font, this.getTitle(), this.width / 2, 15, 16777215); - GuiComponent.drawCenteredString(poseStack, this.font, Component.translatable("gui.aether.customization.color"), (this.width / 2 - 65) + 184, (this.height / 2 - 10) - 14, 16777215); + public void render(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTicks) { + this.renderBackground(guiGraphics); + guiGraphics.drawCenteredString(this.font, this.getTitle(), this.width / 2, 15, 16777215); + guiGraphics.drawCenteredString(this.font, Component.translatable("gui.aether.customization.color"), (this.width / 2 - 65) + 184, (this.height / 2 - 10) - 14, 16777215); if (this.getMinecraft().player != null) { int x = (this.width / 2) - 175; int y = (this.height / 2) + 50; - InventoryScreen.renderEntityInInventoryFollowsMouse(poseStack, x + 33, y, 60, (float) (x + 33 - mouseX), (float) (y - 100 - mouseY), this.getMinecraft().player); + InventoryScreen.renderEntityInInventoryFollowsMouse(guiGraphics, x + 33, y, 60, (float) (x + 33 - mouseX), (float) (y - 100 - mouseY), this.getMinecraft().player); } // Resets color values if they're invalid. if (this.haloColorBox != null && !this.haloColorBox.getValue().equals(this.haloColor)) { @@ -248,7 +247,7 @@ public void render(PoseStack poseStack, int mouseX, int mouseY, float partialTic this.developerGlowColor = ""; } } - super.render(poseStack, mouseX, mouseY, partialTicks); + super.render(guiGraphics, mouseX, mouseY, partialTicks); } @Override diff --git a/src/main/java/com/aetherteam/aether/client/gui/screen/perks/MoaSkinsScreen.java b/src/main/java/com/aetherteam/aether/client/gui/screen/perks/MoaSkinsScreen.java index 2f997db8e8..cd233fcc5f 100644 --- a/src/main/java/com/aetherteam/aether/client/gui/screen/perks/MoaSkinsScreen.java +++ b/src/main/java/com/aetherteam/aether/client/gui/screen/perks/MoaSkinsScreen.java @@ -26,12 +26,11 @@ import net.minecraft.Util; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.Font; -import net.minecraft.client.gui.GuiComponent; +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.Button; import net.minecraft.client.gui.components.Tooltip; import net.minecraft.client.gui.screens.ConfirmLinkScreen; import net.minecraft.client.gui.screens.Screen; -import net.minecraft.client.renderer.GameRenderer; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.entity.EntityRenderDispatcher; import net.minecraft.network.chat.Component; @@ -42,6 +41,7 @@ import net.minecraft.util.FormattedCharSequence; import net.minecraft.util.Mth; import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.item.ItemStack; import org.joml.Quaternionf; import javax.annotation.Nullable; @@ -166,12 +166,12 @@ public void init() { } @Override - public void render(PoseStack poseStack, int mouseX, int mouseY, float partialTicks) { - this.renderBackground(poseStack); - this.renderWindow(poseStack); - this.renderSlots(poseStack, mouseX, mouseY); - this.renderInterface(poseStack, mouseX, mouseY, partialTicks); - super.render(poseStack, mouseX, mouseY, partialTicks); + public void render(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTicks) { + this.renderBackground(guiGraphics); + this.renderWindow(guiGraphics); + this.renderSlots(guiGraphics, mouseX, mouseY); + this.renderInterface(guiGraphics, mouseX, mouseY, partialTicks); + super.render(guiGraphics, mouseX, mouseY, partialTicks); this.checkUserConnectionStatus(); } @@ -179,30 +179,28 @@ public void render(PoseStack poseStack, int mouseX, int mouseY, float partialTic * Displays the main window GUI. Depending on the player's donation status, the text * "Donate to the project to get Moa Skins!" or "Thank you for donating to the project!" * will also be displayed. - * @param poseStack The rendering {@link PoseStack}. + * @param guiGraphics The rendering {@link GuiGraphics}. */ - private void renderWindow(PoseStack poseStack) { + private void renderWindow(GuiGraphics guiGraphics) { User user = UserData.Client.getClientUser(); Font font = this.getMinecraft().font; - RenderSystem.setShader(GameRenderer::getPositionTexShader); - RenderSystem.setShaderTexture(0, MOA_SKINS_GUI); - GuiComponent.blit(poseStack, this.leftPos, this.topPos, 0, 0, this.imageWidth, this.imageHeight); + guiGraphics.blit(MOA_SKINS_GUI, this.leftPos, this.topPos, 0, 0, this.imageWidth, this.imageHeight); Component component = user == null ? Component.translatable("gui.aether.moa_skins.text.donate") : Component.translatable("gui.aether.moa_skins.text.reward"); int y = (this.topPos + this.imageHeight - 69) + font.wordWrapHeight(component, this.imageWidth - 20); for (FormattedCharSequence sequence : font.split(component, this.imageWidth - 20)) { - GuiComponent.drawCenteredString(poseStack, font, sequence, this.leftPos + (this.imageWidth / 2), y, 16777215); + guiGraphics.drawCenteredString(font, sequence, this.leftPos + (this.imageWidth / 2), y, 16777215); y += 12; } } /** * Renders the slots for selecting different Moa Skins from. - * @param poseStack The rendering {@link PoseStack}. + * @param guiGraphics The rendering {@link GuiGraphics}. * @param mouseX The {@link Integer} for the mouse's x-position. * @param mouseY The {@link Integer} for the mouse's y-position. */ - private void renderSlots(PoseStack poseStack, int mouseX, int mouseY) { + private void renderSlots(GuiGraphics guiGraphics, int mouseX, int mouseY) { if (this.getMinecraft().player != null) { UUID uuid = this.getMinecraft().player.getUUID(); Map userSkinsData = ClientMoaSkinPerkData.INSTANCE.getClientPerkData(); @@ -222,66 +220,58 @@ private void renderSlots(PoseStack poseStack, int mouseX, int mouseY) { // If a skin slot is not selected, then it will display as darkened only if the user does not have access to that skin. if (user == null || !skin.getUserPredicate().test(user) || skin == this.getSelectedSkin() || this.getSlotIndex(mouseX, mouseY) == slotIndex) { int u = skin == this.getSelectedSkin() || this.getSlotIndex(mouseX, mouseY) == slotIndex ? 18 : 0; // Highlighted slot vs. Darkened slot. - RenderSystem.setShader(GameRenderer::getPositionTexShader); - RenderSystem.setShaderTexture(0, MOA_SKINS_GUI); - GuiComponent.blit(poseStack, x, y, u, 191, 18, 18); // Render slot. + guiGraphics.blit(MOA_SKINS_GUI, x, y, u, 191, 18, 18); // Render slot. } // Renders an outline for the player's currently active Moa Skin. if (userSkinsData.containsKey(uuid) && userSkinsData.get(uuid).moaSkin() == skin) { - RenderSystem.setShader(GameRenderer::getPositionTexShader); - RenderSystem.setShaderTexture(0, MOA_SKINS_GUI); - GuiComponent.blit(poseStack, x, y, 36, 191, 18, 18); // Render golden slot outline. + guiGraphics.blit(MOA_SKINS_GUI, x, y, 36, 191, 18, 18); // Render golden slot outline. } - RenderSystem.setShader(GameRenderer::getPositionTexShader); - RenderSystem.setShaderTexture(0, skin.getIconLocation()); - GuiComponent.blit(poseStack, x + 1, y + 1, 0, 0, 16, 16, 16, 16); // Render Moa skin icon. + guiGraphics.blit(skin.getIconLocation(), x + 1, y + 1, 0, 0, 16, 16, 16, 16); // Render Moa skin icon. slotIndex++; } } - this.renderScrollbar(poseStack); - this.renderSlotTooltips(poseStack, mouseX, mouseY); + this.renderScrollbar(guiGraphics); + this.renderSlotTooltips(guiGraphics, mouseX, mouseY); } /** * Renders the scrollbar based on the leftmost position for it and the current x-offset as determined by {@link MoaSkinsScreen#scrollX}. - * @param poseStack The rendering {@link PoseStack}. + * @param guiGraphics The rendering {@link GuiGraphics}. */ - private void renderScrollbar(PoseStack poseStack) { + private void renderScrollbar(GuiGraphics guiGraphics) { int scrollbarTop = (this.topPos + (this.imageHeight / 2)) + 29; int scrollbarLeft = this.leftPos + 8; int scrollbarU = this.moaSkins.size() > this.maxSlots() ? 0 : 13; - RenderSystem.setShader(GameRenderer::getPositionTexShader); - RenderSystem.setShaderTexture(0, MOA_SKINS_GUI); - GuiComponent.blit(poseStack, (int) (scrollbarLeft + this.scrollX), scrollbarTop, scrollbarU, 209, 13, 6); // Render scrollbar. + guiGraphics.blit(MOA_SKINS_GUI, (int) (scrollbarLeft + this.scrollX), scrollbarTop, scrollbarU, 209, 13, 6); // Render scrollbar. } /** * Using {@link MoaSkinsScreen#getSkinFromSlot(double, double)}, this checks if the mouse is currently hovered over a Moa Skin slot, * and if so, then it will display a tooltip with the name of the Moa Skin. - * @param poseStack The rendering {@link PoseStack}. + * @param guiGraphics The rendering {@link GuiGraphics}. * @param mouseX The {@link Integer} for the mouse's x-position. * @param mouseY The {@link Integer} for the mouse's y-position. */ - private void renderSlotTooltips(PoseStack poseStack, double mouseX, double mouseY) { + private void renderSlotTooltips(GuiGraphics guiGraphics, double mouseX, double mouseY) { MoaSkins.MoaSkin skin = this.getSkinFromSlot(mouseX, mouseY); if (skin != null) { Component name = skin.getDisplayName(); - this.renderTooltip(poseStack, name, (int) mouseX, (int) mouseY); + guiGraphics.renderTooltip(this.getMinecraft().font, name, (int) mouseX, (int) mouseY); } } /** * Renders elements of the interface over the black section of the GUI. - * @param poseStack The rendering {@link PoseStack}. + * @param guiGraphics The rendering {@link GuiGraphics}. * @param mouseX The {@link Integer} for the mouse's x-position. * @param mouseY The {@link Integer} for the mouse's y-position. * @param partialTicks The {@link Float} for the game's partial ticks. */ - private void renderInterface(PoseStack poseStack, int mouseX, int mouseY, float partialTicks) { + private void renderInterface(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTicks) { User user = UserData.Client.getClientUser(); if (user != null && this.getSelectedSkin().getUserPredicate().test(user)) { // If the player has access to the selected skin. this.applyButton.active = true; @@ -289,68 +279,62 @@ private void renderInterface(PoseStack poseStack, int mouseX, int mouseY, float if (this.getSelectedSkin().getInfo().lifetime() || user.getCurrentTier() == null || user.getCurrentTierLevel() < this.getSelectedSkin().getInfo().tier().getLevel()) { boolean mouseOver = this.isMouseOverIcon(mouseX, mouseY, 8); - this.renderLifetimeIcon(poseStack, mouseOver); + this.renderLifetimeIcon(guiGraphics, mouseOver); if (mouseOver) { // Display a tooltip saying that the player has lifetime access to the skin. this.renderTooltip(Component.translatable("gui.aether.moa_skins.tooltip.title.access.lifetime"), - Component.translatable("gui.aether.moa_skins.tooltip.lifetime"), poseStack, mouseX, mouseY); + Component.translatable("gui.aether.moa_skins.tooltip.lifetime"), guiGraphics, mouseX, mouseY); } } else if (user.getCurrentTier() != null) { boolean mouseOver = this.isMouseOverIcon(mouseX, mouseY, 7); - this.renderPledgingIcon(poseStack, mouseOver); + this.renderPledgingIcon(guiGraphics, mouseOver); if (mouseOver) { // Display a tooltip saying that the player has access to the skin when pledging to the specified tier. this.renderTooltip(Component.translatable("gui.aether.moa_skins.tooltip.title.access.pledging"), - Component.translatable("gui.aether.moa_skins.tooltip.pledging", user.getCurrentTier().getDisplayName()), poseStack, mouseX, mouseY); + Component.translatable("gui.aether.moa_skins.tooltip.pledging", user.getCurrentTier().getDisplayName()), guiGraphics, mouseX, mouseY); } } } else { // If the player does not have access to the selected skin. this.applyButton.active = false; this.removeButton.active = false; - RenderSystem.setShader(GameRenderer::getPositionTexShader); - RenderSystem.setShaderTexture(0, MOA_SKINS_GUI); - GuiComponent.blit(poseStack, this.leftPos + 13, this.topPos + 13, 54, 191, 10, 14); // Lock Icon + guiGraphics.blit(MOA_SKINS_GUI, this.leftPos + 13, this.topPos + 13, 54, 191, 10, 14); // Lock Icon if (this.getSelectedSkin().getInfo().lifetime()) { boolean mouseOver = this.isMouseOverIcon(mouseX, mouseY, 8); - this.renderLifetimeIcon(poseStack, mouseOver); + this.renderLifetimeIcon(guiGraphics, mouseOver); if (mouseOver) { // Display a tooltip saying that the skin comes with lifetime access when pledging to the given tier. this.renderTooltip(Component.translatable("gui.aether.moa_skins.tooltip.title.access.lifetime"), - Component.translatable("gui.aether.moa_skins.tooltip.access.lifetime", this.getSelectedSkin().getInfo().tier().getDisplayName()), poseStack, mouseX, mouseY); + Component.translatable("gui.aether.moa_skins.tooltip.access.lifetime", this.getSelectedSkin().getInfo().tier().getDisplayName()), guiGraphics, mouseX, mouseY); } } else { boolean mouseOver = this.isMouseOverIcon(mouseX, mouseY, 7); - this.renderPledgingIcon(poseStack, mouseOver); + this.renderPledgingIcon(guiGraphics, mouseOver); if (mouseOver) { // Display a tooltip saying that the skin comes with access only when pledging to the given tier. this.renderTooltip(Component.translatable("gui.aether.moa_skins.tooltip.title.access.pledging"), - Component.translatable("gui.aether.moa_skins.tooltip.access.pledging", this.getSelectedSkin().getInfo().tier().getDisplayName()), poseStack, mouseX, mouseY); + Component.translatable("gui.aether.moa_skins.tooltip.access.pledging", this.getSelectedSkin().getInfo().tier().getDisplayName()), guiGraphics, mouseX, mouseY); } } } this.renderMoa(partialTicks); // Renders the spinning Moa with the selected skin. - GuiComponent.drawCenteredString(poseStack, this.getMinecraft().font, this.getSelectedSkin().getDisplayName(), this.leftPos + (this.imageWidth / 2), this.topPos + 12, 16777215); // Skin Name - GuiComponent.drawCenteredString(poseStack, this.getMinecraft().font, this.getTitle(), this.leftPos + (this.imageWidth / 2), this.topPos - 15, 16777215); // Title + guiGraphics.drawCenteredString(this.getMinecraft().font, this.getSelectedSkin().getDisplayName(), this.leftPos + (this.imageWidth / 2), this.topPos + 12, 16777215); // Skin Name + guiGraphics.drawCenteredString(this.getMinecraft().font, this.getTitle(), this.leftPos + (this.imageWidth / 2), this.topPos - 15, 16777215); // Title } /** * Displays an infinity sign icon in the bottom left corner of the black GUI interface. - * @param poseStack The rendering {@link PoseStack}. + * @param guiGraphics The rendering {@link GuiGraphics}. * @param mouseOver Whether the mouse is hovering over this icon, as a {@link Boolean}. */ - private void renderLifetimeIcon(PoseStack poseStack, boolean mouseOver) { - RenderSystem.setShader(GameRenderer::getPositionTexShader); - RenderSystem.setShaderTexture(0, MOA_SKINS_GUI); - GuiComponent.blit(poseStack, this.leftPos + 13, (this.topPos + (this.imageHeight / 2)) - 9, mouseOver ? 63 : 55, 184, 8, 7); // Lifetime Icon + private void renderLifetimeIcon(GuiGraphics guiGraphics, boolean mouseOver) { + guiGraphics.blit(MOA_SKINS_GUI, this.leftPos + 13, (this.topPos + (this.imageHeight / 2)) - 9, mouseOver ? 63 : 55, 184, 8, 7); // Lifetime Icon } /** * Displays an hourglass icon in the bottom left corner of the black GUI interface. - * @param poseStack The rendering {@link PoseStack}. + * @param guiGraphics The rendering {@link GuiGraphics}. * @param mouseOver Whether the mouse is hovering over this icon, as a {@link Boolean}. */ - private void renderPledgingIcon(PoseStack poseStack, boolean mouseOver) { - RenderSystem.setShader(GameRenderer::getPositionTexShader); - RenderSystem.setShaderTexture(0, MOA_SKINS_GUI); - GuiComponent.blit(poseStack, this.leftPos + 13, (this.topPos + (this.imageHeight / 2)) - 9, mouseOver ? 49 : 42, 184, 7, 7); + private void renderPledgingIcon(GuiGraphics guiGraphics, boolean mouseOver) { + guiGraphics.blit(MOA_SKINS_GUI, this.leftPos + 13, (this.topPos + (this.imageHeight / 2)) - 9, mouseOver ? 49 : 42, 184, 7, 7); } private boolean isMouseOverIcon(int mouseX, int mouseY, int width) { @@ -365,15 +349,15 @@ private boolean isMouseOverIcon(int mouseX, int mouseY, int width) { * Displays a formatted tooltip with a title and a description. * @param title The title {@link MutableComponent} for the tooltip. * @param description The description {@link Component} for the tooltip. - * @param poseStack The rendering {@link PoseStack}. + * @param guiGraphics The rendering {@link GuiGraphics}. * @param mouseX The {@link Integer} for the mouse's x-position. * @param mouseY The {@link Integer} for the mouse's y-position. */ - private void renderTooltip(MutableComponent title, Component description, PoseStack poseStack, int mouseX, int mouseY) { + private void renderTooltip(MutableComponent title, Component description, GuiGraphics guiGraphics, int mouseX, int mouseY) { List formattedTextList = new ArrayList<>(); formattedTextList.add(title.withStyle(ChatFormatting.GOLD)); formattedTextList.addAll(this.getMinecraft().font.getSplitter().splitLines(description, this.width / 3, Style.EMPTY)); - this.renderComponentTooltip(poseStack, formattedTextList, mouseX, mouseY, this.getMinecraft().font); + guiGraphics.renderComponentTooltip(this.getMinecraft().font, formattedTextList, mouseX, mouseY, ItemStack.EMPTY); } /** @@ -398,8 +382,8 @@ private void renderMoa(float partialTicks) { } /** - * [CODE COPY] - {@link net.minecraft.client.gui.screens.inventory.InventoryScreen#renderEntityInInventoryFollowsAngle(PoseStack, int, int, int, float, float, LivingEntity)}.
- * [CODE COPY] - {@link net.minecraft.client.gui.screens.inventory.InventoryScreen#renderEntityInInventory(PoseStack, int, int, int, Quaternionf, Quaternionf, LivingEntity)}.

+ * [CODE COPY] - {@link net.minecraft.client.gui.screens.inventory.InventoryScreen#renderEntityInInventoryFollowsAngle(GuiGraphics, int, int, int, float, float, LivingEntity)}.
+ * [CODE COPY] - {@link net.minecraft.client.gui.screens.inventory.InventoryScreen#renderEntityInInventory(GuiGraphics, int, int, int, Quaternionf, Quaternionf, LivingEntity)}.

* Merged code from the two methods, and modified so that the head rotation follows the body rotation and doesn't rotate separately.

* Warning for "deprecation" is suppressed because this is copied code. */ diff --git a/src/main/java/com/aetherteam/aether/client/renderer/AetherModelLayers.java b/src/main/java/com/aetherteam/aether/client/renderer/AetherModelLayers.java index 08ad5481c1..10414171bd 100644 --- a/src/main/java/com/aetherteam/aether/client/renderer/AetherModelLayers.java +++ b/src/main/java/com/aetherteam/aether/client/renderer/AetherModelLayers.java @@ -56,11 +56,15 @@ public class AetherModelLayers { public static final ModelLayerLocation PENDANT = register("pendant"); public static final ModelLayerLocation GLOVES = register("gloves"); + public static final ModelLayerLocation GLOVES_TRIM = register("gloves_trim"); public static final ModelLayerLocation GLOVES_SLIM = register("gloves_slim"); + public static final ModelLayerLocation GLOVES_TRIM_SLIM = register("gloves_trim_slim"); public static final ModelLayerLocation GLOVES_FIRST_PERSON = register("gloves_first_person"); + public static final ModelLayerLocation GLOVES_TRIM_FIRST_PERSON = register("gloves_trim_first_person"); public static final ModelLayerLocation SHIELD_OF_REPULSION = register("shield_of_repulsion"); public static final ModelLayerLocation SHIELD_OF_REPULSION_SLIM = register("shield_of_repulsion_slim"); public static final ModelLayerLocation SHIELD_OF_REPULSION_ARM = register("shield_of_repulsion_arm"); + public static final ModelLayerLocation CAPE = register("cape"); public static final ModelLayerLocation PLAYER_HALO = register("player_halo"); diff --git a/src/main/java/com/aetherteam/aether/client/renderer/AetherOverlays.java b/src/main/java/com/aetherteam/aether/client/renderer/AetherOverlays.java index f96f8aeacb..1bebff822c 100644 --- a/src/main/java/com/aetherteam/aether/client/renderer/AetherOverlays.java +++ b/src/main/java/com/aetherteam/aether/client/renderer/AetherOverlays.java @@ -15,10 +15,8 @@ import net.minecraft.Util; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.Gui; -import net.minecraft.client.gui.GuiComponent; +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.player.LocalPlayer; -import net.minecraft.client.renderer.GameRenderer; -import net.minecraft.client.renderer.texture.TextureAtlas; import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; @@ -107,11 +105,12 @@ public static void registerOverlays(RegisterGuiOverlaysEvent event) { } /** - * [CODE COPY] - {@link Gui#renderPortalOverlay(PoseStack, float)}.

+ * [CODE COPY] - {@link Gui#renderPortalOverlay(GuiGraphics, float)}.

* Warning for "deprecation" is suppressed because vanilla calls {@link net.minecraft.client.renderer.block.BlockModelShaper#getParticleIcon(BlockState)} just fine. */ @SuppressWarnings("deprecation") - private static void renderAetherPortalOverlay(PoseStack poseStack, Minecraft minecraft, Window window, AetherPlayer handler, float partialTicks) { + private static void renderAetherPortalOverlay(GuiGraphics guiGraphics, Minecraft minecraft, Window window, AetherPlayer handler, float partialTicks) { + PoseStack poseStack = guiGraphics.pose(); float timeInPortal = handler.getPrevPortalAnimTime() + (handler.getPortalAnimTime() - handler.getPrevPortalAnimTime()) * partialTicks; if (timeInPortal > 0.0F) { if (timeInPortal < 1.0F) { @@ -121,47 +120,42 @@ private static void renderAetherPortalOverlay(PoseStack poseStack, Minecraft min } poseStack.pushPose(); - RenderSystem.enableBlend(); RenderSystem.disableDepthTest(); RenderSystem.depthMask(false); - RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, timeInPortal); - RenderSystem.setShaderTexture(0, TextureAtlas.LOCATION_BLOCKS); TextureAtlasSprite textureAtlasSprite = minecraft.getBlockRenderer().getBlockModelShaper().getParticleIcon(AetherBlocks.AETHER_PORTAL.get().defaultBlockState()); - GuiComponent.blit(poseStack, 0, 0, -90, window.getGuiScaledWidth(), window.getGuiScaledHeight(), textureAtlasSprite); + guiGraphics.blit(0, 0, -90, window.getGuiScaledWidth(), window.getGuiScaledHeight(), textureAtlasSprite, 1.0F, 1.0F, 1.0F, timeInPortal); RenderSystem.depthMask(true); RenderSystem.enableDepthTest(); - RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); - RenderSystem.disableBlend(); poseStack.popPose(); } } /** * Renders a purple vignette with pulsing opacity. - * @param poseStack The {@link PoseStack} for rendering. + * @param guiGraphics The {@link GuiGraphics} for rendering. * @param minecraft The {@link Minecraft} instance. * @param window The game {@link Window}. * @param handler The {@link AetherPlayer} capability for the player. */ - private static void renderInebriationOverlay(PoseStack poseStack, Minecraft minecraft, Window window, AetherPlayer handler) { + private static void renderInebriationOverlay(GuiGraphics guiGraphics, Minecraft minecraft, Window window, AetherPlayer handler) { Player player = handler.getPlayer(); MobEffectInstance inebriation = player.getEffect(AetherEffects.INEBRIATION.get()); double effectScale = minecraft.options.screenEffectScale().get(); if (inebriation != null) { float inebriationDuration = (float) (inebriation.getDuration() % 50) / 50; float alpha = (inebriationDuration * inebriationDuration) / 5.0F + 0.4F; - renderVignette(poseStack, window, effectScale, alpha, TEXTURE_INEBRIATION_VIGNETTE); + renderVignette(guiGraphics, window, effectScale, alpha, TEXTURE_INEBRIATION_VIGNETTE); } } /** * Renders a green vignette with a gradually fading opacity. - * @param poseStack The {@link PoseStack} for rendering. + * @param guiGraphics The {@link GuiGraphics} for rendering. * @param minecraft The {@link Minecraft} instance. * @param window The game {@link Window}. * @param handler The {@link AetherPlayer} capability for the player. */ - private static void renderRemedyOverlay(PoseStack poseStack, Minecraft minecraft, Window window, AetherPlayer handler) { + private static void renderRemedyOverlay(GuiGraphics guiGraphics, Minecraft minecraft, Window window, AetherPlayer handler) { Player player = handler.getPlayer(); MobEffectInstance remedy = player.getEffect(AetherEffects.REMEDY.get()); double effectScale = minecraft.options.screenEffectScale().get(); @@ -170,39 +164,37 @@ private static void renderRemedyOverlay(PoseStack poseStack, Minecraft minecraft int remedyDuration = remedy.getDuration(); if (remedyStartDuration > 0 && remedyDuration > 0) { float alpha = ((float) remedyDuration / remedyStartDuration) / 1.5F; - renderVignette(poseStack, window, effectScale, alpha, TEXTURE_REMEDY_VIGNETTE); + renderVignette(guiGraphics, window, effectScale, alpha, TEXTURE_REMEDY_VIGNETTE); } } } /** * Renders a blue vignette with a gradually fading opacity. - * @param poseStack The {@link PoseStack} for rendering. + * @param guiGraphics The {@link GuiGraphics} for rendering. * @param minecraft The {@link Minecraft} instance. * @param window The game {@link Window}. * @param handler The {@link AetherPlayer} capability for the player. */ - private static void renderRepulsionOverlay(PoseStack poseStack, Minecraft minecraft, Window window, AetherPlayer handler) { + private static void renderRepulsionOverlay(GuiGraphics guiGraphics, Minecraft minecraft, Window window, AetherPlayer handler) { int projectileImpactedMaximum = handler.getProjectileImpactedMaximum(); int projectileImpactedTimer = handler.getProjectileImpactedTimer(); double effectScale = minecraft.options.screenEffectScale().get(); if (projectileImpactedTimer > 0) { float alpha = (float) projectileImpactedTimer / projectileImpactedMaximum; - renderVignette(poseStack, window, effectScale, alpha, TEXTURE_SHIELD_OF_REPULSION_VIGNETTE); + renderVignette(guiGraphics, window, effectScale, alpha, TEXTURE_SHIELD_OF_REPULSION_VIGNETTE); } } - private static void renderVignette(PoseStack poseStack, Window window, double effectScale, float alpha, ResourceLocation resource) { + private static void renderVignette(GuiGraphics guiGraphics, Window window, double effectScale, float alpha, ResourceLocation resource) { + PoseStack poseStack = guiGraphics.pose(); poseStack.pushPose(); alpha *= Math.sqrt(effectScale); RenderSystem.disableDepthTest(); RenderSystem.depthMask(false); RenderSystem.enableBlend(); - RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, alpha); - RenderSystem.setShader(GameRenderer::getPositionTexShader); - RenderSystem.setShaderTexture(0, resource); - GuiComponent.blit(poseStack, 0, 0, -90, 0.0F, 0.0F, window.getGuiScaledWidth(), window.getGuiScaledHeight(), window.getGuiScaledWidth(), window.getGuiScaledHeight()); - RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); + guiGraphics.setColor(1.0F, 1.0F, 1.0F, alpha); + guiGraphics.blit(resource, 0, 0, -90, 0.0F, 0.0F, window.getGuiScaledWidth(), window.getGuiScaledHeight(), window.getGuiScaledWidth(), window.getGuiScaledHeight()); RenderSystem.disableBlend(); RenderSystem.depthMask(true); RenderSystem.enableDepthTest(); @@ -211,12 +203,12 @@ private static void renderVignette(PoseStack poseStack, Window window, double ef /** * Renders a boss-esque bar at the top of the screen for the Hammer of Kingbdogz' item cooldown. - * @param poseStack The {@link PoseStack} for rendering. + * @param guiGraphics The {@link GuiGraphics} for rendering. * @param minecraft The {@link Minecraft} instance. * @param window The game {@link Window}. * @param player The {@link LocalPlayer}. */ - private static void renderHammerCooldownOverlay(PoseStack poseStack, Minecraft minecraft, Window window, LocalPlayer player) { + private static void renderHammerCooldownOverlay(GuiGraphics guiGraphics, Minecraft minecraft, Window window, LocalPlayer player) { Inventory inventory = player.getInventory(); if (inventory.hasAnyMatching((itemStack) -> itemStack.is(AetherItems.HAMMER_OF_KINGBDOGZ.get()))) { for (ItemStack itemStack : inventory.items) { @@ -230,11 +222,9 @@ private static void renderHammerCooldownOverlay(PoseStack poseStack, Minecraft m itemStack = player.getOffhandItem(); } String text = itemStack.getHoverName().getString().concat(" ").concat(Component.translatable("aether.hammer_of_kingbdogz_cooldown").getString()); - minecraft.font.drawShadow(poseStack, text, (window.getGuiScaledWidth() / 2.0F) - (minecraft.font.width(text) / 2.0F), 32, 16777215); - RenderSystem.setShader(GameRenderer::getPositionTexShader); - RenderSystem.setShaderTexture(0, TEXTURE_COOLDOWN_BAR); - GuiComponent.blit(poseStack, window.getGuiScaledWidth() / 2 - 64, 42, 0, 8, 128, 8, 256, 256); - GuiComponent.blit(poseStack, window.getGuiScaledWidth() / 2 - 64, 42, 0, 0, (int) (cooldownPercent * 128), 8, 256, 256); + guiGraphics.drawString(minecraft.font, text, (int) ((window.getGuiScaledWidth() / 2.0F) - (minecraft.font.width(text) / 2.0F)), 32, 16777215); + guiGraphics.blit(TEXTURE_COOLDOWN_BAR, window.getGuiScaledWidth() / 2 - 64, 42, 0, 8, 128, 8, 256, 256); + guiGraphics.blit(TEXTURE_COOLDOWN_BAR, window.getGuiScaledWidth() / 2 - 64, 42, 0, 0, (int) (cooldownPercent * 128), 8, 256, 256); break; } } @@ -244,37 +234,35 @@ private static void renderHammerCooldownOverlay(PoseStack poseStack, Minecraft m /** * Renders feathers at the top of the screen corresponding to the amount of jumps the currently mounted Moa has. - * @param poseStack The {@link PoseStack} for rendering. + * @param guiGraphics The {@link GuiGraphics} for rendering. * @param window The game {@link Window}. * @param player The {@link LocalPlayer}. */ - private static void renderMoaJumps(PoseStack poseStack, Window window, LocalPlayer player) { + private static void renderMoaJumps(GuiGraphics guiGraphics, Window window, LocalPlayer player) { if (player.getVehicle() instanceof Moa moa) { - RenderSystem.setShader(GameRenderer::getPositionTexShader); - RenderSystem.setShaderTexture(0, TEXTURE_JUMPS); for (int jumpCount = 0; jumpCount < moa.getMaxJumps(); jumpCount++) { int xPos = ((window.getGuiScaledWidth() / 2) + (jumpCount * 8)) - (moa.getMaxJumps() * 8) / 2; int yPos = 18; if (jumpCount < moa.getRemainingJumps()) { - GuiComponent.blit(poseStack, xPos, yPos, 0, 0, 9, 11, 256, 256); + guiGraphics.blit(TEXTURE_JUMPS, xPos, yPos, 0, 0, 9, 11, 256, 256); } else { - GuiComponent.blit(poseStack, xPos, yPos, 10, 0, 9, 11, 256, 256); + guiGraphics.blit(TEXTURE_JUMPS, xPos, yPos, 10, 0, 9, 11, 256, 256); } } } } /** - * [CODE COPY] - {@link Gui#renderPlayerHealth(PoseStack)}.

+ * [CODE COPY] - {@link Gui#renderPlayerHealth(GuiGraphics)}.

* Stripped down to only use what is necessary.
* Renders silver heart textures over the extra hearts given by Life Shards. - * @param poseStack The {@link PoseStack} for rendering. + * @param guiGraphics The {@link GuiGraphics} for rendering. * @param gui The {@link ForgeGui} included in rendering. * @param player The {@link LocalPlayer}. * @param width The {@link Integer} for the screen width. * @param height The {@link Integer} for the screen height. */ - private static void renderSilverLifeShardHearts(PoseStack poseStack, ForgeGui gui, LocalPlayer player, int width, int height) { + private static void renderSilverLifeShardHearts(GuiGraphics guiGraphics, ForgeGui gui, LocalPlayer player, int width, int height) { GuiAccessor guiAccessor = (GuiAccessor) gui; if (AetherConfig.CLIENT.enable_silver_hearts.get() && gui.shouldDrawSurvivalElements()) { AetherPlayer.get(player).ifPresent(aetherPlayer -> { @@ -285,8 +273,6 @@ private static void renderSilverLifeShardHearts(PoseStack poseStack, ForgeGui gu int lastLifeShardHealth = 0; int lastOverallHealth = 0; - RenderSystem.setShader(GameRenderer::getPositionTexShader); - RenderSystem.setShaderTexture(0, TEXTURE_LIFE_SHARD_HEARTS); RenderSystem.enableBlend(); double overallHealth = attributeInstance.getValue(); @@ -318,7 +304,7 @@ private static void renderSilverLifeShardHearts(PoseStack poseStack, ForgeGui gu regen = gui.getGuiTicks() % Mth.ceil(displayOverallHealth + 5.0F); } - renderHearts(poseStack, innerPlayer, gui, left, top, regen, displayOverallHealth, displayLifeShardHealth, maxDefaultHealth, currentLifeShardHealth, rowHeight, absorption, highlight); + renderHearts(guiGraphics, innerPlayer, gui, left, top, regen, displayOverallHealth, displayLifeShardHealth, maxDefaultHealth, currentLifeShardHealth, rowHeight, absorption, highlight); RenderSystem.disableBlend(); } @@ -328,10 +314,10 @@ private static void renderSilverLifeShardHearts(PoseStack poseStack, ForgeGui gu } /** - * [CODE COPY] - {@link Gui#renderHearts(PoseStack, Player, int, int, int, int, float, int, int, int, boolean)}.

+ * [CODE COPY] - {@link Gui#renderHearts(GuiGraphics, Player, int, int, int, int, float, int, int, int, boolean)}.

* Stripped down to only use what is necessary. */ - private static void renderHearts(PoseStack poseStack, Player player, ForgeGui gui, int left, int top, int regen, float displayOverallHealth, float displayLifeShardHealth, int maxDefaultHealth, int lifeShardHealth, int rowHeight, int absorption, boolean highlight) { + private static void renderHearts(GuiGraphics guiGraphics, Player player, ForgeGui gui, int left, int top, int regen, float displayOverallHealth, float displayLifeShardHealth, int maxDefaultHealth, int lifeShardHealth, int rowHeight, int absorption, boolean highlight) { GuiAccessor guiAccessor = (GuiAccessor) gui; Gui.HeartType heartType = HeartTypeAccessor.callForPlayer(player); int overallHearts = Mth.ceil((double) displayOverallHealth / 2.0); @@ -352,11 +338,11 @@ private static void renderHearts(PoseStack poseStack, Player player, ForgeGui gu int selectedContainer = currentHeart * 2; if (highlight && selectedContainer < displayLifeShardHealth) { boolean halfHeart = selectedContainer + 1 == displayLifeShardHealth; - guiAccessor.callRenderHeart(poseStack, heartType, x, y, 0, true, halfHeart); + guiGraphics.blit(TEXTURE_LIFE_SHARD_HEARTS, x, y, heartType.getX(halfHeart, false), 0, 9, 9); } if (selectedContainer < lifeShardHealth) { boolean halfHeart = selectedContainer + 1 == lifeShardHealth; - guiAccessor.callRenderHeart(poseStack, heartType, x, y, 0, false, halfHeart); + guiGraphics.blit(TEXTURE_LIFE_SHARD_HEARTS, x, y, heartType.getX(halfHeart, false), 0, 9, 9); } } } diff --git a/src/main/java/com/aetherteam/aether/client/renderer/AetherRenderers.java b/src/main/java/com/aetherteam/aether/client/renderer/AetherRenderers.java index bb7e6cb3b8..d6fac142ef 100644 --- a/src/main/java/com/aetherteam/aether/client/renderer/AetherRenderers.java +++ b/src/main/java/com/aetherteam/aether/client/renderer/AetherRenderers.java @@ -7,6 +7,9 @@ import com.aetherteam.aether.client.renderer.accessory.GlovesRenderer; import com.aetherteam.aether.client.renderer.accessory.PendantRenderer; import com.aetherteam.aether.client.renderer.accessory.ShieldOfRepulsionRenderer; +import com.aetherteam.aether.client.renderer.accessory.layer.ArmorStandCapeLayer; +import com.aetherteam.aether.client.renderer.accessory.layer.EntityAccessoryLayer; +import com.aetherteam.aether.client.renderer.accessory.model.CapeModel; import com.aetherteam.aether.client.renderer.accessory.model.GlovesModel; import com.aetherteam.aether.client.renderer.accessory.model.PendantModel; import com.aetherteam.aether.client.renderer.blockentity.ChestMimicRenderer; @@ -29,10 +32,15 @@ import net.minecraft.client.model.geom.builders.LayerDefinition; import net.minecraft.client.renderer.blockentity.BedRenderer; import net.minecraft.client.renderer.blockentity.ChestRenderer; +import net.minecraft.client.renderer.blockentity.HangingSignRenderer; import net.minecraft.client.renderer.blockentity.SignRenderer; import net.minecraft.client.renderer.entity.EntityRenderDispatcher; +import net.minecraft.client.renderer.entity.LivingEntityRenderer; import net.minecraft.client.renderer.entity.ThrownItemRenderer; import net.minecraft.client.renderer.entity.player.PlayerRenderer; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.decoration.ArmorStand; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.client.event.EntityRenderersEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; @@ -40,12 +48,15 @@ import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; import top.theillusivec4.curios.api.client.CuriosRendererRegistry; +import java.util.List; + @Mod.EventBusSubscriber(modid = Aether.MODID, value = Dist.CLIENT, bus = Mod.EventBusSubscriber.Bus.MOD) public class AetherRenderers { @SubscribeEvent public static void registerEntityRenderers(EntityRenderersEvent.RegisterRenderers event) { event.registerBlockEntityRenderer(AetherBlockEntityTypes.SKYROOT_BED.get(), SkyrootBedRenderer::new); event.registerBlockEntityRenderer(AetherBlockEntityTypes.SKYROOT_SIGN.get(), SignRenderer::new); + event.registerBlockEntityRenderer(AetherBlockEntityTypes.SKYROOT_HANGING_SIGN.get(), HangingSignRenderer::new); event.registerBlockEntityRenderer(AetherBlockEntityTypes.CHEST_MIMIC.get(), ChestMimicRenderer::new); event.registerBlockEntityRenderer(AetherBlockEntityTypes.TREASURE_CHEST.get(), TreasureChestRenderer::new); @@ -146,12 +157,16 @@ public static void registerLayerDefinitions(EntityRenderersEvent.RegisterLayerDe event.registerLayerDefinition(AetherModelLayers.VALKYRIE_ARMOR_WINGS, () -> ValkyrieWingsModel.createMainLayer(3.5F, 3.375F)); event.registerLayerDefinition(AetherModelLayers.PENDANT, PendantModel::createLayer); - event.registerLayerDefinition(AetherModelLayers.GLOVES, () -> GlovesModel.createLayer(new CubeDeformation(0.6F), false)); - event.registerLayerDefinition(AetherModelLayers.GLOVES_SLIM, () -> GlovesModel.createLayer(new CubeDeformation(0.6F), true)); - event.registerLayerDefinition(AetherModelLayers.GLOVES_FIRST_PERSON, () -> GlovesModel.createLayer(new CubeDeformation(0.25F), false)); + event.registerLayerDefinition(AetherModelLayers.GLOVES, () -> GlovesModel.createLayer(new CubeDeformation(0.6F), false, false)); + event.registerLayerDefinition(AetherModelLayers.GLOVES_TRIM, () -> GlovesModel.createLayer(new CubeDeformation(0.6F), false, true)); + event.registerLayerDefinition(AetherModelLayers.GLOVES_SLIM, () -> GlovesModel.createLayer(new CubeDeformation(0.6F), true, false)); + event.registerLayerDefinition(AetherModelLayers.GLOVES_TRIM_SLIM, () -> GlovesModel.createLayer(new CubeDeformation(0.6F), true, true)); + event.registerLayerDefinition(AetherModelLayers.GLOVES_FIRST_PERSON, () -> GlovesModel.createLayer(new CubeDeformation(0.25F), false, false)); + event.registerLayerDefinition(AetherModelLayers.GLOVES_TRIM_FIRST_PERSON, () -> GlovesModel.createLayer(new CubeDeformation(0.25F), false, true)); event.registerLayerDefinition(AetherModelLayers.SHIELD_OF_REPULSION, () -> LayerDefinition.create(PlayerModel.createMesh(new CubeDeformation(1.1F), false), 64, 64)); event.registerLayerDefinition(AetherModelLayers.SHIELD_OF_REPULSION_SLIM, () -> LayerDefinition.create(PlayerModel.createMesh(new CubeDeformation(1.15F), true), 64, 64)); event.registerLayerDefinition(AetherModelLayers.SHIELD_OF_REPULSION_ARM, () -> LayerDefinition.create(PlayerModel.createMesh(new CubeDeformation(0.4F), false), 64, 64)); + event.registerLayerDefinition(AetherModelLayers.CAPE, CapeModel::createLayer); event.registerLayerDefinition(AetherModelLayers.PLAYER_HALO, () -> HaloModel.createLayer(0.0F, 0.0F, 0.0F, 0.0F)); } @@ -182,19 +197,30 @@ public static void registerCuriosRenderers() { } @SubscribeEvent - public static void addPlayerLayers(EntityRenderersEvent.AddLayers event) { + public static void addEntityLayers(EntityRenderersEvent.AddLayers event) { EntityRenderDispatcher renderDispatcher = Minecraft.getInstance().getEntityRenderDispatcher(); String[] types = new String[]{"default", "slim"}; for (String type : types) { PlayerRenderer playerRenderer = event.getSkin(type); if (playerRenderer != null) { playerRenderer.addLayer(new DeveloperGlowLayer<>(playerRenderer)); - playerRenderer.addLayer(new DartLayer<>(renderDispatcher, playerRenderer, (entity) -> new GoldenDart(AetherEntityTypes.GOLDEN_DART.get(), entity.getLevel()), AetherPlayer::getGoldenDartCount, 1.0F)); - playerRenderer.addLayer(new DartLayer<>(renderDispatcher, playerRenderer, (entity) -> new PoisonDart(AetherEntityTypes.POISON_DART.get(), entity.getLevel()), AetherPlayer::getPoisonDartCount, 2.0F)); - playerRenderer.addLayer(new DartLayer<>(renderDispatcher, playerRenderer, (entity) -> new EnchantedDart(AetherEntityTypes.ENCHANTED_DART.get(), entity.getLevel()), AetherPlayer::getEnchantedDartCount, 3.0F)); + playerRenderer.addLayer(new DartLayer<>(renderDispatcher, playerRenderer, (entity) -> new GoldenDart(AetherEntityTypes.GOLDEN_DART.get(), entity.level()), AetherPlayer::getGoldenDartCount, 1.0F)); + playerRenderer.addLayer(new DartLayer<>(renderDispatcher, playerRenderer, (entity) -> new PoisonDart(AetherEntityTypes.POISON_DART.get(), entity.level()), AetherPlayer::getPoisonDartCount, 2.0F)); + playerRenderer.addLayer(new DartLayer<>(renderDispatcher, playerRenderer, (entity) -> new EnchantedDart(AetherEntityTypes.ENCHANTED_DART.get(), entity.level()), AetherPlayer::getEnchantedDartCount, 3.0F)); playerRenderer.addLayer(new PlayerHaloLayer<>(playerRenderer, Minecraft.getInstance().getEntityModels())); playerRenderer.addLayer(new PlayerWingsLayer<>(playerRenderer, Minecraft.getInstance().getEntityModels())); } } + List> entities = List.of(EntityType.ZOMBIE, EntityType.ZOMBIE_VILLAGER, EntityType.HUSK, EntityType.SKELETON, EntityType.STRAY, EntityType.PIGLIN, EntityType.ZOMBIFIED_PIGLIN, EntityType.ARMOR_STAND); + for (EntityType entityType : entities) { + LivingEntityRenderer> renderer = event.getRenderer(entityType); + if (renderer != null) { + renderer.addLayer(new EntityAccessoryLayer(renderer)); + } + } + LivingEntityRenderer renderer = event.getRenderer(EntityType.ARMOR_STAND); + if (renderer != null) { + renderer.addLayer(new ArmorStandCapeLayer(renderer)); + } } } diff --git a/src/main/java/com/aetherteam/aether/client/renderer/accessory/GlovesRenderer.java b/src/main/java/com/aetherteam/aether/client/renderer/accessory/GlovesRenderer.java index 332a69c94b..174bfab645 100644 --- a/src/main/java/com/aetherteam/aether/client/renderer/accessory/GlovesRenderer.java +++ b/src/main/java/com/aetherteam/aether/client/renderer/accessory/GlovesRenderer.java @@ -13,25 +13,36 @@ import net.minecraft.client.player.AbstractClientPlayer; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderType; -import net.minecraft.client.renderer.entity.ItemRenderer; +import net.minecraft.client.renderer.Sheets; import net.minecraft.client.renderer.entity.RenderLayerParent; import net.minecraft.client.renderer.texture.OverlayTexture; +import net.minecraft.client.renderer.texture.TextureAtlas; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.HumanoidArm; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.armortrim.ArmorTrim; import top.theillusivec4.curios.api.SlotContext; import top.theillusivec4.curios.api.client.ICurioRenderer; public class GlovesRenderer implements ICurioRenderer { private final GlovesModel glovesModel; + private final GlovesModel glovesTrimModel; private final GlovesModel glovesModelSlim; + private final GlovesModel glovesTrimModelSlim; private final GlovesModel glovesFirstPerson; + private final GlovesModel glovesTrimFirstPerson; + private final TextureAtlas armorTrimAtlas; public GlovesRenderer() { this.glovesModel = new GlovesModel(Minecraft.getInstance().getEntityModels().bakeLayer(AetherModelLayers.GLOVES)); + this.glovesTrimModel = new GlovesModel(Minecraft.getInstance().getEntityModels().bakeLayer(AetherModelLayers.GLOVES_TRIM)); this.glovesModelSlim = new GlovesModel(Minecraft.getInstance().getEntityModels().bakeLayer(AetherModelLayers.GLOVES_SLIM)); + this.glovesTrimModelSlim = new GlovesModel(Minecraft.getInstance().getEntityModels().bakeLayer(AetherModelLayers.GLOVES_TRIM_SLIM)); this.glovesFirstPerson = new GlovesModel(Minecraft.getInstance().getEntityModels().bakeLayer(AetherModelLayers.GLOVES_FIRST_PERSON)); + this.glovesTrimFirstPerson = new GlovesModel(Minecraft.getInstance().getEntityModels().bakeLayer(AetherModelLayers.GLOVES_TRIM_FIRST_PERSON)); + this.armorTrimAtlas = Minecraft.getInstance().getModelManager().getAtlas(Sheets.ARMOR_TRIMS_SHEET); } /** @@ -51,23 +62,37 @@ public GlovesRenderer() { */ @Override public > void render(ItemStack stack, SlotContext slotContext, PoseStack poseStack, RenderLayerParent renderLayerParent, MultiBufferSource buffer, int packedLight, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float netHeadYaw, float headPitch) { + LivingEntity livingEntity = slotContext.entity(); GlovesItem glovesItem = (GlovesItem) stack.getItem(); GlovesModel model = this.glovesModel; + GlovesModel trimModel = this.glovesTrimModel; ResourceLocation texture = glovesItem.getGlovesTexture(); if (renderLayerParent.getModel() instanceof PlayerModel playerModel) { PlayerModelAccessor playerModelAccessor = (PlayerModelAccessor) playerModel; model = playerModelAccessor.aether$getSlim() ? this.glovesModelSlim : this.glovesModel; + trimModel = playerModelAccessor.aether$getSlim() ? this.glovesTrimModelSlim : this.glovesTrimModel; } ICurioRenderer.followBodyRotations(slotContext.entity(), model); + ICurioRenderer.followBodyRotations(slotContext.entity(), trimModel); float red = glovesItem.getColors(stack).getLeft(); float green = glovesItem.getColors(stack).getMiddle(); float blue = glovesItem.getColors(stack).getRight(); - VertexConsumer vertexConsumer = ItemRenderer.getArmorFoilBuffer(buffer, RenderType.armorCutoutNoCull(texture), false, stack.isEnchanted()); + VertexConsumer vertexConsumer = buffer.getBuffer(RenderType.armorCutoutNoCull(texture)); model.renderToBuffer(poseStack, vertexConsumer, packedLight, OverlayTexture.NO_OVERLAY, red, green, blue, 1.0F); + + GlovesModel finalTrimModel = trimModel; + ArmorTrim.getTrim(livingEntity.level().registryAccess(), stack).ifPresent((trim) -> { + TextureAtlasSprite textureAtlasSprite = this.armorTrimAtlas.getSprite(trim.outerTexture(glovesItem.getMaterial())); + VertexConsumer trimConsumer = textureAtlasSprite.wrap(buffer.getBuffer(Sheets.armorTrimsSheet())); + finalTrimModel.renderToBuffer(poseStack, trimConsumer, packedLight, OverlayTexture.NO_OVERLAY, 1.0F, 1.0F, 1.0F, 1.0F); + }); + if (stack.hasFoil()) { + model.renderToBuffer(poseStack, buffer.getBuffer(RenderType.armorEntityGlint()), packedLight, OverlayTexture.NO_OVERLAY, 1.0F, 1.0F, 1.0F, 1.0F); + } } /** @@ -81,23 +106,43 @@ public > void render(ItemStack */ public void renderFirstPerson(ItemStack stack, PoseStack poseStack, MultiBufferSource buffer, int packedLight, AbstractClientPlayer player, HumanoidArm arm) { GlovesModel model = this.glovesFirstPerson; - - model.setAllVisible(false); - model.attackTime = 0.0F; - model.crouching = false; - model.swimAmount = 0.0F; - model.setupAnim(player, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F); + GlovesModel trimModel = this.glovesTrimFirstPerson; GlovesItem glovesItem = (GlovesItem) stack.getItem(); - VertexConsumer consumer = ItemRenderer.getArmorFoilBuffer(buffer, RenderType.armorCutoutNoCull(glovesItem.getGlovesTexture()), false, stack.isEnchanted()); + VertexConsumer consumer = buffer.getBuffer(RenderType.armorCutoutNoCull(glovesItem.getGlovesTexture())); float red = glovesItem.getColors(stack).getLeft(); float green = glovesItem.getColors(stack).getMiddle(); float blue = glovesItem.getColors(stack).getRight(); + model.setAllVisible(false); + model.attackTime = 0.0F; + model.crouching = false; + model.swimAmount = 0.0F; + model.setupAnim(player, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F); + ModelPart gloveArm = arm == HumanoidArm.RIGHT ? model.rightArm : model.leftArm; gloveArm.visible = true; gloveArm.xRot = 0.0F; gloveArm.render(poseStack, consumer, packedLight, OverlayTexture.NO_OVERLAY, red, green, blue, 1.0F); + + ArmorTrim.getTrim(player.level().registryAccess(), stack).ifPresent((trim) -> { + trimModel.setAllVisible(false); + trimModel.attackTime = 0.0F; + trimModel.crouching = false; + trimModel.swimAmount = 0.0F; + trimModel.setupAnim(player, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F); + + ModelPart gloveTrimArm = arm == HumanoidArm.RIGHT ? trimModel.rightArm : trimModel.leftArm; + gloveTrimArm.visible = true; + gloveTrimArm.xRot = 0.0F; + + TextureAtlasSprite textureAtlasSprite = this.armorTrimAtlas.getSprite(trim.outerTexture(glovesItem.getMaterial())); + VertexConsumer trimConsumer = textureAtlasSprite.wrap(buffer.getBuffer(Sheets.armorTrimsSheet())); + gloveTrimArm.render(poseStack, trimConsumer, packedLight, OverlayTexture.NO_OVERLAY, 1.0F, 1.0F, 1.0F, 1.0F); + }); + if (stack.hasFoil()) { + gloveArm.render(poseStack, buffer.getBuffer(RenderType.armorEntityGlint()), packedLight, OverlayTexture.NO_OVERLAY, 1.0F, 1.0F, 1.0F, 1.0F); + } } } diff --git a/src/main/java/com/aetherteam/aether/client/renderer/accessory/ShieldOfRepulsionRenderer.java b/src/main/java/com/aetherteam/aether/client/renderer/accessory/ShieldOfRepulsionRenderer.java index 2a952cf582..038e97c25c 100644 --- a/src/main/java/com/aetherteam/aether/client/renderer/accessory/ShieldOfRepulsionRenderer.java +++ b/src/main/java/com/aetherteam/aether/client/renderer/accessory/ShieldOfRepulsionRenderer.java @@ -2,7 +2,6 @@ import com.aetherteam.aether.capability.player.AetherPlayer; import com.aetherteam.aether.client.renderer.AetherModelLayers; -import com.aetherteam.aether.item.AetherItems; import com.aetherteam.aether.item.accessories.miscellaneous.ShieldOfRepulsionItem; import com.aetherteam.aether.mixin.mixins.client.accessor.PlayerModelAccessor; import com.aetherteam.nitrogen.ConstantsUtil; @@ -26,7 +25,6 @@ import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraft.world.phys.Vec3; -import top.theillusivec4.curios.api.CuriosApi; import top.theillusivec4.curios.api.SlotContext; import top.theillusivec4.curios.api.client.ICurioRenderer; @@ -65,43 +63,37 @@ public ShieldOfRepulsionRenderer() { @Override public > void render(ItemStack stack, SlotContext slotContext, PoseStack poseStack, RenderLayerParent renderLayerParent, MultiBufferSource buffer, int packedLight, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float netHeadYaw, float headPitch) { LivingEntity livingEntity = slotContext.entity(); - CuriosApi.getCuriosHelper().findFirstCurio(livingEntity, AetherItems.SHIELD_OF_REPULSION.get()).ifPresent((slotResult) -> CuriosApi.getCuriosHelper().getCuriosHandler(livingEntity).ifPresent(handler -> - handler.getStacksHandler(slotResult.slotContext().identifier()).ifPresent(stacksHandler -> { - ShieldOfRepulsionItem shield = (ShieldOfRepulsionItem) slotResult.stack().getItem(); - if (stacksHandler.getRenders().get(slotResult.slotContext().index())) { - ResourceLocation texture; - HumanoidModel model; - - if (livingEntity instanceof Player player && renderLayerParent.getModel() instanceof PlayerModel playerModel) { - PlayerModelAccessor playerModelAccessor = (PlayerModelAccessor) playerModel; - model = playerModelAccessor.aether$getSlim() ? this.shieldModelSlim : this.shieldModel; - Optional aetherPlayerOptional = AetherPlayer.get(player).resolve(); - if (aetherPlayerOptional.isPresent()) { - if (!aetherPlayerOptional.get().isMoving()) { - texture = playerModelAccessor.aether$getSlim() ? shield.getShieldOfRepulsionSlimTexture() : shield.getShieldOfRepulsionTexture(); - } else { - texture = playerModelAccessor.aether$getSlim() ? shield.getShieldOfRepulsionSlimInactiveTexture() : shield.getShieldOfRepulsionInactiveTexture(); - } - } else { - texture = playerModelAccessor.aether$getSlim() ? shield.getShieldOfRepulsionSlimInactiveTexture() : shield.getShieldOfRepulsionInactiveTexture(); - } - } else { - model = this.shieldModel; - Vec3 motion = livingEntity.getDeltaMovement(); - if (motion.x() == 0.0 && (motion.y() == ConstantsUtil.DEFAULT_DELTA_MOVEMENT_Y || motion.y() == 0.0) && motion.z() == 0.0) { - texture = shield.getShieldOfRepulsionTexture(); - } else { - texture = shield.getShieldOfRepulsionInactiveTexture(); - } - } - - ICurioRenderer.followHeadRotations(slotContext.entity(), model.head); - ICurioRenderer.followBodyRotations(slotContext.entity(), model); - VertexConsumer consumer = ItemRenderer.getArmorFoilBuffer(buffer, RenderType.entityTranslucent(texture), false, false); - model.renderToBuffer(poseStack, consumer, packedLight, OverlayTexture.NO_OVERLAY, 1.0F, 1.0F, 1.0F, 1.0F); - } - }) - )); + ShieldOfRepulsionItem shield = (ShieldOfRepulsionItem) stack.getItem(); + ResourceLocation texture; + HumanoidModel model; + + if (livingEntity instanceof Player player && renderLayerParent.getModel() instanceof PlayerModel playerModel) { + PlayerModelAccessor playerModelAccessor = (PlayerModelAccessor) playerModel; + model = playerModelAccessor.aether$getSlim() ? this.shieldModelSlim : this.shieldModel; + Optional aetherPlayerOptional = AetherPlayer.get(player).resolve(); + if (aetherPlayerOptional.isPresent()) { + if (!aetherPlayerOptional.get().isMoving()) { + texture = playerModelAccessor.aether$getSlim() ? shield.getShieldOfRepulsionSlimTexture() : shield.getShieldOfRepulsionTexture(); + } else { + texture = playerModelAccessor.aether$getSlim() ? shield.getShieldOfRepulsionSlimInactiveTexture() : shield.getShieldOfRepulsionInactiveTexture(); + } + } else { + texture = playerModelAccessor.aether$getSlim() ? shield.getShieldOfRepulsionSlimInactiveTexture() : shield.getShieldOfRepulsionInactiveTexture(); + } + } else { + model = this.shieldModel; + Vec3 motion = livingEntity.getDeltaMovement(); + if (motion.x() == 0.0 && (motion.y() == ConstantsUtil.DEFAULT_DELTA_MOVEMENT_Y || motion.y() == 0.0) && motion.z() == 0.0) { + texture = shield.getShieldOfRepulsionTexture(); + } else { + texture = shield.getShieldOfRepulsionInactiveTexture(); + } + } + + ICurioRenderer.followHeadRotations(slotContext.entity(), model.head); + ICurioRenderer.followBodyRotations(slotContext.entity(), model); + VertexConsumer consumer = ItemRenderer.getArmorFoilBuffer(buffer, RenderType.entityTranslucent(texture), false, false); + model.renderToBuffer(poseStack, consumer, packedLight, OverlayTexture.NO_OVERLAY, 1.0F, 1.0F, 1.0F, 1.0F); } /** diff --git a/src/main/java/com/aetherteam/aether/client/renderer/accessory/layer/ArmorStandCapeLayer.java b/src/main/java/com/aetherteam/aether/client/renderer/accessory/layer/ArmorStandCapeLayer.java new file mode 100644 index 0000000000..3a0be1eb23 --- /dev/null +++ b/src/main/java/com/aetherteam/aether/client/renderer/accessory/layer/ArmorStandCapeLayer.java @@ -0,0 +1,75 @@ +package com.aetherteam.aether.client.renderer.accessory.layer; + +import com.aetherteam.aether.AetherConfig; +import com.aetherteam.aether.client.renderer.AetherModelLayers; +import com.aetherteam.aether.client.renderer.accessory.model.CapeModel; +import com.aetherteam.aether.item.accessories.cape.CapeItem; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +import com.mojang.math.Axis; +import net.minecraft.client.Minecraft; +import net.minecraft.client.model.ArmorStandModel; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.entity.RenderLayerParent; +import net.minecraft.client.renderer.entity.layers.RenderLayer; +import net.minecraft.client.renderer.texture.OverlayTexture; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.entity.decoration.ArmorStand; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraftforge.common.util.LazyOptional; +import top.theillusivec4.curios.api.CuriosApi; +import top.theillusivec4.curios.api.type.capability.ICuriosItemHandler; +import top.theillusivec4.curios.api.type.inventory.ICurioStacksHandler; +import top.theillusivec4.curios.api.type.inventory.IDynamicStackHandler; + +import java.util.Optional; + +/** + * [CODE COPY] - {@link net.minecraft.client.renderer.entity.layers.CapeLayer}.

+ * Modified to check for capes in the Armor Stand's slots, as well as remove rotational fields and instead keep rotations constant. + */ +public class ArmorStandCapeLayer extends RenderLayer { + private final CapeModel cape; + + public ArmorStandCapeLayer(RenderLayerParent renderer) { + super(renderer); + this.cape = new CapeModel(Minecraft.getInstance().getEntityModels().bakeLayer(AetherModelLayers.CAPE)); + } + + @Override + public void render(PoseStack poseStack, MultiBufferSource buffer, int packedLight, ArmorStand livingEntity, float limbSwing, float limbSwingAmount, float partialTick, float ageInTicks, float netHeadYaw, float headPitch) { + String identifier = AetherConfig.COMMON.use_curios_menu.get() ? "back" : "aether_cape"; + LazyOptional lazyHandler = CuriosApi.getCuriosInventory(livingEntity); + if (lazyHandler.isPresent() && lazyHandler.resolve().isPresent()) { + ICuriosItemHandler handler = lazyHandler.resolve().get(); + Optional stacksHandler = handler.getStacksHandler(identifier); + if (stacksHandler.isPresent()) { + IDynamicStackHandler stackHandler = stacksHandler.get().getCosmeticStacks(); + if (0 < stackHandler.getSlots()) { + ItemStack itemStack = stackHandler.getStackInSlot(0); + if (!itemStack.isEmpty()) { + if (itemStack.getItem() instanceof CapeItem capeItem) { + ResourceLocation texture = capeItem.getCapeTexture(); + if (!livingEntity.isInvisible() && texture != null) { + ItemStack itemstack = livingEntity.getItemBySlot(EquipmentSlot.CHEST); + if (!itemstack.is(Items.ELYTRA)) { + poseStack.pushPose(); + poseStack.translate(0.0F, 0.0F, 0.0925F); + poseStack.mulPose(Axis.XP.rotationDegrees(3.0F)); + poseStack.mulPose(Axis.ZP.rotationDegrees(0.0F)); + poseStack.mulPose(Axis.YP.rotationDegrees(180.0F)); + VertexConsumer vertexconsumer = buffer.getBuffer(RenderType.entitySolid(texture)); + this.cape.renderToBuffer(poseStack, vertexconsumer, packedLight, OverlayTexture.NO_OVERLAY, 1.0F, 1.0F, 1.0F, 1.0F); + poseStack.popPose(); + } + } + } + } + } + } + } + } +} diff --git a/src/main/java/com/aetherteam/aether/client/renderer/accessory/layer/EntityAccessoryLayer.java b/src/main/java/com/aetherteam/aether/client/renderer/accessory/layer/EntityAccessoryLayer.java new file mode 100644 index 0000000000..ccd448fd34 --- /dev/null +++ b/src/main/java/com/aetherteam/aether/client/renderer/accessory/layer/EntityAccessoryLayer.java @@ -0,0 +1,57 @@ +package com.aetherteam.aether.client.renderer.accessory.layer; + +import com.aetherteam.aether.AetherTags; +import com.mojang.blaze3d.vertex.PoseStack; +import net.minecraft.client.model.EntityModel; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.entity.RenderLayerParent; +import net.minecraft.core.NonNullList; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.item.ItemStack; +import top.theillusivec4.curios.api.CuriosApi; +import top.theillusivec4.curios.api.SlotContext; +import top.theillusivec4.curios.api.client.CuriosRendererRegistry; +import top.theillusivec4.curios.api.type.inventory.IDynamicStackHandler; +import top.theillusivec4.curios.client.render.CuriosLayer; + +/** + * [CODE COPY] - {@link CuriosLayer}. + */ +public class EntityAccessoryLayer extends CuriosLayer> { + private final RenderLayerParent> renderLayerParent; + + public EntityAccessoryLayer(RenderLayerParent> renderer) { + super(renderer); + this.renderLayerParent = renderer; + } + + @Override + public void render(PoseStack poseStack, MultiBufferSource buffer, int light, LivingEntity livingEntity, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float netHeadYaw, float headPitch) { + poseStack.pushPose(); + CuriosApi.getCuriosInventory(livingEntity).ifPresent(handler -> { + handler.getCurios().forEach((id, stacksHandler) -> { + IDynamicStackHandler stackHandler = stacksHandler.getStacks(); + IDynamicStackHandler cosmeticStacksHandler = stacksHandler.getCosmeticStacks(); + + for (int i = 0; i < stackHandler.getSlots(); i++) { + ItemStack stack = cosmeticStacksHandler.getStackInSlot(i); + boolean cosmetic = true; + NonNullList renderStates = stacksHandler.getRenders(); + boolean renderable = renderStates.size() > i && renderStates.get(i); + + if (stack.isEmpty() && renderable) { + stack = stackHandler.getStackInSlot(i); + cosmetic = false; + } + + if (!stack.isEmpty() && stack.is(AetherTags.Items.ACCESSORIES)) { // Check if the Curio is an Aether accessory using the tag. + SlotContext slotContext = new SlotContext(id, livingEntity, i, cosmetic, renderable); + ItemStack finalStack = stack; + CuriosRendererRegistry.getRenderer(stack.getItem()).ifPresent(renderer -> renderer.render(finalStack, slotContext, poseStack, this.renderLayerParent, buffer, light, limbSwing, limbSwingAmount, partialTicks, ageInTicks, netHeadYaw, headPitch)); + } + } + }); + }); + poseStack.popPose(); + } +} diff --git a/src/main/java/com/aetherteam/aether/client/renderer/accessory/model/CapeModel.java b/src/main/java/com/aetherteam/aether/client/renderer/accessory/model/CapeModel.java new file mode 100644 index 0000000000..763b3cd419 --- /dev/null +++ b/src/main/java/com/aetherteam/aether/client/renderer/accessory/model/CapeModel.java @@ -0,0 +1,55 @@ +package com.aetherteam.aether.client.renderer.accessory.model; + +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +import net.minecraft.client.model.HumanoidModel; +import net.minecraft.client.model.geom.ModelPart; +import net.minecraft.client.model.geom.PartPose; +import net.minecraft.client.model.geom.builders.*; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.entity.LivingEntity; + +/** + * [CODE COPY] - {@link net.minecraft.client.model.PlayerModel}.

+ * Only copied parts related to capes. + */ +public class CapeModel extends HumanoidModel { + private final ModelPart cloak; + + public CapeModel(ModelPart root) { + super(root); + this.cloak = root.getChild("cloak"); + } + + public static LayerDefinition createLayer() { + MeshDefinition meshDefinition = HumanoidModel.createMesh(CubeDeformation.NONE, 0.0F); + PartDefinition partDefinition = meshDefinition.getRoot(); + partDefinition.addOrReplaceChild("cloak", CubeListBuilder.create().texOffs(0, 0).addBox(-5.0F, 0.0F, -1.0F, 10.0F, 16.0F, 1.0F), PartPose.ZERO); + return LayerDefinition.create(meshDefinition, 64, 32); + } + + @Override + public void renderToBuffer(PoseStack poseStack, VertexConsumer buffer, int packedLight, int packedOverlay, float red, float green, float blue, float alpha) { + this.cloak.render(poseStack, buffer, packedLight, packedOverlay, red, green, blue, alpha); + } + + @Override + public void setupAnim(LivingEntity livingEntity, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch) { + super.setupAnim(livingEntity, limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch); + if (livingEntity.getItemBySlot(EquipmentSlot.CHEST).isEmpty()) { + if (livingEntity.isCrouching()) { + this.cloak.z = 1.4F; + this.cloak.y = 1.85F; + } else { + this.cloak.z = 0.0F; + this.cloak.y = 0.0F; + } + } else if (livingEntity.isCrouching()) { + this.cloak.z = 0.3F; + this.cloak.y = 0.8F; + } else { + this.cloak.z = -1.1F; + this.cloak.y = -0.85F; + } + } +} diff --git a/src/main/java/com/aetherteam/aether/client/renderer/accessory/model/GlovesModel.java b/src/main/java/com/aetherteam/aether/client/renderer/accessory/model/GlovesModel.java index 3f9ebe417a..71fb40c5a3 100644 --- a/src/main/java/com/aetherteam/aether/client/renderer/accessory/model/GlovesModel.java +++ b/src/main/java/com/aetherteam/aether/client/renderer/accessory/model/GlovesModel.java @@ -12,17 +12,20 @@ public GlovesModel(ModelPart root) { super(root); } - public static LayerDefinition createLayer(CubeDeformation cube, boolean isSlim) { + public static LayerDefinition createLayer(CubeDeformation cube, boolean isSlim, boolean isTrim) { MeshDefinition meshDefinition = HumanoidModel.createMesh(cube, 0.0F); PartDefinition partDefinition = meshDefinition.getRoot(); + int y = isTrim ? 16 : 0; + int width = isTrim ? 64 : 16; + int height = isTrim ? 32 : 16; if (!isSlim) { - partDefinition.addOrReplaceChild("right_arm", CubeListBuilder.create().texOffs(0, 0).addBox(-3.0F, -2.0F, -2.0F, 4.0F, 12.0F, 4.0F, cube), PartPose.offset(-5.0F, 2.0F, 0.0F)); - partDefinition.addOrReplaceChild("left_arm", CubeListBuilder.create().texOffs(0, 0).mirror().addBox(-1.0F, -2.0F, -2.0F, 4.0F, 12.0F, 4.0F, cube), PartPose.offset(5.0F, 2.0F, 0.0F)); + partDefinition.addOrReplaceChild("right_arm", CubeListBuilder.create().texOffs(0, y).addBox(-3.0F, -2.0F, -2.0F, 4.0F, 12.0F, 4.0F, cube), PartPose.offset(-5.0F, 2.0F, 0.0F)); + partDefinition.addOrReplaceChild("left_arm", CubeListBuilder.create().texOffs(0, y).mirror().addBox(-1.0F, -2.0F, -2.0F, 4.0F, 12.0F, 4.0F, cube), PartPose.offset(5.0F, 2.0F, 0.0F)); } else { - partDefinition.addOrReplaceChild("right_arm", CubeListBuilder.create().texOffs(0, 0).addBox(-2.5F, -2.0F, -2.0F, 4.0F, 12.0F, 4.0F, cube), PartPose.offset(-5.0F, 2.0F, 0.0F)); - partDefinition.addOrReplaceChild("left_arm", CubeListBuilder.create().texOffs(0, 0).mirror().addBox(-1.5F, -2.0F, -2.0F, 4.0F, 12.0F, 4.0F, cube), PartPose.offset(5.0F, 2.0F, 0.0F)); + partDefinition.addOrReplaceChild("right_arm", CubeListBuilder.create().texOffs(0, y).addBox(-2.5F, -2.0F, -2.0F, 4.0F, 12.0F, 4.0F, cube), PartPose.offset(-5.0F, 2.0F, 0.0F)); + partDefinition.addOrReplaceChild("left_arm", CubeListBuilder.create().texOffs(0, y).mirror().addBox(-1.5F, -2.0F, -2.0F, 4.0F, 12.0F, 4.0F, cube), PartPose.offset(5.0F, 2.0F, 0.0F)); } - return LayerDefinition.create(meshDefinition, 16, 16); + return LayerDefinition.create(meshDefinition, width, height); } @Override diff --git a/src/main/java/com/aetherteam/aether/client/renderer/entity/AerbunnyRenderer.java b/src/main/java/com/aetherteam/aether/client/renderer/entity/AerbunnyRenderer.java index 141fa67339..bf8b55f6b1 100644 --- a/src/main/java/com/aetherteam/aether/client/renderer/entity/AerbunnyRenderer.java +++ b/src/main/java/com/aetherteam/aether/client/renderer/entity/AerbunnyRenderer.java @@ -43,7 +43,7 @@ protected void scale(Aerbunny aerbunny, PoseStack poseStack, float partialTicks) @Override protected void setupRotations(Aerbunny aerbunny, PoseStack poseStack, float ageInTicks, float rotationYaw, float partialTicks) { super.setupRotations(aerbunny, poseStack, ageInTicks, rotationYaw, partialTicks); - if (!aerbunny.isOnGround()) { + if (!aerbunny.onGround()) { if (aerbunny.getDeltaMovement().y() > 0.5) { poseStack.mulPose(Axis.XN.rotationDegrees(Mth.rotLerp(partialTicks, 0.0F, 15.0F))); } diff --git a/src/main/java/com/aetherteam/aether/client/renderer/entity/FloatingBlockRenderer.java b/src/main/java/com/aetherteam/aether/client/renderer/entity/FloatingBlockRenderer.java index 9b21bd77ff..49f0039f2f 100644 --- a/src/main/java/com/aetherteam/aether/client/renderer/entity/FloatingBlockRenderer.java +++ b/src/main/java/com/aetherteam/aether/client/renderer/entity/FloatingBlockRenderer.java @@ -29,7 +29,7 @@ public FloatingBlockRenderer(EntityRendererProvider.Context context) { public void render(FloatingBlockEntity floatingBlock, float entityYaw, float partialTicks, PoseStack poseStack, MultiBufferSource buffer, int packedLightIn) { BlockState blockState = floatingBlock.getBlockState(); if (blockState.getRenderShape() == RenderShape.MODEL) { - Level world = floatingBlock.getLevel(); + Level world = floatingBlock.level(); if (blockState != world.getBlockState(floatingBlock.blockPosition()) && blockState.getRenderShape() != RenderShape.INVISIBLE) { poseStack.pushPose(); BlockPos blockPos = BlockPos.containing(floatingBlock.getX(), floatingBlock.getBoundingBox().maxY, floatingBlock.getZ()); diff --git a/src/main/java/com/aetherteam/aether/client/renderer/entity/LightningKnifeRenderer.java b/src/main/java/com/aetherteam/aether/client/renderer/entity/LightningKnifeRenderer.java index 582b8bec12..9a6944616b 100644 --- a/src/main/java/com/aetherteam/aether/client/renderer/entity/LightningKnifeRenderer.java +++ b/src/main/java/com/aetherteam/aether/client/renderer/entity/LightningKnifeRenderer.java @@ -35,7 +35,7 @@ public void render(ThrownLightningKnife lightningKnife, float entityYaw, float p quaternion.mul(Axis.XP.rotationDegrees((-(lightningKnife.xRotO + (lightningKnife.getXRot() - lightningKnife.xRotO) * partialTicks)) - 90.0F)); quaternion.mul(Axis.ZP.rotationDegrees(-135.0F)); poseStack.mulPose(quaternion); - Minecraft.getInstance().getItemRenderer().renderStatic(lightningKnife.getItem(), ItemDisplayContext.GUI, packedLight, OverlayTexture.NO_OVERLAY, poseStack, buffer, lightningKnife.getLevel(), lightningKnife.getId()); + Minecraft.getInstance().getItemRenderer().renderStatic(lightningKnife.getItem(), ItemDisplayContext.GUI, packedLight, OverlayTexture.NO_OVERLAY, poseStack, buffer, lightningKnife.level(), lightningKnife.getId()); poseStack.popPose(); super.render(lightningKnife, entityYaw, partialTicks, poseStack, buffer, packedLight); } diff --git a/src/main/java/com/aetherteam/aether/client/renderer/entity/model/BipedBirdModel.java b/src/main/java/com/aetherteam/aether/client/renderer/entity/model/BipedBirdModel.java index e288f70154..14ea0550f4 100644 --- a/src/main/java/com/aetherteam/aether/client/renderer/entity/model/BipedBirdModel.java +++ b/src/main/java/com/aetherteam/aether/client/renderer/entity/model/BipedBirdModel.java @@ -43,15 +43,15 @@ public static LayerDefinition createBodyLayer(CubeDeformation cube) { PartDefinition partDefinition = meshDefinition.getRoot(); PartDefinition head = partDefinition.addOrReplaceChild("head", CubeListBuilder.create().texOffs(0, 13).addBox(-2.0F, -4.0F, -6.0F, 4.0F, 4.0F, 8.0F, CubeDeformation.NONE, 0.5F, 0.5F), PartPose.offset(0.0F, 8.0F, -4.0F)); head.addOrReplaceChild("jaw", CubeListBuilder.create().texOffs(24, 13).addBox(-2.0F, -1.0F, -6.0F, 4.0F, 1.0F, 8.0F, new CubeDeformation(-0.1F), 0.5F, 0.5F), PartPose.ZERO); - head.addOrReplaceChild("neck", CubeListBuilder.create().texOffs( 44, 0).addBox(-1.0F, 0.0F, -1.0F, 2.0F, 6.0F, 2.0F, CubeDeformation.NONE, 0.5F, 0.5F), PartPose.ZERO); + head.addOrReplaceChild("neck", CubeListBuilder.create().texOffs( 22, 0).addBox(-1.0F, 0.0F, -1.0F, 2.0F, 6.0F, 2.0F, CubeDeformation.NONE, 0.5F, 0.5F), PartPose.ZERO); PartDefinition body = partDefinition.addOrReplaceChild("body", CubeListBuilder.create().texOffs(0, 0).addBox(-3.0F, -3.0F, 0.0F, 6.0F, 8.0F, 5.0F, cube, 0.5F, 0.5F), PartPose.offsetAndRotation(0.0F, 16.0F, 0.0F, Mth.HALF_PI, 0.0F, 0.0F)); - partDefinition.addOrReplaceChild("right_leg", CubeListBuilder.create().texOffs(22, 0).addBox(-1.0F, -1.0F, -1.0F, 2.0F, 9.0F, 2.0F, CubeDeformation.NONE, 0.5F, 0.5F), PartPose.offset(-2.0F, 16.0F, 1.0F)); - partDefinition.addOrReplaceChild("left_leg", CubeListBuilder.create().texOffs(22, 0).addBox(-1.0F, -1.0F, -1.0F, 2.0F, 9.0F, 2.0F, CubeDeformation.NONE, 0.5F, 0.5F), PartPose.offset(2.0F, 16.0F, 1.0F)); - body.addOrReplaceChild("right_wing", CubeListBuilder.create().texOffs(52, 0).addBox(-1.0F, 0.0F, -2.0F, 1.0F, 8.0F, 4.0F, CubeDeformation.NONE, 0.5F, 0.5F), PartPose.offset(-3.001F, -3.0F, 3.0F)); - body.addOrReplaceChild("left_wing", CubeListBuilder.create().texOffs(52, 0).addBox(0.0F, 0.0F, -2.0F, 1.0F, 8.0F, 4.0F, CubeDeformation.NONE, 0.5F, 0.5F), PartPose.offset(3.001F, -3.0F, 3.0F)); - partDefinition.addOrReplaceChild("right_tail_feather", CubeListBuilder.create().texOffs(30, 0).addBox(-1.0F, -5.0F, 5.0F, 2.0F, 1.0F, 5.0F, new CubeDeformation(-0.3F), 0.5F, 0.5F), PartPose.offsetAndRotation(0.0F, 17.5F, 1.0F, 0.25F, -0.375F, 0.0F)); - partDefinition.addOrReplaceChild("middle_tail_feather", CubeListBuilder.create().texOffs(30, 0).addBox(-1.0F, -5.0F, 5.0F, 2.0F, 1.0F, 5.0F, new CubeDeformation(-0.3F), 0.5F, 0.5F), PartPose.offsetAndRotation(0.0F, 17.5F, 1.0F, 0.25F, 0.0F, 0.0F)); - partDefinition.addOrReplaceChild("left_tail_feather", CubeListBuilder.create().texOffs(30, 0).addBox(-1.0F, -5.0F, 5.0F, 2.0F, 1.0F, 5.0F, new CubeDeformation(-0.3F), 0.5F, 0.5F), PartPose.offsetAndRotation(0.0F, 17.5F, 1.0F, 0.25F, 0.375F, 0.0F)); + partDefinition.addOrReplaceChild("right_leg", CubeListBuilder.create().texOffs(54, 21).addBox(-1.0F, -1.0F, -1.0F, 2.0F, 9.0F, 2.0F, CubeDeformation.NONE, 0.5F, 0.5F), PartPose.offset(-2.0F, 16.0F, 1.0F)); + partDefinition.addOrReplaceChild("left_leg", CubeListBuilder.create().texOffs(46, 21).addBox(-1.0F, -1.0F, -1.0F, 2.0F, 9.0F, 2.0F, CubeDeformation.NONE, 0.5F, 0.5F), PartPose.offset(2.0F, 16.0F, 1.0F)); + body.addOrReplaceChild("right_wing", CubeListBuilder.create().texOffs(40, 0).addBox(-1.0F, 0.0F, -2.0F, 1.0F, 8.0F, 4.0F, CubeDeformation.NONE, 0.5F, 0.5F), PartPose.offset(-3.001F, -3.0F, 3.0F)); + body.addOrReplaceChild("left_wing", CubeListBuilder.create().texOffs(30, 0).addBox(0.0F, 0.0F, -2.0F, 1.0F, 8.0F, 4.0F, CubeDeformation.NONE, 0.5F, 0.5F), PartPose.offset(3.001F, -3.0F, 3.0F)); + partDefinition.addOrReplaceChild("right_tail_feather", CubeListBuilder.create().texOffs(0, 26).addBox(-1.0F, -5.0F, 5.0F, 2.0F, 1.0F, 5.0F, new CubeDeformation(-0.3F), 0.5F, 0.5F), PartPose.offsetAndRotation(0.0F, 17.5F, 1.0F, 0.25F, -0.375F, 0.0F)); + partDefinition.addOrReplaceChild("middle_tail_feather", CubeListBuilder.create().texOffs(14, 26).addBox(-1.0F, -5.0F, 5.0F, 2.0F, 1.0F, 5.0F, new CubeDeformation(-0.3F), 0.5F, 0.5F), PartPose.offsetAndRotation(0.0F, 17.5F, 1.0F, 0.25F, 0.0F, 0.0F)); + partDefinition.addOrReplaceChild("left_tail_feather", CubeListBuilder.create().texOffs(28, 26).addBox(-1.0F, -5.0F, 5.0F, 2.0F, 1.0F, 5.0F, new CubeDeformation(-0.3F), 0.5F, 0.5F), PartPose.offsetAndRotation(0.0F, 17.5F, 1.0F, 0.25F, 0.375F, 0.0F)); return LayerDefinition.create(meshDefinition, 128, 64); } diff --git a/src/main/java/com/aetherteam/aether/client/renderer/level/AetherSkyRenderEffects.java b/src/main/java/com/aetherteam/aether/client/renderer/level/AetherSkyRenderEffects.java index ce5c4ecdb8..f5c722d212 100644 --- a/src/main/java/com/aetherteam/aether/client/renderer/level/AetherSkyRenderEffects.java +++ b/src/main/java/com/aetherteam/aether/client/renderer/level/AetherSkyRenderEffects.java @@ -167,7 +167,7 @@ public boolean renderClouds(ClientLevel level, int ticks, float partialTick, Pos if (((LevelRendererAccessor) levelRenderer).aether$getCloudBuffer() != null) { ((LevelRendererAccessor) levelRenderer).aether$getCloudBuffer().close(); } - ((LevelRendererAccessor) levelRenderer).aether$setCloudBuffer(new VertexBuffer()); + ((LevelRendererAccessor) levelRenderer).aether$setCloudBuffer(new VertexBuffer(VertexBuffer.Usage.STATIC)); BufferBuilder.RenderedBuffer renderedBuffer = ((LevelRendererAccessor) levelRenderer).callBuildClouds(bufferbuilder, d2, d3, d4, vec3); ((LevelRendererAccessor) levelRenderer).aether$getCloudBuffer().bind(); ((LevelRendererAccessor) levelRenderer).aether$getCloudBuffer().upload(renderedBuffer); diff --git a/src/main/java/com/aetherteam/aether/client/renderer/player/layer/PlayerWingsLayer.java b/src/main/java/com/aetherteam/aether/client/renderer/player/layer/PlayerWingsLayer.java index cff6b58e7f..a0acc63589 100644 --- a/src/main/java/com/aetherteam/aether/client/renderer/player/layer/PlayerWingsLayer.java +++ b/src/main/java/com/aetherteam/aether/client/renderer/player/layer/PlayerWingsLayer.java @@ -57,7 +57,7 @@ public void render(PoseStack poseStack, MultiBufferSource buffer, int packedLigh * @param sinage The {@link Float} for the rotation value. */ public void setupWingRotation(T entity, float sinage) { - if (!entity.isOnGround() && !entity.isInFluidType() && (entity.getVehicle() != null && !entity.getVehicle().isOnGround())) { + if (!entity.onGround() && !entity.isInFluidType() && (entity.getVehicle() != null && !entity.getVehicle().onGround())) { sinage *= 1.5F; } else { sinage *= 0.3F; @@ -81,8 +81,8 @@ public void setupWingRotation(T entity, float sinage) { } this.wings.rightWing.yRot -= Mth.sin(sinage) / 6.0F; - this.wings.rightWing.zRot -= Mth.cos(sinage) / (entity.isOnGround() || entity.isInFluidType() ? 8.0F : 3.0F); + this.wings.rightWing.zRot -= Mth.cos(sinage) / (entity.onGround() || entity.isInFluidType() ? 8.0F : 3.0F); this.wings.leftWing.yRot += Mth.sin(sinage) / 6.0F; - this.wings.leftWing.zRot += Mth.cos(sinage) / (entity.isOnGround() || entity.isInFluidType() ? 8.0F : 3.0F); + this.wings.leftWing.zRot += Mth.cos(sinage) / (entity.onGround() || entity.isInFluidType() ? 8.0F : 3.0F); } } diff --git a/src/main/java/com/aetherteam/aether/command/AetherTimeCommand.java b/src/main/java/com/aetherteam/aether/command/AetherTimeCommand.java index 8b29d613ea..707e91e606 100644 --- a/src/main/java/com/aetherteam/aether/command/AetherTimeCommand.java +++ b/src/main/java/com/aetherteam/aether/command/AetherTimeCommand.java @@ -39,14 +39,14 @@ private static int getDayTime(ServerLevel level) { } private static int queryTime(CommandSourceStack source, int time) { - source.sendSuccess(Component.translatable("commands.time.query", time), false); + source.sendSuccess(() -> Component.translatable("commands.time.query", time), false); return time; } private static int setTime(CommandSourceStack source, int time) { ServerLevel level = source.getLevel(); level.setDayTime(time); - source.sendSuccess(Component.translatable("commands.time.set", time), true); + source.sendSuccess(() -> Component.translatable("commands.time.set", time), true); return getDayTime(source.getLevel()); } @@ -54,7 +54,7 @@ private static int addTime(CommandSourceStack source, int amount) { ServerLevel level = source.getLevel(); level.setDayTime(level.getDayTime() + amount); int i = getDayTime(source.getLevel()); - source.sendSuccess(Component.translatable("commands.time.set", i), true); + source.sendSuccess(() -> Component.translatable("commands.time.set", i), true); return i; } } diff --git a/src/main/java/com/aetherteam/aether/command/EternalDayCommand.java b/src/main/java/com/aetherteam/aether/command/EternalDayCommand.java index 65eb05e67a..1cade1e283 100644 --- a/src/main/java/com/aetherteam/aether/command/EternalDayCommand.java +++ b/src/main/java/com/aetherteam/aether/command/EternalDayCommand.java @@ -27,14 +27,14 @@ private static int setEternalDay(CommandSourceStack source, boolean value) { AetherTime.get(level).ifPresent(aetherTime -> { aetherTime.setEternalDay(value); aetherTime.updateEternalDay(); // Syncs to client. - source.sendSuccess(Component.translatable("commands.aether.capability.time.eternal_day.set", value), true); + source.sendSuccess(() -> Component.translatable("commands.aether.capability.time.eternal_day.set", value), true); }); return 1; } private static int queryEternalDay(CommandSourceStack source) { ServerLevel level = source.getLevel(); - AetherTime.get(level).ifPresent(aetherTime -> source.sendSuccess(Component.translatable("commands.aether.capability.time.eternal_day.query", aetherTime.getEternalDay()), true)); + AetherTime.get(level).ifPresent(aetherTime -> source.sendSuccess(() -> Component.translatable("commands.aether.capability.time.eternal_day.query", aetherTime.getEternalDay()), true)); return 1; } } \ No newline at end of file diff --git a/src/main/java/com/aetherteam/aether/command/PlayerCapabilityCommand.java b/src/main/java/com/aetherteam/aether/command/PlayerCapabilityCommand.java index f691b00c92..69de0f8a57 100644 --- a/src/main/java/com/aetherteam/aether/command/PlayerCapabilityCommand.java +++ b/src/main/java/com/aetherteam/aether/command/PlayerCapabilityCommand.java @@ -62,7 +62,7 @@ private static int setLifeShards(CommandSourceStack source, Collection Component.translatable("commands.aether.capability.player.life_shards.set", innerPlayer.getDisplayName(), value), true); }); } } diff --git a/src/main/java/com/aetherteam/aether/command/SunAltarWhitelistCommand.java b/src/main/java/com/aetherteam/aether/command/SunAltarWhitelistCommand.java index 04f5213c85..69d5483808 100644 --- a/src/main/java/com/aetherteam/aether/command/SunAltarWhitelistCommand.java +++ b/src/main/java/com/aetherteam/aether/command/SunAltarWhitelistCommand.java @@ -55,7 +55,7 @@ public static void register(CommandDispatcher dispatcher) { private static int reload(CommandSourceStack source) { SunAltarWhitelist.INSTANCE.reload(); - source.sendSuccess(Component.translatable("commands.aether.sun_altar_whitelist.reloaded"), true); + source.sendSuccess(() -> Component.translatable("commands.aether.sun_altar_whitelist.reloaded"), true); return 1; } @@ -67,7 +67,7 @@ private static int addPlayers(CommandSourceStack source, Collection if (!sunAltarWhiteList.isWhiteListed(gameProfile)) { UserWhiteListEntry entry = new UserWhiteListEntry(gameProfile); sunAltarWhiteList.add(entry); - source.sendSuccess(Component.translatable("commands.aether.sun_altar_whitelist.add.success", ComponentUtils.getDisplayName(gameProfile)), true); + source.sendSuccess(() -> Component.translatable("commands.aether.sun_altar_whitelist.add.success", ComponentUtils.getDisplayName(gameProfile)), true); ++i; } } @@ -87,7 +87,7 @@ private static int removePlayers(CommandSourceStack source, Collection Component.translatable("commands.aether.sun_altar_whitelist.remove.success", ComponentUtils.getDisplayName(gameProfile)), true); ++i; } } @@ -106,7 +106,7 @@ private static int enableWhitelist(CommandSourceStack source) throws CommandSynt } else { AetherConfig.SERVER.sun_altar_whitelist.set(true); AetherConfig.SERVER.sun_altar_whitelist.save(); - source.sendSuccess(Component.translatable("commands.aether.sun_altar_whitelist.enabled"), true); + source.sendSuccess(() -> Component.translatable("commands.aether.sun_altar_whitelist.enabled"), true); return 1; } } @@ -117,7 +117,7 @@ private static int disableWhitelist(CommandSourceStack source) throws CommandSyn } else { AetherConfig.SERVER.sun_altar_whitelist.set(false); AetherConfig.SERVER.sun_altar_whitelist.save(); - source.sendSuccess(Component.translatable("commands.aether.sun_altar_whitelist.disabled"), true); + source.sendSuccess(() -> Component.translatable("commands.aether.sun_altar_whitelist.disabled"), true); return 1; } } @@ -125,9 +125,9 @@ private static int disableWhitelist(CommandSourceStack source) throws CommandSyn private static int showList(CommandSourceStack source) { String[] names = SunAltarWhitelist.INSTANCE.getSunAltarWhiteListNames(); if (names.length == 0) { - source.sendSuccess(Component.translatable("commands.aether.sun_altar_whitelist.none"), false); + source.sendSuccess(() -> Component.translatable("commands.aether.sun_altar_whitelist.none"), false); } else { - source.sendSuccess(Component.translatable("commands.aether.sun_altar_whitelist.list", names.length, String.join(", ", names)), false); + source.sendSuccess(() -> Component.translatable("commands.aether.sun_altar_whitelist.list", names.length, String.join(", ", names)), false); } return names.length; } diff --git a/src/main/java/com/aetherteam/aether/command/WorldPreviewFixCommand.java b/src/main/java/com/aetherteam/aether/command/WorldPreviewFixCommand.java index 63ed391408..0850bfdf0d 100644 --- a/src/main/java/com/aetherteam/aether/command/WorldPreviewFixCommand.java +++ b/src/main/java/com/aetherteam/aether/command/WorldPreviewFixCommand.java @@ -22,7 +22,7 @@ public static void register(CommandDispatcher dispatcher, bo */ private static int fix(CommandSourceStack source) { WorldDisplayHelper.resetStates(); - source.sendSuccess(Component.translatable("commands.aether.menu.fix"), true); + source.sendSuccess(() -> Component.translatable("commands.aether.menu.fix"), true); return 1; } } diff --git a/src/main/java/com/aetherteam/aether/data/generators/AetherAdvancementData.java b/src/main/java/com/aetherteam/aether/data/generators/AetherAdvancementData.java index 67f20c37a8..42171758cb 100644 --- a/src/main/java/com/aetherteam/aether/data/generators/AetherAdvancementData.java +++ b/src/main/java/com/aetherteam/aether/data/generators/AetherAdvancementData.java @@ -139,9 +139,7 @@ public void generate(HolderLookup.Provider provider, Consumer consu null, FrameType.TASK, true, true, false) .requirements(RequirementsStrategy.OR) - .addCriterion( "blue_moa_egg", InventoryChangeTrigger.TriggerInstance.hasItems(AetherItems.BLUE_MOA_EGG.get())) - .addCriterion( "white_moa_egg", InventoryChangeTrigger.TriggerInstance.hasItems(AetherItems.WHITE_MOA_EGG.get())) - .addCriterion( "black_moa_egg", InventoryChangeTrigger.TriggerInstance.hasItems(AetherItems.BLACK_MOA_EGG.get())) + .addCriterion( "moa_egg", InventoryChangeTrigger.TriggerInstance.hasItems(ItemPredicate.Builder.item().of(AetherTags.Items.MOA_EGGS).build())) .save(consumer, new ResourceLocation(Aether.MODID, "obtain_egg"), existingFileHelper); Advancement obtainPetal = Advancement.Builder.advancement() @@ -287,7 +285,7 @@ public void generate(HolderLookup.Provider provider, Consumer consu Component.translatable("advancement.aether.valkyrie_hoe.desc"), null, FrameType.CHALLENGE, true, true, true) - .addCriterion("valkyrie_hoe", ItemInteractWithBlockTrigger.TriggerInstance.itemUsedOnBlock(LocationPredicate.Builder.location().setBlock(BlockPredicate.Builder.block().of(AbilityHooks.ToolHooks.TILLABLES.keySet()).build()), ItemPredicate.Builder.item().of(AetherItems.VALKYRIE_HOE.get()))) + .addCriterion("valkyrie_hoe", ItemUsedOnLocationTrigger.TriggerInstance.itemUsedOnBlock(LocationPredicate.Builder.location().setBlock(BlockPredicate.Builder.block().of(AbilityHooks.ToolHooks.TILLABLES.keySet()).build()), ItemPredicate.Builder.item().of(AetherItems.VALKYRIE_HOE.get()))) .save(consumer, new ResourceLocation(Aether.MODID, "valkyrie_hoe"), existingFileHelper); Advancement regenStone = Advancement.Builder.advancement() @@ -347,8 +345,7 @@ public void generate(HolderLookup.Provider provider, Consumer consu null, FrameType.CHALLENGE, true, true, true) .addCriterion("aether_sleep", new PlayerTrigger.TriggerInstance(CriteriaTriggers.SLEPT_IN_BED.getId(), - EntityPredicate.Composite.wrap(EntityPredicate.Builder.entity().located(LocationPredicate.inDimension(AetherDimensions.AETHER_LEVEL)).build() - ))) + EntityPredicate.wrap(EntityPredicate.Builder.entity().located(LocationPredicate.inDimension(AetherDimensions.AETHER_LEVEL)).build()))) .save(consumer, new ResourceLocation(Aether.MODID, "aether_sleep"), existingFileHelper); } } diff --git a/src/main/java/com/aetherteam/aether/data/generators/AetherBlockStateData.java b/src/main/java/com/aetherteam/aether/data/generators/AetherBlockStateData.java index ac61e1e707..c71e40381f 100644 --- a/src/main/java/com/aetherteam/aether/data/generators/AetherBlockStateData.java +++ b/src/main/java/com/aetherteam/aether/data/generators/AetherBlockStateData.java @@ -65,6 +65,7 @@ public void registerStatesAndModels() { this.torchBlock(AetherBlocks.AMBROSIUM_TORCH.get(), AetherBlocks.AMBROSIUM_WALL_TORCH.get()); this.signBlock(AetherBlocks.SKYROOT_SIGN.get(), AetherBlocks.SKYROOT_WALL_SIGN.get(), this.texture(this.name(AetherBlocks.SKYROOT_PLANKS.get()), "construction/")); + this.hangingSignBlock(AetherBlocks.SKYROOT_HANGING_SIGN.get(), AetherBlocks.SKYROOT_WALL_HANGING_SIGN.get(), this.texture(this.name(AetherBlocks.STRIPPED_SKYROOT_LOG.get()), "natural/")); this.crossBlock(AetherBlocks.BERRY_BUSH_STEM.get(), "natural/"); this.berryBush(AetherBlocks.BERRY_BUSH.get(), AetherBlocks.BERRY_BUSH_STEM.get()); diff --git a/src/main/java/com/aetherteam/aether/data/generators/AetherItemModelData.java b/src/main/java/com/aetherteam/aether/data/generators/AetherItemModelData.java index 602c871692..adb9747457 100644 --- a/src/main/java/com/aetherteam/aether/data/generators/AetherItemModelData.java +++ b/src/main/java/com/aetherteam/aether/data/generators/AetherItemModelData.java @@ -67,30 +67,30 @@ protected void registerModels() { this.bowItem(AetherItems.PHOENIX_BOW.get(), "weapons/"); - this.item(AetherItems.ZANITE_HELMET.get(), "armor/"); - this.item(AetherItems.ZANITE_CHESTPLATE.get(), "armor/"); - this.item(AetherItems.ZANITE_LEGGINGS.get(), "armor/"); - this.item(AetherItems.ZANITE_BOOTS.get(), "armor/"); - - this.item(AetherItems.GRAVITITE_HELMET.get(), "armor/"); - this.item(AetherItems.GRAVITITE_CHESTPLATE.get(), "armor/"); - this.item(AetherItems.GRAVITITE_LEGGINGS.get(), "armor/"); - this.item(AetherItems.GRAVITITE_BOOTS.get(), "armor/"); - - this.item(AetherItems.NEPTUNE_HELMET.get(), "armor/"); - this.item(AetherItems.NEPTUNE_CHESTPLATE.get(), "armor/"); - this.item(AetherItems.NEPTUNE_LEGGINGS.get(), "armor/"); - this.item(AetherItems.NEPTUNE_BOOTS.get(), "armor/"); - - this.item(AetherItems.PHOENIX_HELMET.get(), "armor/"); - this.item(AetherItems.PHOENIX_CHESTPLATE.get(), "armor/"); - this.item(AetherItems.PHOENIX_LEGGINGS.get(), "armor/"); - this.item(AetherItems.PHOENIX_BOOTS.get(), "armor/"); - - this.item(AetherItems.OBSIDIAN_HELMET.get(), "armor/"); - this.item(AetherItems.OBSIDIAN_CHESTPLATE.get(), "armor/"); - this.item(AetherItems.OBSIDIAN_LEGGINGS.get(), "armor/"); - this.item(AetherItems.OBSIDIAN_BOOTS.get(), "armor/"); + this.helmetItem(AetherItems.ZANITE_HELMET.get(), "armor/"); + this.chestplateItem(AetherItems.ZANITE_CHESTPLATE.get(), "armor/"); + this.leggingsItem(AetherItems.ZANITE_LEGGINGS.get(), "armor/"); + this.bootsItem(AetherItems.ZANITE_BOOTS.get(), "armor/"); + + this.helmetItem(AetherItems.GRAVITITE_HELMET.get(), "armor/"); + this.chestplateItem(AetherItems.GRAVITITE_CHESTPLATE.get(), "armor/"); + this.leggingsItem(AetherItems.GRAVITITE_LEGGINGS.get(), "armor/"); + this.bootsItem(AetherItems.GRAVITITE_BOOTS.get(), "armor/"); + + this.helmetItem(AetherItems.NEPTUNE_HELMET.get(), "armor/"); + this.chestplateItem(AetherItems.NEPTUNE_CHESTPLATE.get(), "armor/"); + this.leggingsItem(AetherItems.NEPTUNE_LEGGINGS.get(), "armor/"); + this.bootsItem(AetherItems.NEPTUNE_BOOTS.get(), "armor/"); + + this.helmetItem(AetherItems.PHOENIX_HELMET.get(), "armor/"); + this.chestplateItem(AetherItems.PHOENIX_CHESTPLATE.get(), "armor/"); + this.leggingsItem(AetherItems.PHOENIX_LEGGINGS.get(), "armor/"); + this.bootsItem(AetherItems.PHOENIX_BOOTS.get(), "armor/"); + + this.helmetItem(AetherItems.OBSIDIAN_HELMET.get(), "armor/"); + this.chestplateItem(AetherItems.OBSIDIAN_CHESTPLATE.get(), "armor/"); + this.leggingsItem(AetherItems.OBSIDIAN_LEGGINGS.get(), "armor/"); + this.bootsItem(AetherItems.OBSIDIAN_BOOTS.get(), "armor/"); this.item(AetherItems.VALKYRIE_HELMET.get(), "armor/"); this.item(AetherItems.VALKYRIE_CHESTPLATE.get(), "armor/"); @@ -118,18 +118,18 @@ protected void registerModels() { this.item(AetherItems.ZANITE_PENDANT.get(), "accessories/"); this.item(AetherItems.ICE_PENDANT.get(), "accessories/"); - this.dyedItem(AetherItems.LEATHER_GLOVES.get(), "accessories/"); - this.item(AetherItems.CHAINMAIL_GLOVES.get(), "accessories/"); - this.item(AetherItems.IRON_GLOVES.get(), "accessories/"); - this.item(AetherItems.GOLDEN_GLOVES.get(), "accessories/"); - this.item(AetherItems.DIAMOND_GLOVES.get(), "accessories/"); - this.item(AetherItems.NETHERITE_GLOVES.get(), "accessories/"); - this.item(AetherItems.ZANITE_GLOVES.get(), "accessories/"); - this.item(AetherItems.GRAVITITE_GLOVES.get(), "accessories/"); - this.item(AetherItems.NEPTUNE_GLOVES.get(), "accessories/"); - this.item(AetherItems.PHOENIX_GLOVES.get(), "accessories/"); - this.item(AetherItems.OBSIDIAN_GLOVES.get(), "accessories/"); - this.item(AetherItems.VALKYRIE_GLOVES.get(), "accessories/"); + this.dyedGlovesItem(AetherItems.LEATHER_GLOVES.get(), "accessories/"); + this.glovesItem(AetherItems.CHAINMAIL_GLOVES.get(), "accessories/"); + this.glovesItem(AetherItems.IRON_GLOVES.get(), "accessories/"); + this.glovesItem(AetherItems.GOLDEN_GLOVES.get(), "accessories/"); + this.glovesItem(AetherItems.DIAMOND_GLOVES.get(), "accessories/"); + this.glovesItem(AetherItems.NETHERITE_GLOVES.get(), "accessories/"); + this.glovesItem(AetherItems.ZANITE_GLOVES.get(), "accessories/"); + this.glovesItem(AetherItems.GRAVITITE_GLOVES.get(), "accessories/"); + this.glovesItem(AetherItems.NEPTUNE_GLOVES.get(), "accessories/"); + this.glovesItem(AetherItems.PHOENIX_GLOVES.get(), "accessories/"); + this.glovesItem(AetherItems.OBSIDIAN_GLOVES.get(), "accessories/"); + this.glovesItem(AetherItems.VALKYRIE_GLOVES.get(), "accessories/"); this.item(AetherItems.RED_CAPE.get(), "accessories/"); this.item(AetherItems.BLUE_CAPE.get(), "accessories/"); @@ -265,6 +265,7 @@ protected void registerModels() { this.itemBlockFlat(AetherBlocks.AMBROSIUM_TORCH.get(), "utility/"); this.item(AetherBlocks.SKYROOT_SIGN.get().asItem(), "miscellaneous/"); + this.item(AetherBlocks.SKYROOT_HANGING_SIGN.get().asItem(), "miscellaneous/"); this.itemBlock(AetherBlocks.BERRY_BUSH.get()); this.itemBlockFlat(AetherBlocks.BERRY_BUSH_STEM.get(), "natural/"); diff --git a/src/main/java/com/aetherteam/aether/data/generators/AetherLanguageData.java b/src/main/java/com/aetherteam/aether/data/generators/AetherLanguageData.java index bb8e1656ae..4eb6ac76de 100644 --- a/src/main/java/com/aetherteam/aether/data/generators/AetherLanguageData.java +++ b/src/main/java/com/aetherteam/aether/data/generators/AetherLanguageData.java @@ -68,6 +68,7 @@ protected void addTranslations() { this.addBlock(AetherBlocks.AMBROSIUM_TORCH, "Ambrosium Torch"); this.addBlock(AetherBlocks.SKYROOT_SIGN, "Skyroot Sign"); + this.addBlock(AetherBlocks.SKYROOT_HANGING_SIGN, "Skyroot Hanging Sign"); this.addBlock(AetherBlocks.BERRY_BUSH_STEM, "Bush Stem"); this.addBlock(AetherBlocks.BERRY_BUSH, "Berry Bush"); @@ -313,13 +314,13 @@ protected void addTranslations() { this.addItem(AetherItems.GOLD_DUNGEON_KEY, "Gold Key"); this.addItem(AetherItems.MUSIC_DISC_AETHER_TUNE, "Blue Music Disc"); - addDiscDesc(AetherItems.MUSIC_DISC_AETHER_TUNE, "Noisestorm - Aether Tune"); + this.addDiscDesc(AetherItems.MUSIC_DISC_AETHER_TUNE, "Noisestorm - Aether Tune"); this.addItem(AetherItems.MUSIC_DISC_ASCENDING_DAWN, "Valkyrie Music Disc"); - addDiscDesc(AetherItems.MUSIC_DISC_ASCENDING_DAWN, "Emile van Krieken - Ascending Dawn"); + this.addDiscDesc(AetherItems.MUSIC_DISC_ASCENDING_DAWN, "Emile van Krieken - Ascending Dawn"); this.addItem(AetherItems.MUSIC_DISC_CHINCHILLA, "Sepia Music Disc"); - addDiscDesc(AetherItems.MUSIC_DISC_CHINCHILLA, "RENREN - chinchilla"); + this.addDiscDesc(AetherItems.MUSIC_DISC_CHINCHILLA, "RENREN - chinchilla"); this.addItem(AetherItems.MUSIC_DISC_HIGH, "Super Music Disc"); - addDiscDesc(AetherItems.MUSIC_DISC_HIGH, "RENREN - high"); + this.addDiscDesc(AetherItems.MUSIC_DISC_HIGH, "RENREN - high"); this.addItem(AetherItems.SKYROOT_BUCKET, "Skyroot Bucket"); this.addItem(AetherItems.SKYROOT_WATER_BUCKET, "Skyroot Water Bucket"); @@ -375,6 +376,10 @@ protected void addTranslations() { this.addItem(AetherItems.ZEPHYR_SPAWN_EGG, "Zephyr Spawn Egg"); + this.addTrim("zanite", "Zanite"); + this.addTrim("gravitite", "Gravitite"); + + this.addEntityType(AetherEntityTypes.PHYG, "Phyg"); this.addEntityType(AetherEntityTypes.FLYING_COW, "Flying Cow"); this.addEntityType(AetherEntityTypes.SHEEPUFF, "Sheepuff"); @@ -440,16 +445,16 @@ protected void addTranslations() { this.addContainerType("sun_altar", "Sun Altar"); - this.addCreativeTab(AetherCreativeTabs.AETHER_BUILDING_BLOCKS, "Aether Building Blocks"); - this.addCreativeTab(AetherCreativeTabs.AETHER_DUNGEON_BLOCKS, "Aether Dungeon Blocks"); - this.addCreativeTab(AetherCreativeTabs.AETHER_NATURAL_BLOCKS, "Aether Natural Blocks"); - this.addCreativeTab(AetherCreativeTabs.AETHER_FUNCTIONAL_BLOCKS, "Aether Functional Blocks"); - this.addCreativeTab(AetherCreativeTabs.AETHER_REDSTONE_BLOCKS, "Aether Redstone Blocks"); - this.addCreativeTab(AetherCreativeTabs.AETHER_EQUIPMENT_AND_UTILITIES, "Aether Equipment & Utilities"); - this.addCreativeTab(AetherCreativeTabs.AETHER_ARMOR_AND_ACCESSORIES, "Aether Armor & Accessories"); - this.addCreativeTab(AetherCreativeTabs.AETHER_FOOD_AND_DRINKS, "Aether Food & Drinks"); - this.addCreativeTab(AetherCreativeTabs.AETHER_INGREDIENTS, "Aether Ingredients"); - this.addCreativeTab(AetherCreativeTabs.AETHER_SPAWN_EGGS, "Aether Spawn Eggs"); + this.addCreativeTab(AetherCreativeTabs.AETHER_BUILDING_BLOCKS.get(), "Aether Building Blocks"); + this.addCreativeTab(AetherCreativeTabs.AETHER_DUNGEON_BLOCKS.get(), "Aether Dungeon Blocks"); + this.addCreativeTab(AetherCreativeTabs.AETHER_NATURAL_BLOCKS.get(), "Aether Natural Blocks"); + this.addCreativeTab(AetherCreativeTabs.AETHER_FUNCTIONAL_BLOCKS.get(), "Aether Functional Blocks"); + this.addCreativeTab(AetherCreativeTabs.AETHER_REDSTONE_BLOCKS.get(), "Aether Redstone Blocks"); + this.addCreativeTab(AetherCreativeTabs.AETHER_EQUIPMENT_AND_UTILITIES.get(), "Aether Equipment & Utilities"); + this.addCreativeTab(AetherCreativeTabs.AETHER_ARMOR_AND_ACCESSORIES.get(), "Aether Armor & Accessories"); + this.addCreativeTab(AetherCreativeTabs.AETHER_FOOD_AND_DRINKS.get(), "Aether Food & Drinks"); + this.addCreativeTab(AetherCreativeTabs.AETHER_INGREDIENTS.get(), "Aether Ingredients"); + this.addCreativeTab(AetherCreativeTabs.AETHER_SPAWN_EGGS.get(), "Aether Spawn Eggs"); this.addAdvancement("the_aether", "The Aether"); @@ -1250,6 +1255,7 @@ protected void addTranslations() { this.addPackTitle("b173", "Aether b1.7.3 Textures"); this.addPackTitle("ctm", "Aether CTM Fix"); this.addPackTitle("colorblind", "Aether Colorblind Textures"); + this.addPackTitle("accessories", "Aether Accessories"); this.addPackTitle("curios", "Aether Curios Override"); this.addPackTitle("freezing", "Aether Temporary Freezing"); this.addPackTitle("ruined_portal", "Aether Ruined Portals"); @@ -1259,6 +1265,7 @@ protected void addTranslations() { this.addPackDescription("b173", "The original look of the Aether from b1.7.3"); this.addPackDescription("ctm", "Fixes Quicksoil Glass Panes when using CTM"); this.addPackDescription("colorblind", "Changes textures for color blindness accessibility"); + this.addPackDescription("accessories", "Register default accessories"); this.addPackDescription("curios", "Replace Accessories Menu with Curios' menu"); this.addPackDescription("freezing", "Ice Accessories create temporary blocks"); this.addPackDescription("ruined_portal", "Generate ruined glowstone portals"); diff --git a/src/main/java/com/aetherteam/aether/data/generators/AetherLootModifierData.java b/src/main/java/com/aetherteam/aether/data/generators/AetherLootModifierData.java index a2b44df3f3..0fbde29715 100644 --- a/src/main/java/com/aetherteam/aether/data/generators/AetherLootModifierData.java +++ b/src/main/java/com/aetherteam/aether/data/generators/AetherLootModifierData.java @@ -24,7 +24,7 @@ public AetherLootModifierData(PackOutput output) { protected void start() { this.add("remove_seeds", new RemoveSeedsModifier( new LootItemCondition[] { - AlternativeLootItemCondition.alternative(LootItemBlockStatePropertyCondition.hasBlockStateProperties(Blocks.GRASS), LootItemBlockStatePropertyCondition.hasBlockStateProperties(Blocks.TALL_GRASS)).build(), + AnyOfCondition.anyOf(LootItemBlockStatePropertyCondition.hasBlockStateProperties(Blocks.GRASS), LootItemBlockStatePropertyCondition.hasBlockStateProperties(Blocks.TALL_GRASS)).build(), MatchTool.toolMatches(ItemPredicate.Builder.item().of(Items.SHEARS)).invert().build() }) ); diff --git a/src/main/java/com/aetherteam/aether/data/generators/AetherRecipeData.java b/src/main/java/com/aetherteam/aether/data/generators/AetherRecipeData.java index 107042c9fb..24aa573c3b 100644 --- a/src/main/java/com/aetherteam/aether/data/generators/AetherRecipeData.java +++ b/src/main/java/com/aetherteam/aether/data/generators/AetherRecipeData.java @@ -7,7 +7,7 @@ import com.aetherteam.aether.data.providers.AetherRecipeProvider; import com.aetherteam.aether.entity.AetherEntityTypes; import com.aetherteam.aether.item.AetherItems; -import net.minecraft.advancements.critereon.EntityPredicate; +import net.minecraft.advancements.critereon.ContextAwarePredicate; import net.minecraft.advancements.critereon.InventoryChangeTrigger; import net.minecraft.advancements.critereon.ItemPredicate; import net.minecraft.advancements.critereon.MinMaxBounds; @@ -29,7 +29,6 @@ public AetherRecipeData(PackOutput output) { } @Override - @SuppressWarnings("removal") protected void buildRecipes(Consumer consumer) { ShapelessRecipeBuilder.shapeless(RecipeCategory.BUILDING_BLOCKS, AetherBlocks.MOSSY_HOLYSTONE.get()) .group("mossy_holystone") @@ -112,6 +111,16 @@ protected void buildRecipes(Consumer consumer) { .unlockedBy(getHasName(AetherBlocks.SKYROOT_PLANKS.get()), has(AetherBlocks.SKYROOT_PLANKS.get())) .save(consumer); + ShapedRecipeBuilder.shaped(RecipeCategory.DECORATIONS, AetherBlocks.SKYROOT_HANGING_SIGN.get(), 6) + .group("hanging_sign") + .define('#', AetherBlocks.STRIPPED_SKYROOT_LOG.get()) + .define('X', Items.CHAIN) + .pattern("X X") + .pattern("###") + .pattern("###") + .unlockedBy("has_stripped_logs", has(AetherBlocks.STRIPPED_SKYROOT_LOG.get())) + .save(consumer); + this.fence(AetherBlocks.SKYROOT_FENCE, AetherBlocks.SKYROOT_PLANKS).save(consumer); this.fenceGate(AetherBlocks.SKYROOT_FENCE_GATE, AetherBlocks.SKYROOT_PLANKS).save(consumer); @@ -158,7 +167,7 @@ protected void buildRecipes(Consumer consumer) { ShapedRecipeBuilder.shaped(RecipeCategory.DECORATIONS, AetherBlocks.SKYROOT_BED.get(), 1) .define('W', ItemTags.WOOL) - .define('P', AetherBlocks.SKYROOT_PLANKS.get()) + .define('P', AetherTags.Items.PLANKS_CRAFTING) .pattern("WWW") .pattern("PPP") .unlockedBy("has_wool", has(ItemTags.WOOL)) @@ -269,7 +278,6 @@ protected void buildRecipes(Consumer consumer) { this.makeGlovesWithTag(AetherItems.IRON_GLOVES, Tags.Items.INGOTS_IRON, "iron").save(consumer); this.makeGlovesWithTag(AetherItems.GOLDEN_GLOVES, Tags.Items.INGOTS_GOLD, "gold").save(consumer); this.makeGlovesWithTag(AetherItems.DIAMOND_GLOVES, Tags.Items.GEMS_DIAMOND, "diamond").save(consumer); - LegacyUpgradeRecipeBuilder.smithing(Ingredient.of(AetherItems.DIAMOND_GLOVES.get()), Ingredient.of(Items.NETHERITE_INGOT), RecipeCategory.COMBAT, AetherItems.NETHERITE_GLOVES.get()).unlocks("has_netherite_ingot", has(Items.NETHERITE_INGOT)).save(consumer, this.name("old_" + getItemName(AetherItems.NETHERITE_GLOVES.get()) + "_smithing")); SmithingTransformRecipeBuilder.smithing(Ingredient.of(Items.NETHERITE_UPGRADE_SMITHING_TEMPLATE), Ingredient.of(AetherItems.DIAMOND_GLOVES.get()), Ingredient.of(Items.NETHERITE_INGOT), RecipeCategory.COMBAT, AetherItems.NETHERITE_GLOVES.get()).unlocks("has_netherite_ingot", has(Items.NETHERITE_INGOT)).save(consumer, this.name(getItemName(AetherItems.NETHERITE_GLOVES.get()) + "_smithing")); this.makeGloves(AetherItems.ZANITE_GLOVES, AetherItems.ZANITE_GEMSTONE).save(consumer); this.makeGlovesWithBlock(AetherItems.GRAVITITE_GLOVES, AetherBlocks.ENCHANTED_GRAVITITE).save(consumer); @@ -396,7 +404,7 @@ protected void buildRecipes(Consumer consumer) { .pattern("PPP") .pattern("P P") .pattern("PPP") - .unlockedBy("has_lots_of_items", new InventoryChangeTrigger.TriggerInstance(EntityPredicate.Composite.ANY, MinMaxBounds.Ints.atLeast(10), MinMaxBounds.Ints.ANY, MinMaxBounds.Ints.ANY, new ItemPredicate[0])) + .unlockedBy("has_lots_of_items", new InventoryChangeTrigger.TriggerInstance(ContextAwarePredicate.ANY, MinMaxBounds.Ints.atLeast(10), MinMaxBounds.Ints.ANY, MinMaxBounds.Ints.ANY, new ItemPredicate[0])) .save(consumer, this.name("skyroot_chest")); ShapedRecipeBuilder.shaped(RecipeCategory.DECORATIONS, Blocks.CRAFTING_TABLE, 1) diff --git a/src/main/java/com/aetherteam/aether/data/generators/AetherRegistrySets.java b/src/main/java/com/aetherteam/aether/data/generators/AetherRegistrySets.java index bcde6277e6..82756ceccb 100644 --- a/src/main/java/com/aetherteam/aether/data/generators/AetherRegistrySets.java +++ b/src/main/java/com/aetherteam/aether/data/generators/AetherRegistrySets.java @@ -1,7 +1,6 @@ package com.aetherteam.aether.data.generators; import com.aetherteam.aether.Aether; -import com.aetherteam.aether.data.resources.AetherDamageTypes; import com.aetherteam.aether.data.resources.registries.*; import net.minecraft.core.HolderLookup; import net.minecraft.core.RegistryAccess; @@ -27,7 +26,8 @@ public class AetherRegistrySets extends DatapackBuiltinEntriesProvider { .add(Registries.LEVEL_STEM, AetherDimensions::bootstrapLevelStem) .add(Registries.STRUCTURE, AetherStructures::bootstrap) .add(Registries.STRUCTURE_SET, AetherStructureSets::bootstrap) - .add(Registries.DAMAGE_TYPE, AetherDamageTypes::bootstrap); + .add(Registries.DAMAGE_TYPE, AetherDamageTypes::bootstrap) + .add(Registries.TRIM_MATERIAL, AetherTrimMaterials::bootstrap); public AetherRegistrySets(PackOutput output, CompletableFuture registries) { super(output, registries, BUILDER, Collections.singleton(Aether.MODID)); diff --git a/src/main/java/com/aetherteam/aether/data/generators/loot/AetherBlockLoot.java b/src/main/java/com/aetherteam/aether/data/generators/loot/AetherBlockLoot.java index dd0cabb371..4ed79b0071 100644 --- a/src/main/java/com/aetherteam/aether/data/generators/loot/AetherBlockLoot.java +++ b/src/main/java/com/aetherteam/aether/data/generators/loot/AetherBlockLoot.java @@ -88,6 +88,9 @@ public void generate() { this.dropOther(AetherBlocks.SKYROOT_WALL_SIGN.get(), AetherBlocks.SKYROOT_SIGN.get()); this.dropSelf(AetherBlocks.SKYROOT_SIGN.get()); + this.dropOther(AetherBlocks.SKYROOT_WALL_HANGING_SIGN.get(), AetherBlocks.SKYROOT_HANGING_SIGN.get()); + this.dropSelf(AetherBlocks.SKYROOT_HANGING_SIGN.get()); + this.add(AetherBlocks.BERRY_BUSH.get(), (bush) -> droppingBerryBush(bush, AetherBlocks.BERRY_BUSH_STEM.get(), AetherItems.BLUE_BERRY.get())); this.dropSelfDouble(AetherBlocks.BERRY_BUSH_STEM.get()); this.dropPottedContents(AetherBlocks.POTTED_BERRY_BUSH.get()); diff --git a/src/main/java/com/aetherteam/aether/data/generators/tags/AetherBlockTagData.java b/src/main/java/com/aetherteam/aether/data/generators/tags/AetherBlockTagData.java index 1cae4eea0e..bdbd57de08 100644 --- a/src/main/java/com/aetherteam/aether/data/generators/tags/AetherBlockTagData.java +++ b/src/main/java/com/aetherteam/aether/data/generators/tags/AetherBlockTagData.java @@ -232,6 +232,7 @@ public void addTags(HolderLookup.Provider provider) { this.tag(BlockTags.BUTTONS).add( AetherBlocks.SKYROOT_BUTTON.get(), AetherBlocks.HOLYSTONE_BUTTON.get()); + this.tag(BlockTags.STONE_BUTTONS).add(AetherBlocks.HOLYSTONE_BUTTON.get()); this.tag(BlockTags.PRESSURE_PLATES).add( AetherBlocks.SKYROOT_PRESSURE_PLATE.get(), AetherBlocks.HOLYSTONE_PRESSURE_PLATE.get()); @@ -301,6 +302,8 @@ public void addTags(HolderLookup.Provider provider) { AetherBlocks.SKYROOT_WALL_SIGN.get()); this.tag(BlockTags.STANDING_SIGNS).add(AetherBlocks.SKYROOT_SIGN.get()); this.tag(BlockTags.WALL_SIGNS).add(AetherBlocks.SKYROOT_WALL_SIGN.get()); + this.tag(BlockTags.CEILING_HANGING_SIGNS).add(AetherBlocks.SKYROOT_HANGING_SIGN.get()); + this.tag(BlockTags.WALL_HANGING_SIGNS).add(AetherBlocks.SKYROOT_WALL_HANGING_SIGN.get()); this.tag(BlockTags.DRAGON_IMMUNE).addTags( AetherTags.Blocks.LOCKED_DUNGEON_BLOCKS, AetherTags.Blocks.TRAPPED_DUNGEON_BLOCKS, @@ -380,6 +383,8 @@ public void addTags(HolderLookup.Provider provider) { AetherBlocks.SKYROOT_PLANKS.get(), AetherBlocks.SKYROOT_SIGN.get(), AetherBlocks.SKYROOT_WALL_SIGN.get(), + AetherBlocks.SKYROOT_HANGING_SIGN.get(), + AetherBlocks.SKYROOT_WALL_HANGING_SIGN.get(), AetherBlocks.BERRY_BUSH_STEM.get(), AetherBlocks.CHEST_MIMIC.get(), AetherBlocks.SKYROOT_FENCE.get(), @@ -410,6 +415,9 @@ public void addTags(HolderLookup.Provider provider) { AetherBlocks.HOLIDAY_LEAVES.get(), AetherBlocks.DECORATED_HOLIDAY_LEAVES.get(), AetherBlocks.BERRY_BUSH.get()); + this.tag(BlockTags.SWORD_EFFICIENT).add( + AetherBlocks.BERRY_BUSH.get(), + AetherBlocks.BERRY_BUSH_STEM.get()); this.tag(BlockTags.NEEDS_STONE_TOOL).add( AetherBlocks.ICESTONE.get(), AetherBlocks.ICESTONE_STAIRS.get(), @@ -456,6 +464,11 @@ public void addTags(HolderLookup.Provider provider) { AetherBlocks.GRAVITITE_ORE.get() ); this.tag(BlockTags.SNOW_LAYER_CANNOT_SURVIVE_ON).add(AetherBlocks.ICESTONE.get()); + this.tag(BlockTags.ENCHANTMENT_POWER_PROVIDER).add(AetherBlocks.SKYROOT_BOOKSHELF.get()); + this.tag(BlockTags.SNIFFER_DIGGABLE_BLOCK).add( + AetherBlocks.AETHER_GRASS_BLOCK.get(), + AetherBlocks.AETHER_DIRT.get(), + AetherBlocks.ENCHANTED_AETHER_GRASS_BLOCK.get()); // Forge this.tag(Tags.Blocks.BOOKSHELVES).add(AetherBlocks.SKYROOT_BOOKSHELF.get()); diff --git a/src/main/java/com/aetherteam/aether/data/generators/tags/AetherDamageTypeTagData.java b/src/main/java/com/aetherteam/aether/data/generators/tags/AetherDamageTypeTagData.java index 11d1e484d7..e8581da6e0 100644 --- a/src/main/java/com/aetherteam/aether/data/generators/tags/AetherDamageTypeTagData.java +++ b/src/main/java/com/aetherteam/aether/data/generators/tags/AetherDamageTypeTagData.java @@ -2,7 +2,7 @@ import com.aetherteam.aether.Aether; import com.aetherteam.aether.AetherTags; -import com.aetherteam.aether.data.resources.AetherDamageTypes; +import com.aetherteam.aether.data.resources.registries.AetherDamageTypes; import net.minecraft.core.HolderLookup; import net.minecraft.core.registries.Registries; import net.minecraft.data.PackOutput; diff --git a/src/main/java/com/aetherteam/aether/data/generators/tags/AetherItemTagData.java b/src/main/java/com/aetherteam/aether/data/generators/tags/AetherItemTagData.java index 28e5e38903..bac279496a 100644 --- a/src/main/java/com/aetherteam/aether/data/generators/tags/AetherItemTagData.java +++ b/src/main/java/com/aetherteam/aether/data/generators/tags/AetherItemTagData.java @@ -328,6 +328,7 @@ public void addTags(HolderLookup.Provider provider) { this.tag(ItemTags.WOODEN_DOORS).add(AetherBlocks.SKYROOT_DOOR.get().asItem()); this.tag(ItemTags.WOODEN_TRAPDOORS).add(AetherBlocks.SKYROOT_TRAPDOOR.get().asItem()); this.tag(ItemTags.WOODEN_BUTTONS).add(AetherBlocks.SKYROOT_BUTTON.get().asItem()); + this.tag(ItemTags.STONE_BUTTONS).add(AetherBlocks.HOLYSTONE_BUTTON.get().asItem()); this.tag(ItemTags.WOODEN_PRESSURE_PLATES).add(AetherBlocks.SKYROOT_PRESSURE_PLATE.get().asItem()); this.tag(ItemTags.SAPLINGS).add( AetherBlocks.SKYROOT_SAPLING.get().asItem(), @@ -383,6 +384,7 @@ public void addTags(HolderLookup.Provider provider) { AetherItems.BLUE_BERRY.get(), AetherItems.ENCHANTED_BERRY.get()); this.tag(ItemTags.SIGNS).add(AetherBlocks.SKYROOT_SIGN.get().asItem()); + this.tag(ItemTags.HANGING_SIGNS).add(AetherBlocks.SKYROOT_HANGING_SIGN.get().asItem()); this.tag(ItemTags.MUSIC_DISCS).add( AetherItems.MUSIC_DISC_AETHER_TUNE.get(), AetherItems.MUSIC_DISC_ASCENDING_DAWN.get(), @@ -434,5 +436,40 @@ public void addTags(HolderLookup.Provider provider) { AetherItems.ZANITE_HOE.get(), AetherItems.GRAVITITE_HOE.get(), AetherItems.VALKYRIE_HOE.get()); + this.tag(ItemTags.TRIMMABLE_ARMOR).add( + AetherItems.ZANITE_HELMET.get(), + AetherItems.ZANITE_CHESTPLATE.get(), + AetherItems.ZANITE_LEGGINGS.get(), + AetherItems.ZANITE_BOOTS.get(), + AetherItems.ZANITE_GLOVES.get(), + AetherItems.GRAVITITE_HELMET.get(), + AetherItems.GRAVITITE_CHESTPLATE.get(), + AetherItems.GRAVITITE_LEGGINGS.get(), + AetherItems.GRAVITITE_BOOTS.get(), + AetherItems.GRAVITITE_GLOVES.get(), + AetherItems.NEPTUNE_HELMET.get(), + AetherItems.NEPTUNE_CHESTPLATE.get(), + AetherItems.NEPTUNE_LEGGINGS.get(), + AetherItems.NEPTUNE_BOOTS.get(), + AetherItems.NEPTUNE_GLOVES.get(), + AetherItems.PHOENIX_HELMET.get(), + AetherItems.PHOENIX_CHESTPLATE.get(), + AetherItems.PHOENIX_LEGGINGS.get(), + AetherItems.PHOENIX_BOOTS.get(), + AetherItems.PHOENIX_GLOVES.get(), + AetherItems.OBSIDIAN_HELMET.get(), + AetherItems.OBSIDIAN_CHESTPLATE.get(), + AetherItems.OBSIDIAN_LEGGINGS.get(), + AetherItems.OBSIDIAN_BOOTS.get(), + AetherItems.OBSIDIAN_GLOVES.get(), + AetherItems.LEATHER_GLOVES.get(), + AetherItems.IRON_GLOVES.get(), + AetherItems.GOLDEN_GLOVES.get(), + AetherItems.DIAMOND_GLOVES.get(), + AetherItems.NETHERITE_GLOVES.get(), + AetherItems.CHAINMAIL_GLOVES.get()); + this.tag(ItemTags.TRIM_MATERIALS).add( + AetherItems.ZANITE_GEMSTONE.get(), + AetherBlocks.ENCHANTED_GRAVITITE.get().asItem()); } } diff --git a/src/main/java/com/aetherteam/aether/data/providers/AetherBlockStateProvider.java b/src/main/java/com/aetherteam/aether/data/providers/AetherBlockStateProvider.java index 9c2badc4c0..b955a798be 100644 --- a/src/main/java/com/aetherteam/aether/data/providers/AetherBlockStateProvider.java +++ b/src/main/java/com/aetherteam/aether/data/providers/AetherBlockStateProvider.java @@ -10,10 +10,7 @@ import net.minecraft.core.Direction; import net.minecraft.data.PackOutput; import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.level.block.BedBlock; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.RotatedPillarBlock; -import net.minecraft.world.level.block.SnowyDirtBlock; +import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.state.properties.BedPart; import net.minecraft.world.level.block.state.properties.BlockStateProperties; import net.minecraftforge.client.model.generators.BlockModelBuilder; @@ -114,6 +111,12 @@ public ModelFile utility(Block block) { this.extend(this.texture(this.name(block), "utility/"), "_top")); } + public void hangingSignBlock(CeilingHangingSignBlock signBlock, WallHangingSignBlock wallSignBlock, ResourceLocation texture) { + ModelFile sign = models().sign(name(signBlock), texture); + simpleBlock(signBlock, sign); + simpleBlock(wallSignBlock, sign); + } + public void berryBush(Block block, Block stem) { this.getVariantBuilder(block).partialState().addModels(new ConfiguredModel(this.bush(block, stem))); } @@ -192,7 +195,7 @@ public void dungeonBlock(Block block, Block baseBlock) { public void invisibleBlock(Block block, Block baseBlock) { ModelFile visible = this.models().cubeAll(this.name(baseBlock), this.texture(this.name(baseBlock), "dungeon/")); ModelFile invisible = this.models().getBuilder(this.name(block)); - getVariantBuilder(block).forAllStatesExcept(state -> { + this.getVariantBuilder(block).forAllStatesExcept(state -> { if (!state.getValue(DoorwayBlock.INVISIBLE)) { return ConfiguredModel.builder().modelFile(visible).build(); } else { diff --git a/src/main/java/com/aetherteam/aether/data/providers/AetherItemModelProvider.java b/src/main/java/com/aetherteam/aether/data/providers/AetherItemModelProvider.java index 5eac0d580f..968cc67688 100644 --- a/src/main/java/com/aetherteam/aether/data/providers/AetherItemModelProvider.java +++ b/src/main/java/com/aetherteam/aether/data/providers/AetherItemModelProvider.java @@ -4,10 +4,13 @@ import com.aetherteam.nitrogen.data.providers.NitrogenItemModelProvider; import net.minecraft.core.Direction; import net.minecraft.data.PackOutput; +import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemDisplayContext; +import net.minecraft.world.item.armortrim.TrimMaterial; import net.minecraft.world.level.block.Block; +import net.minecraftforge.client.model.generators.ItemModelBuilder; import net.minecraftforge.common.data.ExistingFileHelper; public abstract class AetherItemModelProvider extends NitrogenItemModelProvider { @@ -40,6 +43,37 @@ public void dartShooterItem(Item item, String location) { .end(); } + public void glovesItem(Item item, String location) { + ItemModelBuilder builder = this.withExistingParent(this.itemName(item), this.mcLoc("item/generated")).texture("layer0", this.modLoc("item/" + location + this.itemName(item))); + double index = 0.1; + for (ResourceKey trimMaterial : NitrogenItemModelProvider.VANILLA_TRIM_MATERIALS) { + String material = trimMaterial.location().getPath(); + String name = this.itemName(item) + "_" + material + "_trim"; + this.withExistingParent(name, this.mcLoc("item/generated")) + .texture("layer0", this.modLoc("item/" + location + this.itemName(item))) + .texture("layer1", this.modLoc("trims/items/gloves_trim_" + material)); + builder.override().predicate(new ResourceLocation("trim_type"), (float) index).model(this.getExistingFile(this.modLoc("item/" + name))).end(); + index += 0.1; + } + } + + public void dyedGlovesItem(Item item, String location) { + ItemModelBuilder builder = this.withExistingParent(this.itemName(item), this.mcLoc("item/generated")) + .texture("layer0", this.modLoc("item/" + location + this.itemName(item))) + .texture("layer1", this.modLoc("item/" + location + this.itemName(item) + "_overlay")); + double index = 0.1; + for (ResourceKey trimMaterial : NitrogenItemModelProvider.VANILLA_TRIM_MATERIALS) { + String material = trimMaterial.location().getPath(); + String name = this.itemName(item) + "_" + material + "_trim"; + this.withExistingParent(name, this.mcLoc("item/generated")) + .texture("layer0", this.modLoc("item/" + location + this.itemName(item))) + .texture("layer1", this.modLoc("item/" + location + this.itemName(item) + "_overlay")) + .texture("layer2", this.modLoc("trims/items/gloves_trim_" + material)); + builder.override().predicate(new ResourceLocation("trim_type"), (float) index).model(this.getExistingFile(this.modLoc("item/" + name))).end(); + index += 0.1; + } + } + public void rotatedItem(Item item, String location) { this.withExistingParent(this.itemName(item), this.mcLoc("item/generated")) .texture("layer0", this.modLoc("item/" + location + this.itemName(item))) diff --git a/src/main/java/com/aetherteam/aether/data/resources/AetherDamageTypes.java b/src/main/java/com/aetherteam/aether/data/resources/registries/AetherDamageTypes.java similarity index 79% rename from src/main/java/com/aetherteam/aether/data/resources/AetherDamageTypes.java rename to src/main/java/com/aetherteam/aether/data/resources/registries/AetherDamageTypes.java index 4a82591707..23827a2ecc 100644 --- a/src/main/java/com/aetherteam/aether/data/resources/AetherDamageTypes.java +++ b/src/main/java/com/aetherteam/aether/data/resources/registries/AetherDamageTypes.java @@ -1,4 +1,4 @@ -package com.aetherteam.aether.data.resources; +package com.aetherteam.aether.data.resources.registries; import com.aetherteam.aether.Aether; import net.minecraft.core.registries.Registries; @@ -17,15 +17,15 @@ * Custom damage types are used for death messages and different damage calculations through tags. */ public class AetherDamageTypes { - public static final ResourceKey ARMOR_PIERCING_ATTACK = getKey("armor_piercing_attack"); - public static final ResourceKey CLOUD_CRYSTAL = getKey("cloud_crystal"); - public static final ResourceKey CRUSH = getKey("crush"); - public static final ResourceKey FIRE_CRYSTAL = getKey("fire_crystal"); - public static final ResourceKey FLOATING_BLOCK = getKey("floating_block"); - public static final ResourceKey ICE_CRYSTAL = getKey("ice_crystal"); - public static final ResourceKey INCINERATION = getKey("incineration"); - public static final ResourceKey INEBRIATION = getKey("inebriation"); - public static final ResourceKey THUNDER_CRYSTAL = getKey("thunder_crystal"); + public static final ResourceKey ARMOR_PIERCING_ATTACK = createKey("armor_piercing_attack"); + public static final ResourceKey CLOUD_CRYSTAL = createKey("cloud_crystal"); + public static final ResourceKey CRUSH = createKey("crush"); + public static final ResourceKey FIRE_CRYSTAL = createKey("fire_crystal"); + public static final ResourceKey FLOATING_BLOCK = createKey("floating_block"); + public static final ResourceKey ICE_CRYSTAL = createKey("ice_crystal"); + public static final ResourceKey INCINERATION = createKey("incineration"); + public static final ResourceKey INEBRIATION = createKey("inebriation"); + public static final ResourceKey THUNDER_CRYSTAL = createKey("thunder_crystal"); public static void bootstrap(BootstapContext context) { context.register(ARMOR_PIERCING_ATTACK, new DamageType("mob", 0.1F)); @@ -39,7 +39,7 @@ public static void bootstrap(BootstapContext context) { context.register(THUNDER_CRYSTAL, new DamageType("aether.thunder_crystal", 0.1F)); } - private static ResourceKey getKey(String name) { + private static ResourceKey createKey(String name) { return ResourceKey.create(Registries.DAMAGE_TYPE, new ResourceLocation(Aether.MODID, name)); } diff --git a/src/main/java/com/aetherteam/aether/data/resources/registries/AetherTrimMaterials.java b/src/main/java/com/aetherteam/aether/data/resources/registries/AetherTrimMaterials.java new file mode 100644 index 0000000000..176beadd69 --- /dev/null +++ b/src/main/java/com/aetherteam/aether/data/resources/registries/AetherTrimMaterials.java @@ -0,0 +1,40 @@ +package com.aetherteam.aether.data.resources.registries; + +import com.aetherteam.aether.Aether; +import com.aetherteam.aether.block.AetherBlocks; +import com.aetherteam.aether.item.AetherItems; +import net.minecraft.Util; +import net.minecraft.core.registries.Registries; +import net.minecraft.data.worldgen.BootstapContext; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.Style; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.ArmorMaterials; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.armortrim.TrimMaterial; + +import java.util.Map; + +public class AetherTrimMaterials { + public static final ResourceKey ZANITE = createKey("zanite"); + public static final ResourceKey GRAVITITE = createKey("gravitite"); + + private static ResourceKey createKey(String name) { + return ResourceKey.create(Registries.TRIM_MATERIAL, new ResourceLocation(Aether.MODID, name)); + } + + public static void bootstrap(BootstapContext context) { + register(context, ZANITE, AetherItems.ZANITE_GEMSTONE.get(), Style.EMPTY.withColor(8009440), 1.0F); + register(context, GRAVITITE, AetherBlocks.ENCHANTED_GRAVITITE.get().asItem(), Style.EMPTY.withColor(13391043), 1.0F); + } + + private static void register(BootstapContext context, ResourceKey materialKey, Item ingredient, Style style, float itemModelIndex) { + register(context, materialKey, ingredient, style, itemModelIndex, Map.of()); + } + + private static void register(BootstapContext context, ResourceKey materialKey, Item ingredient, Style style, float itemModelIndex, Map overrideArmorMaterials) { + TrimMaterial trimMaterial = TrimMaterial.create(materialKey.location().getPath(), ingredient, itemModelIndex, Component.translatable(Util.makeDescriptionId("trim_material", materialKey.location())).withStyle(style), overrideArmorMaterials); + context.register(materialKey, trimMaterial); + } +} diff --git a/src/main/java/com/aetherteam/aether/effect/InebriationEffect.java b/src/main/java/com/aetherteam/aether/effect/InebriationEffect.java index a50c9f6f0e..5cde0bb14b 100644 --- a/src/main/java/com/aetherteam/aether/effect/InebriationEffect.java +++ b/src/main/java/com/aetherteam/aether/effect/InebriationEffect.java @@ -1,6 +1,6 @@ package com.aetherteam.aether.effect; -import com.aetherteam.aether.data.resources.AetherDamageTypes; +import com.aetherteam.aether.data.resources.registries.AetherDamageTypes; import net.minecraft.core.particles.ItemParticleOption; import net.minecraft.core.particles.ParticleTypes; import net.minecraft.server.level.ServerLevel; @@ -25,7 +25,7 @@ public InebriationEffect() { @Override public void applyEffectTick(LivingEntity livingEntity, int amplifier) { if (this.effectDuration % 50 == 0) { - livingEntity.hurt(AetherDamageTypes.damageSource(livingEntity.level, AetherDamageTypes.INEBRIATION), 1.0F); + livingEntity.hurt(AetherDamageTypes.damageSource(livingEntity.level(), AetherDamageTypes.INEBRIATION), 1.0F); } this.distractEntity(livingEntity); } @@ -36,7 +36,7 @@ public void applyEffectTick(LivingEntity livingEntity, int amplifier) { * @param livingEntity The affected {@link LivingEntity}. */ private void distractEntity(LivingEntity livingEntity) { - double gaussian = livingEntity.getLevel().getRandom().nextGaussian(); + double gaussian = livingEntity.level().getRandom().nextGaussian(); double newMotionDirection = 0.1 * gaussian; double newRotationDirection = (Math.PI / 4.0) * gaussian; @@ -47,7 +47,7 @@ private void distractEntity(LivingEntity livingEntity) { livingEntity.setYRot((float) (livingEntity.getYRot() + this.rotationDirection)); livingEntity.setXRot((float) (livingEntity.getXRot() + this.rotationDirection)); - if (livingEntity.getLevel() instanceof ServerLevel serverLevel) { + if (livingEntity.level() instanceof ServerLevel serverLevel) { serverLevel.sendParticles(new ItemParticleOption(ParticleTypes.ITEM, Items.RED_DYE.getDefaultInstance()), livingEntity.getX(), livingEntity.getY() + livingEntity.getBbHeight() * 0.8, livingEntity.getZ(), 1, 0.0, 0.0, 0.0, 0.0); diff --git a/src/main/java/com/aetherteam/aether/effect/RemedyEffect.java b/src/main/java/com/aetherteam/aether/effect/RemedyEffect.java index f1a852c62d..359bb444b5 100644 --- a/src/main/java/com/aetherteam/aether/effect/RemedyEffect.java +++ b/src/main/java/com/aetherteam/aether/effect/RemedyEffect.java @@ -22,7 +22,7 @@ public RemedyEffect() { @Override public void applyEffectTick(LivingEntity livingEntity, int amplifier) { if (livingEntity instanceof Player player) { - if (player.getLevel().isClientSide()) { + if (player.level().isClientSide()) { AetherPlayer.get(player).ifPresent((aetherPlayer) -> { if (aetherPlayer.getRemedyStartDuration() <= 0) { aetherPlayer.setSynched(INBTSynchable.Direction.SERVER, "setRemedyStartDuration", this.effectDuration); diff --git a/src/main/java/com/aetherteam/aether/entity/AetherBossMob.java b/src/main/java/com/aetherteam/aether/entity/AetherBossMob.java index 80877c0e26..dbe149b34d 100644 --- a/src/main/java/com/aetherteam/aether/entity/AetherBossMob.java +++ b/src/main/java/com/aetherteam/aether/entity/AetherBossMob.java @@ -55,13 +55,13 @@ default void openRoom() { * @param check An additional check using a {@link BlockState} {@link Predicate}. */ default void evaporate(T entity, BlockPos min, BlockPos max, Predicate check) { - if (ForgeEventFactory.getMobGriefingEvent(entity.getLevel(), entity)) { + if (ForgeEventFactory.getMobGriefingEvent(entity.level(), entity)) { for (BlockPos pos : BlockPos.betweenClosed(min, max)) { - if (entity.getLevel().getBlockState(pos).getBlock() instanceof LiquidBlock && check.test(entity.getLevel().getBlockState(pos))) { - entity.getLevel().setBlockAndUpdate(pos, Blocks.AIR.defaultBlockState()); + if (entity.level().getBlockState(pos).getBlock() instanceof LiquidBlock && check.test(entity.level().getBlockState(pos))) { + entity.level().setBlockAndUpdate(pos, Blocks.AIR.defaultBlockState()); this.evaporateEffects(entity, pos); - } else if (!entity.getLevel().getFluidState(pos).isEmpty() && entity.getLevel().getBlockState(pos).hasProperty(BlockStateProperties.WATERLOGGED) && check.test(entity.getLevel().getFluidState(pos).createLegacyBlock())) { - entity.getLevel().setBlockAndUpdate(pos, entity.getLevel().getBlockState(pos).setValue(BlockStateProperties.WATERLOGGED, false)); + } else if (!entity.level().getFluidState(pos).isEmpty() && entity.level().getBlockState(pos).hasProperty(BlockStateProperties.WATERLOGGED) && check.test(entity.level().getFluidState(pos).createLegacyBlock())) { + entity.level().setBlockAndUpdate(pos, entity.level().getBlockState(pos).setValue(BlockStateProperties.WATERLOGGED, false)); this.evaporateEffects(entity, pos); } } @@ -74,8 +74,8 @@ default void evaporate(T entity, BlockPos min, BlockPos max, Predicate lightningTracker.setOwner(projectile.getOwner())); lightningBolt.setPos(projectile.getX(), projectile.getY(), projectile.getZ()); - projectile.getLevel().addFreshEntity(lightningBolt); + projectile.level().addFreshEntity(lightningBolt); } } } diff --git a/src/main/java/com/aetherteam/aether/entity/MountableMob.java b/src/main/java/com/aetherteam/aether/entity/MountableMob.java index 3d68c3e490..730e802932 100644 --- a/src/main/java/com/aetherteam/aether/entity/MountableMob.java +++ b/src/main/java/com/aetherteam/aether/entity/MountableMob.java @@ -55,7 +55,7 @@ default void tick(T vehicle) { vehicle.setMountJumping(true); vehicle.setPlayerJumped(false); } - if (vehicle.isOnGround()) { + if (vehicle.onGround()) { vehicle.setPlayerJumped(false); vehicle.setMountJumping(false); } @@ -109,7 +109,7 @@ default void travel(T vehicle, Vec3 motion) { if (!stepHeight.hasModifier(vehicle.getMountStepHeightModifier())) { stepHeight.addTransientModifier(vehicle.getMountStepHeightModifier()); } - if (vehicle.getLevel().isClientSide()) { + if (vehicle.level().isClientSide()) { PacketRelay.sendToServer(AetherPacketHandler.INSTANCE, new StepHeightPacket(vehicle.getId())); } } diff --git a/src/main/java/com/aetherteam/aether/entity/NotGrounded.java b/src/main/java/com/aetherteam/aether/entity/NotGrounded.java index 3cf0c5c93c..cb45dd4df2 100644 --- a/src/main/java/com/aetherteam/aether/entity/NotGrounded.java +++ b/src/main/java/com/aetherteam/aether/entity/NotGrounded.java @@ -4,7 +4,7 @@ /** * Interface for more controlled handling of checking whether an entity is on the ground. - * This gets around issues with {@link Entity#isOnGround()} sometimes not being true when it should be on the client, causing animation bugs. + * This gets around issues with {@link Entity#onGround()} sometimes not being true when it should be on the client, causing animation bugs. */ public interface NotGrounded { boolean isEntityOnGround(); diff --git a/src/main/java/com/aetherteam/aether/entity/ai/controller/FallingMoveControl.java b/src/main/java/com/aetherteam/aether/entity/ai/controller/FallingMoveControl.java index 73dfd68813..16b5f590ab 100644 --- a/src/main/java/com/aetherteam/aether/entity/ai/controller/FallingMoveControl.java +++ b/src/main/java/com/aetherteam/aether/entity/ai/controller/FallingMoveControl.java @@ -16,7 +16,7 @@ public FallingMoveControl(Mob mob) { public void tick() { if (this.operation == MoveControl.Operation.JUMPING) { this.mob.setSpeed((float) (this.speedModifier * this.mob.getAttributeValue(Attributes.MOVEMENT_SPEED))); - if (this.mob.isOnGround()) { + if (this.mob.onGround()) { this.operation = MoveControl.Operation.WAIT; } else { this.operation = MoveControl.Operation.MOVE_TO; diff --git a/src/main/java/com/aetherteam/aether/entity/ai/goal/BeeGrowBerryBushGoal.java b/src/main/java/com/aetherteam/aether/entity/ai/goal/BeeGrowBerryBushGoal.java index 89921bb5e2..d3bfaad38c 100644 --- a/src/main/java/com/aetherteam/aether/entity/ai/goal/BeeGrowBerryBushGoal.java +++ b/src/main/java/com/aetherteam/aether/entity/ai/goal/BeeGrowBerryBushGoal.java @@ -50,15 +50,15 @@ public void tick() { if (this.bee.getRandom().nextInt(this.adjustedTickDelay(30)) == 0) { for (int i = 1; i <= 2; ++i) { BlockPos blockPos = this.bee.blockPosition().below(i); - BlockState blockState = this.bee.getLevel().getBlockState(blockPos); + BlockState blockState = this.bee.level().getBlockState(blockPos); boolean isStem = false; if (blockState.is(BlockTags.BEE_GROWABLES)) { if (blockState.is(AetherBlocks.BERRY_BUSH_STEM.get())) { isStem = true; } if (isStem) { - this.bee.getLevel().levelEvent(2005, blockPos, 0); - this.bee.getLevel().setBlockAndUpdate(blockPos, AetherBlocks.BERRY_BUSH.get().defaultBlockState()); + this.bee.level().levelEvent(2005, blockPos, 0); + this.bee.level().setBlockAndUpdate(blockPos, AetherBlocks.BERRY_BUSH.get().defaultBlockState()); beeAccessor.callIncrementNumCropsGrownSincePollination(); } } diff --git a/src/main/java/com/aetherteam/aether/entity/ai/goal/EatAetherGrassGoal.java b/src/main/java/com/aetherteam/aether/entity/ai/goal/EatAetherGrassGoal.java index 8dde58e454..69b51954b6 100644 --- a/src/main/java/com/aetherteam/aether/entity/ai/goal/EatAetherGrassGoal.java +++ b/src/main/java/com/aetherteam/aether/entity/ai/goal/EatAetherGrassGoal.java @@ -33,10 +33,10 @@ public boolean canUse() { return false; } else { BlockPos blockpos = this.mob.blockPosition(); - if (IS_TALL_GRASS.test(this.mob.getLevel().getBlockState(blockpos))) { + if (IS_TALL_GRASS.test(this.mob.level().getBlockState(blockpos))) { return true; } else { - return this.mob.getLevel().getBlockState(blockpos.below()).is(AetherBlocks.AETHER_GRASS_BLOCK.get()); + return this.mob.level().getBlockState(blockpos.below()).is(AetherBlocks.AETHER_GRASS_BLOCK.get()); } } } @@ -44,7 +44,7 @@ public boolean canUse() { @Override public void start() { this.eatAnimationTick = this.adjustedTickDelay(40); - this.mob.getLevel().broadcastEntityEvent(this.mob, (byte) 10); + this.mob.level().broadcastEntityEvent(this.mob, (byte) 10); this.mob.getNavigation().stop(); } @@ -67,17 +67,17 @@ public void tick() { this.eatAnimationTick = Math.max(0, this.eatAnimationTick - 1); if (this.eatAnimationTick == this.adjustedTickDelay(4)) { BlockPos blockPos = this.mob.blockPosition(); - if (IS_TALL_GRASS.test(this.mob.getLevel().getBlockState(blockPos))) { - if (net.minecraftforge.event.ForgeEventFactory.getMobGriefingEvent(this.mob.getLevel(), this.mob)) { - this.mob.getLevel().destroyBlock(blockPos, false); + if (IS_TALL_GRASS.test(this.mob.level().getBlockState(blockPos))) { + if (net.minecraftforge.event.ForgeEventFactory.getMobGriefingEvent(this.mob.level(), this.mob)) { + this.mob.level().destroyBlock(blockPos, false); } this.mob.ate(); } else { BlockPos blockPos1 = blockPos.below(); - if (this.mob.getLevel().getBlockState(blockPos1).is(AetherBlocks.AETHER_GRASS_BLOCK.get())) { - if (net.minecraftforge.event.ForgeEventFactory.getMobGriefingEvent(this.mob.getLevel(), this.mob)) { - this.mob.getLevel().levelEvent(2001, blockPos1, Block.getId(AetherBlocks.AETHER_GRASS_BLOCK.get().defaultBlockState())); - this.mob.getLevel().setBlock(blockPos1, AetherBlocks.AETHER_DIRT.get().defaultBlockState().setValue(AetherBlockStateProperties.DOUBLE_DROPS, this.mob.getLevel().getBlockState(blockPos1).getValue(AetherBlockStateProperties.DOUBLE_DROPS)), 2); + if (this.mob.level().getBlockState(blockPos1).is(AetherBlocks.AETHER_GRASS_BLOCK.get())) { + if (net.minecraftforge.event.ForgeEventFactory.getMobGriefingEvent(this.mob.level(), this.mob)) { + this.mob.level().levelEvent(2001, blockPos1, Block.getId(AetherBlocks.AETHER_GRASS_BLOCK.get().defaultBlockState())); + this.mob.level().setBlock(blockPos1, AetherBlocks.AETHER_DIRT.get().defaultBlockState().setValue(AetherBlockStateProperties.DOUBLE_DROPS, this.mob.level().getBlockState(blockPos1).getValue(AetherBlockStateProperties.DOUBLE_DROPS)), 2); } this.mob.ate(); } diff --git a/src/main/java/com/aetherteam/aether/entity/ai/goal/FallingRandomStrollGoal.java b/src/main/java/com/aetherteam/aether/entity/ai/goal/FallingRandomStrollGoal.java index b7cbeda9a7..90d0de19e4 100644 --- a/src/main/java/com/aetherteam/aether/entity/ai/goal/FallingRandomStrollGoal.java +++ b/src/main/java/com/aetherteam/aether/entity/ai/goal/FallingRandomStrollGoal.java @@ -32,7 +32,7 @@ protected Vec3 getPosition() { if (this.mob.isInWaterOrBubble()) { Vec3 vec3 = LandRandomPos.getPos(this.mob, 15, this.mob.getMaxFallDistance()); return vec3 == null ? super.getPosition() : vec3; - } else if (!this.mob.isOnGround()) { + } else if (!this.mob.onGround()) { Vec3 vec3 = LandRandomPos.getPos(this.mob, 12, this.mob.getMaxFallDistance()); return vec3 != null ? vec3 : super.getPosition(); } else { diff --git a/src/main/java/com/aetherteam/aether/entity/ai/goal/FoxEatBerryBushGoal.java b/src/main/java/com/aetherteam/aether/entity/ai/goal/FoxEatBerryBushGoal.java index 5434814030..edab47a50d 100644 --- a/src/main/java/com/aetherteam/aether/entity/ai/goal/FoxEatBerryBushGoal.java +++ b/src/main/java/com/aetherteam/aether/entity/ai/goal/FoxEatBerryBushGoal.java @@ -59,8 +59,8 @@ public void tick() { } protected void onReachedTarget() { - if (ForgeEventFactory.getMobGriefingEvent(this.fox.getLevel(), this.fox)) { - BlockState blockState = this.mob.getLevel().getBlockState(this.blockPos); + if (ForgeEventFactory.getMobGriefingEvent(this.fox.level(), this.fox)) { + BlockState blockState = this.mob.level().getBlockState(this.blockPos); if (blockState.is(AetherBlocks.BERRY_BUSH.get())) { this.pickBlueBerries(); } @@ -68,18 +68,18 @@ protected void onReachedTarget() { } private void pickBlueBerries() { - boolean onEnchantedGrass = this.mob.getLevel().getBlockState(this.blockPos.below()).is(AetherBlocks.ENCHANTED_AETHER_GRASS_BLOCK.get()); - int j = 1 + this.mob.getLevel().getRandom().nextInt(3) + (onEnchantedGrass ? 1 : 0); + boolean onEnchantedGrass = this.mob.level().getBlockState(this.blockPos.below()).is(AetherBlocks.ENCHANTED_AETHER_GRASS_BLOCK.get()); + int j = 1 + this.mob.level().getRandom().nextInt(3) + (onEnchantedGrass ? 1 : 0); ItemStack itemStack = this.mob.getItemBySlot(EquipmentSlot.MAINHAND); if (itemStack.isEmpty()) { this.mob.setItemSlot(EquipmentSlot.MAINHAND, new ItemStack(AetherItems.BLUE_BERRY.get())); --j; } if (j > 0) { - Block.popResource(this.mob.getLevel(), this.blockPos, new ItemStack(AetherItems.BLUE_BERRY.get(), j)); + Block.popResource(this.mob.level(), this.blockPos, new ItemStack(AetherItems.BLUE_BERRY.get(), j)); } this.mob.playSound(SoundEvents.SWEET_BERRY_BUSH_PICK_BERRIES, 1.0F, 1.0F); - this.mob.getLevel().setBlock(this.blockPos, AetherBlocks.BERRY_BUSH_STEM.get().defaultBlockState(), 2); + this.mob.level().setBlock(this.blockPos, AetherBlocks.BERRY_BUSH_STEM.get().defaultBlockState(), 2); } @Override diff --git a/src/main/java/com/aetherteam/aether/entity/ai/goal/MoaFollowGoal.java b/src/main/java/com/aetherteam/aether/entity/ai/goal/MoaFollowGoal.java index 323738b4d6..99d2334c80 100644 --- a/src/main/java/com/aetherteam/aether/entity/ai/goal/MoaFollowGoal.java +++ b/src/main/java/com/aetherteam/aether/entity/ai/goal/MoaFollowGoal.java @@ -35,7 +35,7 @@ public boolean canUse() { --this.calmDown; return false; } else { - this.player = this.moa.level.getNearestPlayer(this.targetingConditions, this.moa); + this.player = this.moa.level().getNearestPlayer(this.targetingConditions, this.moa); return this.player != null; } } diff --git a/src/main/java/com/aetherteam/aether/entity/block/FloatingBlockEntity.java b/src/main/java/com/aetherteam/aether/entity/block/FloatingBlockEntity.java index 942aef0980..6bd19b711e 100644 --- a/src/main/java/com/aetherteam/aether/entity/block/FloatingBlockEntity.java +++ b/src/main/java/com/aetherteam/aether/entity/block/FloatingBlockEntity.java @@ -3,7 +3,7 @@ import com.aetherteam.aether.Aether; import com.aetherteam.aether.block.Floatable; import com.aetherteam.aether.block.miscellaneous.FloatingBlock; -import com.aetherteam.aether.data.resources.AetherDamageTypes; +import com.aetherteam.aether.data.resources.registries.AetherDamageTypes; import com.aetherteam.aether.entity.AetherEntityTypes; import com.aetherteam.aether.mixin.mixins.common.accessor.ConcretePowderBlockAccessor; import net.minecraft.CrashReportCategory; @@ -102,8 +102,8 @@ public void tick() { Block block = this.getBlockState().getBlock(); if (this.time++ == 0) { BlockPos blockPos = this.blockPosition(); - if (this.getLevel().getBlockState(blockPos).is(block)) { - this.getLevel().removeBlock(blockPos, false); + if (this.level().getBlockState(blockPos).is(block)) { + this.level().removeBlock(blockPos, false); } } @@ -111,67 +111,67 @@ public void tick() { this.floatDistance = this.blockPosition().getY() - this.getStartPos().getY(); this.setDeltaMovement(this.getDeltaMovement().add(0.0, 0.04, 0.0)); // Move upwards. this.causeFallDamage(); - if (this.getLevel().isClientSide()) { + if (this.level().isClientSide()) { this.spawnFloatingBlockParticles(); } } this.move(MoverType.SELF, this.getDeltaMovement()); - if (!this.getLevel().isClientSide() && this.getLevel() instanceof ServerLevel serverLevel) { + if (!this.level().isClientSide() && this.level() instanceof ServerLevel serverLevel) { BlockPos blockPos1 = this.blockPosition(); boolean isConcrete = this.getBlockState().getBlock() instanceof ConcretePowderBlock; - boolean canConvert = isConcrete && this.getLevel().getFluidState(blockPos1).is(FluidTags.WATER); + boolean canConvert = isConcrete && this.level().getFluidState(blockPos1).is(FluidTags.WATER); double d0 = this.getDeltaMovement().lengthSqr(); if (isConcrete && d0 > 1.0) { - BlockHitResult blockHitResult = this.getLevel().clip(new ClipContext(new Vec3(this.xo, this.yo, this.zo), this.position(), ClipContext.Block.COLLIDER, ClipContext.Fluid.SOURCE_ONLY, this)); - if (blockHitResult.getType() != HitResult.Type.MISS && this.getLevel().getFluidState(blockHitResult.getBlockPos()).is(FluidTags.WATER)) { + BlockHitResult blockHitResult = this.level().clip(new ClipContext(new Vec3(this.xo, this.yo, this.zo), this.position(), ClipContext.Block.COLLIDER, ClipContext.Fluid.SOURCE_ONLY, this)); + if (blockHitResult.getType() != HitResult.Type.MISS && this.level().getFluidState(blockHitResult.getBlockPos()).is(FluidTags.WATER)) { blockPos1 = blockHitResult.getBlockPos(); canConvert = true; } } - if ((!this.verticalCollision || this.isOnGround()) && !canConvert) { - if (!this.getLevel().isClientSide() && (this.time > 100 && (blockPos1.getY() <= this.getLevel().getMinBuildHeight() || blockPos1.getY() > this.getLevel().getMaxBuildHeight()) || this.time > 600)) { // Checks max y-level. - if ((!this.natural || !this.getBlockState().requiresCorrectToolForDrops()) && this.dropItem && this.getLevel().getGameRules().getBoolean(GameRules.RULE_DOENTITYDROPS)) { + if ((!this.verticalCollision || this.onGround()) && !canConvert) { + if (!this.level().isClientSide() && (this.time > 100 && (blockPos1.getY() <= this.level().getMinBuildHeight() || blockPos1.getY() > this.level().getMaxBuildHeight()) || this.time > 600)) { // Checks max y-level. + if ((!this.natural || !this.getBlockState().requiresCorrectToolForDrops()) && this.dropItem && this.level().getGameRules().getBoolean(GameRules.RULE_DOENTITYDROPS)) { this.dropBlock(this.getBlockState()); } this.discard(); } } else { - BlockState blockState = this.getLevel().getBlockState(blockPos1); + BlockState blockState = this.level().getBlockState(blockPos1); this.setDeltaMovement(this.getDeltaMovement().multiply(0.7, -0.5, 0.7)); if (!blockState.is(Blocks.MOVING_PISTON)) { if (!this.cancelDrop) { - boolean canBeReplaced = blockState.canBeReplaced(new DirectionalPlaceContext(this.getLevel(), blockPos1, Direction.UP, ItemStack.EMPTY, Direction.DOWN)); - boolean isAboveFree = FloatingBlock.isFree(this.getLevel().getBlockState(blockPos1.above())) && (!isConcrete || !canConvert); // Check above position. - boolean canBlockSurvive = this.getBlockState().canSurvive(this.getLevel(), blockPos1) && !isAboveFree; + boolean canBeReplaced = blockState.canBeReplaced(new DirectionalPlaceContext(this.level(), blockPos1, Direction.UP, ItemStack.EMPTY, Direction.DOWN)); + boolean isAboveFree = FloatingBlock.isFree(this.level().getBlockState(blockPos1.above())) && (!isConcrete || !canConvert); // Check above position. + boolean canBlockSurvive = this.getBlockState().canSurvive(this.level(), blockPos1) && !isAboveFree; if ((canBeReplaced && canBlockSurvive) || (this.natural && blockState.getBlock().defaultDestroyTime() >= 0)) { - if (this.getBlockState().hasProperty(BlockStateProperties.WATERLOGGED) && this.getLevel().getFluidState(blockPos1).is(Fluids.WATER)) { + if (this.getBlockState().hasProperty(BlockStateProperties.WATERLOGGED) && this.level().getFluidState(blockPos1).is(Fluids.WATER)) { this.blockState = this.getBlockState().setValue(BlockStateProperties.WATERLOGGED, true); } - BlockState previousBlockState = this.getLevel().getBlockState(blockPos1); - if (this.getLevel().setBlock(blockPos1, this.getBlockState(), 1 | 2)) { + BlockState previousBlockState = this.level().getBlockState(blockPos1); + if (this.level().setBlock(blockPos1, this.getBlockState(), 1 | 2)) { if (this.natural && !previousBlockState.isAir()) { this.dropBlock(previousBlockState); } - serverLevel.getChunkSource().chunkMap.broadcast(this, new ClientboundBlockUpdatePacket(blockPos1, this.getLevel().getBlockState(blockPos1))); + serverLevel.getChunkSource().chunkMap.broadcast(this, new ClientboundBlockUpdatePacket(blockPos1, this.level().getBlockState(blockPos1))); this.discard(); if (block instanceof Floatable floatable) { - floatable.onCollide(this.getLevel(), blockPos1, this.getBlockState(), blockState, this); + floatable.onCollide(this.level(), blockPos1, this.getBlockState(), blockState, this); } else if (block instanceof ConcretePowderBlock concretePowderBlock) { - if (ConcretePowderBlockAccessor.callShouldSolidify(this.getLevel(), blockPos1, blockState)) { + if (ConcretePowderBlockAccessor.callShouldSolidify(this.level(), blockPos1, blockState)) { ConcretePowderBlockAccessor concretePowderBlockAccessor = (ConcretePowderBlockAccessor) concretePowderBlock; - this.getLevel().setBlock(blockPos1, concretePowderBlockAccessor.aether$getConcrete(), 1 | 2); + this.level().setBlock(blockPos1, concretePowderBlockAccessor.aether$getConcrete(), 1 | 2); } } else if (block instanceof AnvilBlock) { if (!this.isSilent()) { - this.getLevel().levelEvent(1029, blockPos1, 0); + this.level().levelEvent(1029, blockPos1, 0); } } if (this.blockData != null && this.getBlockState().hasBlockEntity()) { - BlockEntity blockEntity = this.getLevel().getBlockEntity(blockPos1); + BlockEntity blockEntity = this.level().getBlockEntity(blockPos1); if (blockEntity != null) { CompoundTag tag = blockEntity.saveWithoutMetadata(); for (String string : this.blockData.getAllKeys()) { @@ -189,14 +189,14 @@ public void tick() { blockEntity.setChanged(); } } - } else if ((!this.natural || !this.getBlockState().requiresCorrectToolForDrops()) && this.dropItem && this.getLevel().getGameRules().getBoolean(GameRules.RULE_DOENTITYDROPS)) { + } else if ((!this.natural || !this.getBlockState().requiresCorrectToolForDrops()) && this.dropItem && this.level().getGameRules().getBoolean(GameRules.RULE_DOENTITYDROPS)) { this.discard(); this.callOnBrokenAfterFall(block, blockPos1); this.dropBlock(this.getBlockState()); } } else { this.discard(); - if ((!this.natural || !this.getBlockState().requiresCorrectToolForDrops() || blockState.getBlock().defaultDestroyTime() < 0) && this.dropItem && this.getLevel().getGameRules().getBoolean(GameRules.RULE_DOENTITYDROPS)) { + if ((!this.natural || !this.getBlockState().requiresCorrectToolForDrops() || blockState.getBlock().defaultDestroyTime() < 0) && this.dropItem && this.level().getGameRules().getBoolean(GameRules.RULE_DOENTITYDROPS)) { this.callOnBrokenAfterFall(block, blockPos1); this.dropBlock(this.getBlockState()); } @@ -219,7 +219,7 @@ public void setHurtsEntities(float fallDamagePerDistance, int fallDamageMax) { } private void dropBlock(BlockState state) { - if (this.getLevel() instanceof ServerLevel serverLevel) { + if (this.level() instanceof ServerLevel serverLevel) { for (ItemStack stack : Block.getDrops(state, serverLevel, this.blockPosition(), null)) { this.spawnAtLocation(stack); } @@ -228,7 +228,7 @@ private void dropBlock(BlockState state) { public void callOnBrokenAfterFall(Block block, BlockPos pos) { if (block instanceof Floatable floatable) { - floatable.onBrokenAfterCollide(this.getLevel(), pos, this); + floatable.onBrokenAfterCollide(this.level(), pos, this); } } @@ -241,11 +241,11 @@ private void causeFallDamage() { damageSource = floatable.getFallDamageSource(this); } else { predicate = EntitySelector.NO_SPECTATORS; - damageSource = AetherDamageTypes.entityDamageSource(this.getLevel(), AetherDamageTypes.FLOATING_BLOCK, this); + damageSource = AetherDamageTypes.entityDamageSource(this.level(), AetherDamageTypes.FLOATING_BLOCK, this); } float f = (float) Math.min(Mth.floor((float) this.floatDistance * this.fallDamagePerDistance), this.fallDamageMax); - this.getLevel().getEntities(this, this.getBoundingBox(), predicate).forEach((p_149649_) -> p_149649_.hurt(damageSource, f)); + this.level().getEntities(this, this.getBoundingBox(), predicate).forEach((p_149649_) -> p_149649_.hurt(damageSource, f)); boolean flag = this.getBlockState().is(BlockTags.ANVIL); if (flag && f > 0.0F && this.random.nextFloat() < 0.05F + (float) this.floatDistance * 0.05F) { BlockState blockstate = AnvilBlock.damage(this.getBlockState()); @@ -263,7 +263,7 @@ private void spawnFloatingBlockParticles() { double d0 = (this.getX() - 0.5) + this.random.nextDouble(); double d1 = this.getY() - 0.05; double d2 = (this.getZ() - 0.5) + this.random.nextDouble(); - this.getLevel().addParticle(new BlockParticleOption(ParticleTypes.FALLING_DUST, this.getBlockState()), d0, d1, d2, 0.0, 0.0, 0.0); + this.level().addParticle(new BlockParticleOption(ParticleTypes.FALLING_DUST, this.getBlockState()), d0, d1, d2, 0.0, 0.0, 0.0); } } @@ -332,7 +332,7 @@ protected void addAdditionalSaveData(CompoundTag tag) { @Override protected void readAdditionalSaveData(CompoundTag tag) { if (tag.contains("BlockState")) { - this.blockState = NbtUtils.readBlockState(this.level.holderLookup(Registries.BLOCK), tag.getCompound("BlockState")); + this.blockState = NbtUtils.readBlockState(this.level().holderLookup(Registries.BLOCK), tag.getCompound("BlockState")); } if (tag.contains("Time")) { this.time = tag.getInt("Time"); diff --git a/src/main/java/com/aetherteam/aether/entity/block/TntPresent.java b/src/main/java/com/aetherteam/aether/entity/block/TntPresent.java index 95c0235eb7..eb2b113f01 100644 --- a/src/main/java/com/aetherteam/aether/entity/block/TntPresent.java +++ b/src/main/java/com/aetherteam/aether/entity/block/TntPresent.java @@ -53,7 +53,7 @@ public void tick() { this.move(MoverType.SELF, this.getDeltaMovement()); this.setDeltaMovement(this.getDeltaMovement().scale(0.98)); - if (this.isOnGround()) { + if (this.onGround()) { this.setDeltaMovement(this.getDeltaMovement().multiply(0.7, -0.5, 0.7)); } @@ -61,13 +61,13 @@ public void tick() { this.setFuse(i); if (i <= 0) { this.discard(); - if (!this.getLevel().isClientSide()) { - this.getLevel().explode(this, null, null, this.getX(), this.getY(0.0625), this.getZ(), 1.0F, false, Level.ExplosionInteraction.TNT); + if (!this.level().isClientSide()) { + this.level().explode(this, null, null, this.getX(), this.getY(0.0625), this.getZ(), 1.0F, false, Level.ExplosionInteraction.TNT); } } else { this.updateInWaterStateAndDoFluidPushing(); - if (this.getLevel().isClientSide()) { - this.getLevel().addParticle(ParticleTypes.SMOKE, this.getX(), this.getY() + 0.5, this.getZ(), 0.0, 0.0, 0.0); + if (this.level().isClientSide()) { + this.level().addParticle(ParticleTypes.SMOKE, this.getX(), this.getY() + 0.5, this.getZ(), 0.0, 0.0, 0.0); } } } diff --git a/src/main/java/com/aetherteam/aether/entity/miscellaneous/CloudMinion.java b/src/main/java/com/aetherteam/aether/entity/miscellaneous/CloudMinion.java index 138c95c919..d15def56d5 100644 --- a/src/main/java/com/aetherteam/aether/entity/miscellaneous/CloudMinion.java +++ b/src/main/java/com/aetherteam/aether/entity/miscellaneous/CloudMinion.java @@ -80,12 +80,12 @@ public void tick() { if (this.shouldShoot()) { // Checks if able to shoot a Cloud Crystal float offset = this.getSide() == HumanoidArm.RIGHT ? 2.0F : -2.0F; float rotation = Mth.wrapDegrees(this.getYRot() + offset); - CloudCrystal crystal = new CloudCrystal(this.getLevel()); // Sets up Cloud Crystal. + CloudCrystal crystal = new CloudCrystal(this.level()); // Sets up Cloud Crystal. crystal.setPos(this.getX(), this.getY(), this.getZ()); crystal.shootFromRotation(this, this.getXRot(), rotation, 0.0F, 1.0F, 1.0F); crystal.setOwner(this.getOwner()); - if (!this.getLevel().isClientSide()) { - this.getLevel().addFreshEntity(crystal); + if (!this.level().isClientSide()) { + this.level().addFreshEntity(crystal); } this.playSound(AetherSoundEvents.ENTITY_CLOUD_MINION_SHOOT.get(), 0.75F, (this.getRandom().nextFloat() - this.getRandom().nextFloat()) * 0.2F + 1.0F); this.setShouldShoot(false); // Finish shoot. @@ -168,10 +168,10 @@ public void approachOwner() { * Spawn explosion particles on client or in {@link CloudMinion#handleEntityEvent(byte)}. */ public void spawnExplosionParticles() { - if (this.getLevel().isClientSide()) { + if (this.level().isClientSide()) { EntityUtil.spawnSummoningExplosionParticles(this); } else { - this.getLevel().broadcastEntityEvent(this, (byte) 70); + this.level().broadcastEntityEvent(this, (byte) 70); } } @@ -199,7 +199,7 @@ public boolean hurt(DamageSource source, float damage) { */ @Nullable public Player getOwner() { - return (Player) this.getLevel().getEntity(this.getEntityData().get(DATA_OWNER_ID)); + return (Player) this.level().getEntity(this.getEntityData().get(DATA_OWNER_ID)); } /** diff --git a/src/main/java/com/aetherteam/aether/entity/miscellaneous/Parachute.java b/src/main/java/com/aetherteam/aether/entity/miscellaneous/Parachute.java index 43d6ab1ede..8064a2ec41 100644 --- a/src/main/java/com/aetherteam/aether/entity/miscellaneous/Parachute.java +++ b/src/main/java/com/aetherteam/aether/entity/miscellaneous/Parachute.java @@ -44,7 +44,7 @@ public void tick() { this.checkSlowFallDistance(); // Resets the Parachute's fall distance. this.moveParachute(passenger); this.spawnExplosionParticle(); - if (this.isOnGround() || this.isInFluidType()) { // The parachute breaks when it collides with something. + if (this.onGround() || this.isInFluidType()) { // The parachute breaks when it collides with something. this.ejectPassengers(); this.die(); } @@ -107,7 +107,7 @@ public Vec3 calculateMovement(Vec3 vec3) { */ public void die() { this.spawnExplosionParticle(); - if (!this.getLevel().isClientSide()) { + if (!this.level().isClientSide()) { this.kill(); } } @@ -116,8 +116,8 @@ public void die() { * Spawn explosion particles in {@link Parachute#handleEntityEvent(byte)}. */ public void spawnExplosionParticle() { - if (!this.getLevel().isClientSide()) { - this.getLevel().broadcastEntityEvent(this, (byte) 70); + if (!this.level().isClientSide()) { + this.level().broadcastEntityEvent(this, (byte) 70); } } @@ -154,7 +154,7 @@ public Vec3 getDismountLocationForPassenger(LivingEntity passenger) { } else { Vec3 dismountLocation = this.position().add(0.0, 0.5, 0.0); // Fixes a block clipping exploit by pushing the player away from a block if it tries to dismount to an unsafe spot (like inside a block). - if (!DismountHelper.canDismountTo(this.getLevel(), passenger, passenger.getType().getDimensions().makeBoundingBox(dismountLocation))) { + if (!DismountHelper.canDismountTo(this.level(), passenger, passenger.getType().getDimensions().makeBoundingBox(dismountLocation))) { return this.position().add(0.0, 1.0, 0.0).add(new Vec3(direction.getStepX(), direction.getStepY(), direction.getStepZ()).scale(0.5).reverse()); } return dismountLocation; diff --git a/src/main/java/com/aetherteam/aether/entity/miscellaneous/SkyrootBoatBehavior.java b/src/main/java/com/aetherteam/aether/entity/miscellaneous/SkyrootBoatBehavior.java index 305e3f6d70..743e88ec7e 100644 --- a/src/main/java/com/aetherteam/aether/entity/miscellaneous/SkyrootBoatBehavior.java +++ b/src/main/java/com/aetherteam/aether/entity/miscellaneous/SkyrootBoatBehavior.java @@ -28,9 +28,9 @@ default void fall(Boat boat, double y, boolean onGround) { return; } boat.causeFallDamage(boat.fallDistance, 1.0F, boat.damageSources().fall()); - if (!boat.getLevel().isClientSide() && !boat.isRemoved()) { + if (!boat.level().isClientSide() && !boat.isRemoved()) { boat.kill(); - if (boat.getLevel().getGameRules().getBoolean(GameRules.RULE_DOENTITYDROPS)) { + if (boat.level().getGameRules().getBoolean(GameRules.RULE_DOENTITYDROPS)) { for(int i = 0; i < 3; ++i) { boat.spawnAtLocation(AetherBlocks.SKYROOT_PLANKS.get()); } @@ -42,7 +42,7 @@ default void fall(Boat boat, double y, boolean onGround) { } } boat.resetFallDistance(); - } else if (!boat.getLevel().getFluidState(boat.blockPosition().below()).is(FluidTags.WATER) && y < 0.0) { + } else if (!boat.level().getFluidState(boat.blockPosition().below()).is(FluidTags.WATER) && y < 0.0) { boat.fallDistance -= (float) y; } } diff --git a/src/main/java/com/aetherteam/aether/entity/monster/AbstractWhirlwind.java b/src/main/java/com/aetherteam/aether/entity/monster/AbstractWhirlwind.java index a9d301606f..3da9a59ccb 100644 --- a/src/main/java/com/aetherteam/aether/entity/monster/AbstractWhirlwind.java +++ b/src/main/java/com/aetherteam/aether/entity/monster/AbstractWhirlwind.java @@ -29,7 +29,7 @@ import net.minecraft.world.level.LevelAccessor; import net.minecraft.world.level.gameevent.GameEvent; import net.minecraft.world.level.levelgen.Heightmap; -import net.minecraft.world.level.storage.loot.LootContext; +import net.minecraft.world.level.storage.loot.LootParams; import net.minecraft.world.level.storage.loot.LootTable; import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets; import net.minecraft.world.level.storage.loot.parameters.LootContextParams; @@ -98,7 +98,7 @@ public static boolean checkWhirlwindSpawnRules(EntityType 0) { @@ -131,7 +131,7 @@ public void aiStep() { super.aiStep(); // This code is used to move other entities around the Whirlwind. - List entityList = this.getLevel().getEntities(this, this.getBoundingBox().expandTowards(2.5, 2.5, 2.5)) + List entityList = this.level().getEntities(this, this.getBoundingBox().expandTowards(2.5, 2.5, 2.5)) .stream().filter((entity -> !entity.getType().is(AetherTags.Entities.WHIRLWIND_UNAFFECTED))).toList(); for (Entity entity : entityList) { double x = (float) entity.getX(); @@ -163,7 +163,7 @@ public void aiStep() { entity.setDeltaMovement(entity.getDeltaMovement().add(Math.sin(0.0175 * d3) * 0.01, entity.getDeltaMovement().y, Math.cos(0.0175 * d3) * 0.01)); } - if (!this.getLevel().isEmptyBlock(this.blockPosition())) { + if (!this.level().isEmptyBlock(this.blockPosition())) { this.lifeLeft -= 50; } } @@ -176,13 +176,11 @@ public void aiStep() { * This method is called in aiStep to handle the item drop behavior of the Whirlwind. */ protected void spawnDrops() { - if (this.getLevel() instanceof ServerLevel serverLevel) { + if (this.level() instanceof ServerLevel serverLevel) { if (this.getRandom().nextInt(4) == 0) { - LootContext.Builder builder = new LootContext.Builder(serverLevel) - .withParameter(LootContextParams.ORIGIN, this.position()) - .withParameter(LootContextParams.THIS_ENTITY, this); - LootTable lootTable = serverLevel.getServer().getLootTables().get(this.getLootLocation()); - List list = lootTable.getRandomItems(builder.create(LootContextParamSets.SELECTOR)); + LootParams parameters = new LootParams.Builder(serverLevel).withParameter(LootContextParams.ORIGIN, this.position()).withParameter(LootContextParams.THIS_ENTITY, this).create(LootContextParamSets.SELECTOR); + LootTable lootTable = serverLevel.getServer().getLootData().getLootTable(this.getLootLocation()); + List list = lootTable.getRandomItems(parameters); for (ItemStack itemstack : list) { serverLevel.playSound(null, this.blockPosition(), AetherSoundEvents.ENTITY_WHIRLWIND_DROP.get(), SoundSource.HOSTILE, 0.5F, 1.0F); this.spawnAtLocation(itemstack, 1); @@ -331,7 +329,7 @@ public void tick() { } if (!this.whirlwind.isEvil || this.whirlwind.getTarget() == null) { BlockPos offset = BlockPos.containing(this.whirlwind.position().add(this.whirlwind.getDeltaMovement())); - if (this.whirlwind.getLevel().getHeight(Heightmap.Types.WORLD_SURFACE, offset.getX(), offset.getZ()) < offset.getY() - this.whirlwind.getMaxFallDistance()) { + if (this.whirlwind.level().getHeight(Heightmap.Types.WORLD_SURFACE, offset.getX(), offset.getZ()) < offset.getY() - this.whirlwind.getMaxFallDistance()) { this.movementAngle += 180; } else { this.movementAngle += this.movementCurve; diff --git a/src/main/java/com/aetherteam/aether/entity/monster/AechorPlant.java b/src/main/java/com/aetherteam/aether/entity/monster/AechorPlant.java index 2c309c09d8..b487e09e35 100644 --- a/src/main/java/com/aetherteam/aether/entity/monster/AechorPlant.java +++ b/src/main/java/com/aetherteam/aether/entity/monster/AechorPlant.java @@ -128,10 +128,10 @@ public static boolean checkAechorPlantSpawnRules(EntityType 0) { this.sinageAdd = 0.45F; @@ -174,7 +174,7 @@ protected InteractionResult mobInteract(Player player, InteractionHand hand) { this.setPoisonRemaining(this.getPoisonRemaining() - 1); ItemStack itemStack1 = ItemUtils.createFilledResult(itemStack, player, AetherItems.SKYROOT_POISON_BUCKET.get().getDefaultInstance()); player.setItemInHand(hand, itemStack1); - return InteractionResult.sidedSuccess(this.getLevel().isClientSide()); + return InteractionResult.sidedSuccess(this.level().isClientSide()); } else { return super.mobInteract(player, hand); } @@ -210,7 +210,7 @@ public boolean hurt(DamageSource source, float amount) { double d3 = this.getZ() + (double) (this.getRandom().nextFloat() - this.getRandom().nextFloat()) * 0.5; double d4 = (double) (this.getRandom().nextFloat() - this.getRandom().nextFloat()) * 0.5; double d5 = (double) (this.getRandom().nextFloat() - this.getRandom().nextFloat()) * 0.5; - this.getLevel().addParticle(ParticleTypes.PORTAL, d1, d2, d3, d4, 0.25, d5); + this.level().addParticle(ParticleTypes.PORTAL, d1, d2, d3, d4, 0.25, d5); } } return super.hurt(source, amount); @@ -223,7 +223,7 @@ public boolean hurt(DamageSource source, float amount) { */ @Override public void performRangedAttack(LivingEntity target, float distanceFactor) { - PoisonNeedle needle = new PoisonNeedle(this.getLevel(), this); + PoisonNeedle needle = new PoisonNeedle(this.level(), this); double x = target.getX() - this.getX(); double z = target.getZ() - this.getZ(); double sqrt = Math.sqrt(x * x + z * z + 0.1); @@ -233,7 +233,7 @@ public void performRangedAttack(LivingEntity target, float distanceFactor) { z *= distance; needle.shoot(x, y + 0.5F, z, 0.285F + (float) y * 0.08F, 1.0F); this.playSound(AetherSoundEvents.ENTITY_AECHOR_PLANT_SHOOT.get(), 2.0F, 1.0F / (this.getRandom().nextFloat() * 0.4F + 0.8F)); - this.getLevel().addFreshEntity(needle); + this.level().addFreshEntity(needle); } /** diff --git a/src/main/java/com/aetherteam/aether/entity/monster/Cockatrice.java b/src/main/java/com/aetherteam/aether/entity/monster/Cockatrice.java index 434fd32abe..8305d73c8d 100644 --- a/src/main/java/com/aetherteam/aether/entity/monster/Cockatrice.java +++ b/src/main/java/com/aetherteam/aether/entity/monster/Cockatrice.java @@ -133,7 +133,7 @@ public void aiStep() { @Override public void tick() { super.tick(); - if (this.isOnGround()) { + if (this.onGround()) { this.setEntityOnGround(true); } @@ -151,8 +151,8 @@ public void tick() { if (this.getFlapCooldown() > 0) { this.setFlapCooldown(this.getFlapCooldown() - 1); } else if (this.getFlapCooldown() == 0) { - if (!this.isOnGround()) { - this.getLevel().playSound(null, this, AetherSoundEvents.ENTITY_COCKATRICE_FLAP.get(), SoundSource.NEUTRAL, 0.15F, Mth.clamp(this.getRandom().nextFloat(), 0.7F, 1.0F) + Mth.clamp(this.getRandom().nextFloat(), 0.0F, 0.3F)); + if (!this.onGround()) { + this.level().playSound(null, this, AetherSoundEvents.ENTITY_COCKATRICE_FLAP.get(), SoundSource.NEUTRAL, 0.15F, Mth.clamp(this.getRandom().nextFloat(), 0.7F, 1.0F) + Mth.clamp(this.getRandom().nextFloat(), 0.0F, 0.3F)); this.setFlapCooldown(15); } } @@ -173,14 +173,14 @@ protected void jumpFromGround() { */ @Override public void performRangedAttack(LivingEntity target, float distanceFactor) { - PoisonNeedle needle = new PoisonNeedle(this.getLevel(), this); + PoisonNeedle needle = new PoisonNeedle(this.level(), this); double d0 = target.getX() - this.getX(); double d1 = target.getY(0.75) - needle.getY(); double d2 = target.getZ() - this.getZ(); double d3 = Mth.sqrt((float) (Mth.square(d0) + Mth.square(d2))); - needle.shoot(d0, d1 + d3 * 0.2, d2, 1.0F, (float) (14 - this.getLevel().getDifficulty().getId() * 4)); + needle.shoot(d0, d1 + d3 * 0.2, d2, 1.0F, (float) (14 - this.level().getDifficulty().getId() * 4)); this.playSound(AetherSoundEvents.ENTITY_COCKATRICE_SHOOT.get(), 2.0F, 1.0F / (this.getRandom().nextFloat() * 0.4F + 0.8F)); - this.getLevel().addFreshEntity(needle); + this.level().addFreshEntity(needle); } /** @@ -303,7 +303,7 @@ protected SoundEvent getDeathSound() { */ @Override public int getMaxFallDistance() { - return this.isOnGround() ? super.getMaxFallDistance() : 14; + return this.onGround() ? super.getMaxFallDistance() : 14; } /** diff --git a/src/main/java/com/aetherteam/aether/entity/monster/EvilWhirlwind.java b/src/main/java/com/aetherteam/aether/entity/monster/EvilWhirlwind.java index 3976210e33..f069a07785 100644 --- a/src/main/java/com/aetherteam/aether/entity/monster/EvilWhirlwind.java +++ b/src/main/java/com/aetherteam/aether/entity/monster/EvilWhirlwind.java @@ -43,7 +43,7 @@ public void spawnParticles() { double d5 = getY() + getBbHeight() + 0.125; double d8 = getZ() + this.getRandom().nextDouble() * 0.25; float f1 = this.getRandom().nextFloat() * 360; - this.getLevel().addParticle(AetherParticleTypes.EVIL_WHIRLWIND.get(), d2, d5 - 0.25, d8, -Math.sin(0.0175F * f1) * 0.75, 0.125, Math.cos(0.0175F * f1) * 0.75); + this.level().addParticle(AetherParticleTypes.EVIL_WHIRLWIND.get(), d2, d5 - 0.25, d8, -Math.sin(0.0175F * f1) * 0.75, 0.125, Math.cos(0.0175F * f1) * 0.75); } } diff --git a/src/main/java/com/aetherteam/aether/entity/monster/PassiveWhirlwind.java b/src/main/java/com/aetherteam/aether/entity/monster/PassiveWhirlwind.java index aef126170e..4031e9f536 100644 --- a/src/main/java/com/aetherteam/aether/entity/monster/PassiveWhirlwind.java +++ b/src/main/java/com/aetherteam/aether/entity/monster/PassiveWhirlwind.java @@ -50,7 +50,7 @@ public SpawnGroupData finalizeSpawn(ServerLevelAccessor level, DifficultyInstanc public InteractionResult mobInteract(Player player, InteractionHand hand) { ItemStack itemStack = player.getItemInHand(hand); if (itemStack.getItem() instanceof DyeItem dyeItem && player.isCreative()) { - this.setColorData(dyeItem.getDyeColor().getMaterialColor().col); + this.setColorData(dyeItem.getDyeColor().getMapColor().col); return InteractionResult.SUCCESS; } return super.mobInteract(player, hand); @@ -63,7 +63,7 @@ public void spawnParticles() { double d4 = getY() + getBbHeight() + 0.125; double d7 = this.getZ() + this.getRandom().nextDouble() * 0.25; float f = this.getRandom().nextFloat() * 360; - this.getLevel().addParticle(AetherParticleTypes.PASSIVE_WHIRLWIND.get(), d1, d4 - 0.25, d7, -Math.sin(0.0175F * f) * 0.75, 0.125, Math.cos(0.0175F * f) * 0.75); + this.level().addParticle(AetherParticleTypes.PASSIVE_WHIRLWIND.get(), d1, d4 - 0.25, d7, -Math.sin(0.0175F * f) * 0.75, 0.125, Math.cos(0.0175F * f) * 0.75); } } diff --git a/src/main/java/com/aetherteam/aether/entity/monster/Swet.java b/src/main/java/com/aetherteam/aether/entity/monster/Swet.java index be90c012b1..0f3c97b929 100644 --- a/src/main/java/com/aetherteam/aether/entity/monster/Swet.java +++ b/src/main/java/com/aetherteam/aether/entity/monster/Swet.java @@ -120,8 +120,8 @@ public void tick() { this.setWaterDamageScale(this.getWaterDamageScale() + 0.02F); } } - if (this.getWaterDamageScale() >= 0.9F && !this.getLevel().isClientSide()) { - this.getLevel().broadcastEntityEvent(this, (byte) 60); + if (this.getWaterDamageScale() >= 0.9F && !this.level().isClientSide()) { + this.level().broadcastEntityEvent(this, (byte) 60); this.remove(Entity.RemovalReason.KILLED); } @@ -131,18 +131,18 @@ public void tick() { // Spawn particles when no target is captured. if (!this.hasPrey() && this.canSpawnSplashParticles()) { - if (this.getLevel().isClientSide()) { + if (this.level().isClientSide()) { double d = (float) this.getX() + (this.getRandom().nextFloat() - this.getRandom().nextFloat()) * 0.3F; double d1 = (float) this.getY() + this.getBbHeight(); double d2 = (float) this.getZ() + (this.getRandom().nextFloat() - this.getRandom().nextFloat()) * 0.3F; - this.getLevel().addParticle(ParticleTypes.SPLASH, d, d1 - 0.25, d2, 0.0, 0.0, 0.0); + this.level().addParticle(ParticleTypes.SPLASH, d, d1 - 0.25, d2, 0.0, 0.0, 0.0); } } // Handle jump behavior and animation. if (!this.isNoAi()) { - this.setMidJump(!this.isOnGround()); - if (this.getLevel().isClientSide()) { + this.setMidJump(!this.onGround()); + if (this.level().isClientSide()) { this.swetHeightO = this.swetHeight; this.swetWidthO = this.swetWidth; if (this.getMidJump()) { @@ -164,7 +164,7 @@ public void tick() { this.swetWidth = this.swetWidth > 1.0F ? this.swetWidth - 0.25F : 1.0F; } } - this.wasOnGround = this.isOnGround(); + this.wasOnGround = this.onGround(); } if (this.isFriendly()) { // Handle fall damage immunity when mounted. this.resetFallDistance(); @@ -194,7 +194,7 @@ public void travel(Vec3 vector) { if (this.isAlive()) { LivingEntity entity = this.getControllingPassenger(); if (this.isVehicle() && entity != null) { - if (this.isOnGround() && !this.getPlayerJumped() && (this.getDeltaMovement().x() != 0 || this.getDeltaMovement().z() != 0)) { + if (this.onGround() && !this.getPlayerJumped() && (this.getDeltaMovement().x() != 0 || this.getDeltaMovement().z() != 0)) { this.setDeltaMovement(this.getDeltaMovement().x(), 0.42F, this.getDeltaMovement().z()); } this.resetFallDistance(); @@ -215,7 +215,7 @@ public void travelWithInput(Vec3 motion) { */ @Override public InteractionResult mobInteract(Player player, InteractionHand hand) { - if (!this.getLevel().isClientSide()) { + if (!this.level().isClientSide()) { if (!this.hasPrey() && this.isFriendlyTowardEntity(player)) { if (this.getScale() >= super.getScale()) { this.consumePassenger(player); @@ -240,7 +240,7 @@ public void consumePassenger(LivingEntity livingEntity) { * Spawn dissolve particles in {@link Swet#handleEntityEvent(byte)}. */ public void spawnDissolveParticles() { - if (this.getLevel() instanceof ServerLevel level) { + if (this.level() instanceof ServerLevel level) { level.broadcastEntityEvent(this, (byte) 70); } } @@ -422,7 +422,7 @@ public double jumpFactor() { @Override public boolean canJump() { - return this.isOnGround() && this.isFriendly(); + return this.onGround() && this.isFriendly(); } /** @@ -533,7 +533,7 @@ public void handleEntityEvent(byte id) { double f2 = (this.getRandom().nextFloat() * this.swetHeight) - (this.getRandom().nextGaussian() * 0.02 * 10.0); double f3 = Mth.sin((float) f) * f1; double f4 = Mth.cos((float) f) * f1; - this.getLevel().addParticle(ParticleTypes.SPLASH, this.getX() + f3, this.getY() + f2, this.getZ() + f4, f3 * 1.5 + this.getDeltaMovement().x(), 4.0, f4 * 1.5 + this.getDeltaMovement().z()); + this.level().addParticle(ParticleTypes.SPLASH, this.getX() + f3, this.getY() + f2, this.getZ() + f4, f3 * 1.5 + this.getDeltaMovement().x(), 4.0, f4 * 1.5 + this.getDeltaMovement().z()); } } else if (id == 71) { this.absMoveTo(this.getX(), this.getY(), this.getZ()); @@ -580,8 +580,8 @@ public boolean canUse() { @Override public void tick() { if (this.jumps <= 3) { - if (this.swet.isOnGround()) { - this.swet.getLevel().broadcastEntityEvent(this.swet, (byte) 71); // This is to make sure the Swet actually touches the ground on the client. + if (this.swet.onGround()) { + this.swet.level().broadcastEntityEvent(this.swet, (byte) 71); // This is to make sure the Swet actually touches the ground on the client. this.swet.playSound(AetherSoundEvents.ENTITY_SWET_JUMP.get(), 1.0F, ((this.swet.getRandom().nextFloat() - this.swet.getRandom().nextFloat()) * 0.2F + 1.0F) * 0.8F); this.chosenDegrees = (float) this.swet.getRandom().nextInt(360); @@ -746,7 +746,7 @@ public void tick() { this.swet.setZza(0.0F); } else { this.operation = Operation.WAIT; - if (this.swet.isOnGround()) { + if (this.swet.onGround()) { this.swet.setSpeed((float) (this.speedModifier * this.swet.getAttributeValue(Attributes.MOVEMENT_SPEED))); if (this.jumpDelay-- <= 0) { this.jumpDelay = this.swet.getJumpDelay(); @@ -782,7 +782,7 @@ public SwetRandomDirectionGoal(Swet swet) { } public boolean canUse() { - return this.swet.getTarget() == null && (this.swet.isOnGround() || this.swet.isInFluidType() || this.swet.hasEffect(MobEffects.LEVITATION)) && this.swet.getMoveControl() instanceof SwetMoveControl; + return this.swet.getTarget() == null && (this.swet.onGround() || this.swet.isInFluidType() || this.swet.hasEffect(MobEffects.LEVITATION)) && this.swet.getMoveControl() instanceof SwetMoveControl; } public void tick() { @@ -791,7 +791,7 @@ public void tick() { Vec3 offset = new Vec3(-Math.sin(rot * Mth.DEG_TO_RAD) * 2, 0.0, Math.cos(rot * Mth.DEG_TO_RAD) * 2); BlockPos offsetPos = BlockPos.containing(this.swet.position().add(offset)); // Rotate the Swet if the next position in the direction it is facing is beyond its fall distance to jump to. - if (this.swet.getLevel().getHeight(Heightmap.Types.WORLD_SURFACE, offsetPos.getX(), offsetPos.getZ()) < offsetPos.getY() - this.swet.getMaxFallDistance()) { + if (this.swet.level().getHeight(Heightmap.Types.WORLD_SURFACE, offsetPos.getX(), offsetPos.getZ()) < offsetPos.getY() - this.swet.getMaxFallDistance()) { this.nextRandomizeTime = this.adjustedTickDelay(40 + this.swet.getRandom().nextInt(60)); this.chosenDegrees += 180; moveHelperController.setCanJump(false); diff --git a/src/main/java/com/aetherteam/aether/entity/monster/Zephyr.java b/src/main/java/com/aetherteam/aether/entity/monster/Zephyr.java index c2ab3f0d71..9d3bc8e48c 100644 --- a/src/main/java/com/aetherteam/aether/entity/monster/Zephyr.java +++ b/src/main/java/com/aetherteam/aether/entity/monster/Zephyr.java @@ -83,10 +83,10 @@ public static boolean checkZephyrSpawnRules(EntityType zephyr, @Override public void aiStep() { super.aiStep(); - if (this.getY() < this.getLevel().getMinBuildHeight() - 2 || this.getY() > this.getLevel().getMaxBuildHeight()) { + if (this.getY() < this.level().getMinBuildHeight() - 2 || this.getY() > this.level().getMaxBuildHeight()) { this.discard(); } - if (this.getLevel().isClientSide()) { + if (this.level().isClientSide()) { this.cloudScale += this.cloudScaleAdd; this.tailRot += this.tailRotAdd; if (this.getChargeTime() < 20 && this.getChargeTime() > 0) { @@ -235,7 +235,7 @@ private boolean canReach(Vec3 pos, int distance) { AABB axisalignedbb = this.zephyr.getBoundingBox(); for (int i = 1; i < distance; ++i) { axisalignedbb = axisalignedbb.move(pos); - if (!this.zephyr.getLevel().noCollision(this.zephyr, axisalignedbb)) { + if (!this.zephyr.level().noCollision(this.zephyr, axisalignedbb)) { return false; } } @@ -273,7 +273,7 @@ public void tick() { LivingEntity livingEntity = this.zephyr.getTarget(); if (livingEntity != null) { if (livingEntity.distanceToSqr(this.zephyr) < 1600.0 && this.zephyr.hasLineOfSight(livingEntity)) { - Level level = this.zephyr.getLevel(); + Level level = this.zephyr.level(); this.zephyr.setChargeTime(this.zephyr.getChargeTime() + 1); if (this.zephyr.getChargeTime() == 10) { if (this.zephyr.getAmbientSound() != null) { diff --git a/src/main/java/com/aetherteam/aether/entity/monster/dungeon/AbstractValkyrie.java b/src/main/java/com/aetherteam/aether/entity/monster/dungeon/AbstractValkyrie.java index 40be1ea83c..0a312c84fc 100644 --- a/src/main/java/com/aetherteam/aether/entity/monster/dungeon/AbstractValkyrie.java +++ b/src/main/java/com/aetherteam/aether/entity/monster/dungeon/AbstractValkyrie.java @@ -83,11 +83,11 @@ public void defineSynchedData() { @Override public void tick() { super.tick(); - if (this.isOnGround()) { + if (this.onGround()) { this.setEntityOnGround(true); } double motionY = this.getDeltaMovement().y(); - if (!this.isOnGround() && Math.abs(motionY - this.lastMotionY) > 0.07 && Math.abs(motionY - this.lastMotionY) < 0.09) { + if (!this.onGround() && Math.abs(motionY - this.lastMotionY) > 0.07 && Math.abs(motionY - this.lastMotionY) < 0.09) { this.setDeltaMovement(this.getDeltaMovement().add(0, 0.055, 0)); } } @@ -116,27 +116,29 @@ protected void jumpFromGround() { @Override public boolean hurt(DamageSource source, float amount) { boolean result = super.hurt(source, amount); - if (!this.getLevel().isClientSide() && result && source.getEntity() instanceof LivingEntity living) { + if (!this.level().isClientSide() && result && source.getEntity() instanceof LivingEntity living) { this.mostDamageTargetGoal.addAggro(living, amount); } return result; } /** - * Teleports near a target outside a specified radius. + * Teleports near a target outside a specified radius.

+ * Warning for "deprecation" is suppressed because {@link BlockState#blocksMotion()} is necessary to call. * @return Whether the teleportation succeeded, as a {@link Boolean}. */ + @SuppressWarnings("deprecation") protected boolean teleportAroundTarget(Entity target) { Vec2 targetVec = new Vec2(this.getRandom().nextFloat() - 0.5F, this.getRandom().nextFloat() - 0.5F).normalized(); double x = target.getX() + targetVec.x * 7; double y = target.getY(); double z = target.getZ() + targetVec.y * 7; BlockPos.MutableBlockPos mutableBlockPos = new BlockPos.MutableBlockPos(x, y, z); - while (mutableBlockPos.getY() > this.getLevel().getMinBuildHeight() && !this.getLevel().getBlockState(mutableBlockPos).getMaterial().blocksMotion()) { + while (mutableBlockPos.getY() > this.level().getMinBuildHeight() && !this.level().getBlockState(mutableBlockPos).blocksMotion()) { mutableBlockPos.move(Direction.DOWN); } - BlockState blockState = this.getLevel().getBlockState(mutableBlockPos); + BlockState blockState = this.level().getBlockState(mutableBlockPos); boolean isValidSpot = blockState.is(AetherTags.Blocks.VALKYRIE_TELEPORTABLE_ON); // Valkyries can only teleport within the Silver Dungeon. return isValidSpot && this.teleport(x, y, z); } @@ -161,8 +163,8 @@ protected boolean teleport(double x, double y, double z) { * Spawn explosion particles in {@link AbstractValkyrie#handleEntityEvent(byte)}. */ public void spawnExplosionParticles() { - if (!this.getLevel().isClientSide()) { - this.getLevel().broadcastEntityEvent(this, (byte) 70); + if (!this.level().isClientSide()) { + this.level().broadcastEntityEvent(this, (byte) 70); } } @@ -272,7 +274,7 @@ public LungeGoal(AbstractValkyrie valkyrie, double speedModifier) { @Override public boolean canUse() { - return !this.valkyrie.isOnGround(); + return !this.valkyrie.onGround(); } @Override diff --git a/src/main/java/com/aetherteam/aether/entity/monster/dungeon/FireMinion.java b/src/main/java/com/aetherteam/aether/entity/monster/dungeon/FireMinion.java index d78746bd9e..6c4dc2ebfd 100644 --- a/src/main/java/com/aetherteam/aether/entity/monster/dungeon/FireMinion.java +++ b/src/main/java/com/aetherteam/aether/entity/monster/dungeon/FireMinion.java @@ -48,7 +48,7 @@ public static AttributeSupplier.Builder createMobAttributes() { @Override public void tick() { super.tick(); - if (this.getLevel().isClientSide()) { + if (this.level().isClientSide()) { ParticleOptions particle = ParticleTypes.FLAME; if (this.hasCustomName()) { String name = this.getName().getString(); @@ -63,7 +63,7 @@ public void tick() { double x = this.getX() + d * d1; double y = this.getBoundingBox().minY + d1 + 0.5; double z = this.getZ() + d2 * d1; - this.getLevel().addParticle(particle, x, y, z, 0.0, -0.075, 0.0); + this.level().addParticle(particle, x, y, z, 0.0, -0.075, 0.0); } } } diff --git a/src/main/java/com/aetherteam/aether/entity/monster/dungeon/Mimic.java b/src/main/java/com/aetherteam/aether/entity/monster/dungeon/Mimic.java index 7c0874e80d..e6b01a178f 100644 --- a/src/main/java/com/aetherteam/aether/entity/monster/dungeon/Mimic.java +++ b/src/main/java/com/aetherteam/aether/entity/monster/dungeon/Mimic.java @@ -56,7 +56,7 @@ public static AttributeSupplier.Builder createMobAttributes() { public boolean hurt(DamageSource source, float amount) { if (!(source.getDirectEntity() instanceof Mimic)) { if (source.getDirectEntity() instanceof LivingEntity livingEntity && this.hurtTime == 0) { - if (this.getLevel() instanceof ServerLevel serverLevel) { + if (this.level() instanceof ServerLevel serverLevel) { for (int i = 0; i < 20; i++) { serverLevel.sendParticles(new BlockParticleOption(ParticleTypes.BLOCK, Blocks.CHEST.defaultBlockState()), this.getX(), this.getY() + this.getBbHeight() / 1.5, this.getZ(), 1, this.getBbWidth() / 4.0, this.getBbHeight() / 4.0, this.getBbWidth() / 4.0, 0.05F); } @@ -88,10 +88,10 @@ public boolean doHurtTarget(Entity entity) { @Override public void spawnAnim() { - if (this.getLevel().isClientSide()) { + if (this.level().isClientSide()) { EntityUtil.spawnSummoningExplosionParticles(this); } else { - this.getLevel().broadcastEntityEvent(this, (byte) 70); + this.level().broadcastEntityEvent(this, (byte) 70); } } diff --git a/src/main/java/com/aetherteam/aether/entity/monster/dungeon/Sentry.java b/src/main/java/com/aetherteam/aether/entity/monster/dungeon/Sentry.java index 8ebccc6249..8e24b3408d 100644 --- a/src/main/java/com/aetherteam/aether/entity/monster/dungeon/Sentry.java +++ b/src/main/java/com/aetherteam/aether/entity/monster/dungeon/Sentry.java @@ -57,7 +57,7 @@ protected void defineSynchedData() { */ @Override public void tick() { - if (this.getLevel().getNearestPlayer(this.getX(), this.getY(), this.getZ(), 8.0, EntitySelector.NO_SPECTATORS) != null) { + if (this.level().getNearestPlayer(this.getX(), this.getY(), this.getZ(), 8.0, EntitySelector.NO_SPECTATORS) != null) { if (!this.isAwake()) { if (this.timeSpotted >= 24) { this.setAwake(true); @@ -110,9 +110,9 @@ public void playerTouch(Player player) { protected void explodeAt(LivingEntity entity) { if (this.distanceToSqr(entity) < 1.5 && this.isAwake() && this.hasLineOfSight(entity) && entity.hurt(this.damageSources().mobAttack(this), 1.0F) && this.tickCount > 20 && this.isAlive()) { entity.push(0.3, 0.4, 0.3); - this.getLevel().explode(this, this.getX(), this.getY(), this.getZ(), 1.0F, Level.ExplosionInteraction.MOB); + this.level().explode(this, this.getX(), this.getY(), this.getZ(), 1.0F, Level.ExplosionInteraction.MOB); this.playSound(SoundEvents.GENERIC_EXPLODE, 1.0F, 0.2F * (this.getRandom().nextFloat() - this.getRandom().nextFloat()) + 1); - if (this.getLevel() instanceof ServerLevel level) { + if (this.level() instanceof ServerLevel level) { level.broadcastEntityEvent(this, (byte) 70); level.sendParticles(ParticleTypes.EXPLOSION_EMITTER, this.getX(), this.getY(), this.getZ(), 1, 0.0, 0.0, 0.0, 0.5); } @@ -196,7 +196,7 @@ public void handleEntityEvent(byte id) { double y = this.getY() + 0.5; double z = this.getZ() + (this.getRandom().nextFloat() * 0.25); float f1 = this.getRandom().nextFloat() * 360.0F; - this.getLevel().addParticle(ParticleTypes.POOF, x, y, z, -Math.sin(Mth.DEG_TO_RAD * f1) * 0.75, 0.125, Math.cos(Mth.DEG_TO_RAD * f1) * 0.75); + this.level().addParticle(ParticleTypes.POOF, x, y, z, -Math.sin(Mth.DEG_TO_RAD * f1) * 0.75, 0.125, Math.cos(Mth.DEG_TO_RAD * f1) * 0.75); } } else { super.handleEntityEvent(id); diff --git a/src/main/java/com/aetherteam/aether/entity/monster/dungeon/Valkyrie.java b/src/main/java/com/aetherteam/aether/entity/monster/dungeon/Valkyrie.java index 72941d2479..dedcb4249d 100644 --- a/src/main/java/com/aetherteam/aether/entity/monster/dungeon/Valkyrie.java +++ b/src/main/java/com/aetherteam/aether/entity/monster/dungeon/Valkyrie.java @@ -82,7 +82,7 @@ protected InteractionResult mobInteract(Player player, InteractionHand hand) { if (hand == InteractionHand.MAIN_HAND) { if (this.getTarget() == null) { this.lookAt(player, 180.0F, 180.0F); // Look at player. - if (!this.getLevel().isClientSide() && this.chatTimer <= 0) { + if (!this.level().isClientSide() && this.chatTimer <= 0) { String translationId; if (item.getItem() == AetherItems.VICTORY_MEDAL.get()) { // Change what message is displayed depending on how many medals a player shows a Valkyrie. if (item.getCount() >= 10) { @@ -112,8 +112,8 @@ protected InteractionResult mobInteract(Player player, InteractionHand hand) { @Override public boolean hurt(DamageSource source, float amount) { boolean result = super.hurt(source, amount); - if (!this.getLevel().isClientSide() && source.getEntity() instanceof Player player) { - if (this.getTarget() == null && this.getLevel().getDifficulty() != Difficulty.PEACEFUL && this.getHealth() > 0) { + if (!this.level().isClientSide() && source.getEntity() instanceof Player player) { + if (this.getTarget() == null && this.level().getDifficulty() != Difficulty.PEACEFUL && this.getHealth() > 0) { this.chat(player, Component.translatable("gui.aether.valkyrie.dialog.attack." + (char) (this.getRandom().nextInt(3) + '1'))); } } diff --git a/src/main/java/com/aetherteam/aether/entity/monster/dungeon/boss/Slider.java b/src/main/java/com/aetherteam/aether/entity/monster/dungeon/boss/Slider.java index 2f9b39731e..5847788c6c 100644 --- a/src/main/java/com/aetherteam/aether/entity/monster/dungeon/boss/Slider.java +++ b/src/main/java/com/aetherteam/aether/entity/monster/dungeon/boss/Slider.java @@ -150,7 +150,7 @@ public void customServerAiStep() { super.customServerAiStep(); this.bossFight.setProgress(this.getHealth() / this.getMaxHealth()); this.trackDungeon(); - if (this.getLevel() instanceof ServerLevel serverLevel) { + if (this.level() instanceof ServerLevel serverLevel) { Brain brain = (Brain) this.getBrain(); brain.tick(serverLevel, this); SliderAi.updateActivity(this); @@ -168,7 +168,7 @@ public void customServerAiStep() { public boolean hurt(DamageSource source, float amount) { if (source.is(DamageTypeTags.BYPASSES_INVULNERABILITY)) { super.hurt(source, amount); - } else if (source.getDirectEntity() instanceof LivingEntity attacker && this.getLevel().getDifficulty() != Difficulty.PEACEFUL) { + } else if (source.getDirectEntity() instanceof LivingEntity attacker && this.level().getDifficulty() != Difficulty.PEACEFUL) { if (this.getDungeon() == null || this.getDungeon().isPlayerWithinRoomInterior(attacker)) { // Only allow damage within the boss room. if (attacker.getMainHandItem().is(AetherTags.Items.SLIDER_DAMAGING_ITEMS)) { // Check for correct tool. if (super.hurt(source, amount) && this.getHealth() > 0) { @@ -200,7 +200,7 @@ public boolean hurt(DamageSource source, float amount) { return true; } } else { - if (!this.getLevel().isClientSide() && attacker instanceof Player player) { + if (!this.level().isClientSide() && attacker instanceof Player player) { if (this.getChatCooldown() <= 0) { player.sendSystemMessage(Component.translatable("gui.aether.slider.message.attack.invalid")); // Invalid tool. this.setChatCooldown(15); @@ -209,7 +209,7 @@ public boolean hurt(DamageSource source, float amount) { } } } else { - if (!this.getLevel().isClientSide() && attacker instanceof Player player) { + if (!this.level().isClientSide() && attacker instanceof Player player) { if (this.getChatCooldown() <= 0) { this.displayTooFarMessage(player); // Too far from Slider this.setChatCooldown(15); @@ -258,7 +258,7 @@ public void reset() { public void die(DamageSource source) { this.setDeltaMovement(Vec3.ZERO); this.explode(); - if (this.getLevel() instanceof ServerLevel) { + if (this.level() instanceof ServerLevel) { this.bossFight.setProgress(this.getHealth() / this.getMaxHealth()); // Forces an update to the boss health meter. if (this.getDungeon() != null) { this.getDungeon().grantAdvancements(source); @@ -276,7 +276,7 @@ private void explode() { double x = this.position().x() + (double) (this.getRandom().nextFloat() - this.getRandom().nextFloat()) * 1.5; double y = this.getBoundingBox().minY + 1.75 + (double) (this.getRandom().nextFloat() - this.getRandom().nextFloat()) * 1.5; double z = this.position().z() + (double) (this.getRandom().nextFloat() - this.getRandom().nextFloat()) * 1.5; - this.getLevel().addParticle(ParticleTypes.POOF, x, y, z, 0.0, 0.0, 0.0); + this.level().addParticle(ParticleTypes.POOF, x, y, z, 0.0, 0.0, 0.0); } } diff --git a/src/main/java/com/aetherteam/aether/entity/monster/dungeon/boss/SunSpirit.java b/src/main/java/com/aetherteam/aether/entity/monster/dungeon/boss/SunSpirit.java index 399b0f9106..4480d41096 100644 --- a/src/main/java/com/aetherteam/aether/entity/monster/dungeon/boss/SunSpirit.java +++ b/src/main/java/com/aetherteam/aether/entity/monster/dungeon/boss/SunSpirit.java @@ -6,7 +6,7 @@ import com.aetherteam.aether.capability.AetherCapabilities; import com.aetherteam.aether.capability.player.AetherPlayer; import com.aetherteam.aether.client.AetherSoundEvents; -import com.aetherteam.aether.data.resources.AetherDamageTypes; +import com.aetherteam.aether.data.resources.registries.AetherDamageTypes; import com.aetherteam.aether.entity.AetherBossMob; import com.aetherteam.aether.entity.AetherEntityTypes; import com.aetherteam.aether.entity.ai.controller.BlankMoveControl; @@ -152,7 +152,7 @@ public void tick() { double x = this.getX() + (this.getRandom().nextFloat() - 0.5F) * this.getRandom().nextFloat(); double y = this.getBoundingBox().minY + this.getRandom().nextFloat() - 0.5; double z = this.getZ() + (this.getRandom().nextFloat() - 0.5F) * this.getRandom().nextFloat(); - this.getLevel().addParticle(ParticleTypes.FLAME, x, y, z, 0, -0.075, 0); + this.level().addParticle(ParticleTypes.FLAME, x, y, z, 0, -0.075, 0); this.burnEntities(); } this.setYRot(Mth.rotateIfNecessary(this.getYRot(), this.getYHeadRot(), 20)); @@ -173,10 +173,10 @@ private void evaporate() { * Burns all entities directly under the Sun Spirit. */ public void burnEntities() { - List entities = this.getLevel().getEntities(this, this.getBoundingBox().expandTowards(0, -2, 0).contract(-0.75, 0, -0.75).contract(0.75, 0, 0.75)); + List entities = this.level().getEntities(this, this.getBoundingBox().expandTowards(0, -2, 0).contract(-0.75, 0, -0.75).contract(0.75, 0, 0.75)); for (Entity target : entities) { if (target instanceof LivingEntity) { - target.hurt(AetherDamageTypes.entityDamageSource(this.getLevel(), AetherDamageTypes.INCINERATION, this), 20); + target.hurt(AetherDamageTypes.entityDamageSource(this.level(), AetherDamageTypes.INCINERATION, this), 20); target.setSecondsOnFire(8); } } @@ -198,7 +198,7 @@ public void customServerAiStep() { * Extra checks for seeing if an Ice Crystal is close enough to the Sun Spirit to damage it. */ private void checkIceCrystals() { - for (IceCrystal iceCrystal : this.getLevel().getEntitiesOfClass(IceCrystal.class, this.getBoundingBox().inflate(0.1))) { + for (IceCrystal iceCrystal : this.level().getEntitiesOfClass(IceCrystal.class, this.getBoundingBox().inflate(0.1))) { iceCrystal.doDamage(this); } } @@ -211,7 +211,7 @@ private void checkIceCrystals() { */ @Override protected InteractionResult mobInteract(Player player, InteractionHand hand) { - if (!this.getLevel().isClientSide() && !this.isBossFight()) { + if (!this.level().isClientSide() && !this.isBossFight()) { if (this.getChatCooldown() <= 0) { this.setChatCooldown(14); if (this.getDungeon() == null || this.getDungeon().isPlayerWithinRoomInterior(player)) { @@ -269,7 +269,7 @@ protected InteractionResult mobInteract(Player player, InteractionHand hand) { */ protected void chatWithNearby(Component message) { AABB room = this.getDungeon() == null ? this.getBoundingBox().inflate(16) : this.getDungeon().roomBounds(); - this.getLevel().getNearbyPlayers(NON_COMBAT, this, room).forEach(player -> player.sendSystemMessage(message)); + this.level().getNearbyPlayers(NON_COMBAT, this, room).forEach(player -> player.sendSystemMessage(message)); } /** @@ -281,11 +281,11 @@ protected void chatWithNearby(Component message) { @Override public boolean hurt(DamageSource source, float amount) { boolean flag = super.hurt(source, amount); - if (!this.getLevel().isClientSide() && flag && this.getHealth() > 0 && source.getEntity() instanceof LivingEntity entity) { - FireMinion minion = new FireMinion(AetherEntityTypes.FIRE_MINION.get(), this.getLevel()); + if (!this.level().isClientSide() && flag && this.getHealth() > 0 && source.getEntity() instanceof LivingEntity entity) { + FireMinion minion = new FireMinion(AetherEntityTypes.FIRE_MINION.get(), this.level()); minion.setPos(this.position()); minion.setTarget(entity); - this.getLevel().addFreshEntity(minion); + this.level().addFreshEntity(minion); } this.velocity = 1 - this.getHealth() / 700; return flag; @@ -310,7 +310,7 @@ public void reset() { */ @Override public void die(DamageSource source) { - if (!this.getLevel().isClientSide()) { + if (!this.level().isClientSide()) { this.setFrozen(true); this.bossFight.setProgress(this.getHealth() / this.getMaxHealth()); // Forces an update to the boss health meter. this.chatWithNearby(Component.translatable("gui.aether.sun_spirit.dead").withStyle(ChatFormatting.AQUA)); @@ -318,7 +318,7 @@ public void die(DamageSource source) { this.getDungeon().grantAdvancements(source); this.tearDownRoom(); } - this.getLevel().getCapability(AetherCapabilities.AETHER_TIME_CAPABILITY).ifPresent((aetherTime) -> { + this.level().getCapability(AetherCapabilities.AETHER_TIME_CAPABILITY).ifPresent((aetherTime) -> { aetherTime.setEternalDay(false); aetherTime.updateEternalDay(); }); @@ -757,13 +757,13 @@ public boolean canUse() { public void start() { AbstractCrystal crystal; if (--this.crystalCount <= 0) { - crystal = new IceCrystal(this.sunSpirit.getLevel(), this.sunSpirit); + crystal = new IceCrystal(this.sunSpirit.level(), this.sunSpirit); this.crystalCount = 4 + this.sunSpirit.getRandom().nextInt(4); } else { - crystal = new FireCrystal(this.sunSpirit.getLevel(), this.sunSpirit); + crystal = new FireCrystal(this.sunSpirit.level(), this.sunSpirit); } - this.sunSpirit.playSound(this.sunSpirit.getShootSound(), 1.0F, this.sunSpirit.getLevel().getRandom().nextFloat() - this.sunSpirit.getLevel().getRandom().nextFloat() * 0.2F + 1.2F); - this.sunSpirit.getLevel().addFreshEntity(crystal); + this.sunSpirit.playSound(this.sunSpirit.getShootSound(), 1.0F, this.sunSpirit.level().getRandom().nextFloat() - this.sunSpirit.level().getRandom().nextFloat() * 0.2F + 1.2F); + this.sunSpirit.level().addFreshEntity(crystal); this.shootInterval = (int) (15 + this.sunSpirit.getHealth() / 2); } @@ -794,8 +794,8 @@ public boolean canUse() { public void start() { BlockPos pos = BlockPos.containing(this.sunSpirit.getX(), this.sunSpirit.getY(), this.sunSpirit.getZ()); for (int i = 0; i <= 3; i++) { - if (this.sunSpirit.getLevel().isEmptyBlock(pos) && !this.sunSpirit.getLevel().isEmptyBlock(pos.below())) { - this.sunSpirit.getLevel().setBlock(pos, Blocks.FIRE.defaultBlockState(), 1 | 2 | 8); + if (this.sunSpirit.level().isEmptyBlock(pos) && !this.sunSpirit.level().isEmptyBlock(pos.below())) { + this.sunSpirit.level().setBlock(pos, Blocks.FIRE.defaultBlockState(), 1 | 2 | 8); break; } pos = pos.below(); diff --git a/src/main/java/com/aetherteam/aether/entity/monster/dungeon/boss/ValkyrieQueen.java b/src/main/java/com/aetherteam/aether/entity/monster/dungeon/boss/ValkyrieQueen.java index 0cd33e0537..83c487107b 100644 --- a/src/main/java/com/aetherteam/aether/entity/monster/dungeon/boss/ValkyrieQueen.java +++ b/src/main/java/com/aetherteam/aether/entity/monster/dungeon/boss/ValkyrieQueen.java @@ -167,24 +167,24 @@ public void tick() { */ private void breakBlocks() { LivingEntity target = this.getTarget(); - if (!this.getLevel().isClientSide()) { + if (!this.level().isClientSide()) { if (target != null) { - if (ForgeEventFactory.getMobGriefingEvent(this.getLevel(), this)) { + if (ForgeEventFactory.getMobGriefingEvent(this.level(), this)) { for (int i = 0; i < 2; i++) { Vec3i vector = i == 0 ? this.getMotionDirection().getNormal() : Vec3i.ZERO; BlockPos upperPosition = BlockPos.containing(this.getEyePosition()).offset(vector); BlockPos lowerPosition = this.blockPosition().offset(vector); - BlockState upperState = this.getLevel().getBlockState(upperPosition); - BlockState lowerState = this.getLevel().getBlockState(lowerPosition); + BlockState upperState = this.level().getBlockState(upperPosition); + BlockState lowerState = this.level().getBlockState(lowerPosition); if (!upperState.isAir() && !upperState.is(AetherTags.Blocks.VALKYRIE_QUEEN_UNBREAKABLE) // Check upper block at player height. - && (upperState.getShape(this.getLevel(), upperPosition).equals(Shapes.block()) || !upperState.getCollisionShape(this.getLevel(), upperPosition).isEmpty()) + && (upperState.getShape(this.level(), upperPosition).equals(Shapes.block()) || !upperState.getCollisionShape(this.level(), upperPosition).isEmpty()) && (this.getDungeon() == null || this.getDungeon().roomBounds().contains(upperPosition.getCenter()))) { - this.getLevel().destroyBlock(upperPosition, true, this); + this.level().destroyBlock(upperPosition, true, this); this.swing(InteractionHand.MAIN_HAND); } else if (!lowerState.isAir() && !lowerState.is(AetherTags.Blocks.VALKYRIE_QUEEN_UNBREAKABLE) // Check lower block at player height. - && (lowerState.getShape(this.getLevel(), lowerPosition).equals(Shapes.block()) || !lowerState.getCollisionShape(this.getLevel(), lowerPosition).isEmpty()) + && (lowerState.getShape(this.level(), lowerPosition).equals(Shapes.block()) || !lowerState.getCollisionShape(this.level(), lowerPosition).isEmpty()) && (this.getDungeon() == null || this.getDungeon().roomBounds().contains(lowerPosition.getCenter()))) { - this.getLevel().destroyBlock(lowerPosition, true, this); + this.level().destroyBlock(lowerPosition, true, this); this.swing(InteractionHand.MAIN_HAND); } } @@ -249,12 +249,12 @@ protected void teleportUnstuck(Entity target) { @Override protected InteractionResult mobInteract(Player player, InteractionHand hand) { if (hand == InteractionHand.MAIN_HAND) { - if (!this.isBossFight() && !this.getLevel().isClientSide()) { + if (!this.isBossFight() && !this.level().isClientSide()) { if (!this.isReady()) { this.lookAt(player, 180.0F, 180.0F); if (player instanceof ServerPlayer serverPlayer) { if (this.getConversingPlayer() == null) { - this.getLevel().broadcastEntityEvent(this, (byte) 71); + this.level().broadcastEntityEvent(this, (byte) 71); this.setConversingPlayer(serverPlayer); } } @@ -293,7 +293,7 @@ public void handleNpcInteraction(Player player, byte interactionID) { this.chat(player, Component.translatable("gui.aether.queen.dialog.answer")); break; case 1: // Tells the players nearby to ready up for a fight. - if (this.getLevel().getDifficulty() == Difficulty.PEACEFUL) { // Check for peaceful mode. + if (this.level().getDifficulty() == Difficulty.PEACEFUL) { // Check for peaceful mode. this.chat(player, Component.translatable("gui.aether.queen.dialog.peaceful")); } else { if (player.getInventory().countItem(AetherItems.VICTORY_MEDAL.get()) >= 10) { // Checks for Victory Medals. @@ -342,7 +342,7 @@ public void readyUp() { */ protected void chatWithNearby(Component message) { AABB room = this.dungeon == null ? this.getBoundingBox().inflate(16) : this.dungeon.roomBounds(); - this.level.getNearbyPlayers(NON_COMBAT, this, room).forEach(player -> this.chat(player, message)); + this.level().getNearbyPlayers(NON_COMBAT, this, room).forEach(player -> this.chat(player, message)); } /** @@ -367,10 +367,10 @@ public boolean hurt(DamageSource source, float amount) { return super.hurt(source, amount); } if (this.isReady()) { - if (source.getDirectEntity() instanceof LivingEntity attacker && this.getLevel().getDifficulty() != Difficulty.PEACEFUL) { + if (source.getDirectEntity() instanceof LivingEntity attacker && this.level().getDifficulty() != Difficulty.PEACEFUL) { if (this.getDungeon() == null || this.getDungeon().isPlayerWithinRoomInterior(attacker)) { if (super.hurt(source, amount) && this.getHealth() > 0) { - if (!this.getLevel().isClientSide() && !this.isBossFight()) { + if (!this.level().isClientSide() && !this.isBossFight()) { this.chatWithNearby(Component.translatable("gui.aether.queen.dialog.fight")); this.setBossFight(true); if (this.getDungeon() != null) { @@ -380,7 +380,7 @@ public boolean hurt(DamageSource source, float amount) { return true; } } else { - if (!this.getLevel().isClientSide() && attacker instanceof Player player) { + if (!this.level().isClientSide() && attacker instanceof Player player) { this.displayTooFarMessage(player); return false; } @@ -422,7 +422,7 @@ public void reset() { */ @Override public void die(DamageSource source) { - if (!this.level.isClientSide) { + if (!this.level().isClientSide) { this.bossFight.setProgress(this.getHealth() / this.getMaxHealth()); // Forces an update to the boss health meter. this.chatWithNearby(Component.translatable("gui.aether.queen.dialog.defeated")); this.spawnExplosionParticles(); @@ -440,10 +440,10 @@ public void die(DamageSource source) { @Override public void tearDownRoom() { for (BlockPos pos : BlockPos.betweenClosed((int) this.dungeonBounds.minX, (int) this.dungeonBounds.minY, (int) this.dungeonBounds.minZ, (int) this.dungeonBounds.maxX, (int) this.dungeonBounds.maxY, (int) this.dungeonBounds.maxZ)) { - BlockState state = this.getLevel().getBlockState(pos); + BlockState state = this.level().getBlockState(pos); BlockState newState = this.convertBlock(state); if (newState != null) { - this.getLevel().setBlock(pos, newState, 1 | 2); + this.level().setBlock(pos, newState, 1 | 2); } } } @@ -747,7 +747,7 @@ public ThunderCrystalAttackGoal(Mob mob, int attackInterval, float attackRadius) public boolean canUse() { LivingEntity target = this.mob.getTarget(); if (target != null && target.isAlive()) { - return this.mob.getLevel().getDifficulty() != Difficulty.PEACEFUL; + return this.mob.level().getDifficulty() != Difficulty.PEACEFUL; } else { return false; } @@ -759,8 +759,8 @@ public void tick() { double distance = this.mob.distanceTo(this.mob.getTarget()); if (distance < this.attackRadius) { if (++this.attackTime >= this.attackInterval) { - ThunderCrystal thunderCrystal = new ThunderCrystal(AetherEntityTypes.THUNDER_CRYSTAL.get(), this.mob.getLevel(), this.mob, this.mob.getTarget()); - this.mob.getLevel().addFreshEntity(thunderCrystal); + ThunderCrystal thunderCrystal = new ThunderCrystal(AetherEntityTypes.THUNDER_CRYSTAL.get(), this.mob.level(), this.mob, this.mob.getTarget()); + this.mob.level().addFreshEntity(thunderCrystal); this.attackTime = this.mob.getRandom().nextInt(40); } } diff --git a/src/main/java/com/aetherteam/aether/entity/monster/dungeon/boss/ai/AvoidObstacles.java b/src/main/java/com/aetherteam/aether/entity/monster/dungeon/boss/ai/AvoidObstacles.java index 4ec28c9e6a..9adcd3f869 100644 --- a/src/main/java/com/aetherteam/aether/entity/monster/dungeon/boss/ai/AvoidObstacles.java +++ b/src/main/java/com/aetherteam/aether/entity/monster/dungeon/boss/ai/AvoidObstacles.java @@ -48,7 +48,7 @@ protected void start(ServerLevel level, Slider slider, long gameTime) { boolean isTouchingWall = false; for (BlockPos pos : BlockPos.betweenClosed(min, max)) { - if (slider.getLevel().getBlockState(pos).is(AetherTags.Blocks.SLIDER_UNBREAKABLE)) { + if (slider.level().getBlockState(pos).is(AetherTags.Blocks.SLIDER_UNBREAKABLE)) { isTouchingWall = true; break; } @@ -61,7 +61,7 @@ protected void start(ServerLevel level, Slider slider, long gameTime) { isTouchingWall = false; for (int x = Mth.floor(collisionBox.minX); x < collisionBox.maxX; x++) { for (int z = Mth.floor(collisionBox.minZ); z < collisionBox.maxZ; z++) { - if (slider.getLevel().getBlockState(pos.set(x, y, z)).is(AetherTags.Blocks.SLIDER_UNBREAKABLE)) { + if (slider.level().getBlockState(pos.set(x, y, z)).is(AetherTags.Blocks.SLIDER_UNBREAKABLE)) { isTouchingWall = true; } } diff --git a/src/main/java/com/aetherteam/aether/entity/monster/dungeon/boss/ai/Collide.java b/src/main/java/com/aetherteam/aether/entity/monster/dungeon/boss/ai/Collide.java index 808d56154b..e9b9123d96 100644 --- a/src/main/java/com/aetherteam/aether/entity/monster/dungeon/boss/ai/Collide.java +++ b/src/main/java/com/aetherteam/aether/entity/monster/dungeon/boss/ai/Collide.java @@ -1,6 +1,6 @@ package com.aetherteam.aether.entity.monster.dungeon.boss.ai; -import com.aetherteam.aether.data.resources.AetherDamageTypes; +import com.aetherteam.aether.data.resources.registries.AetherDamageTypes; import com.aetherteam.aether.entity.ai.brain.memory.AetherMemoryModuleTypes; import com.aetherteam.aether.entity.monster.dungeon.boss.Slider; import com.google.common.collect.ImmutableMap; @@ -43,7 +43,7 @@ protected void tick(ServerLevel level, Slider slider, long gameTime) { Vec3 max = new Vec3(slider.getBoundingBox().maxX + 0.1, slider.getBoundingBox().maxY + 0.1, slider.getBoundingBox().maxZ + 0.1); AABB collisionBounds = new AABB(min, max); for (Entity entity : level.getEntities(slider, collisionBounds)) { - if (entity instanceof LivingEntity livingEntity && entity.hurt(AetherDamageTypes.entityDamageSource(slider.getLevel(), AetherDamageTypes.CRUSH, slider), 6)) { + if (entity instanceof LivingEntity livingEntity && entity.hurt(AetherDamageTypes.entityDamageSource(slider.level(), AetherDamageTypes.CRUSH, slider), 6)) { if (livingEntity instanceof Player player && player.getUseItem().is(Items.SHIELD) && player.isBlocking()) { // Disables the player's Shield if one is being used. player.getCooldowns().addCooldown(Items.SHIELD, 100); player.stopUsingItem(); diff --git a/src/main/java/com/aetherteam/aether/entity/monster/dungeon/boss/ai/Crush.java b/src/main/java/com/aetherteam/aether/entity/monster/dungeon/boss/ai/Crush.java index 28b7e84c3b..a7eef92d24 100644 --- a/src/main/java/com/aetherteam/aether/entity/monster/dungeon/boss/ai/Crush.java +++ b/src/main/java/com/aetherteam/aether/entity/monster/dungeon/boss/ai/Crush.java @@ -43,16 +43,16 @@ protected void start(ServerLevel level, Slider slider, long gameTime) { AABB crushBox = slider.getBoundingBox().inflate(0.2); for (BlockPos pos : BlockPos.betweenClosed(Mth.floor(crushBox.minX), Mth.floor(crushBox.minY), Mth.floor(crushBox.minZ), Mth.floor(crushBox.maxX), Mth.floor(crushBox.maxY), Mth.floor(crushBox.maxZ))) { if (slider.getDungeon() == null || slider.getDungeon().roomBounds().contains(pos.getCenter())) { - BlockState blockState = slider.getLevel().getBlockState(pos); + BlockState blockState = slider.level().getBlockState(pos); if (this.isBreakable(blockState)) { - crushed = slider.getLevel().destroyBlock(pos, true, slider) || crushed; - EntityUtil.spawnRemovalParticles(slider.getLevel(), pos); + crushed = slider.level().destroyBlock(pos, true, slider) || crushed; + EntityUtil.spawnRemovalParticles(slider.level(), pos); } } } } if (crushed) { - slider.getLevel().playSound(null, slider.blockPosition(), SoundEvents.GENERIC_EXPLODE, SoundSource.BLOCKS, 3.0F, (0.625F + (slider.getRandom().nextFloat() - slider.getRandom().nextFloat()) * 0.2F) * 0.7F); + slider.level().playSound(null, slider.blockPosition(), SoundEvents.GENERIC_EXPLODE, SoundSource.BLOCKS, 3.0F, (0.625F + (slider.getRandom().nextFloat() - slider.getRandom().nextFloat()) * 0.2F) * 0.7F); slider.playSound(slider.getCollideSound(), 2.5F, 1.0F / (slider.getRandom().nextFloat() * 0.2F + 0.9F)); slider.getBrain().setMemoryWithExpiry(AetherMemoryModuleTypes.MOVE_DELAY.get(), Unit.INSTANCE, slider.calculateMoveDelay()); slider.setDeltaMovement(Vec3.ZERO); @@ -67,7 +67,7 @@ protected void start(ServerLevel level, Slider slider, long gameTime) { private boolean blocksBetween(Slider slider) { Brain brain = slider.getBrain(); Optional attackTarget = brain.getMemory(MemoryModuleType.ATTACK_TARGET); - return attackTarget.filter(livingEntity -> slider.getLevel().getBlockStates(AABB.of(BoundingBox.fromCorners(livingEntity.blockPosition(), slider.blockPosition()))).anyMatch(this::isBreakable)).isPresent(); + return attackTarget.filter(livingEntity -> slider.level().getBlockStates(AABB.of(BoundingBox.fromCorners(livingEntity.blockPosition(), slider.blockPosition()))).anyMatch(this::isBreakable)).isPresent(); } /** diff --git a/src/main/java/com/aetherteam/aether/entity/passive/Aerbunny.java b/src/main/java/com/aetherteam/aether/entity/passive/Aerbunny.java index c76f1253e8..6bf7263b19 100644 --- a/src/main/java/com/aetherteam/aether/entity/passive/Aerbunny.java +++ b/src/main/java/com/aetherteam/aether/entity/passive/Aerbunny.java @@ -92,7 +92,7 @@ public void tick() { super.tick(); if (!this.isFastFalling()) { // Handle slow-falling unless the Aerbunny is set to fall fast. this.handleFallSpeed(); - } else if (this.isOnGround()) { + } else if (this.onGround()) { this.setFastFalling(false); } this.setPuffiness(this.getPuffiness() - this.puffSubtract); @@ -103,7 +103,7 @@ public void tick() { this.setPuffiness(0); } this.handlePlayerInput(); - if (this.getVehicle() != null && (this.getVehicle().isOnGround() || this.getVehicle().isInFluidType())) { // Reset the last tracked fall position if the Aerbunny touches a surface. + if (this.getVehicle() != null && (this.getVehicle().onGround() || this.getVehicle().isInFluidType())) { // Reset the last tracked fall position if the Aerbunny touches a surface. this.lastPos = null; } } @@ -144,7 +144,7 @@ private void handlePlayerInput() { EntityUtil.copyRotations(this, player); player.resetFallDistance(); - if (!player.isOnGround() && !player.isFallFlying()) { + if (!player.onGround() && !player.isFallFlying()) { AttributeInstance playerGravity = player.getAttribute(ForgeMod.ENTITY_GRAVITY.get()); if (playerGravity != null) { if (!player.getAbilities().flying && !player.isInFluidType() && playerGravity.getValue() > 0.02) { // Entity isn't allowed to fall too slowly from gravity. @@ -153,13 +153,13 @@ private void handlePlayerInput() { } AetherPlayer.get(player).ifPresent(aetherPlayer -> { Player innerPlayer = aetherPlayer.getPlayer(); - if (this.getLevel().isClientSide()) { + if (this.level().isClientSide()) { if (innerPlayer.getDeltaMovement().y() <= 0.0) { if (this.lastPos == null) { // Tracks the last position when the player starts falling. this.lastPos = this.position(); } // The player is only able to jump if the Aerbunny's position is below the last tracked falling position, to avoid infinite jump exploits. - if (!innerPlayer.isOnGround() && aetherPlayer.isJumping() && innerPlayer.getDeltaMovement().y() <= 0.0 && this.position().y() < this.lastPos.y() - 1.1) { + if (!innerPlayer.onGround() && aetherPlayer.isJumping() && innerPlayer.getDeltaMovement().y() <= 0.0 && this.position().y() < this.lastPos.y() - 1.1) { innerPlayer.setDeltaMovement(innerPlayer.getDeltaMovement().x(), 0.125, innerPlayer.getDeltaMovement().z()); PacketRelay.sendToServer(AetherPacketHandler.INSTANCE, new AerbunnyPuffPacket(this.getId())); // Calls Aerbunny#puff() on the server. this.spawnExplosionParticle(); @@ -185,7 +185,7 @@ private void handlePlayerInput() { public void baseTick() { super.baseTick(); if (this.isAlive() && this.isPassenger() && this.getVehicle() != null && this.getVehicle().isEyeInFluidType(ForgeMod.WATER_TYPE.get()) - && !this.getLevel().getBlockState(BlockPos.containing(this.getVehicle().getX(), this.getVehicle().getEyeY(), this.getVehicle().getZ())).is(Blocks.BUBBLE_COLUMN)) { + && !this.level().getBlockState(BlockPos.containing(this.getVehicle().getX(), this.getVehicle().getEyeY(), this.getVehicle().getZ())).is(Blocks.BUBBLE_COLUMN)) { this.stopRiding(); } } @@ -222,7 +222,7 @@ private InteractionResult ridePlayer(Player player) { this.setDeltaMovement(playerMovement.x() * 5, playerMovement.y() * 0.5 + 0.5, playerMovement.z() * 5); } else if (this.startRiding(player)) { // Mount segment. AetherPlayer.get(player).ifPresent(aetherPlayer -> aetherPlayer.setMountedAerbunny(this)); - this.getLevel().playSound(player, this, AetherSoundEvents.ENTITY_AERBUNNY_LIFT.get(), SoundSource.NEUTRAL, 1.0F, (this.getRandom().nextFloat() - this.getRandom().nextFloat()) * 0.2F + 1.0F); + this.level().playSound(player, this, AetherSoundEvents.ENTITY_AERBUNNY_LIFT.get(), SoundSource.NEUTRAL, 1.0F, (this.getRandom().nextFloat() - this.getRandom().nextFloat()) * 0.2F + 1.0F); } return InteractionResult.SUCCESS; } @@ -262,7 +262,7 @@ protected void midairJump() { Vec3 motion = this.getDeltaMovement(); if (motion.y() < 0) { this.puff(); - this.getLevel().broadcastEntityEvent(this, (byte) 70); + this.level().broadcastEntityEvent(this, (byte) 70); } this.setDeltaMovement(new Vec3(motion.x(), 0.25, motion.z())); } @@ -271,7 +271,7 @@ protected void midairJump() { * Sets the puffiness to the maximum amount, from {@link AerbunnyPuffPacket}. */ public void puff() { - if (this.getLevel() instanceof ServerLevel) { + if (this.level() instanceof ServerLevel) { this.setPuffiness(MAXIMUM_PUFFS); } } @@ -454,7 +454,7 @@ public boolean canContinueToUse() { @Override public void start() { - LivingEntity attacker = this.aerbunny.getLevel().getNearestPlayer(this.aerbunny, 12); + LivingEntity attacker = this.aerbunny.level().getNearestPlayer(this.aerbunny, 12); if (attacker == null) { return; } @@ -475,7 +475,7 @@ public void start() { */ @Override public void tick() { - if (this.aerbunny.getLevel() instanceof ServerLevel serverLevel) { + if (this.aerbunny.level() instanceof ServerLevel serverLevel) { if (this.aerbunny.getRandom().nextInt(4) == 0) { serverLevel.sendParticles(ParticleTypes.SPLASH, this.aerbunny.getRandomX(0.5), this.aerbunny.getRandomY(), this.aerbunny.getRandomZ(0.5), 2, 0, 0, 0, 0); } @@ -498,13 +498,13 @@ public AerbunnyMoveControl(Aerbunny aerbunny) { public void tick() { super.tick(); if (this.aerbunny.zza != 0) { - if (this.aerbunny.isOnGround()) { + if (this.aerbunny.onGround()) { this.aerbunny.getJumpControl().jump(); } else { int x = Mth.floor(this.aerbunny.getX()); int y = Mth.floor(this.aerbunny.getBoundingBox().minY); int z = Mth.floor(this.aerbunny.getZ()); - if (this.checkForSurfaces(this.aerbunny.getLevel(), x, y, z) && !this.aerbunny.horizontalCollision) { + if (this.checkForSurfaces(this.aerbunny.level(), x, y, z) && !this.aerbunny.horizontalCollision) { this.aerbunny.midairJump(); } } diff --git a/src/main/java/com/aetherteam/aether/entity/passive/Aerwhale.java b/src/main/java/com/aetherteam/aether/entity/passive/Aerwhale.java index d0a99ea790..8e56ec2d36 100644 --- a/src/main/java/com/aetherteam/aether/entity/passive/Aerwhale.java +++ b/src/main/java/com/aetherteam/aether/entity/passive/Aerwhale.java @@ -126,7 +126,7 @@ public void travel(Vec3 vector) { ); } - if (!this.getLevel().isClientSide()) { + if (!this.level().isClientSide()) { super.travel(vector); } @@ -155,11 +155,11 @@ public void tick() { protected InteractionResult mobInteract(Player player, InteractionHand hand) { if (player.getUUID().equals(UUID.fromString("031025bd-0a15-439b-9c55-06a20d0de76f"))) { // SerenityLowes player.startRiding(this); - if (!this.getLevel().isClientSide()) { + if (!this.level().isClientSide()) { MutableComponent msg = Component.literal("Serenity is the queen of W(h)ales!!"); - player.getLevel().players().forEach(p -> p.sendSystemMessage(msg)); + player.level().players().forEach(p -> p.sendSystemMessage(msg)); } - return InteractionResult.sidedSuccess(this.getLevel().isClientSide()); + return InteractionResult.sidedSuccess(this.level().isClientSide()); } return super.mobInteract(player, hand); } @@ -242,7 +242,7 @@ protected float getFlyingSpeed() { */ @Override public int getExperienceReward() { - return 1 + this.getLevel().getRandom().nextInt(3); + return 1 + this.level().getRandom().nextInt(3); } /** @@ -324,7 +324,7 @@ public void start() { z += this.mob.getZ(); // Make sure the mob doesn't fly out of the world. - y = Mth.clamp(y, this.mob.getLevel().getMinBuildHeight(), this.mob.getLevel().getMaxBuildHeight()); + y = Mth.clamp(y, this.mob.level().getMinBuildHeight(), this.mob.level().getMaxBuildHeight()); this.mob.getMoveControl().setWantedPosition(x, y, z, 1.0); } @@ -377,7 +377,7 @@ public void tick() { // [CODE COPY] - PathfinderMob#tickLeash() Entity entity = this.mob.getLeashHolder(); - if (entity != null && entity.getLevel() == this.mob.getLevel()) { + if (entity != null && entity.level() == this.mob.level()) { this.mob.restrictTo(entity.blockPosition(), 5); float f = this.mob.distanceTo(entity); if (f > 10.0F) { @@ -405,7 +405,7 @@ private boolean isColliding(Vec3 pos) { for (int i = 1; i < 7; ++i) { axisalignedbb = axisalignedbb.move(pos); - if (!this.mob.getLevel().noCollision(this.mob, axisalignedbb)) { + if (!this.mob.level().noCollision(this.mob, axisalignedbb)) { return true; } } diff --git a/src/main/java/com/aetherteam/aether/entity/passive/FlyingCow.java b/src/main/java/com/aetherteam/aether/entity/passive/FlyingCow.java index e28ada56c6..1b74fb0806 100644 --- a/src/main/java/com/aetherteam/aether/entity/passive/FlyingCow.java +++ b/src/main/java/com/aetherteam/aether/entity/passive/FlyingCow.java @@ -62,7 +62,7 @@ public InteractionResult mobInteract(Player playerEntity, InteractionHand hand) playerEntity.playSound(AetherSoundEvents.ENTITY_FLYING_COW_MILK.get(), 1.0F, 1.0F); ItemStack itemStack1 = ItemUtils.createFilledResult(itemStack, playerEntity, Items.MILK_BUCKET.getDefaultInstance()); playerEntity.setItemInHand(hand, itemStack1); - return InteractionResult.sidedSuccess(this.getLevel().isClientSide()); + return InteractionResult.sidedSuccess(this.level().isClientSide()); } else { return super.mobInteract(playerEntity, hand); } diff --git a/src/main/java/com/aetherteam/aether/entity/passive/Moa.java b/src/main/java/com/aetherteam/aether/entity/passive/Moa.java index 145b112c48..0bf8097abb 100644 --- a/src/main/java/com/aetherteam/aether/entity/passive/Moa.java +++ b/src/main/java/com/aetherteam/aether/entity/passive/Moa.java @@ -215,7 +215,7 @@ public void tick() { this.setEntityOnGround(false); } } - if (this.isOnGround()) { // Reset jumps when the Moa is on the ground. + if (this.onGround()) { // Reset jumps when the Moa is on the ground. this.setRemainingJumps(this.getMaxJumps()); } if (this.getJumpCooldown() > 0) { // Handles jump reset behavior. @@ -226,7 +226,7 @@ public void tick() { } // Handles egg laying. - if (!this.getLevel().isClientSide() && this.isAlive()) { + if (!this.level().isClientSide() && this.isAlive()) { if (this.getRandom().nextInt(900) == 0 && this.deathTime == 0) { this.heal(1.0F); } @@ -250,14 +250,14 @@ public void tick() { // Handles baby hunger. if (this.isBaby()) { if (!this.isHungry()) { - if (!this.getLevel().isClientSide()) { + if (!this.level().isClientSide()) { if (this.getRandom().nextInt(2000) == 0) { this.setHungry(true); } } } else { if (this.getRandom().nextInt(10) == 0) { - this.getLevel().addParticle(ParticleTypes.ANGRY_VILLAGER, this.getX() + (this.getRandom().nextDouble() - 0.5) * this.getBbWidth(), this.getY() + 1, this.getZ() + (this.getRandom().nextDouble() - 0.5) * this.getBbWidth(), 0.0, 0.0, 0.0); + this.level().addParticle(ParticleTypes.ANGRY_VILLAGER, this.getX() + (this.getRandom().nextDouble() - 0.5) * this.getBbWidth(), this.getY() + 1, this.getZ() + (this.getRandom().nextDouble() - 0.5) * this.getBbWidth(), 0.0, 0.0, 0.0); } } } else { @@ -280,8 +280,8 @@ public void tick() { if (this.getFlapCooldown() > 0) { this.setFlapCooldown(this.getFlapCooldown() - 1); } else if (this.getFlapCooldown() == 0) { - if (!this.isOnGround()) { - this.getLevel().playSound(null, this, AetherSoundEvents.ENTITY_MOA_FLAP.get(), SoundSource.NEUTRAL, 0.15F, Mth.clamp(this.getRandom().nextFloat(), 0.7F, 1.0F) + Mth.clamp(this.getRandom().nextFloat(), 0.0F, 0.3F)); + if (!this.onGround()) { + this.level().playSound(null, this, AetherSoundEvents.ENTITY_MOA_FLAP.get(), SoundSource.NEUTRAL, 0.15F, Mth.clamp(this.getRandom().nextFloat(), 0.7F, 1.0F) + Mth.clamp(this.getRandom().nextFloat(), 0.0F, 0.3F)); this.setFlapCooldown(15); } } @@ -299,7 +299,7 @@ protected void addPassenger(Entity passenger) { if (this.getLastRider() == null || this.getLastRider() != player.getUUID()) { this.setLastRider(player.getUUID()); } - if (!player.getLevel().isClientSide()) { + if (!player.level().isClientSide()) { AetherPlayer.get(player).ifPresent((aetherPlayer) -> aetherPlayer.setSynched(INBTSynchable.Direction.CLIENT, "setLastRiddenMoa", this.getMoaUUID())); // Tracks the player as having last ridden this Moa. Map userSkinsData = ServerPerkData.MOA_SKIN_INSTANCE.getServerPerkData(player.getServer()); if (userSkinsData.containsKey(this.getLastRider())) { // Tracks a Moa Skin as being tied to this Moa and this passenger. @@ -345,7 +345,7 @@ public void travel(Vec3 vector) { public void onJump(Mob mob) { super.onJump(mob); this.setJumpCooldown(10); - if (!this.isOnGround()) { + if (!this.onGround()) { this.setRemainingJumps(this.getRemainingJumps() - 1); this.spawnExplosionParticle(); } @@ -365,15 +365,15 @@ public InteractionResult mobInteract(Player player, InteractionHand hand) { itemStack.hurtAndBreak(1, player, (p) -> p.broadcastBreakEvent(hand)); this.setSitting(!this.isSitting()); this.spawnExplosionParticle(); - return InteractionResult.sidedSuccess(this.getLevel().isClientSide()); + return InteractionResult.sidedSuccess(this.level().isClientSide()); } else if (this.isPlayerGrown() && itemStack.isEmpty() && player.isShiftKeyDown()) { // Toggles whether a tamed Moa will follow the player. if (this.getFollowing() == null) { this.setFollowing(player.getUUID()); } else { this.setFollowing(null); } - return InteractionResult.sidedSuccess(this.getLevel().isClientSide()); - } else if (!this.getLevel().isClientSide() && this.isPlayerGrown() && this.isBaby() && this.isHungry() && this.getAmountFed() < 3 && itemStack.is(AetherTags.Items.MOA_FOOD_ITEMS)) { // Feeds a hungry baby Moa. + return InteractionResult.sidedSuccess(this.level().isClientSide()); + } else if (!this.level().isClientSide() && this.isPlayerGrown() && this.isBaby() && this.isHungry() && this.getAmountFed() < 3 && itemStack.is(AetherTags.Items.MOA_FOOD_ITEMS)) { // Feeds a hungry baby Moa. if (!player.getAbilities().instabuild) { itemStack.shrink(1); } @@ -389,7 +389,7 @@ public InteractionResult mobInteract(Player player, InteractionHand hand) { itemStack.shrink(1); } this.heal(5.0F); - return InteractionResult.sidedSuccess(this.getLevel().isClientSide()); + return InteractionResult.sidedSuccess(this.level().isClientSide()); } else { return super.mobInteract(player, hand); } @@ -757,7 +757,7 @@ public boolean isSaddleable() { */ @Override public double getMountJumpStrength() { - return this.isOnGround() ? 0.95 : 0.90; + return this.onGround() ? 0.95 : 0.90; } /** @@ -786,7 +786,7 @@ public float getFlyingSpeed() { */ @Override public int getMaxFallDistance() { - return this.isOnGround() ? super.getMaxFallDistance() : 14; + return this.onGround() ? super.getMaxFallDistance() : 14; } @Override diff --git a/src/main/java/com/aetherteam/aether/entity/passive/MountableAnimal.java b/src/main/java/com/aetherteam/aether/entity/passive/MountableAnimal.java index f31f7d72bc..216996cd8f 100644 --- a/src/main/java/com/aetherteam/aether/entity/passive/MountableAnimal.java +++ b/src/main/java/com/aetherteam/aether/entity/passive/MountableAnimal.java @@ -59,7 +59,7 @@ public void tick() { this.tick(this); this.riderTick(); super.tick(); - if (this.isOnGround()) { + if (this.onGround()) { this.setEntityOnGround(true); } if (this.getPlayerJumped()) { @@ -97,10 +97,10 @@ protected void jumpFromGround() { public InteractionResult mobInteract(Player playerEntity, InteractionHand hand) { boolean flag = this.isFood(playerEntity.getItemInHand(hand)); if (!flag && this.isSaddled() && !this.isVehicle() && !playerEntity.isSecondaryUseActive()) { - if (!this.getLevel().isClientSide()) { + if (!this.level().isClientSide()) { playerEntity.startRiding(this); } - return InteractionResult.sidedSuccess(this.getLevel().isClientSide()); + return InteractionResult.sidedSuccess(this.level().isClientSide()); } else { InteractionResult interactionResult = super.mobInteract(playerEntity, hand); if (!interactionResult.consumesAction()) { @@ -123,10 +123,10 @@ public Vec3 getDismountLocationForPassenger(LivingEntity livingEntity) { AABB bounds = livingEntity.getLocalBoundsForPose(pose); for (int[] offset : offsets) { mutableBlockPos.set(blockPos.getX() + offset[0], blockPos.getY(), blockPos.getZ() + offset[1]); - double d0 = this.getLevel().getBlockFloorHeight(mutableBlockPos); + double d0 = this.level().getBlockFloorHeight(mutableBlockPos); if (DismountHelper.isBlockFloorValid(d0)) { Vec3 vector3d = Vec3.upFromBottomCenterOf(mutableBlockPos, d0); - if (DismountHelper.canDismountTo(this.getLevel(), livingEntity, bounds.move(vector3d))) { + if (DismountHelper.canDismountTo(this.level(), livingEntity, bounds.move(vector3d))) { livingEntity.setPose(pose); return vector3d; } @@ -163,7 +163,7 @@ protected boolean canRide(Entity entityIn) { public void equipSaddle(@Nullable SoundSource soundCategory) { this.setSaddled(true); if (soundCategory != null && this.getSaddledSound() != null) { - this.getLevel().playSound(null, this, this.getSaddledSound(), soundCategory, 0.5F, 1.0F); + this.level().playSound(null, this, this.getSaddledSound(), soundCategory, 0.5F, 1.0F); } } @@ -255,7 +255,7 @@ public void setEntityOnGround(boolean onGround) { */ @Override public boolean canJump() { - return this.isSaddled() && this.isOnGround(); + return this.isSaddled() && this.onGround(); } /** diff --git a/src/main/java/com/aetherteam/aether/entity/passive/Sheepuff.java b/src/main/java/com/aetherteam/aether/entity/passive/Sheepuff.java index 8bd3888b30..8dfa89b4c4 100644 --- a/src/main/java/com/aetherteam/aether/entity/passive/Sheepuff.java +++ b/src/main/java/com/aetherteam/aether/entity/passive/Sheepuff.java @@ -36,6 +36,7 @@ import net.minecraft.world.inventory.AbstractContainerMenu; import net.minecraft.world.inventory.CraftingContainer; import net.minecraft.world.inventory.MenuType; +import net.minecraft.world.inventory.TransientCraftingContainer; import net.minecraft.world.item.DyeColor; import net.minecraft.world.item.DyeItem; import net.minecraft.world.item.ItemStack; @@ -150,7 +151,7 @@ protected void customServerAiStep() { @Override public void aiStep() { - if (this.getLevel().isClientSide()) { + if (this.level().isClientSide()) { this.eatAnimationTick = Math.max(0, this.eatAnimationTick - 1); } super.aiStep(); @@ -215,7 +216,7 @@ public InteractionResult mobInteract(Player player, InteractionHand hand) { if (this.getColor() != color) { if (this.getPuffed() && itemstack.getCount() >= 2) { player.swing(hand); - if (!player.getLevel().isClientSide()) { + if (!player.level().isClientSide()) { this.setColor(color); if (!player.getAbilities().instabuild) { itemstack.shrink(2); @@ -223,7 +224,7 @@ public InteractionResult mobInteract(Player player, InteractionHand hand) { } } else if (!this.getPuffed()) { player.swing(hand); - if (!player.getLevel().isClientSide()) { + if (!player.level().isClientSide()) { this.setColor(color); if (!player.getAbilities().instabuild) { itemstack.shrink(1); @@ -261,7 +262,7 @@ public List onSheared(@Nullable Player player, ItemStack item, Level */ @Override public void shear(SoundSource source) { - this.getLevel().playSound(null, this, AetherSoundEvents.ENTITY_SHEEPUFF_SHEAR.get(), source, 1.0F, 1.0F); + this.level().playSound(null, this, AetherSoundEvents.ENTITY_SHEEPUFF_SHEAR.get(), source, 1.0F, 1.0F); this.amountEaten = 0; this.setSheared(true); this.setPuffed(false); @@ -362,7 +363,7 @@ protected SoundEvent getDeathSound() { @Override protected void playStepSound(BlockPos pos, BlockState state) { - this.getLevel().playSound(null, this.getX(), this.getY(), this.getZ(), AetherSoundEvents.ENTITY_SHEEPUFF_STEP.get(), SoundSource.NEUTRAL, 0.15F, 1.0F); + this.level().playSound(null, this.getX(), this.getY(), this.getZ(), AetherSoundEvents.ENTITY_SHEEPUFF_STEP.get(), SoundSource.NEUTRAL, 0.15F, 1.0F); } @Override @@ -398,7 +399,7 @@ protected int calculateFallDamage(float distance, float damageMultiplier) { @Override public int getMaxFallDistance() { - return !this.isOnGround() && this.getPuffed() ? 20 : super.getMaxFallDistance(); + return !this.onGround() && this.getPuffed() ? 20 : super.getMaxFallDistance(); } @Nullable @@ -416,13 +417,13 @@ private DyeColor getOffspringColor(Animal parent1, Animal parent2) { DyeColor dyeColor1 = ((Sheepuff) parent1).getColor(); DyeColor dyeColor2 = ((Sheepuff) parent2).getColor(); CraftingContainer craftingInventory = makeContainer(dyeColor1, dyeColor2); - return this.getLevel().getRecipeManager().getRecipeFor(RecipeType.CRAFTING, craftingInventory, this.getLevel()) - .map((p_213614_1_) -> p_213614_1_.assemble(craftingInventory, this.getLevel().registryAccess())) - .map(ItemStack::getItem).filter(DyeItem.class::isInstance).map(DyeItem.class::cast).map(DyeItem::getDyeColor).orElseGet(() -> this.getLevel().getRandom().nextBoolean() ? dyeColor1 : dyeColor2); + return this.level().getRecipeManager().getRecipeFor(RecipeType.CRAFTING, craftingInventory, this.level()) + .map((p_213614_1_) -> p_213614_1_.assemble(craftingInventory, this.level().registryAccess())) + .map(ItemStack::getItem).filter(DyeItem.class::isInstance).map(DyeItem.class::cast).map(DyeItem::getDyeColor).orElseGet(() -> this.level().getRandom().nextBoolean() ? dyeColor1 : dyeColor2); } private static CraftingContainer makeContainer(DyeColor dyeColor1, DyeColor dyeColor2) { - CraftingContainer craftingInventory = new CraftingContainer(new SheepuffContainer(null, -1), 2, 1); + CraftingContainer craftingInventory = new TransientCraftingContainer(new SheepuffContainer(null, -1), 2, 1); craftingInventory.setItem(0, new ItemStack(DyeItem.byColor(dyeColor1))); craftingInventory.setItem(1, new ItemStack(DyeItem.byColor(dyeColor2))); return craftingInventory; diff --git a/src/main/java/com/aetherteam/aether/entity/passive/WingedAnimal.java b/src/main/java/com/aetherteam/aether/entity/passive/WingedAnimal.java index 3f3aaeac1a..ccf90ef4c4 100644 --- a/src/main/java/com/aetherteam/aether/entity/passive/WingedAnimal.java +++ b/src/main/java/com/aetherteam/aether/entity/passive/WingedAnimal.java @@ -94,7 +94,7 @@ public void setWingAngle(float wingAngle) { */ @Override public float getFlyingSpeed() { - if (this.isEffectiveAi() && !this.isOnGround() && this.getPassengers().isEmpty()) { + if (this.isEffectiveAi() && !this.onGround() && this.getPassengers().isEmpty()) { return this.getSpeed() * (0.24F / ((float) Math.pow(0.91F, 3))); } else { return super.getFlyingSpeed(); @@ -114,6 +114,6 @@ public boolean canJump() { */ @Override public int getMaxFallDistance() { - return this.isOnGround() ? super.getMaxFallDistance() : 14; + return this.onGround() ? super.getMaxFallDistance() : 14; } } diff --git a/src/main/java/com/aetherteam/aether/entity/projectile/ZephyrSnowball.java b/src/main/java/com/aetherteam/aether/entity/projectile/ZephyrSnowball.java index 53cf840c58..a4badeaf7c 100644 --- a/src/main/java/com/aetherteam/aether/entity/projectile/ZephyrSnowball.java +++ b/src/main/java/com/aetherteam/aether/entity/projectile/ZephyrSnowball.java @@ -52,16 +52,16 @@ public ZephyrSnowball(Level level, LivingEntity shooter, double accelX, double a @SuppressWarnings("deprecation") @Override public void tick() { - if (!this.isOnGround()) { + if (!this.onGround()) { ++this.ticksInAir; } if (this.ticksInAir > 400) { - if (!this.getLevel().isClientSide()) { + if (!this.level().isClientSide()) { this.discard(); } } - if (this.getLevel().isClientSide() || (this.getOwner() == null || this.getOwner().isAlive()) && this.getLevel().hasChunkAt(this.blockPosition())) { - HitResult hitResult = ProjectileUtil.getHitResult(this, this::canHitEntity); + if (this.level().isClientSide() || (this.getOwner() == null || this.getOwner().isAlive()) && this.level().hasChunkAt(this.blockPosition())) { + HitResult hitResult = ProjectileUtil.getHitResultOnMoveVector(this, this::canHitEntity); if (hitResult.getType() != HitResult.Type.MISS && !ForgeEventFactory.onProjectileImpact(this, hitResult)) { this.onHit(hitResult); } @@ -75,13 +75,13 @@ public void tick() { float f = this.getInertia(); if (this.isInWater()) { for (int i = 0; i < 4; ++i) { - this.getLevel().addParticle(ParticleTypes.BUBBLE, d0 - vec3.x() * 0.25, d1 - vec3.y() * 0.25, d2 - vec3.z() * 0.25, vec3.x(), vec3.y(), vec3.z()); + this.level().addParticle(ParticleTypes.BUBBLE, d0 - vec3.x() * 0.25, d1 - vec3.y() * 0.25, d2 - vec3.z() * 0.25, vec3.x(), vec3.y(), vec3.z()); } f = 0.8F; } this.setDeltaMovement(vec3.add(this.xPower, this.yPower, this.zPower).scale(f)); - this.getLevel().addParticle(this.getTrailParticle(), d0, d1 + 0.5, d2, 0.0, 0.0, 0.0); + this.level().addParticle(this.getTrailParticle(), d0, d1 + 0.5, d2, 0.0, 0.0, 0.0); this.setPos(d0, d1, d2); } else { this.discard(); @@ -91,7 +91,7 @@ public void tick() { @Override protected void onHit(HitResult result) { super.onHit(result); - if (!this.getLevel().isClientSide()) { + if (!this.level().isClientSide()) { this.discard(); } } @@ -111,7 +111,7 @@ protected void onHitEntity(EntityHitResult result) { entity.setDeltaMovement(entity.getDeltaMovement().x(), entity.getDeltaMovement().y() + 0.5, entity.getDeltaMovement().z()); entity.setDeltaMovement(entity.getDeltaMovement().x() + (this.getDeltaMovement().x() * 1.5), entity.getDeltaMovement().y(), entity.getDeltaMovement().z() + (this.getDeltaMovement().z() * 1.5)); if (livingEntity instanceof ServerPlayer player) { - if (!this.getLevel().isClientSide()) { // Properly communicates the knockback to the client. + if (!this.level().isClientSide()) { // Properly communicates the knockback to the client. PacketRelay.sendToPlayer(AetherPacketHandler.INSTANCE, new ZephyrSnowballHitPacket(livingEntity.getId(), this.getDeltaMovement().x(), this.getDeltaMovement().z()), player); } } diff --git a/src/main/java/com/aetherteam/aether/entity/projectile/crystal/AbstractCrystal.java b/src/main/java/com/aetherteam/aether/entity/projectile/crystal/AbstractCrystal.java index c06150251f..7097cbc243 100644 --- a/src/main/java/com/aetherteam/aether/entity/projectile/crystal/AbstractCrystal.java +++ b/src/main/java/com/aetherteam/aether/entity/projectile/crystal/AbstractCrystal.java @@ -44,26 +44,26 @@ protected void defineSynchedData() { } @Override public void tick() { super.tick(); - if (!this.isOnGround()) { + if (!this.onGround()) { ++this.ticksInAir; } if (this.ticksInAir > this.getLifeSpan()) { - if (!this.getLevel().isClientSide()) { + if (!this.level().isClientSide()) { this.discard(); } } - HitResult result = ProjectileUtil.getHitResult(this, this::canHitEntity); + HitResult result = ProjectileUtil.getHitResultOnMoveVector(this, this::canHitEntity); boolean flag = false; if (result.getType() == HitResult.Type.BLOCK) { BlockPos blockPos = ((BlockHitResult) result).getBlockPos(); - BlockState blockState = this.getLevel().getBlockState(blockPos); + BlockState blockState = this.level().getBlockState(blockPos); if (blockState.is(Blocks.NETHER_PORTAL)) { this.handleInsidePortal(blockPos); flag = true; } else if (blockState.is(Blocks.END_GATEWAY)) { - BlockEntity blockEntity = this.getLevel().getBlockEntity(blockPos); + BlockEntity blockEntity = this.level().getBlockEntity(blockPos); if (blockEntity instanceof TheEndGatewayBlockEntity endGatewayBlockEntity && TheEndGatewayBlockEntity.canEntityTeleport(this)) { - TheEndGatewayBlockEntity.teleportEntity(this.getLevel(), blockPos, blockState, this, endGatewayBlockEntity); + TheEndGatewayBlockEntity.teleportEntity(this.level(), blockPos, blockState, this, endGatewayBlockEntity); } flag = true; } @@ -101,7 +101,7 @@ protected void tickMovement() { * Creates the crystal's explosion particles. */ public void spawnExplosionParticles() { - if (this.getLevel() instanceof ServerLevel level) { + if (this.level() instanceof ServerLevel level) { for (int i = 0; i < 20; i++) { double x = (this.random.nextFloat() - 0.5F) * 0.5; double y = (this.random.nextFloat() - 0.5F) * 0.5; diff --git a/src/main/java/com/aetherteam/aether/entity/projectile/crystal/CloudCrystal.java b/src/main/java/com/aetherteam/aether/entity/projectile/crystal/CloudCrystal.java index bc4736dfb7..fa2d9c9430 100644 --- a/src/main/java/com/aetherteam/aether/entity/projectile/crystal/CloudCrystal.java +++ b/src/main/java/com/aetherteam/aether/entity/projectile/crystal/CloudCrystal.java @@ -3,7 +3,7 @@ import com.aetherteam.aether.AetherTags; import com.aetherteam.aether.client.AetherSoundEvents; import com.aetherteam.aether.client.particle.AetherParticleTypes; -import com.aetherteam.aether.data.resources.AetherDamageTypes; +import com.aetherteam.aether.data.resources.registries.AetherDamageTypes; import com.aetherteam.aether.entity.AetherEntityTypes; import net.minecraft.core.particles.ParticleOptions; import net.minecraft.sounds.SoundEvent; @@ -37,7 +37,7 @@ protected void onHitEntity(EntityHitResult result) { Entity entity = result.getEntity(); if (entity instanceof LivingEntity livingEntity) { float bonus = entity.getType().is(AetherTags.Entities.FIRE_MOB) ? 3.0F : 0.0F; - if (livingEntity.hurt(AetherDamageTypes.indirectEntityDamageSource(this.getLevel(), AetherDamageTypes.CLOUD_CRYSTAL, this, this.getOwner()), 5.0F + bonus)) { + if (livingEntity.hurt(AetherDamageTypes.indirectEntityDamageSource(this.level(), AetherDamageTypes.CLOUD_CRYSTAL, this, this.getOwner()), 5.0F + bonus)) { WeaknessDamage.super.damageWithWeakness(this, livingEntity, this.random); } } @@ -46,7 +46,7 @@ protected void onHitEntity(EntityHitResult result) { @Override protected void onHitBlock(BlockHitResult result) { super.onHitBlock(result); - if (!this.getLevel().isClientSide()) { + if (!this.level().isClientSide()) { this.discard(); } } diff --git a/src/main/java/com/aetherteam/aether/entity/projectile/crystal/FireCrystal.java b/src/main/java/com/aetherteam/aether/entity/projectile/crystal/FireCrystal.java index dac3494b01..47abfe715b 100644 --- a/src/main/java/com/aetherteam/aether/entity/projectile/crystal/FireCrystal.java +++ b/src/main/java/com/aetherteam/aether/entity/projectile/crystal/FireCrystal.java @@ -1,7 +1,7 @@ package com.aetherteam.aether.entity.projectile.crystal; import com.aetherteam.aether.client.AetherSoundEvents; -import com.aetherteam.aether.data.resources.AetherDamageTypes; +import com.aetherteam.aether.data.resources.registries.AetherDamageTypes; import com.aetherteam.aether.entity.AetherEntityTypes; import com.aetherteam.aether.entity.monster.dungeon.boss.SunSpirit; import net.minecraft.core.particles.ParticleOptions; @@ -53,7 +53,7 @@ public FireCrystal(Level level, Entity shooter) { */ @Override protected void tickMovement() { - if (!this.getLevel().isClientSide()) { + if (!this.level().isClientSide()) { if (this.getOwner() == null || !this.getOwner().isAlive() || (this.getOwner() instanceof SunSpirit sunSpirit && sunSpirit.getDungeon() != null && sunSpirit.getDungeon().dungeonPlayers().isEmpty())) { if (this.getImpactExplosionSoundEvent() != null) { this.playSound(this.getImpactExplosionSoundEvent(), 1.0F, 1.0F); @@ -72,12 +72,12 @@ protected void tickMovement() { protected void onHitEntity(EntityHitResult result) { Entity entity = result.getEntity(); if (entity instanceof LivingEntity livingEntity) { - if (livingEntity.hurt(AetherDamageTypes.indirectEntityDamageSource(this.getLevel(), AetherDamageTypes.FIRE_CRYSTAL, this, this.getOwner()), 20.0F)) { + if (livingEntity.hurt(AetherDamageTypes.indirectEntityDamageSource(this.level(), AetherDamageTypes.FIRE_CRYSTAL, this, this.getOwner()), 20.0F)) { livingEntity.setSecondsOnFire(6); if (this.getImpactExplosionSoundEvent() != null) { - this.getLevel().playSound(null, this.getX(), this.getY(), this.getZ(), this.getImpactExplosionSoundEvent(), SoundSource.HOSTILE, 2.0F, this.random.nextFloat() - this.random.nextFloat() * 0.2F + 1.2F); + this.level().playSound(null, this.getX(), this.getY(), this.getZ(), this.getImpactExplosionSoundEvent(), SoundSource.HOSTILE, 2.0F, this.random.nextFloat() - this.random.nextFloat() * 0.2F + 1.2F); } - if (!this.getLevel().isClientSide()) { + if (!this.level().isClientSide()) { this.discard(); } } @@ -111,7 +111,7 @@ public boolean hurt(DamageSource source, float amount) { this.markHurt(); Entity entity = source.getEntity(); if (entity != null) { - if (!this.getLevel().isClientSide()) { + if (!this.level().isClientSide()) { Vec3 vec3 = entity.getLookAngle(); this.setDeltaMovement(vec3); this.xPower = vec3.x() * 0.25; diff --git a/src/main/java/com/aetherteam/aether/entity/projectile/crystal/IceCrystal.java b/src/main/java/com/aetherteam/aether/entity/projectile/crystal/IceCrystal.java index dfd4283aea..60de6b804f 100644 --- a/src/main/java/com/aetherteam/aether/entity/projectile/crystal/IceCrystal.java +++ b/src/main/java/com/aetherteam/aether/entity/projectile/crystal/IceCrystal.java @@ -2,7 +2,7 @@ import com.aetherteam.aether.client.AetherSoundEvents; import com.aetherteam.aether.client.particle.AetherParticleTypes; -import com.aetherteam.aether.data.resources.AetherDamageTypes; +import com.aetherteam.aether.data.resources.registries.AetherDamageTypes; import com.aetherteam.aether.entity.AetherEntityTypes; import net.minecraft.core.particles.ParticleOptions; import net.minecraft.nbt.CompoundTag; @@ -57,8 +57,8 @@ protected void onHitEntity(EntityHitResult result) { @Override protected void onHitBlock(BlockHitResult result) { if (this.attacked) { // Destroy the projectile if it has hit a wall after an attack. - this.getLevel().playSound(null, this.getX(), this.getY(), this.getZ(), this.getImpactExplosionSoundEvent(), SoundSource.HOSTILE, 2.0F, this.random.nextFloat() - this.random.nextFloat() * 0.2F + 1.2F); - if (!this.getLevel().isClientSide()) { + this.level().playSound(null, this.getX(), this.getY(), this.getZ(), this.getImpactExplosionSoundEvent(), SoundSource.HOSTILE, 2.0F, this.random.nextFloat() - this.random.nextFloat() * 0.2F + 1.2F); + if (!this.level().isClientSide()) { this.discard(); } } else { @@ -82,7 +82,7 @@ public boolean hurt(DamageSource source, float amount) { this.markHurt(); Entity entity = source.getEntity(); if (entity != null) { - if (!this.getLevel().isClientSide()) { + if (!this.level().isClientSide()) { Vec3 vec3 = entity.getLookAngle(); this.xPower = vec3.x() * 2.5; this.zPower = vec3.z() * 2.5; @@ -104,7 +104,7 @@ public boolean hurt(DamageSource source, float amount) { public void doDamage(Entity entity) { if (this.getOwner() != entity) { if (entity instanceof LivingEntity livingEntity) { - if (livingEntity.hurt(AetherDamageTypes.indirectEntityDamageSource(this.getLevel(), AetherDamageTypes.ICE_CRYSTAL, this, this.getOwner()), 7.0F)) { + if (livingEntity.hurt(AetherDamageTypes.indirectEntityDamageSource(this.level(), AetherDamageTypes.ICE_CRYSTAL, this, this.getOwner()), 7.0F)) { WeaknessDamage.super.damageWithWeakness(this, livingEntity, this.random); } } diff --git a/src/main/java/com/aetherteam/aether/entity/projectile/crystal/ThunderCrystal.java b/src/main/java/com/aetherteam/aether/entity/projectile/crystal/ThunderCrystal.java index ce457137d3..a2ed485a39 100644 --- a/src/main/java/com/aetherteam/aether/entity/projectile/crystal/ThunderCrystal.java +++ b/src/main/java/com/aetherteam/aether/entity/projectile/crystal/ThunderCrystal.java @@ -2,7 +2,7 @@ import com.aetherteam.aether.client.AetherSoundEvents; import com.aetherteam.aether.client.particle.AetherParticleTypes; -import com.aetherteam.aether.data.resources.AetherDamageTypes; +import com.aetherteam.aether.data.resources.registries.AetherDamageTypes; import com.aetherteam.aether.entity.EntityUtil; import net.minecraft.core.particles.ParticleOptions; import net.minecraft.core.particles.ParticleTypes; @@ -47,7 +47,7 @@ public ThunderCrystal(EntityType entityType, Level lev @Override protected void onHitEntity(EntityHitResult result) { if (result.getEntity() instanceof LivingEntity target && target != this.getOwner()) { - target.hurt(AetherDamageTypes.indirectEntityDamageSource(this.getLevel(), AetherDamageTypes.THUNDER_CRYSTAL, this, this.getOwner()), 5.0F); + target.hurt(AetherDamageTypes.indirectEntityDamageSource(this.level(), AetherDamageTypes.THUNDER_CRYSTAL, this, this.getOwner()), 5.0F); this.knockback(0.1, this.position().subtract(target.position())); // Apply knockback to the projectile from the distance difference between the projectile and hit entity. target.knockback(0.25, this.getX() - target.getX(), this.getZ() - target.getZ()); } @@ -58,7 +58,7 @@ protected void onHitEntity(EntityHitResult result) { */ @Override public void tickMovement() { - if (!this.getLevel().isClientSide()) { + if (!this.level().isClientSide()) { if (this.target == null || !this.target.isAlive() || this.getOwner() == null || !this.getOwner().isAlive()) { if (this.getImpactExplosionSoundEvent() != null) { this.playSound(this.getImpactExplosionSoundEvent(), 1.0F, 1.0F); @@ -89,7 +89,7 @@ public void tickMovement() { */ @Override public boolean hurt(DamageSource source, float pAmount) { - if (!this.getLevel().isClientSide() && source.getSourcePosition() != null && this.getLevel() instanceof ServerLevel serverLevel) { + if (!this.level().isClientSide() && source.getSourcePosition() != null && this.level() instanceof ServerLevel serverLevel) { serverLevel.sendParticles(ParticleTypes.CRIT, this.getX(), this.getY(), this.getZ(), 15, 0.2, 0.2, 0.2, 0.0); this.knockback(0.15 + pAmount / 8, this.position().subtract(source.getSourcePosition())); // Sets knockback movement in the direction of the damage. } @@ -114,7 +114,7 @@ public void knockback(double strength, Vec3 target) { */ @Override public void checkDespawn() { - if (this.getLevel().getDifficulty() == Difficulty.PEACEFUL) { + if (this.level().getDifficulty() == Difficulty.PEACEFUL) { this.discard(); } } @@ -142,7 +142,7 @@ public void addAdditionalSaveData(CompoundTag tag) { public void readAdditionalSaveData(CompoundTag tag) { super.readAdditionalSaveData(tag); if (tag.contains("Target")) { - this.target = this.level.getEntity(tag.getInt("Target")); + this.target = this.level().getEntity(tag.getInt("Target")); } } } diff --git a/src/main/java/com/aetherteam/aether/entity/projectile/crystal/WeaknessDamage.java b/src/main/java/com/aetherteam/aether/entity/projectile/crystal/WeaknessDamage.java index 8de36e0f2c..2f9067fab7 100644 --- a/src/main/java/com/aetherteam/aether/entity/projectile/crystal/WeaknessDamage.java +++ b/src/main/java/com/aetherteam/aether/entity/projectile/crystal/WeaknessDamage.java @@ -10,9 +10,9 @@ public interface WeaknessDamage { default void damageWithWeakness(AbstractCrystal crystal, LivingEntity livingEntity, RandomSource random) { livingEntity.addEffect(new MobEffectInstance(MobEffects.WEAKNESS, 10)); if (crystal.getImpactExplosionSoundEvent() != null) { - crystal.getLevel().playSound(null, crystal.getX(), crystal.getY(), crystal.getZ(), crystal.getImpactExplosionSoundEvent(), SoundSource.HOSTILE, 2.0F, random.nextFloat() - random.nextFloat() * 0.2F + 1.2F); + crystal.level().playSound(null, crystal.getX(), crystal.getY(), crystal.getZ(), crystal.getImpactExplosionSoundEvent(), SoundSource.HOSTILE, 2.0F, random.nextFloat() - random.nextFloat() * 0.2F + 1.2F); } - if (!crystal.getLevel().isClientSide()) { + if (!crystal.level().isClientSide()) { crystal.discard(); } } diff --git a/src/main/java/com/aetherteam/aether/entity/projectile/dart/AbstractDart.java b/src/main/java/com/aetherteam/aether/entity/projectile/dart/AbstractDart.java index e0438b05ed..93c26402ff 100644 --- a/src/main/java/com/aetherteam/aether/entity/projectile/dart/AbstractDart.java +++ b/src/main/java/com/aetherteam/aether/entity/projectile/dart/AbstractDart.java @@ -45,11 +45,11 @@ public AbstractDart(EntityType type, Level level, Living @Override public void tick() { super.tick(); - if (!this.isOnGround()) { + if (!this.onGround()) { ++this.ticksInAir; } if (this.ticksInAir > 500) { - if (!this.getLevel().isClientSide()) { + if (!this.level().isClientSide()) { this.discard(); } } @@ -101,7 +101,7 @@ protected void onHitEntity(EntityHitResult result) { } } - if (!this.getLevel().isClientSide() && owner instanceof LivingEntity) { + if (!this.level().isClientSide() && owner instanceof LivingEntity) { EnchantmentHelper.doPostHurtEffects(livingentity, owner); EnchantmentHelper.doPostDamageEffects((LivingEntity)owner, livingentity); } @@ -119,7 +119,7 @@ protected void onHitEntity(EntityHitResult result) { this.setDeltaMovement(this.getDeltaMovement().scale(-0.1)); this.setYRot(this.getYRot() + 180.0F); this.yRotO += 180.0F; - if (!this.getLevel().isClientSide() && this.getDeltaMovement().lengthSqr() < 1.0E-7) { + if (!this.level().isClientSide() && this.getDeltaMovement().lengthSqr() < 1.0E-7) { if (this.pickup == AbstractArrow.Pickup.ALLOWED) { this.spawnAtLocation(this.getPickupItem(), 0.1F); } diff --git a/src/main/java/com/aetherteam/aether/entity/projectile/weapon/HammerProjectile.java b/src/main/java/com/aetherteam/aether/entity/projectile/weapon/HammerProjectile.java index 9beae6ebf7..48629ee475 100644 --- a/src/main/java/com/aetherteam/aether/entity/projectile/weapon/HammerProjectile.java +++ b/src/main/java/com/aetherteam/aether/entity/projectile/weapon/HammerProjectile.java @@ -49,16 +49,16 @@ protected void defineSynchedData() { @Override public void tick() { super.tick(); - if (!this.isOnGround()) { + if (!this.onGround()) { ++this.ticksInAir; } if (this.ticksInAir > 500) { - if (!this.getLevel().isClientSide()) { + if (!this.level().isClientSide()) { this.discard(); } } - if (this.getLevel().isClientSide()) { - this.getLevel().addParticle(ParticleTypes.CLOUD, this.getX(), this.getY() + 0.2, this.getZ(), 0.0, 0.0, 0.0); + if (this.level().isClientSide()) { + this.level().addParticle(ParticleTypes.CLOUD, this.getX(), this.getY() + 0.2, this.getZ(), 0.0, 0.0, 0.0); } } @@ -83,8 +83,8 @@ public void shoot(float rotationPitch, float rotationYaw, float velocity, float @Override protected void onHit(HitResult result) { super.onHit(result); - if (!this.getLevel().isClientSide()) { - this.getLevel().broadcastEntityEvent(this, (byte) 3); + if (!this.level().isClientSide()) { + this.level().broadcastEntityEvent(this, (byte) 3); this.discard(); } } @@ -96,9 +96,9 @@ protected void onHit(HitResult result) { @Override protected void onHitEntity(EntityHitResult result) { Entity target = result.getEntity(); - if (!this.getLevel().isClientSide()) { + if (!this.level().isClientSide()) { this.launchTarget(target); - this.getLevel().broadcastEntityEvent(this, (byte) 70); + this.level().broadcastEntityEvent(this, (byte) 70); } else { PacketRelay.sendToServer(AetherPacketHandler.INSTANCE, new HammerProjectileLaunchPacket(target.getId(), this.getId())); this.spawnParticles(); @@ -112,16 +112,16 @@ protected void onHitEntity(EntityHitResult result) { @Override protected void onHitBlock(BlockHitResult result) { super.onHitBlock(result); - List list = this.getLevel().getEntities(this, this.getBoundingBox().inflate(5.0)); + List list = this.level().getEntities(this, this.getBoundingBox().inflate(5.0)); for (Entity target : list) { - if (!this.getLevel().isClientSide()) { + if (!this.level().isClientSide()) { this.launchTarget(target); } else { PacketRelay.sendToServer(AetherPacketHandler.INSTANCE, new HammerProjectileLaunchPacket(target.getId(), this.getId())); } } - if (!this.getLevel().isClientSide()) { - this.getLevel().broadcastEntityEvent(this, (byte) 70); + if (!this.level().isClientSide()) { + this.level().broadcastEntityEvent(this, (byte) 70); } else { this.spawnParticles(); } @@ -129,11 +129,11 @@ protected void onHitBlock(BlockHitResult result) { private void spawnParticles() { for (int j = 0; j < 8; j++) { - this.getLevel().addParticle(ParticleTypes.EXPLOSION, this.getX(), this.getY(), this.getZ(), 0.0, 0.0, 0.0); - this.getLevel().addParticle(ParticleTypes.EXPLOSION, this.getX(), this.getY(), this.getZ(), 0.0, 0.0, 0.0); - this.getLevel().addParticle(ParticleTypes.SMOKE, this.getX(), this.getY(), this.getZ(), 0.0, 0.0, 0.0); - this.getLevel().addParticle(ParticleTypes.LARGE_SMOKE, this.getX(), this.getY(), this.getZ(), 0.0, 0.0, 0.0); - this.getLevel().addParticle(ParticleTypes.FLAME, this.getX(), this.getY(), this.getZ(), 0.0, 0.0, 0.0); + this.level().addParticle(ParticleTypes.EXPLOSION, this.getX(), this.getY(), this.getZ(), 0.0, 0.0, 0.0); + this.level().addParticle(ParticleTypes.EXPLOSION, this.getX(), this.getY(), this.getZ(), 0.0, 0.0, 0.0); + this.level().addParticle(ParticleTypes.SMOKE, this.getX(), this.getY(), this.getZ(), 0.0, 0.0, 0.0); + this.level().addParticle(ParticleTypes.LARGE_SMOKE, this.getX(), this.getY(), this.getZ(), 0.0, 0.0, 0.0); + this.level().addParticle(ParticleTypes.FLAME, this.getX(), this.getY(), this.getZ(), 0.0, 0.0, 0.0); } } diff --git a/src/main/java/com/aetherteam/aether/entity/projectile/weapon/ThrownLightningKnife.java b/src/main/java/com/aetherteam/aether/entity/projectile/weapon/ThrownLightningKnife.java index a49322a309..bd273d8bd1 100644 --- a/src/main/java/com/aetherteam/aether/entity/projectile/weapon/ThrownLightningKnife.java +++ b/src/main/java/com/aetherteam/aether/entity/projectile/weapon/ThrownLightningKnife.java @@ -34,11 +34,11 @@ public ThrownLightningKnife(Level level) { @Override protected void onHit(HitResult result) { super.onHit(result); - if (!this.getLevel().isClientSide()) { - if (result.getType() != HitResult.Type.MISS && this.getLevel() instanceof ServerLevel) { + if (!this.level().isClientSide()) { + if (result.getType() != HitResult.Type.MISS && this.level() instanceof ServerLevel) { EntityUtil.summonLightningFromProjectile(this); } - this.getLevel().broadcastEntityEvent(this, (byte) 3); + this.level().broadcastEntityEvent(this, (byte) 3); this.discard(); } } diff --git a/src/main/java/com/aetherteam/aether/event/hooks/AbilityHooks.java b/src/main/java/com/aetherteam/aether/event/hooks/AbilityHooks.java index eb638d9b7e..6915dc6928 100644 --- a/src/main/java/com/aetherteam/aether/event/hooks/AbilityHooks.java +++ b/src/main/java/com/aetherteam/aether/event/hooks/AbilityHooks.java @@ -41,7 +41,7 @@ import net.minecraft.world.level.LevelAccessor; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.storage.loot.LootContext; +import net.minecraft.world.level.storage.loot.LootParams; import net.minecraft.world.level.storage.loot.LootTable; import net.minecraft.world.level.storage.loot.parameters.LootContextParams; import net.minecraft.world.phys.EntityHitResult; @@ -76,7 +76,7 @@ public static class AccessoryHooks { public static void damageGloves(Player player) { SlotResult slotResult = EquipmentUtil.getGloves(player); if (slotResult != null) { - slotResult.stack().hurtAndBreak(1, player, wearer -> CuriosApi.getCuriosHelper().onBrokenCurio(slotResult.slotContext())); + slotResult.stack().hurtAndBreak(1, player, wearer -> CuriosApi.broadcastCurioBreakEvent(slotResult.slotContext())); } } @@ -89,7 +89,7 @@ public static void damageZaniteRing(LivingEntity entity, LevelAccessor level, Bl for (SlotResult slotResult : slotResults) { if (slotResult != null) { if (state.getDestroySpeed(level, pos) > 0 && entity.getRandom().nextInt(6) == 0) { - slotResult.stack().hurtAndBreak(1, entity, wearer -> CuriosApi.getCuriosHelper().onBrokenCurio(slotResult.slotContext())); + slotResult.stack().hurtAndBreak(1, entity, wearer -> CuriosApi.broadcastCurioBreakEvent(slotResult.slotContext())); } } } @@ -103,7 +103,7 @@ public static void damageZanitePendant(LivingEntity entity, LevelAccessor level, SlotResult slotResult = EquipmentUtil.getZanitePendant(entity); if (slotResult != null) { if (state.getDestroySpeed(level, pos) > 0 && entity.getRandom().nextInt(6) == 0) { - slotResult.stack().hurtAndBreak(1, entity, wearer -> CuriosApi.getCuriosHelper().onBrokenCurio(slotResult.slotContext())); + slotResult.stack().hurtAndBreak(1, entity, wearer -> CuriosApi.broadcastCurioBreakEvent(slotResult.slotContext())); } } } @@ -185,7 +185,7 @@ public static void setAttack(DamageSource source) { * @see com.aetherteam.aether.event.listeners.abilities.AccessoryAbilityListener#onEntityHurt(net.minecraftforge.event.entity.living.LivingAttackEvent) */ public static boolean preventMagmaDamage(LivingEntity entity, DamageSource source) { - return source == entity.getLevel().damageSources().hotFloor() && EquipmentUtil.hasFreezingAccessory(entity); + return source == entity.level().damageSources().hotFloor() && EquipmentUtil.hasFreezingAccessory(entity); } } @@ -297,9 +297,9 @@ public static float handleZaniteToolAbility(ItemStack stack, float speed) { */ public static float reduceToolEffectiveness(Player player, BlockState state, ItemStack stack, float speed) { if (AetherConfig.SERVER.tools_debuff.get()) { - if (!player.getLevel().isClientSide()) { + if (!player.level().isClientSide()) { debuffTools = true; - PacketRelay.sendToNear(AetherPacketHandler.INSTANCE, new ToolDebuffPacket(true), player.getX(), player.getY(), player.getZ(), 10, player.getLevel().dimension()); + PacketRelay.sendToNear(AetherPacketHandler.INSTANCE, new ToolDebuffPacket(true), player.getX(), player.getY(), player.getZ(), 10, player.level().dimension()); } } if (debuffTools) { @@ -329,9 +329,9 @@ public static void stripGoldenOak(LevelAccessor accessor, BlockState state, Item if (state.is(AetherTags.Blocks.GOLDEN_OAK_LOGS) && stack.is(AetherTags.Items.GOLDEN_AMBER_HARVESTERS)) { if (level.getServer() != null && level instanceof ServerLevel serverLevel) { Vec3 vector = context.getClickLocation(); - LootContext.Builder lootContext = new LootContext.Builder(serverLevel).withParameter(LootContextParams.TOOL, stack); - LootTable lootTable = level.getServer().getLootTables().get(AetherLoot.STRIP_GOLDEN_OAK); - List list = lootTable.getRandomItems(lootContext.create(AetherLootContexts.STRIPPING)); + LootParams parameters = new LootParams.Builder(serverLevel).withParameter(LootContextParams.TOOL, stack).create(AetherLootContexts.STRIPPING); + LootTable lootTable = level.getServer().getLootData().getLootTable(AetherLoot.STRIP_GOLDEN_OAK); + List list = lootTable.getRandomItems(parameters); for (ItemStack itemStack : list) { ItemEntity itemEntity = new ItemEntity(level, vector.x(), vector.y(), vector.z(), itemStack); itemEntity.setDefaultPickUpDelay(); @@ -364,7 +364,7 @@ public static class WeaponHooks { * @see com.aetherteam.aether.event.listeners.abilities.WeaponAbilityListener#onDartHurt(LivingHurtEvent) */ public static void stickDart(LivingEntity entity, DamageSource source) { - if (entity instanceof Player player && !player.getLevel().isClientSide()) { + if (entity instanceof Player player && !player.level().isClientSide()) { Entity sourceEntity = source.getDirectEntity(); if (sourceEntity instanceof GoldenDart) { AetherPlayer.get(player).ifPresent(aetherPlayer -> aetherPlayer.setSynched(INBTSynchable.Direction.CLIENT, "setGoldenDartCount", aetherPlayer.getGoldenDartCount() + 1)); @@ -425,7 +425,7 @@ public static boolean lightningTracking(Entity entity, LightningBolt lightning) * @see com.aetherteam.aether.event.listeners.abilities.WeaponAbilityListener#onEntityDamage(LivingDamageEvent) */ public static float reduceWeaponEffectiveness(LivingEntity target, Entity source, float damage) { - if (AetherConfig.SERVER.tools_debuff.get() && !target.getLevel().isClientSide()) { // Checks if tool debuffs are enabled and if the level is on the server side. + if (AetherConfig.SERVER.tools_debuff.get() && !target.level().isClientSide()) { // Checks if tool debuffs are enabled and if the level is on the server side. double pow = Math.max(Math.pow(damage, damage > 1.0 ? 0.6 : 1.6), 1.0); if (source instanceof LivingEntity livingEntity) { ItemStack stack = livingEntity.getMainHandItem(); diff --git a/src/main/java/com/aetherteam/aether/event/hooks/CapabilityHooks.java b/src/main/java/com/aetherteam/aether/event/hooks/CapabilityHooks.java index 73d4b62f6d..40daab3df1 100644 --- a/src/main/java/com/aetherteam/aether/event/hooks/CapabilityHooks.java +++ b/src/main/java/com/aetherteam/aether/event/hooks/CapabilityHooks.java @@ -69,7 +69,7 @@ public static void clone(Player originalPlayer, Player newPlayer, boolean wasDea * @see com.aetherteam.aether.event.listeners.capability.AetherPlayerListener#onPlayerChangeDimension(PlayerEvent.PlayerChangedDimensionEvent) */ public static void changeDimension(Player player) { - if (!player.getLevel().isClientSide()) { + if (!player.level().isClientSide()) { AetherPlayer.get(player).ifPresent(aetherPlayer -> { if (aetherPlayer instanceof AetherPlayerCapability capability) { capability.forceSync(INBTSynchable.Direction.CLIENT); @@ -109,8 +109,8 @@ public static void respawn(Player player) { */ private static void syncAetherTime(Player player) { if (player instanceof ServerPlayer serverPlayer) { - if (player.getLevel().dimensionType().effectsLocation().equals(AetherDimensions.AETHER_DIMENSION_TYPE.location())) { - AetherTime.get(serverPlayer.getLevel()).ifPresent((aetherTime) -> aetherTime.updateEternalDay(serverPlayer)); + if (player.level().dimensionType().effectsLocation().equals(AetherDimensions.AETHER_DIMENSION_TYPE.location())) { + AetherTime.get(serverPlayer.level()).ifPresent((aetherTime) -> aetherTime.updateEternalDay(serverPlayer)); } } } diff --git a/src/main/java/com/aetherteam/aether/event/hooks/DimensionHooks.java b/src/main/java/com/aetherteam/aether/event/hooks/DimensionHooks.java index 2b9b9ef8ae..d575f4d7d9 100644 --- a/src/main/java/com/aetherteam/aether/event/hooks/DimensionHooks.java +++ b/src/main/java/com/aetherteam/aether/event/hooks/DimensionHooks.java @@ -66,9 +66,9 @@ public static void startInAether(Player player) { if (AetherConfig.SERVER.spawn_in_aether.get()) { if (aetherPlayer.canSpawnInAether()) { // Checks if the player has been set to spawn in the Aether. if (aetherPlayer.getPlayer() instanceof ServerPlayer serverPlayer) { - MinecraftServer server = serverPlayer.getLevel().getServer(); + MinecraftServer server = serverPlayer.level().getServer(); ServerLevel aetherLevel = server.getLevel(AetherDimensions.AETHER_LEVEL); - if (aetherLevel != null && serverPlayer.getLevel().dimension() != AetherDimensions.AETHER_LEVEL) { + if (aetherLevel != null && serverPlayer.level().dimension() != AetherDimensions.AETHER_LEVEL) { if (aetherPlayer.getPlayer().changeDimension(aetherLevel, new AetherPortalForcer(aetherLevel, false, true)) != null) { serverPlayer.setRespawnPosition(AetherDimensions.AETHER_LEVEL, serverPlayer.blockPosition(), serverPlayer.getYRot(), true, false); aetherPlayer.setCanSpawnInAether(false); // Sets that the player has already spawned in the Aether. @@ -197,7 +197,7 @@ public static void fallFromAether(Level level) { */ @Nullable private static Entity entityFell(Entity entity) { - Level serverLevel = entity.getLevel(); + Level serverLevel = entity.level(); MinecraftServer minecraftserver = serverLevel.getServer(); if (minecraftserver != null) { ServerLevel destination = minecraftserver.getLevel(LevelUtil.returnDimension()); @@ -256,13 +256,13 @@ public static void dimensionTravel(Entity entity, ResourceKey dimension) if (entity instanceof Player player) { AetherPlayer.get(player).ifPresent(aetherPlayer -> { if (!AetherConfig.SERVER.spawn_in_aether.get() || !aetherPlayer.canSpawnInAether()) { - if (entity.getLevel().getBiome(entity.blockPosition()).is(AetherTags.Biomes.DISPLAY_TRAVEL_TEXT)) { - if (entity.level.dimension() == LevelUtil.destinationDimension() && dimension == LevelUtil.returnDimension()) { // We display the Descending GUI text to the player if they're about to return to the Overworld. + if (entity.level().getBiome(entity.blockPosition()).is(AetherTags.Biomes.DISPLAY_TRAVEL_TEXT)) { + if (entity.level().dimension() == LevelUtil.destinationDimension() && dimension == LevelUtil.returnDimension()) { // We display the Descending GUI text to the player if they're about to return to the Overworld. displayAetherTravel = true; playerLeavingAether = true; PacketRelay.sendToAll(AetherPacketHandler.INSTANCE, new AetherTravelPacket(true)); PacketRelay.sendToAll(AetherPacketHandler.INSTANCE, new LeavingAetherPacket(true)); - } else if (entity.level.dimension() == LevelUtil.returnDimension() && dimension == LevelUtil.destinationDimension()) { // We display the Ascending GUI text to the player if they're about to enter the Aether. + } else if (entity.level().dimension() == LevelUtil.returnDimension() && dimension == LevelUtil.destinationDimension()) { // We display the Ascending GUI text to the player if they're about to enter the Aether. displayAetherTravel = true; playerLeavingAether = false; PacketRelay.sendToAll(AetherPacketHandler.INSTANCE, new AetherTravelPacket(true)); @@ -342,8 +342,8 @@ public static Long finishSleep(LevelAccessor level, long newTime) { * @see com.aetherteam.aether.event.listeners.DimensionListener#onTriedToSleep(SleepingTimeCheckEvent) */ public static boolean isEternalDay(Player player) { - if (player.getLevel().dimensionType().effectsLocation().equals(AetherDimensions.AETHER_DIMENSION_TYPE.location())) { - LazyOptional aetherTimeLazy = AetherTime.get(player.getLevel()); + if (player.level().dimensionType().effectsLocation().equals(AetherDimensions.AETHER_DIMENSION_TYPE.location())) { + LazyOptional aetherTimeLazy = AetherTime.get(player.level()); if (aetherTimeLazy.isPresent()) { Optional aetherTimeOptional = aetherTimeLazy.resolve(); if (aetherTimeOptional.isPresent()) { diff --git a/src/main/java/com/aetherteam/aether/event/hooks/EntityHooks.java b/src/main/java/com/aetherteam/aether/event/hooks/EntityHooks.java index 699f02d0a8..99d956689b 100644 --- a/src/main/java/com/aetherteam/aether/event/hooks/EntityHooks.java +++ b/src/main/java/com/aetherteam/aether/event/hooks/EntityHooks.java @@ -1,7 +1,9 @@ package com.aetherteam.aether.event.hooks; +import com.aetherteam.aether.AetherConfig; import com.aetherteam.aether.AetherTags; import com.aetherteam.aether.block.AetherBlocks; +import com.aetherteam.aether.capability.accessory.MobAccessory; import com.aetherteam.aether.capability.item.DroppedItem; import com.aetherteam.aether.client.AetherSoundEvents; import com.aetherteam.aether.effect.AetherEffects; @@ -12,35 +14,59 @@ import com.aetherteam.aether.entity.passive.FlyingCow; import com.aetherteam.aether.entity.passive.MountableAnimal; import com.aetherteam.aether.item.AetherItems; +import com.aetherteam.aether.item.accessories.AccessoryItem; +import com.aetherteam.aether.item.accessories.cape.CapeItem; +import com.aetherteam.aether.item.accessories.gloves.GlovesItem; +import com.aetherteam.aether.item.accessories.miscellaneous.ShieldOfRepulsionItem; +import com.aetherteam.aether.item.accessories.pendant.PendantItem; import com.aetherteam.aether.item.miscellaneous.bucket.SkyrootBucketItem; +import com.aetherteam.aether.mixin.AetherMixinHooks; import net.minecraft.advancements.CriteriaTriggers; +import net.minecraft.core.Direction; +import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; import net.minecraft.sounds.SoundEvents; +import net.minecraft.util.RandomSource; +import net.minecraft.world.DifficultyInstance; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.effect.MobEffectInstance; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.*; import net.minecraft.world.entity.animal.*; +import net.minecraft.world.entity.decoration.ArmorStand; import net.minecraft.world.entity.item.ItemEntity; +import net.minecraft.world.entity.monster.piglin.AbstractPiglin; import net.minecraft.world.entity.player.Player; import net.minecraft.world.entity.projectile.FishingHook; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.ItemUtils; +import net.minecraft.world.item.*; +import net.minecraft.world.item.enchantment.EnchantmentHelper; import net.minecraft.world.level.Level; import net.minecraft.world.phys.EntityHitResult; import net.minecraft.world.phys.HitResult; +import net.minecraft.world.phys.Vec3; +import net.minecraftforge.common.util.LazyOptional; import net.minecraftforge.event.TickEvent; import net.minecraftforge.event.entity.EntityJoinLevelEvent; +import net.minecraftforge.event.entity.EntityMountEvent; import net.minecraftforge.event.entity.EntityStruckByLightningEvent; import net.minecraftforge.event.entity.ProjectileImpactEvent; import net.minecraftforge.event.entity.living.LivingDropsEvent; +import net.minecraftforge.event.entity.living.LivingExperienceDropEvent; import net.minecraftforge.event.entity.living.MobEffectEvent; import net.minecraftforge.event.entity.living.ShieldBlockEvent; import net.minecraftforge.event.entity.player.PlayerInteractEvent; +import top.theillusivec4.curios.api.CuriosApi; +import top.theillusivec4.curios.api.SlotContext; +import top.theillusivec4.curios.api.SlotResult; +import top.theillusivec4.curios.api.event.CurioDropsEvent; +import top.theillusivec4.curios.api.type.capability.ICuriosItemHandler; +import top.theillusivec4.curios.api.type.inventory.ICurioStacksHandler; +import top.theillusivec4.curios.api.type.inventory.IDynamicStackHandler; +import javax.annotation.Nullable; import java.util.Collection; +import java.util.List; import java.util.Optional; public class EntityHooks { @@ -59,16 +85,158 @@ public static void addGoals(Entity entity) { } } + /** + * Used to check whether an entity can spawn with accessories based on their {@link EntityType}. + * @param entity The {@link Entity} that is spawning. + * @return Whether the entity can spawn in the world with accessories, as a {@link Boolean}. + * @see com.aetherteam.aether.event.listeners.EntityListener#onEntityJoin(EntityJoinLevelEvent) + */ + public static boolean canMobSpawnWithAccessories(Entity entity) { + EntityType entityType = entity.getType(); + return entity instanceof Mob && + (entityType == EntityType.ZOMBIE || entityType == EntityType.ZOMBIE_VILLAGER || entityType == EntityType.HUSK || entityType == EntityType.SKELETON || entityType == EntityType.STRAY || entityType == EntityType.PIGLIN); + } + + /** + * Equips entities with accessories during spawning. + * @param entity The {@link Entity} to equip accessories to. + * @see com.aetherteam.aether.event.listeners.EntityListener#onEntityJoin(EntityJoinLevelEvent) + */ + public static void spawnWithAccessories(Entity entity) { + if (entity instanceof Mob mob && mob.level() instanceof ServerLevel serverLevel) { + DifficultyInstance difficulty = serverLevel.getCurrentDifficultyAt(entity.blockPosition()); + RandomSource random = serverLevel.getRandom(); + EntityType entityType = mob.getType(); + String[] allSlots = {"hands", "necklace", "aether_gloves", "aether_pendant"}; + String[] gloveSlots = {"hands", "aether_gloves"}; + if (entityType == EntityType.PIGLIN) { + if (mob instanceof AbstractPiglin abstractPiglin && abstractPiglin.isAdult()) { + for (String identifier : allSlots) { + if (random.nextFloat() < 0.1F) { + equipAccessory(mob, identifier, ArmorMaterials.GOLD); + } + } + } + } else { + boolean fullyArmored = true; + for (EquipmentSlot equipmentslot : EquipmentSlot.values()) { + if (equipmentslot.getType() == EquipmentSlot.Type.ARMOR) { + ItemStack itemStack = mob.getItemBySlot(equipmentslot); + if (itemStack.isEmpty()) { + fullyArmored = false; + break; + } + } + } + if (fullyArmored && random.nextInt(4) == 1) { + if (mob.getItemBySlot(EquipmentSlot.CHEST).getItem() instanceof ArmorItem armorItem) { + if (armorItem.getMaterial() instanceof ArmorMaterials armorMaterials) { + for (String identifier : gloveSlots) { + equipAccessory(mob, identifier, armorMaterials); + } + } + } + } + } + enchantAccessories(mob, difficulty, allSlots); + } + } + + /** + * Equips an accessory to an empty slot for an entity on spawn. + * @param mob The {@link Mob} to equip to. + * @param identifier The {@link String} identifier for the slot. + * @param armorMaterials The {@link ArmorMaterials} to get an item from. + * @see EntityHooks#spawnWithAccessories(Entity) + */ + private static void equipAccessory(Mob mob, String identifier, ArmorMaterials armorMaterials) { + CuriosApi.getCuriosInventory(mob).ifPresent((handler) -> { + boolean empty = true; + for (SlotResult slotResult : handler.findCurios(identifier)) { + if (!slotResult.stack().isEmpty()) { + empty = false; + } + } + if (empty) { + Item item = getEquipmentForSlot(identifier, armorMaterials); + if (item != null) { + handler.setEquippedCurio(identifier, 0, new ItemStack(item)); + } + } + }); + } + + /** + * Gets an accessory item from a slot identifier and armor material. + * @param identifier The {@link String} identifier for the slot. + * @param armorMaterials The {@link ArmorMaterials} to get an item from. + * @return The accessory {@link Item}. + * @see EntityHooks#equipAccessory(Mob, String, ArmorMaterials) + */ + @Nullable + private static Item getEquipmentForSlot(String identifier, ArmorMaterials armorMaterials) { + if (identifier.equals(AetherConfig.COMMON.use_curios_menu.get() ? "hands" : "aether_gloves")) { + switch (armorMaterials) { + case LEATHER -> { + return AetherItems.LEATHER_GLOVES.get(); + } + case GOLD -> { + return AetherItems.GOLDEN_GLOVES.get(); + } + case CHAIN -> { + return AetherItems.CHAINMAIL_GLOVES.get(); + } + case IRON -> { + return AetherItems.IRON_GLOVES.get(); + } + case DIAMOND -> { + return AetherItems.DIAMOND_GLOVES.get(); + } + } + } else if (identifier.equals(AetherConfig.COMMON.use_curios_menu.get() ? "necklace" : "aether_pendant")) { + switch (armorMaterials) { + case GOLD -> { + return AetherItems.GOLDEN_PENDANT.get(); + } + case IRON -> { + return AetherItems.IRON_PENDANT.get(); + } + } + } + return null; + } + + /** + * Randomly enchants accessories. + * @param mob The {@link Mob} wearing the accessories. + * @param difficulty The {@link DifficultyInstance} of the level. + * @param allowedSlots The list of {@link String} identifiers to enchant the accessories in. + * @see EntityHooks#spawnWithAccessories(Entity) + */ + private static void enchantAccessories(Mob mob, DifficultyInstance difficulty, String[] allowedSlots) { + RandomSource random = mob.level().getRandom(); + float chanceMultiplier = difficulty.getSpecialMultiplier(); + for (String identifier : allowedSlots) { + CuriosApi.getCuriosInventory(mob).ifPresent((handler) -> handler.findCurio(identifier, 0).ifPresent((slotResult) -> { + ItemStack itemStack = slotResult.stack(); + if (!itemStack.isEmpty() && random.nextFloat() < 0.5F * chanceMultiplier) { + handler.setEquippedCurio(identifier, 0, EnchantmentHelper.enchantItem(random, itemStack, (int) (5.0F + chanceMultiplier * (float) random.nextInt(18)), false)); + } + })); + } + } + /** * Prevents dismounting Aether mounts in the air, and Swets when consumed. * @param rider The {@link Entity} riding the mount. * @param mount The mounted {@link Entity}. * @param dismounting Whether the rider is trying to dismount, as a {@link Boolean}. * @return Whether to prevent the rider from dismounting, as a {@link Boolean}. + * @see com.aetherteam.aether.event.listeners.EntityListener#onMountEntity(EntityMountEvent) */ public static boolean dismountPrevention(Entity rider, Entity mount, boolean dismounting) { if (dismounting && rider.isShiftKeyDown()) { - return (mount instanceof MountableAnimal && !mount.isOnGround() && !mount.isInFluidType() && !mount.isPassenger()) || (mount instanceof Swet swet && !swet.isFriendly()); + return (mount instanceof MountableAnimal && !mount.onGround() && !mount.isInFluidType() && !mount.isPassenger()) || (mount instanceof Swet swet && !swet.isFriendly()); } return false; } @@ -81,8 +249,8 @@ public static boolean dismountPrevention(Entity rider, Entity mount, boolean dis public static void launchMount(Player player) { Entity mount = player.getVehicle(); if (player.isPassenger() && mount != null) { - if (mount.getLevel().getBlockStates(mount.getBoundingBox()).anyMatch((state) -> state.is(AetherBlocks.BLUE_AERCLOUD.get()))) { - if (player.getLevel().isClientSide()) { + if (mount.level().getBlockStates(mount.getBoundingBox()).anyMatch((state) -> state.is(AetherBlocks.BLUE_AERCLOUD.get()))) { + if (player.level().isClientSide()) { mount.setDeltaMovement(mount.getDeltaMovement().x(), 2.0, mount.getDeltaMovement().z()); } } @@ -132,7 +300,7 @@ public static Optional pickupBucketable(Entity target, Player bucketable.saveToBucketTag(bucketStack); ItemStack filledStack = ItemUtils.createFilledResult(heldStack, player, bucketStack, false); player.setItemInHand(hand, filledStack); - Level level = livingEntity.getLevel(); + Level level = livingEntity.level(); if (!level.isClientSide()) { CriteriaTriggers.FILLED_BUCKET.trigger((ServerPlayer) player, bucketStack); } @@ -146,6 +314,155 @@ public static Optional pickupBucketable(Entity target, Player return interactionResult; } + /** + * Handles the interaction for equipping and unequipping accessories to armor stands. + * @param target The target {@link Entity}. + * @param player The {@link Player}. + * @param stack The held {@link ItemStack}. + * @param pos The right-click {@link Vec3} position. + * @param hand The {@link InteractionHand} with the item. + * @return The {@link Optional} {@link InteractionResult} from this interaction. + * @see com.aetherteam.aether.event.listeners.EntityListener#onInteractWithEntity(PlayerInteractEvent.EntityInteractSpecific) + */ + public static Optional interactWithArmorStand(Entity target, Player player, ItemStack stack, Vec3 pos, InteractionHand hand) { + if (target instanceof ArmorStand armorStand) { + if (armorStand.level().isClientSide()) { + return Optional.of(InteractionResult.SUCCESS); + } + if (!stack.isEmpty()) { // Equip behavior. + if (stack.is(AetherTags.Items.ACCESSORIES)) { + String identifier = ""; + if (stack.getItem() instanceof GlovesItem) { + identifier = AetherConfig.COMMON.use_curios_menu.get() ? "hands" : "aether_gloves"; + } else if (stack.getItem() instanceof PendantItem) { + identifier = AetherConfig.COMMON.use_curios_menu.get() ? "necklace" : "aether_pendant"; + } else if (stack.getItem() instanceof CapeItem) { + identifier = AetherConfig.COMMON.use_curios_menu.get() ? "back" : "aether_cape"; + } else if (stack.getItem() instanceof ShieldOfRepulsionItem) { + identifier = AetherConfig.COMMON.use_curios_menu.get() ? "body" : "aether_shield"; + } + LazyOptional lazyHandler = CuriosApi.getCuriosInventory(armorStand); + if (lazyHandler.isPresent() && lazyHandler.resolve().isPresent()) { + ICuriosItemHandler handler = lazyHandler.resolve().get(); + Optional stacksHandler = handler.getStacksHandler(identifier); + if (stacksHandler.isPresent()) { + IDynamicStackHandler stackHandler = stacksHandler.get().getCosmeticStacks(); + if (0 < stackHandler.getSlots()) { + ItemStack itemStack = stackHandler.getStackInSlot(0); + if (stack.getItem() instanceof AccessoryItem accessoryItem) { + SlotContext slotContext = new SlotContext(identifier, armorStand, 0, true, true); + if (accessoryItem.canEquip(slotContext, stack)) { + stackHandler.setStackInSlot(0, stack.copy()); + if (accessoryItem instanceof GlovesItem glovesItem) { + armorStand.level().playSound(null, armorStand.blockPosition(), glovesItem.getEquipSound(slotContext, stack).soundEvent(), armorStand.getSoundSource(), 1, 1); + } else if (accessoryItem instanceof PendantItem pendantItem) { + armorStand.level().playSound(null, armorStand.blockPosition(), pendantItem.getEquipSound(slotContext, stack).soundEvent(), armorStand.getSoundSource(), 1, 1); + } else { + armorStand.level().playSound(null, armorStand.blockPosition(), SoundEvents.ARMOR_EQUIP_GENERIC, armorStand.getSoundSource(), 1, 1); + } + if (identifier.equals("hands") || identifier.equals("aether_gloves")) { + armorStand.setShowArms(true); + } + if (!player.isCreative()) { + int count = stack.getCount(); + stack.shrink(count); + } + if (!itemStack.isEmpty()) { + player.setItemInHand(hand, itemStack); + } + return Optional.of(InteractionResult.SUCCESS); + } + } + } + } + } + } + } else { // Unequip behavior. + String identifier = slotToUnequip(armorStand, pos); + if (!identifier.isEmpty()) { + LazyOptional lazyHandler = CuriosApi.getCuriosInventory(armorStand); + if (lazyHandler.isPresent() && lazyHandler.resolve().isPresent()) { + ICuriosItemHandler handler = lazyHandler.resolve().get(); + Optional stacksHandler = handler.getStacksHandler(identifier); + if (stacksHandler.isPresent()) { + IDynamicStackHandler stackHandler = stacksHandler.get().getCosmeticStacks(); + if (0 < stackHandler.getSlots()) { + ItemStack itemStack = stackHandler.getStackInSlot(0); + if (!itemStack.isEmpty()) { + player.setItemInHand(hand, itemStack); + stackHandler.setStackInSlot(0, ItemStack.EMPTY); + return Optional.of(InteractionResult.SUCCESS); + } + } + } + } + } + } + } + return Optional.empty(); + } + + /** + * What accessory slot of the armor stand to unequip from, based on where the armor stand is right-clicked. + * @param armorStand The {@link ArmorStand} to unequip from. + * @param pos The right-click {@link Vec3} position. + * @return The {@link String} for the slot identifier. + * @see EntityHooks#interactWithArmorStand(Entity, Player, ItemStack, Vec3, InteractionHand) + */ + private static String slotToUnequip(ArmorStand armorStand, Vec3 pos) { + boolean isSmall = armorStand.isSmall(); + Direction.Axis axis = armorStand.getDirection().getAxis(); + double x = isSmall ? pos.x * 2.0 : pos.x; + double z = isSmall ? pos.z * 2.0 : pos.z; + double front = axis == Direction.Axis.X ? z : x; + double vertical = isSmall ? pos.y * 2.0 : pos.y; + String glovesIdentifier = AetherConfig.COMMON.use_curios_menu.get() ? "hands" : "aether_gloves"; + String pendantIdentifier = AetherConfig.COMMON.use_curios_menu.get() ? "necklace" : "aether_pendant"; + String capeIdentifier = AetherConfig.COMMON.use_curios_menu.get() ? "back" : "aether_cape"; + String shieldIdentifier = AetherConfig.COMMON.use_curios_menu.get() ? "body" : "aether_shield"; + if (!getItemByIdentifier(armorStand, glovesIdentifier).isEmpty() + && Math.abs(front) >= (isSmall ? 0.15 : 0.2) + && vertical >= (isSmall ? 0.65 : 0.75) + && vertical < 1.15) { + return glovesIdentifier; + } else if (!getItemByIdentifier(armorStand, pendantIdentifier).isEmpty() + && vertical >= (isSmall ? 1.2 : 1.3) + && vertical < 0.9 + (isSmall ? 0.8 : 0.6)) { + return pendantIdentifier; + } else if (!getItemByIdentifier(armorStand, capeIdentifier).isEmpty() + && vertical >= (isSmall ? 1.0 : 1.1) + && vertical < (isSmall ? 1.7 : 1.4)) { + return capeIdentifier; + } else if (!getItemByIdentifier(armorStand, shieldIdentifier).isEmpty() + && vertical >= (isSmall ? 0.9 : 1.0) + && vertical < (isSmall ? 1.5 : 1.2)) { + return shieldIdentifier; + } + return ""; + } + + /** + * Gets an accessory from an armor stand. + * @param armorStand The {@link ArmorStand} to get the accessory from. + * @param identifier The {@link String} for the slot identifier. + * @return The accessory {@link ItemStack} gotten from the entity. + * @see EntityHooks#slotToUnequip(ArmorStand, Vec3) + */ + private static ItemStack getItemByIdentifier(ArmorStand armorStand, String identifier) { + LazyOptional lazyHandler = CuriosApi.getCuriosInventory(armorStand); + if (lazyHandler.isPresent() && lazyHandler.resolve().isPresent()) { + ICuriosItemHandler handler = lazyHandler.resolve().get(); + Optional stacksHandler = handler.getStacksHandler(identifier); + if (stacksHandler.isPresent()) { + IDynamicStackHandler stackHandler = stacksHandler.get().getCosmeticStacks(); + if (0 < stackHandler.getSlots()) { + return stackHandler.getStackInSlot(0); + } + } + } + return ItemStack.EMPTY; + } + /** * Prevents an entity from being hooked with a Fishing Rod. * @param projectileEntity The hook projectile {@link Entity}. @@ -196,6 +513,76 @@ public static void trackDrops(LivingEntity entity, Collection itemDr } } + /** + * Damages certain accessory items dropped from entities if they're not guaranteed drops. + * @param entity The {@link LivingEntity} dropping the accessories. + * @param itemDrops The {@link Collection} of {@link ItemEntity} drops. + * @param recentlyHit Whether the entity was recently hit, as a {@link Boolean}. + * @param looting The {@link Integer} for the looting enchantment value. + * @return The new {@link Collection} of {@link ItemEntity} drops. + * @see com.aetherteam.aether.event.listeners.EntityListener#onCurioDrops(CurioDropsEvent) + */ + public static Collection handleEntityCurioDrops(LivingEntity entity, Collection itemDrops, boolean recentlyHit, int looting) { + if (entity instanceof Mob mob) { + MobAccessory.get(mob).ifPresent((accessoryMob) -> { + String[] allSlots = {"hands", "necklace", "aether_gloves", "aether_pendant"}; + for (String identifier : allSlots) { + List itemStacks = itemDrops.stream().map(ItemEntity::getItem).filter((stack) -> AetherMixinHooks.getIdentifierForItem(accessoryMob.getMob(), stack).equals(identifier)).toList(); + if (!itemStacks.isEmpty()) { + ItemStack itemStack = itemStacks.get(0); + float f = accessoryMob.getEquipmentDropChance(identifier); + boolean flag = f > 1.0F; + if (!itemStack.isEmpty()) { + itemDrops.removeIf((itemEntity) -> ItemStack.isSameItemSameTags(itemEntity.getItem(), itemStack)); + } + if (!itemStack.isEmpty() && !EnchantmentHelper.hasVanishingCurse(itemStack) && recentlyHit && Math.max(mob.getRandom().nextFloat() - (float) looting * 0.01F, 0.0F) < f) { + if (!flag && itemStack.isDamageableItem()) { + itemStack.setDamageValue(itemStack.getMaxDamage() - accessoryMob.getMob().getRandom().nextInt(1 + accessoryMob.getMob().getRandom().nextInt(Math.max(itemStack.getMaxDamage() - 3, 1)))); + } + ItemEntity itemEntity = new ItemEntity(accessoryMob.getMob().level(), accessoryMob.getMob().getX(), accessoryMob.getMob().getY(), accessoryMob.getMob().getZ(), itemStack); + itemEntity.setDefaultPickUpDelay(); + itemDrops.add(itemEntity); + } + } + } + }); + } + return itemDrops; + } + + /** + * Increase the experience drops of an entity based on whether they're wearing accessories. + * @param entity The {@link LivingEntity} dropping the experience. + * @param experience The original {@link Integer} amount of experience. + * @return The new {@link Integer} amount of experience. + * @see com.aetherteam.aether.event.listeners.EntityListener#onDropExperience(LivingExperienceDropEvent) + */ + public static int modifyExperience(LivingEntity entity, int experience) { + if (entity instanceof Mob mob) { + LazyOptional accessoryMobLazy = MobAccessory.get(mob); + if (accessoryMobLazy.isPresent() && accessoryMobLazy.resolve().isPresent()) { + MobAccessory accessoryMob = accessoryMobLazy.resolve().get(); + LazyOptional lazyHandler = CuriosApi.getCuriosInventory(mob); + if (lazyHandler.isPresent() && lazyHandler.resolve().isPresent()) { + ICuriosItemHandler handler = lazyHandler.resolve().get(); + if (experience > 0) { + String[] allSlots = {"hands", "necklace", "aether_gloves", "aether_pendant"}; + for (String identifier : allSlots) { + Optional optionalSlotResult = handler.findCurio(identifier, 0); + if (optionalSlotResult.isPresent()) { + ItemStack stack = optionalSlotResult.get().stack(); + if (!stack.isEmpty() && accessoryMob.getEquipmentDropChance(identifier) <= 1.0F) { + experience += 1 + mob.getRandom().nextInt(3); + } + } + } + } + } + } + } + return experience; + } + /** * Prevents an entity from being inflicted with {@link AetherEffects#INEBRIATION} if it has {@link AetherEffects#REMEDY} applied. * @param livingEntity The {@link LivingEntity} that the effect is being applied to. diff --git a/src/main/java/com/aetherteam/aether/event/listeners/EntityListener.java b/src/main/java/com/aetherteam/aether/event/listeners/EntityListener.java index aeaeeb89ce..fb896f5dca 100644 --- a/src/main/java/com/aetherteam/aether/event/listeners/EntityListener.java +++ b/src/main/java/com/aetherteam/aether/event/listeners/EntityListener.java @@ -10,20 +10,25 @@ import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.item.ItemEntity; import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; import net.minecraft.world.phys.HitResult; +import net.minecraft.world.phys.Vec3; import net.minecraftforge.event.TickEvent; import net.minecraftforge.event.entity.EntityJoinLevelEvent; import net.minecraftforge.event.entity.EntityMountEvent; import net.minecraftforge.event.entity.EntityStruckByLightningEvent; import net.minecraftforge.event.entity.ProjectileImpactEvent; import net.minecraftforge.event.entity.living.LivingDropsEvent; +import net.minecraftforge.event.entity.living.LivingExperienceDropEvent; import net.minecraftforge.event.entity.living.MobEffectEvent; import net.minecraftforge.event.entity.living.ShieldBlockEvent; import net.minecraftforge.event.entity.player.PlayerInteractEvent; import net.minecraftforge.eventbus.api.Event; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod; +import top.theillusivec4.curios.api.event.CurioDropsEvent; +import java.util.ArrayList; import java.util.Collection; import java.util.Optional; @@ -31,11 +36,16 @@ public class EntityListener { /** * @see EntityHooks#addGoals(Entity) + * @see EntityHooks#canMobSpawnWithAccessories(Entity) + * @see EntityHooks#spawnWithAccessories(Entity) */ @SubscribeEvent public static void onEntityJoin(EntityJoinLevelEvent event) { Entity entity = event.getEntity(); EntityHooks.addGoals(entity); + if (EntityHooks.canMobSpawnWithAccessories(entity)) { + EntityHooks.spawnWithAccessories(entity); + } } /** @@ -61,14 +71,20 @@ public static void onRiderTick(TickEvent.PlayerTickEvent event) { /** * @see EntityHooks#skyrootBucketMilking(Entity, Player, InteractionHand) * @see EntityHooks#pickupBucketable(Entity, Player, InteractionHand) + * @see EntityHooks#interactWithArmorStand(Entity, Player, ItemStack, Vec3, InteractionHand) */ @SubscribeEvent public static void onInteractWithEntity(PlayerInteractEvent.EntityInteractSpecific event) { Entity targetEntity = event.getTarget(); Player player = event.getEntity(); + ItemStack itemStack = event.getItemStack(); + Vec3 position = event.getLocalPos(); InteractionHand interactionHand = event.getHand(); EntityHooks.skyrootBucketMilking(targetEntity, player, interactionHand); Optional result = EntityHooks.pickupBucketable(targetEntity, player, interactionHand); + if (result.isEmpty()) { + result = EntityHooks.interactWithArmorStand(targetEntity, player, itemStack, position, interactionHand); + } result.ifPresent(event::setCancellationResult); event.setCanceled(result.isPresent()); } @@ -112,6 +128,31 @@ public static void onPlayerDrops(LivingDropsEvent event) { EntityHooks.trackDrops(entity, itemDrops); } + /** + * @see EntityHooks#handleEntityCurioDrops(LivingEntity, Collection, boolean, int) + */ + @SubscribeEvent + public static void onCurioDrops(CurioDropsEvent event) { + LivingEntity entity = event.getEntity(); + Collection itemDrops = event.getDrops(); + Collection itemDropsCopy = new ArrayList<>(itemDrops); + boolean recentlyHit = event.isRecentlyHit(); + int looting = event.getLootingLevel(); + itemDrops.clear(); + itemDrops.addAll(EntityHooks.handleEntityCurioDrops(entity, itemDropsCopy, recentlyHit, looting)); + } + + /** + * @see EntityHooks#modifyExperience(LivingEntity, int) + */ + @SubscribeEvent + public static void onDropExperience(LivingExperienceDropEvent event) { + LivingEntity livingEntity = event.getEntity(); + int experience = event.getDroppedExperience(); + int newExperience = EntityHooks.modifyExperience(livingEntity, experience); + event.setDroppedExperience(newExperience); + } + /** * @see EntityHooks#preventInebriation(LivingEntity, MobEffectInstance) */ diff --git a/src/main/java/com/aetherteam/aether/event/listeners/abilities/ToolAbilityListener.java b/src/main/java/com/aetherteam/aether/event/listeners/abilities/ToolAbilityListener.java index 99f6f86baa..2249bc7cde 100644 --- a/src/main/java/com/aetherteam/aether/event/listeners/abilities/ToolAbilityListener.java +++ b/src/main/java/com/aetherteam/aether/event/listeners/abilities/ToolAbilityListener.java @@ -43,7 +43,7 @@ public static void setupToolModifications(BlockEvent.BlockToolModificationEvent @SubscribeEvent public static void doHolystoneAbility(BlockEvent.BreakEvent event) { Player player = event.getPlayer(); - Level level = player.getLevel(); + Level level = player.level(); BlockPos blockPos = event.getPos(); ItemStack itemStack = player.getMainHandItem(); BlockState blockState = event.getState(); diff --git a/src/main/java/com/aetherteam/aether/integration/jei/categories/ban/AbstractPlacementBanRecipeCategory.java b/src/main/java/com/aetherteam/aether/integration/jei/categories/ban/AbstractPlacementBanRecipeCategory.java index 037f810471..2341a320d3 100644 --- a/src/main/java/com/aetherteam/aether/integration/jei/categories/ban/AbstractPlacementBanRecipeCategory.java +++ b/src/main/java/com/aetherteam/aether/integration/jei/categories/ban/AbstractPlacementBanRecipeCategory.java @@ -8,7 +8,6 @@ import com.aetherteam.nitrogen.recipe.BlockPropertyPair; import com.aetherteam.nitrogen.recipe.BlockStateIngredient; import com.aetherteam.nitrogen.recipe.BlockStateRecipeUtil; -import com.mojang.blaze3d.vertex.PoseStack; import mezz.jei.api.constants.VanillaTypes; import mezz.jei.api.gui.builder.IRecipeLayoutBuilder; import mezz.jei.api.gui.drawable.IDrawable; @@ -22,6 +21,7 @@ import mezz.jei.common.util.Translator; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.Font; +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.core.BlockPos; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; @@ -89,15 +89,15 @@ protected List setupIngredients(BlockPropertyPair[] pairs) { } @Override - public void draw(R recipe, IRecipeSlotsView recipeSlotsView, PoseStack poseStack, double mouseX, double mouseY) { + public void draw(R recipe, IRecipeSlotsView recipeSlotsView, GuiGraphics guiGraphics, double mouseX, double mouseY) { if (recipe.getBypassBlock() == null || recipe.getBypassBlock().isEmpty()) { - this.slot.draw(poseStack, 49, 0); + this.slot.draw(guiGraphics, 49, 0); } else { - this.slot.draw(poseStack); - this.slot.draw(poseStack, 98, 0); + this.slot.draw(guiGraphics); + this.slot.draw(guiGraphics, 98, 0); String text = Translator.translateToLocalFormatted("gui.aether.jei.bypass"); Font font = Minecraft.getInstance().font; - font.draw(poseStack, text, 24, 5, 0xFF808080); + guiGraphics.drawString(font, text, 24, 5, 0xFF808080); } } diff --git a/src/main/java/com/aetherteam/aether/integration/jei/categories/item/AbstractAetherCookingRecipeCategory.java b/src/main/java/com/aetherteam/aether/integration/jei/categories/item/AbstractAetherCookingRecipeCategory.java index f99dde5fe0..13a745d5a1 100644 --- a/src/main/java/com/aetherteam/aether/integration/jei/categories/item/AbstractAetherCookingRecipeCategory.java +++ b/src/main/java/com/aetherteam/aether/integration/jei/categories/item/AbstractAetherCookingRecipeCategory.java @@ -1,12 +1,12 @@ package com.aetherteam.aether.integration.jei.categories.item; import com.aetherteam.nitrogen.integration.jei.categories.AbstractRecipeCategory; -import com.mojang.blaze3d.vertex.PoseStack; import mezz.jei.api.gui.drawable.IDrawable; import mezz.jei.api.gui.drawable.IDrawableAnimated; import mezz.jei.api.recipe.RecipeType; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.Font; +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.crafting.AbstractCookingRecipe; @@ -26,23 +26,23 @@ public Component getTitle() { return Component.translatable("gui.aether.jei." + this.id); } - protected void drawExperience(AbstractCookingRecipe recipe, PoseStack poseStack, int y, IDrawable background) { + protected void drawExperience(AbstractCookingRecipe recipe, GuiGraphics guiGraphics, int y, IDrawable background) { float experience = recipe.getExperience(); if (experience > 0) { Component experienceString = Component.translatable("gui.jei.category.smelting.experience", experience); Font fontRenderer = Minecraft.getInstance().font; int stringWidth = fontRenderer.width(experienceString); - fontRenderer.draw(poseStack, experienceString, background.getWidth() - stringWidth, y, 0xFF808080); + guiGraphics.drawString(fontRenderer, experienceString, background.getWidth() - stringWidth, y, 0xFF808080); } } - protected void drawCookingTime(PoseStack poseStack, int y, int time, IDrawable background) { + protected void drawCookingTime(GuiGraphics guiGraphics, int y, int time, IDrawable background) { if (time > 0) { int cookTimeSeconds = time / 20; Component timeString = Component.translatable("gui.jei.category.smelting.time.seconds", cookTimeSeconds); Font fontRenderer = Minecraft.getInstance().font; int stringWidth = fontRenderer.width(timeString); - fontRenderer.draw(poseStack, timeString, background.getWidth() - stringWidth, y, 0xFF808080); + guiGraphics.drawString(fontRenderer, timeString, background.getWidth() - stringWidth, y, 0xFF808080); } } } diff --git a/src/main/java/com/aetherteam/aether/integration/jei/categories/item/AltarRepairRecipeCategory.java b/src/main/java/com/aetherteam/aether/integration/jei/categories/item/AltarRepairRecipeCategory.java index 1c2dd36070..2bcc417c1b 100644 --- a/src/main/java/com/aetherteam/aether/integration/jei/categories/item/AltarRepairRecipeCategory.java +++ b/src/main/java/com/aetherteam/aether/integration/jei/categories/item/AltarRepairRecipeCategory.java @@ -3,7 +3,6 @@ import com.aetherteam.aether.Aether; import com.aetherteam.aether.block.AetherBlocks; import com.aetherteam.aether.recipe.recipes.item.AltarRepairRecipe; -import com.mojang.blaze3d.vertex.PoseStack; import mezz.jei.api.constants.VanillaTypes; import mezz.jei.api.gui.builder.IRecipeLayoutBuilder; import mezz.jei.api.gui.drawable.IDrawableAnimated; @@ -13,6 +12,7 @@ import mezz.jei.api.recipe.RecipeIngredientRole; import mezz.jei.api.recipe.RecipeType; import mezz.jei.api.recipe.category.IRecipeCategory; +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.core.NonNullList; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; @@ -44,10 +44,10 @@ public void setRecipe(IRecipeLayoutBuilder builder, AltarRepairRecipe recipe, IF } @Override - public void draw(AltarRepairRecipe recipe, IRecipeSlotsView recipeSlotsView, PoseStack stack, double mouseX, double mouseY) { - this.animatedProgressArrow.draw(stack, 24, 18); - this.fuelIndicator.draw(stack, 1, 20); - this.drawExperience(recipe, stack, 1, this.background); - this.drawCookingTime(stack, 45, recipe.getCookingTime(), this.background); + public void draw(AltarRepairRecipe recipe, IRecipeSlotsView recipeSlotsView, GuiGraphics guiGraphics, double mouseX, double mouseY) { + this.animatedProgressArrow.draw(guiGraphics, 24, 18); + this.fuelIndicator.draw(guiGraphics, 1, 20); + this.drawExperience(recipe, guiGraphics, 1, this.background); + this.drawCookingTime(guiGraphics, 45, recipe.getCookingTime(), this.background); } } diff --git a/src/main/java/com/aetherteam/aether/integration/jei/categories/item/EnchantingRecipeCategory.java b/src/main/java/com/aetherteam/aether/integration/jei/categories/item/EnchantingRecipeCategory.java index 86b84fbb32..75f392f6c1 100644 --- a/src/main/java/com/aetherteam/aether/integration/jei/categories/item/EnchantingRecipeCategory.java +++ b/src/main/java/com/aetherteam/aether/integration/jei/categories/item/EnchantingRecipeCategory.java @@ -3,7 +3,6 @@ import com.aetherteam.aether.Aether; import com.aetherteam.aether.block.AetherBlocks; import com.aetherteam.aether.recipe.recipes.item.EnchantingRecipe; -import com.mojang.blaze3d.vertex.PoseStack; import mezz.jei.api.constants.VanillaTypes; import mezz.jei.api.gui.builder.IRecipeLayoutBuilder; import mezz.jei.api.gui.drawable.IDrawableAnimated; @@ -13,6 +12,7 @@ import mezz.jei.api.recipe.RecipeIngredientRole; import mezz.jei.api.recipe.RecipeType; import mezz.jei.api.recipe.category.IRecipeCategory; +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.core.NonNullList; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; @@ -41,10 +41,10 @@ public void setRecipe(IRecipeLayoutBuilder builder, EnchantingRecipe recipe, IFo } @Override - public void draw(EnchantingRecipe recipe, IRecipeSlotsView recipeSlotsView, PoseStack stack, double mouseX, double mouseY) { - this.animatedProgressArrow.draw(stack, 24, 18); - this.fuelIndicator.draw(stack, 1, 20); - this.drawExperience(recipe, stack, 1, this.background); - this.drawCookingTime(stack, 45, recipe.getCookingTime(), this.background); + public void draw(EnchantingRecipe recipe, IRecipeSlotsView recipeSlotsView, GuiGraphics guiGraphics, double mouseX, double mouseY) { + this.animatedProgressArrow.draw(guiGraphics, 24, 18); + this.fuelIndicator.draw(guiGraphics, 1, 20); + this.drawExperience(recipe, guiGraphics, 1, this.background); + this.drawCookingTime(guiGraphics, 45, recipe.getCookingTime(), this.background); } } diff --git a/src/main/java/com/aetherteam/aether/integration/jei/categories/item/FreezingRecipeCategory.java b/src/main/java/com/aetherteam/aether/integration/jei/categories/item/FreezingRecipeCategory.java index 4f2a7fe1a9..f42bd373e3 100644 --- a/src/main/java/com/aetherteam/aether/integration/jei/categories/item/FreezingRecipeCategory.java +++ b/src/main/java/com/aetherteam/aether/integration/jei/categories/item/FreezingRecipeCategory.java @@ -3,7 +3,6 @@ import com.aetherteam.aether.Aether; import com.aetherteam.aether.block.AetherBlocks; import com.aetherteam.aether.recipe.recipes.item.FreezingRecipe; -import com.mojang.blaze3d.vertex.PoseStack; import mezz.jei.api.constants.VanillaTypes; import mezz.jei.api.gui.builder.IRecipeLayoutBuilder; import mezz.jei.api.gui.drawable.IDrawableAnimated; @@ -13,6 +12,7 @@ import mezz.jei.api.recipe.RecipeIngredientRole; import mezz.jei.api.recipe.RecipeType; import mezz.jei.api.recipe.category.IRecipeCategory; +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.core.NonNullList; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; @@ -42,10 +42,10 @@ public void setRecipe(IRecipeLayoutBuilder builder, FreezingRecipe recipe, IFocu } @Override - public void draw(FreezingRecipe recipe, IRecipeSlotsView recipeSlotsView, PoseStack stack, double mouseX, double mouseY) { - this.animatedProgressArrow.draw(stack, 24, 18); - this.fuelIndicator.draw(stack, 1, 20); - this.drawExperience(recipe, stack, 1, this.background); - this.drawCookingTime(stack, 45, recipe.getCookingTime(), this.background); + public void draw(FreezingRecipe recipe, IRecipeSlotsView recipeSlotsView, GuiGraphics guiGraphics, double mouseX, double mouseY) { + this.animatedProgressArrow.draw(guiGraphics, 24, 18); + this.fuelIndicator.draw(guiGraphics, 1, 20); + this.drawExperience(recipe, guiGraphics, 1, this.background); + this.drawCookingTime(guiGraphics, 45, recipe.getCookingTime(), this.background); } } diff --git a/src/main/java/com/aetherteam/aether/integration/jei/categories/item/IncubationRecipeCategory.java b/src/main/java/com/aetherteam/aether/integration/jei/categories/item/IncubationRecipeCategory.java index b97f9bf63c..df4ceeffd6 100644 --- a/src/main/java/com/aetherteam/aether/integration/jei/categories/item/IncubationRecipeCategory.java +++ b/src/main/java/com/aetherteam/aether/integration/jei/categories/item/IncubationRecipeCategory.java @@ -3,7 +3,6 @@ import com.aetherteam.aether.Aether; import com.aetherteam.aether.block.AetherBlocks; import com.aetherteam.aether.recipe.recipes.item.IncubationRecipe; -import com.mojang.blaze3d.vertex.PoseStack; import mezz.jei.api.constants.VanillaTypes; import mezz.jei.api.gui.builder.IRecipeLayoutBuilder; import mezz.jei.api.gui.drawable.IDrawableAnimated; @@ -13,6 +12,7 @@ import mezz.jei.api.recipe.RecipeIngredientRole; import mezz.jei.api.recipe.RecipeType; import mezz.jei.api.recipe.category.IRecipeCategory; +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.core.NonNullList; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; @@ -40,9 +40,9 @@ public void setRecipe(IRecipeLayoutBuilder builder, IncubationRecipe recipe, IFo } @Override - public void draw(IncubationRecipe recipe, IRecipeSlotsView recipeSlotsView, PoseStack stack, double mouseX, double mouseY) { - this.animatedProgressArrow.draw(stack, 31, 0); - this.fuelIndicator.draw(stack, 1, 20); - this.drawCookingTime(stack, 45, recipe.getIncubationTime(), this.background); + public void draw(IncubationRecipe recipe, IRecipeSlotsView recipeSlotsView, GuiGraphics guiGraphics, double mouseX, double mouseY) { + this.animatedProgressArrow.draw(guiGraphics, 31, 0); + this.fuelIndicator.draw(guiGraphics, 1, 20); + this.drawCookingTime(guiGraphics, 45, recipe.getIncubationTime(), this.background); } } diff --git a/src/main/java/com/aetherteam/aether/inventory/container/LoreInventory.java b/src/main/java/com/aetherteam/aether/inventory/container/LoreInventory.java index 9c07ba438b..cced43e467 100644 --- a/src/main/java/com/aetherteam/aether/inventory/container/LoreInventory.java +++ b/src/main/java/com/aetherteam/aether/inventory/container/LoreInventory.java @@ -33,7 +33,7 @@ public LoreInventory(Player player) { @Override public void setItem(int index, ItemStack stack) { if (!stack.isEmpty()) { - if (this.player.getLevel().isClientSide() && this.player instanceof LocalPlayer) { + if (this.player.level().isClientSide() && this.player instanceof LocalPlayer) { if (this.menu.loreEntryKeyExists(stack)) { PacketRelay.sendToServer(AetherPacketHandler.INSTANCE, new LoreExistsPacket(this.player.getId(), stack, true)); } else { diff --git a/src/main/java/com/aetherteam/aether/inventory/menu/AbstractAetherFurnaceMenu.java b/src/main/java/com/aetherteam/aether/inventory/menu/AbstractAetherFurnaceMenu.java index b8fe263caa..a2493202cb 100644 --- a/src/main/java/com/aetherteam/aether/inventory/menu/AbstractAetherFurnaceMenu.java +++ b/src/main/java/com/aetherteam/aether/inventory/menu/AbstractAetherFurnaceMenu.java @@ -36,7 +36,7 @@ protected AbstractAetherFurnaceMenu(MenuType menuType, RecipeType curiosHandler; private final Player player; - private final CraftingContainer craftMatrix = new CraftingContainer(this, 2, 2); + private final CraftingContainer craftMatrix = new TransientCraftingContainer(this, 2, 2); private final ResultContainer craftResult = new ResultContainer(); public final boolean hasButton; @@ -71,7 +72,7 @@ public AccessoriesMenu(int containerId, Inventory playerInventory) { } public AccessoriesMenu(int containerId, Inventory playerInventory, boolean hasButton) { - super(playerInventory, playerInventory.player.getLevel().isClientSide(), playerInventory.player); + super(playerInventory, playerInventory.player.level().isClientSide(), playerInventory.player); AbstractContainerMenuAccessor abstractContainerMenuAccessor = (AbstractContainerMenuAccessor) this; abstractContainerMenuAccessor.aether$setMenuType(AetherMenuTypes.ACCESSORIES.get()); abstractContainerMenuAccessor.aether$setContainerId(containerId); @@ -79,7 +80,7 @@ public AccessoriesMenu(int containerId, Inventory playerInventory, boolean hasBu abstractContainerMenuAccessor.aether$getLastSlots().clear(); this.slots.clear(); this.player = playerInventory.player; - this.curiosHandler = CuriosApi.getCuriosHelper().getCuriosHandler(this.player); + this.curiosHandler = CuriosApi.getCuriosInventory(this.player); this.hasButton = hasButton; this.addSlot(new ResultSlot(playerInventory.player, this.craftMatrix, this.craftResult, 0, 154, 28)); @@ -153,7 +154,7 @@ public Pair getNoItemIcon() { if (!stacksHandler.isVisible()) { for (int i = 0; i < stackHandler.getSlots(); i++) { if (!identifier.equals("aether_accessory")) { - this.addSlot(new CurioSlot(this.player, stackHandler, i, identifier, xOffset, yOffset, stacksHandler.getRenders())); + this.addSlot(new CurioSlot(this.player, stackHandler, i, identifier, xOffset, yOffset, stacksHandler.getRenders(), stacksHandler.canToggleRendering())); slots++; yOffset += 18; if (slots % 3 == 0) { @@ -164,7 +165,7 @@ public Pair getNoItemIcon() { if (slots == 6) { xOffset = 77; } - this.addSlot(new CurioSlot(this.player, stackHandler, i, identifier, xOffset, 62, stacksHandler.getRenders())); + this.addSlot(new CurioSlot(this.player, stackHandler, i, identifier, xOffset, 62, stacksHandler.getRenders(), stacksHandler.canToggleRendering())); slots++; xOffset += 18; } @@ -187,7 +188,7 @@ public void clearCraftingContent() { @Override public boolean recipeMatches(Recipe recipe) { - return recipe.matches(this.craftMatrix, this.player.getLevel()); + return recipe.matches(this.craftMatrix, this.player.level()); } @Override @@ -212,20 +213,20 @@ public int getSize() { @Override public void slotsChanged(Container container) { - if (!this.player.getLevel().isClientSide()) { + if (!this.player.level().isClientSide()) { ServerPlayer playerMP = (ServerPlayer) this.player; ItemStack itemStack = ItemStack.EMPTY; - MinecraftServer server = this.player.getLevel().getServer(); + MinecraftServer server = this.player.level().getServer(); if (server == null) { return; } - Optional recipe = server.getRecipeManager().getRecipeFor(RecipeType.CRAFTING, this.craftMatrix, this.player.getLevel()); + Optional recipe = server.getRecipeManager().getRecipeFor(RecipeType.CRAFTING, this.craftMatrix, this.player.level()); if (recipe.isPresent()) { CraftingRecipe craftingRecipe = recipe.get(); - if (this.craftResult.setRecipeUsed(this.player.getLevel(), playerMP, craftingRecipe)) { - itemStack = craftingRecipe.assemble(this.craftMatrix, this.player.getLevel().registryAccess()); + if (this.craftResult.setRecipeUsed(this.player.level(), playerMP, craftingRecipe)) { + itemStack = craftingRecipe.assemble(this.craftMatrix, this.player.level().registryAccess()); } } this.craftResult.setItem(0, itemStack); @@ -238,7 +239,7 @@ public void slotsChanged(Container container) { public void removed(Player player) { super.removed(player); this.craftResult.clearContent(); - if (!player.getLevel().isClientSide()) { + if (!player.level().isClientSide()) { this.clearContainer(player, this.craftMatrix); } } @@ -256,7 +257,7 @@ public ItemStack quickMoveStack(Player player, int index) { ItemStack itemStack1 = slot.getItem(); itemStack = itemStack1.copy(); EquipmentSlot equipmentSlot = Mob.getEquipmentSlotForItem(itemStack); - Set curioTags = CuriosApi.getCuriosHelper().getCurioTags(itemStack.getItem()); + Map curioTags = CuriosApi.getItemStackSlots(itemStack); if (index == 0) { if (!this.moveItemStackTo(itemStack1, 9, 45, true)) { return ItemStack.EMPTY; @@ -312,9 +313,9 @@ public ItemStack quickMoveStack(Player player, int index) { return itemStack; } - private Set getEmptyCurioSlots(Set identifiers) { + private Set getEmptyCurioSlots(Map slotData) { Set slots = new HashSet<>(); - for (String identifier : identifiers) { + for (String identifier : slotData.keySet()) { switch(identifier) { case "aether_pendant" -> slots.add(46); case "aether_cape" -> slots.add(47); diff --git a/src/main/java/com/aetherteam/aether/inventory/menu/IncubatorMenu.java b/src/main/java/com/aetherteam/aether/inventory/menu/IncubatorMenu.java index ce1f390b4c..562864d186 100644 --- a/src/main/java/com/aetherteam/aether/inventory/menu/IncubatorMenu.java +++ b/src/main/java/com/aetherteam/aether/inventory/menu/IncubatorMenu.java @@ -31,7 +31,7 @@ public IncubatorMenu(int containerId, Inventory playerInventory, Container conta checkContainerDataCount(data, 7); this.container = container; this.data = data; - this.level = playerInventory.player.getLevel(); + this.level = playerInventory.player.level(); this.addSlot(new IncubatorItemSlot(this, container, 0, 73, 17, playerInventory.player)); this.addSlot(new IncubatorFuelSlot(this, container, 1, 73, 53)); for (int i = 0; i < 3; ++i) { diff --git a/src/main/java/com/aetherteam/aether/inventory/menu/slot/IncubatorItemSlot.java b/src/main/java/com/aetherteam/aether/inventory/menu/slot/IncubatorItemSlot.java index b154993a09..985a65293a 100644 --- a/src/main/java/com/aetherteam/aether/inventory/menu/slot/IncubatorItemSlot.java +++ b/src/main/java/com/aetherteam/aether/inventory/menu/slot/IncubatorItemSlot.java @@ -27,7 +27,7 @@ public IncubatorItemSlot(IncubatorMenu menu, Container container, int slot, int public void set(ItemStack stack) { if (!stack.isEmpty() && !this.getItem().is(stack.getItem())) { if (this.player instanceof ServerPlayer serverPlayer) { - BlockEntity blockEntity = this.player.getLevel().getBlockEntity(this.menu.getIncubatorPos()); + BlockEntity blockEntity = this.player.level().getBlockEntity(this.menu.getIncubatorPos()); if (blockEntity instanceof IncubatorBlockEntity incubator) { incubator.setPlayer(serverPlayer); } diff --git a/src/main/java/com/aetherteam/aether/item/AetherCreativeTabs.java b/src/main/java/com/aetherteam/aether/item/AetherCreativeTabs.java index 57f0e62251..ec4247b2e2 100644 --- a/src/main/java/com/aetherteam/aether/item/AetherCreativeTabs.java +++ b/src/main/java/com/aetherteam/aether/item/AetherCreativeTabs.java @@ -3,426 +3,406 @@ import com.aetherteam.aether.Aether; import com.aetherteam.aether.AetherConfig; import com.aetherteam.aether.block.AetherBlocks; +import net.minecraft.core.registries.Registries; import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.CreativeModeTab; import net.minecraft.world.item.CreativeModeTabs; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; -import net.minecraftforge.event.CreativeModeTabEvent; +import net.minecraftforge.event.BuildCreativeModeTabContentsEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod; - -import java.util.List; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.RegistryObject; @Mod.EventBusSubscriber(modid = Aether.MODID, bus = Mod.EventBusSubscriber.Bus.MOD) public class AetherCreativeTabs { - public static CreativeModeTab AETHER_BUILDING_BLOCKS; - public static CreativeModeTab AETHER_DUNGEON_BLOCKS; - public static CreativeModeTab AETHER_NATURAL_BLOCKS; - public static CreativeModeTab AETHER_FUNCTIONAL_BLOCKS; - public static CreativeModeTab AETHER_REDSTONE_BLOCKS; - public static CreativeModeTab AETHER_EQUIPMENT_AND_UTILITIES; - public static CreativeModeTab AETHER_ARMOR_AND_ACCESSORIES; - public static CreativeModeTab AETHER_FOOD_AND_DRINKS; - public static CreativeModeTab AETHER_INGREDIENTS; - public static CreativeModeTab AETHER_SPAWN_EGGS; + public static final DeferredRegister CREATIVE_MODE_TABS = DeferredRegister.create(Registries.CREATIVE_MODE_TAB, Aether.MODID); - @SubscribeEvent - public static void registerCreativeModeTabs(CreativeModeTabEvent.Register event) { - AETHER_BUILDING_BLOCKS = event.registerCreativeModeTab( - new ResourceLocation(Aether.MODID, "building_blocks"), - List.of(new ResourceLocation(Aether.MODID, "dungeon_blocks")), - List.of(CreativeModeTabs.SPAWN_EGGS), - builder -> builder.icon(() -> new ItemStack(AetherBlocks.HOLYSTONE_BRICKS.get())) - .title(Component.translatable("itemGroup." + Aether.MODID + ".building_blocks")) - .displayItems((features, output) -> { - output.accept(AetherBlocks.SKYROOT_LOG.get()); - output.accept(AetherBlocks.SKYROOT_WOOD.get()); - output.accept(AetherBlocks.STRIPPED_SKYROOT_LOG.get()); - output.accept(AetherBlocks.STRIPPED_SKYROOT_WOOD.get()); - output.accept(AetherBlocks.SKYROOT_PLANKS.get()); - output.accept(AetherBlocks.SKYROOT_STAIRS.get()); - output.accept(AetherBlocks.SKYROOT_SLAB.get()); - output.accept(AetherBlocks.SKYROOT_FENCE.get()); - output.accept(AetherBlocks.SKYROOT_FENCE_GATE.get()); - output.accept(AetherBlocks.SKYROOT_DOOR.get()); - output.accept(AetherBlocks.SKYROOT_TRAPDOOR.get()); - output.accept(AetherBlocks.SKYROOT_PRESSURE_PLATE.get()); - output.accept(AetherBlocks.SKYROOT_BUTTON.get()); - output.accept(AetherBlocks.GOLDEN_OAK_LOG.get()); - output.accept(AetherBlocks.GOLDEN_OAK_WOOD.get()); - output.accept(AetherBlocks.QUICKSOIL_GLASS.get()); - output.accept(AetherBlocks.QUICKSOIL_GLASS_PANE.get()); - output.accept(AetherBlocks.HOLYSTONE.get()); - output.accept(AetherBlocks.HOLYSTONE_STAIRS.get()); - output.accept(AetherBlocks.HOLYSTONE_SLAB.get()); - output.accept(AetherBlocks.HOLYSTONE_WALL.get()); - output.accept(AetherBlocks.HOLYSTONE_PRESSURE_PLATE.get()); - output.accept(AetherBlocks.HOLYSTONE_BUTTON.get()); - output.accept(AetherBlocks.MOSSY_HOLYSTONE.get()); - output.accept(AetherBlocks.MOSSY_HOLYSTONE_STAIRS.get()); - output.accept(AetherBlocks.MOSSY_HOLYSTONE_SLAB.get()); - output.accept(AetherBlocks.MOSSY_HOLYSTONE_WALL.get()); - output.accept(AetherBlocks.HOLYSTONE_BRICKS.get()); - output.accept(AetherBlocks.HOLYSTONE_BRICK_STAIRS.get()); - output.accept(AetherBlocks.HOLYSTONE_BRICK_SLAB.get()); - output.accept(AetherBlocks.HOLYSTONE_BRICK_WALL.get()); - output.accept(AetherBlocks.ICESTONE.get()); - output.accept(AetherBlocks.ICESTONE_STAIRS.get()); - output.accept(AetherBlocks.ICESTONE_SLAB.get()); - output.accept(AetherBlocks.ICESTONE_WALL.get()); - output.accept(AetherBlocks.AMBROSIUM_BLOCK.get()); - output.accept(AetherBlocks.ZANITE_BLOCK.get()); - output.accept(AetherBlocks.ENCHANTED_GRAVITITE.get()); - output.accept(AetherBlocks.AEROGEL.get()); - output.accept(AetherBlocks.AEROGEL_STAIRS.get()); - output.accept(AetherBlocks.AEROGEL_SLAB.get()); - output.accept(AetherBlocks.AEROGEL_WALL.get()); - })); - AETHER_DUNGEON_BLOCKS = event.registerCreativeModeTab( - new ResourceLocation(Aether.MODID, "dungeon_blocks"), - List.of(new ResourceLocation(Aether.MODID, "natural_blocks")), - List.of(new ResourceLocation(Aether.MODID, "building_blocks")), - builder -> builder.icon(() -> new ItemStack(AetherBlocks.LIGHT_ANGELIC_STONE.get())) - .title(Component.translatable("itemGroup." + Aether.MODID + ".dungeon_blocks")) - .displayItems((features, output) -> { - output.accept(AetherBlocks.CARVED_STONE.get()); - output.accept(AetherBlocks.LOCKED_CARVED_STONE.get()); - output.accept(AetherBlocks.TRAPPED_CARVED_STONE.get()); - output.accept(AetherBlocks.BOSS_DOORWAY_CARVED_STONE.get()); - output.accept(AetherBlocks.TREASURE_DOORWAY_CARVED_STONE.get()); - output.accept(AetherBlocks.CARVED_STAIRS.get()); - output.accept(AetherBlocks.CARVED_SLAB.get()); - output.accept(AetherBlocks.CARVED_WALL.get()); - output.accept(AetherBlocks.SENTRY_STONE.get()); - output.accept(AetherBlocks.LOCKED_SENTRY_STONE.get()); - output.accept(AetherBlocks.TRAPPED_SENTRY_STONE.get()); - output.accept(AetherBlocks.BOSS_DOORWAY_SENTRY_STONE.get()); - output.accept(AetherBlocks.TREASURE_DOORWAY_SENTRY_STONE.get()); - output.accept(AetherBlocks.ANGELIC_STONE.get()); - output.accept(AetherBlocks.LOCKED_ANGELIC_STONE.get()); - output.accept(AetherBlocks.TRAPPED_ANGELIC_STONE.get()); - output.accept(AetherBlocks.BOSS_DOORWAY_ANGELIC_STONE.get()); - output.accept(AetherBlocks.TREASURE_DOORWAY_ANGELIC_STONE.get()); - output.accept(AetherBlocks.ANGELIC_STAIRS.get()); - output.accept(AetherBlocks.ANGELIC_SLAB.get()); - output.accept(AetherBlocks.ANGELIC_WALL.get()); - output.accept(AetherBlocks.LIGHT_ANGELIC_STONE.get()); - output.accept(AetherBlocks.LOCKED_LIGHT_ANGELIC_STONE.get()); - output.accept(AetherBlocks.TRAPPED_LIGHT_ANGELIC_STONE.get()); - output.accept(AetherBlocks.BOSS_DOORWAY_LIGHT_ANGELIC_STONE.get()); - output.accept(AetherBlocks.TREASURE_DOORWAY_LIGHT_ANGELIC_STONE.get()); - output.accept(AetherBlocks.PILLAR.get()); - output.accept(AetherBlocks.PILLAR_TOP.get()); - output.accept(AetherBlocks.HELLFIRE_STONE.get()); - output.accept(AetherBlocks.LOCKED_HELLFIRE_STONE.get()); - output.accept(AetherBlocks.TRAPPED_HELLFIRE_STONE.get()); - output.accept(AetherBlocks.BOSS_DOORWAY_HELLFIRE_STONE.get()); - output.accept(AetherBlocks.TREASURE_DOORWAY_HELLFIRE_STONE.get()); - output.accept(AetherBlocks.HELLFIRE_STAIRS.get()); - output.accept(AetherBlocks.HELLFIRE_SLAB.get()); - output.accept(AetherBlocks.HELLFIRE_WALL.get()); - output.accept(AetherBlocks.LIGHT_HELLFIRE_STONE.get()); - output.accept(AetherBlocks.LOCKED_LIGHT_HELLFIRE_STONE.get()); - output.accept(AetherBlocks.TRAPPED_LIGHT_HELLFIRE_STONE.get()); - output.accept(AetherBlocks.BOSS_DOORWAY_LIGHT_HELLFIRE_STONE.get()); - output.accept(AetherBlocks.TREASURE_DOORWAY_LIGHT_HELLFIRE_STONE.get()); - output.accept(AetherBlocks.TREASURE_CHEST.get()); - output.accept(AetherBlocks.CHEST_MIMIC.get()); - })); - AETHER_NATURAL_BLOCKS = event.registerCreativeModeTab( - new ResourceLocation(Aether.MODID, "natural_blocks"), - List.of(new ResourceLocation(Aether.MODID, "functional_blocks")), - List.of(new ResourceLocation(Aether.MODID, "dungeon_blocks")), - builder -> builder.icon(() -> new ItemStack(AetherBlocks.AETHER_GRASS_BLOCK.get())) - .title(Component.translatable("itemGroup." + Aether.MODID + ".natural_blocks")) - .displayItems((features, output) -> { - output.accept(AetherBlocks.AETHER_GRASS_BLOCK.get()); - output.accept(AetherBlocks.ENCHANTED_AETHER_GRASS_BLOCK.get()); - output.accept(AetherBlocks.AETHER_DIRT_PATH.get()); - output.accept(AetherBlocks.AETHER_DIRT.get()); - output.accept(AetherBlocks.AETHER_FARMLAND.get()); - output.accept(AetherBlocks.QUICKSOIL.get()); - output.accept(AetherBlocks.HOLYSTONE.get()); - output.accept(AetherBlocks.MOSSY_HOLYSTONE.get()); - output.accept(AetherBlocks.ICESTONE.get()); - output.accept(AetherBlocks.AMBROSIUM_ORE.get()); - output.accept(AetherBlocks.ZANITE_ORE.get()); - output.accept(AetherBlocks.GRAVITITE_ORE.get()); - output.accept(AetherBlocks.SKYROOT_LOG.get()); - output.accept(AetherBlocks.GOLDEN_OAK_LOG.get()); - output.accept(AetherBlocks.SKYROOT_LEAVES.get()); - output.accept(AetherBlocks.GOLDEN_OAK_LEAVES.get()); - output.accept(AetherBlocks.CRYSTAL_LEAVES.get()); - output.accept(AetherBlocks.CRYSTAL_FRUIT_LEAVES.get()); - output.accept(AetherBlocks.HOLIDAY_LEAVES.get()); - output.accept(AetherBlocks.DECORATED_HOLIDAY_LEAVES.get()); - output.accept(AetherBlocks.SKYROOT_SAPLING.get()); - output.accept(AetherBlocks.GOLDEN_OAK_SAPLING.get()); - output.accept(AetherBlocks.BERRY_BUSH_STEM.get()); - output.accept(AetherBlocks.BERRY_BUSH.get()); - output.accept(AetherBlocks.PURPLE_FLOWER.get()); - output.accept(AetherBlocks.WHITE_FLOWER.get()); - output.accept(AetherBlocks.COLD_AERCLOUD.get()); - output.accept(AetherBlocks.BLUE_AERCLOUD.get()); - output.accept(AetherBlocks.GOLDEN_AERCLOUD.get()); - output.accept(AetherBlocks.PRESENT.get()); - })); - AETHER_FUNCTIONAL_BLOCKS = event.registerCreativeModeTab( - new ResourceLocation(Aether.MODID, "functional_blocks"), - List.of(new ResourceLocation(Aether.MODID, "redstone_blocks")), - List.of(new ResourceLocation(Aether.MODID, "natural_blocks")), - builder -> builder.icon(() -> new ItemStack(AetherBlocks.SKYROOT_SIGN.get())) - .title(Component.translatable("itemGroup." + Aether.MODID + ".functional_blocks")) - .displayItems((features, output) -> { - output.accept(AetherBlocks.AMBROSIUM_TORCH.get()); - output.accept(AetherBlocks.ALTAR.get()); - output.accept(AetherBlocks.FREEZER.get()); - output.accept(AetherBlocks.INCUBATOR.get()); - output.accept(AetherBlocks.SUN_ALTAR.get()); - output.accept(AetherBlocks.SKYROOT_BOOKSHELF.get()); - output.accept(AetherBlocks.SKYROOT_SIGN.get()); - output.accept(AetherBlocks.SKYROOT_BED.get()); - output.accept(AetherBlocks.TREASURE_CHEST.get()); - output.accept(AetherBlocks.CHEST_MIMIC.get()); - output.accept(AetherBlocks.PRESENT.get()); - })); - AETHER_REDSTONE_BLOCKS = event.registerCreativeModeTab( - new ResourceLocation(Aether.MODID, "redstone_blocks"), - List.of(new ResourceLocation(Aether.MODID, "tools_and_utilities")), - List.of(new ResourceLocation(Aether.MODID, "functional_blocks")), - builder -> builder.icon(() -> new ItemStack(AetherBlocks.SKYROOT_FENCE_GATE.get())) - .title(Component.translatable("itemGroup." + Aether.MODID + ".redstone_blocks")) - .displayItems((features, output) -> { - output.accept(AetherBlocks.SKYROOT_BUTTON.get()); - output.accept(AetherBlocks.HOLYSTONE_BUTTON.get()); - output.accept(AetherBlocks.SKYROOT_PRESSURE_PLATE.get()); - output.accept(AetherBlocks.HOLYSTONE_PRESSURE_PLATE.get()); - output.accept(AetherBlocks.ALTAR.get()); - output.accept(AetherBlocks.FREEZER.get()); - output.accept(AetherBlocks.INCUBATOR.get()); - output.accept(AetherBlocks.TREASURE_CHEST.get()); - output.accept(AetherItems.SKYROOT_CHEST_BOAT.get()); - output.accept(AetherBlocks.SKYROOT_DOOR.get()); - output.accept(AetherBlocks.SKYROOT_FENCE_GATE.get()); - output.accept(AetherBlocks.SKYROOT_TRAPDOOR.get()); - output.accept(AetherBlocks.ENCHANTED_GRAVITITE.get()); - })); - AETHER_EQUIPMENT_AND_UTILITIES = event.registerCreativeModeTab( - new ResourceLocation(Aether.MODID, "equipment_and_utilities"), - List.of(new ResourceLocation(Aether.MODID, "armor_and_accessories")), - List.of(new ResourceLocation(Aether.MODID, "redstone_blocks")), - builder -> builder.icon(() -> new ItemStack(AetherItems.GRAVITITE_PICKAXE.get())) - .title(Component.translatable("itemGroup." + Aether.MODID + ".equipment_and_utilities")) - .displayItems((features, output) -> { - output.accept(AetherItems.SKYROOT_SWORD.get()); - output.accept(AetherItems.SKYROOT_SHOVEL.get()); - output.accept(AetherItems.SKYROOT_PICKAXE.get()); - output.accept(AetherItems.SKYROOT_AXE.get()); - output.accept(AetherItems.SKYROOT_HOE.get()); - output.accept(AetherItems.HOLYSTONE_SWORD.get()); - output.accept(AetherItems.HOLYSTONE_SHOVEL.get()); - output.accept(AetherItems.HOLYSTONE_PICKAXE.get()); - output.accept(AetherItems.HOLYSTONE_AXE.get()); - output.accept(AetherItems.HOLYSTONE_HOE.get()); - output.accept(AetherItems.ZANITE_SWORD.get()); - output.accept(AetherItems.ZANITE_SHOVEL.get()); - output.accept(AetherItems.ZANITE_PICKAXE.get()); - output.accept(AetherItems.ZANITE_AXE.get()); - output.accept(AetherItems.ZANITE_HOE.get()); - output.accept(AetherItems.GRAVITITE_SWORD.get()); - output.accept(AetherItems.GRAVITITE_SHOVEL.get()); - output.accept(AetherItems.GRAVITITE_PICKAXE.get()); - output.accept(AetherItems.GRAVITITE_AXE.get()); - output.accept(AetherItems.GRAVITITE_HOE.get()); - output.accept(AetherItems.VALKYRIE_LANCE.get()); - output.accept(AetherItems.VALKYRIE_SHOVEL.get()); - output.accept(AetherItems.VALKYRIE_PICKAXE.get()); - output.accept(AetherItems.VALKYRIE_AXE.get()); - output.accept(AetherItems.VALKYRIE_HOE.get()); - output.accept(AetherItems.GOLDEN_DART_SHOOTER.get()); - output.accept(AetherItems.GOLDEN_DART.get()); - output.accept(AetherItems.POISON_DART_SHOOTER.get()); - output.accept(AetherItems.POISON_DART.get()); - output.accept(AetherItems.ENCHANTED_DART_SHOOTER.get()); - output.accept(AetherItems.ENCHANTED_DART.get()); - output.accept(AetherItems.CANDY_CANE_SWORD.get()); - output.accept(AetherItems.HOLY_SWORD.get()); - output.accept(AetherItems.VAMPIRE_BLADE.get()); - output.accept(AetherItems.LIGHTNING_SWORD.get()); - output.accept(AetherItems.LIGHTNING_KNIFE.get()); - output.accept(AetherItems.FLAMING_SWORD.get()); - output.accept(AetherItems.PHOENIX_BOW.get()); - output.accept(AetherItems.PIG_SLAYER.get()); - output.accept(AetherItems.HAMMER_OF_KINGBDOGZ.get()); - output.accept(AetherItems.CLOUD_STAFF.get()); - output.accept(AetherItems.SKYROOT_BUCKET.get()); - output.accept(AetherItems.SKYROOT_WATER_BUCKET.get()); - output.accept(AetherItems.SKYROOT_PUFFERFISH_BUCKET.get()); - output.accept(AetherItems.SKYROOT_SALMON_BUCKET.get()); - output.accept(AetherItems.SKYROOT_COD_BUCKET.get()); - output.accept(AetherItems.SKYROOT_TROPICAL_FISH_BUCKET.get()); - output.accept(AetherItems.SKYROOT_AXOLOTL_BUCKET.get()); - output.accept(AetherItems.SKYROOT_TADPOLE_BUCKET.get()); - output.accept(AetherItems.SKYROOT_POWDER_SNOW_BUCKET.get()); - output.accept(AetherItems.SKYROOT_MILK_BUCKET.get()); - output.accept(AetherItems.SKYROOT_REMEDY_BUCKET.get()); - output.accept(AetherItems.SKYROOT_POISON_BUCKET.get()); - output.accept(AetherItems.BOOK_OF_LORE.get()); - output.accept(AetherItems.COLD_PARACHUTE.get()); - output.accept(AetherItems.GOLDEN_PARACHUTE.get()); - output.accept(AetherItems.AMBROSIUM_SHARD.get()); - output.accept(AetherItems.SWET_BALL.get()); - output.accept(AetherItems.BLUE_MOA_EGG.get()); - output.accept(AetherItems.WHITE_MOA_EGG.get()); - output.accept(AetherItems.BLACK_MOA_EGG.get()); - output.accept(AetherItems.NATURE_STAFF.get()); - output.accept(AetherItems.SKYROOT_BOAT.get()); - output.accept(AetherItems.SKYROOT_CHEST_BOAT.get()); - output.accept(AetherItems.BRONZE_DUNGEON_KEY.get()); - output.accept(AetherItems.SILVER_DUNGEON_KEY.get()); - output.accept(AetherItems.GOLD_DUNGEON_KEY.get()); - output.accept(AetherItems.VICTORY_MEDAL.get()); - output.accept(AetherItems.MUSIC_DISC_AETHER_TUNE.get()); - output.accept(AetherItems.MUSIC_DISC_ASCENDING_DAWN.get()); - output.accept(AetherItems.AETHER_PORTAL_FRAME.get()); - })); - AETHER_ARMOR_AND_ACCESSORIES = event.registerCreativeModeTab( - new ResourceLocation(Aether.MODID, "armor_and_accessories"), - List.of(new ResourceLocation(Aether.MODID, "food_and_drinks")), - List.of(new ResourceLocation(Aether.MODID, "equipment_and_utilities")), - builder -> builder.icon(() -> new ItemStack(AetherItems.VALKYRIE_CHESTPLATE.get())) - .title(Component.translatable("itemGroup." + Aether.MODID + ".armor_and_accessories")) - .displayItems((features, output) -> { - output.accept(AetherItems.ZANITE_HELMET.get()); - output.accept(AetherItems.ZANITE_CHESTPLATE.get()); - output.accept(AetherItems.ZANITE_LEGGINGS.get()); - output.accept(AetherItems.ZANITE_BOOTS.get()); - output.accept(AetherItems.ZANITE_GLOVES.get()); - output.accept(AetherItems.GRAVITITE_HELMET.get()); - output.accept(AetherItems.GRAVITITE_CHESTPLATE.get()); - output.accept(AetherItems.GRAVITITE_LEGGINGS.get()); - output.accept(AetherItems.GRAVITITE_BOOTS.get()); - output.accept(AetherItems.GRAVITITE_GLOVES.get()); - output.accept(AetherItems.VALKYRIE_HELMET.get()); - output.accept(AetherItems.VALKYRIE_CHESTPLATE.get()); - output.accept(AetherItems.VALKYRIE_LEGGINGS.get()); - output.accept(AetherItems.VALKYRIE_BOOTS.get()); - output.accept(AetherItems.VALKYRIE_GLOVES.get()); - output.accept(AetherItems.NEPTUNE_HELMET.get()); - output.accept(AetherItems.NEPTUNE_CHESTPLATE.get()); - output.accept(AetherItems.NEPTUNE_LEGGINGS.get()); - output.accept(AetherItems.NEPTUNE_BOOTS.get()); - output.accept(AetherItems.NEPTUNE_GLOVES.get()); - output.accept(AetherItems.PHOENIX_HELMET.get()); - output.accept(AetherItems.PHOENIX_CHESTPLATE.get()); - output.accept(AetherItems.PHOENIX_LEGGINGS.get()); - output.accept(AetherItems.PHOENIX_BOOTS.get()); - output.accept(AetherItems.PHOENIX_GLOVES.get()); - output.accept(AetherItems.OBSIDIAN_HELMET.get()); - output.accept(AetherItems.OBSIDIAN_CHESTPLATE.get()); - output.accept(AetherItems.OBSIDIAN_LEGGINGS.get()); - output.accept(AetherItems.OBSIDIAN_BOOTS.get()); - output.accept(AetherItems.OBSIDIAN_GLOVES.get()); - output.accept(AetherItems.SENTRY_BOOTS.get()); - output.accept(AetherItems.IRON_RING.get()); - output.accept(AetherItems.IRON_PENDANT.get()); - output.accept(AetherItems.GOLDEN_RING.get()); - output.accept(AetherItems.GOLDEN_PENDANT.get()); - output.accept(AetherItems.ZANITE_RING.get()); - output.accept(AetherItems.ZANITE_PENDANT.get()); - output.accept(AetherItems.ICE_RING.get()); - output.accept(AetherItems.ICE_PENDANT.get()); - output.accept(AetherItems.WHITE_CAPE.get()); - output.accept(AetherItems.YELLOW_CAPE.get()); - output.accept(AetherItems.RED_CAPE.get()); - output.accept(AetherItems.BLUE_CAPE.get()); - output.accept(AetherItems.AGILITY_CAPE.get()); - output.accept(AetherItems.SWET_CAPE.get()); - output.accept(AetherItems.INVISIBILITY_CLOAK.get()); - if (AetherConfig.SERVER.spawn_valkyrie_cape.get()) { - output.accept(AetherItems.VALKYRIE_CAPE.get()); - } - if (AetherConfig.SERVER.spawn_golden_feather.get()) { - output.accept(AetherItems.GOLDEN_FEATHER.get()); - } - output.accept(AetherItems.REGENERATION_STONE.get()); - output.accept(AetherItems.IRON_BUBBLE.get()); - output.accept(AetherItems.SHIELD_OF_REPULSION.get()); - })); - AETHER_FOOD_AND_DRINKS = event.registerCreativeModeTab( - new ResourceLocation(Aether.MODID, "food_and_drinks"), - List.of(new ResourceLocation(Aether.MODID, "ingredients")), - List.of(new ResourceLocation(Aether.MODID, "combat")), - builder -> builder.icon(() -> new ItemStack(AetherItems.BLUE_GUMMY_SWET.get())) - .title(Component.translatable("itemGroup." + Aether.MODID + ".food_and_drinks")) - .displayItems((features, output) -> { - output.accept(AetherItems.BLUE_BERRY.get()); - output.accept(AetherItems.ENCHANTED_BERRY.get()); - output.accept(AetherItems.WHITE_APPLE.get()); - if (AetherConfig.SERVER.edible_ambrosium.get()) { - output.accept(AetherItems.AMBROSIUM_SHARD.get()); - } - output.accept(AetherItems.HEALING_STONE.get()); - output.accept(AetherItems.BLUE_GUMMY_SWET.get()); - output.accept(AetherItems.GOLDEN_GUMMY_SWET.get()); - output.accept(AetherItems.GINGERBREAD_MAN.get()); - output.accept(AetherItems.CANDY_CANE.get()); - output.accept(AetherItems.SKYROOT_MILK_BUCKET.get()); - output.accept(AetherItems.SKYROOT_REMEDY_BUCKET.get()); - output.accept(AetherItems.SKYROOT_POISON_BUCKET.get()); - output.accept(AetherItems.LIFE_SHARD.get()); - })); - AETHER_INGREDIENTS = event.registerCreativeModeTab( - new ResourceLocation(Aether.MODID, "ingredients"), - List.of(new ResourceLocation(Aether.MODID, "spawn_eggs")), - List.of(new ResourceLocation(Aether.MODID, "food_and_drinks")), - builder -> builder.icon(() -> new ItemStack(AetherItems.AMBROSIUM_SHARD.get())) - .title(Component.translatable("itemGroup." + Aether.MODID + ".ingredients")) - .displayItems((features, output) -> { - output.accept(AetherItems.AMBROSIUM_SHARD.get()); - output.accept(AetherItems.ZANITE_GEMSTONE.get()); - output.accept(AetherBlocks.ENCHANTED_GRAVITITE.get()); - output.accept(AetherItems.SKYROOT_STICK.get()); - output.accept(AetherItems.GOLDEN_AMBER.get()); - output.accept(AetherItems.AECHOR_PETAL.get()); - output.accept(AetherItems.SKYROOT_POISON_BUCKET.get()); - output.accept(AetherItems.SWET_BALL.get()); - })); - AETHER_SPAWN_EGGS = event.registerCreativeModeTab( - new ResourceLocation(Aether.MODID, "spawn_eggs"), - List.of(), - List.of(new ResourceLocation(Aether.MODID, "ingredients")), - builder -> builder.icon(() -> new ItemStack(AetherItems.AERBUNNY_SPAWN_EGG.get())) - .title(Component.translatable("itemGroup." + Aether.MODID + ".spawn_eggs")) - .displayItems((features, output) -> { - output.accept(AetherItems.BLUE_MOA_EGG.get()); - output.accept(AetherItems.WHITE_MOA_EGG.get()); - output.accept(AetherItems.BLACK_MOA_EGG.get()); - output.accept(AetherItems.AECHOR_PLANT_SPAWN_EGG.get()); - output.accept(AetherItems.AERBUNNY_SPAWN_EGG.get()); - output.accept(AetherItems.AERWHALE_SPAWN_EGG.get()); - output.accept(AetherItems.BLUE_SWET_SPAWN_EGG.get()); - output.accept(AetherItems.COCKATRICE_SPAWN_EGG.get()); - output.accept(AetherItems.EVIL_WHIRLWIND_SPAWN_EGG.get()); - output.accept(AetherItems.FIRE_MINION_SPAWN_EGG.get()); - output.accept(AetherItems.FLYING_COW_SPAWN_EGG.get()); - output.accept(AetherItems.GOLDEN_SWET_SPAWN_EGG.get()); - output.accept(AetherItems.MIMIC_SPAWN_EGG.get()); - output.accept(AetherItems.MOA_SPAWN_EGG.get()); - output.accept(AetherItems.PHYG_SPAWN_EGG.get()); - output.accept(AetherItems.SENTRY_SPAWN_EGG.get()); - output.accept(AetherItems.SHEEPUFF_SPAWN_EGG.get()); - output.accept(AetherItems.WHIRLWIND_SPAWN_EGG.get()); - output.accept(AetherItems.VALKYRIE_SPAWN_EGG.get()); - output.accept(AetherItems.ZEPHYR_SPAWN_EGG.get()); - })); - } + public static RegistryObject AETHER_BUILDING_BLOCKS = CREATIVE_MODE_TABS.register("building_blocks", () -> CreativeModeTab.builder() + .withTabsBefore(CreativeModeTabs.SPAWN_EGGS) + .withTabsAfter(new ResourceLocation(Aether.MODID, "dungeon_blocks")) + .icon(() -> new ItemStack(AetherBlocks.HOLYSTONE_BRICKS.get())) + .title(Component.translatable("itemGroup." + Aether.MODID + ".building_blocks")) + .displayItems((features, output) -> { + output.accept(AetherBlocks.SKYROOT_LOG.get()); + output.accept(AetherBlocks.SKYROOT_WOOD.get()); + output.accept(AetherBlocks.STRIPPED_SKYROOT_LOG.get()); + output.accept(AetherBlocks.STRIPPED_SKYROOT_WOOD.get()); + output.accept(AetherBlocks.SKYROOT_PLANKS.get()); + output.accept(AetherBlocks.SKYROOT_STAIRS.get()); + output.accept(AetherBlocks.SKYROOT_SLAB.get()); + output.accept(AetherBlocks.SKYROOT_FENCE.get()); + output.accept(AetherBlocks.SKYROOT_FENCE_GATE.get()); + output.accept(AetherBlocks.SKYROOT_DOOR.get()); + output.accept(AetherBlocks.SKYROOT_TRAPDOOR.get()); + output.accept(AetherBlocks.SKYROOT_PRESSURE_PLATE.get()); + output.accept(AetherBlocks.SKYROOT_BUTTON.get()); + output.accept(AetherBlocks.GOLDEN_OAK_LOG.get()); + output.accept(AetherBlocks.GOLDEN_OAK_WOOD.get()); + output.accept(AetherBlocks.QUICKSOIL_GLASS.get()); + output.accept(AetherBlocks.QUICKSOIL_GLASS_PANE.get()); + output.accept(AetherBlocks.HOLYSTONE.get()); + output.accept(AetherBlocks.HOLYSTONE_STAIRS.get()); + output.accept(AetherBlocks.HOLYSTONE_SLAB.get()); + output.accept(AetherBlocks.HOLYSTONE_WALL.get()); + output.accept(AetherBlocks.HOLYSTONE_PRESSURE_PLATE.get()); + output.accept(AetherBlocks.HOLYSTONE_BUTTON.get()); + output.accept(AetherBlocks.MOSSY_HOLYSTONE.get()); + output.accept(AetherBlocks.MOSSY_HOLYSTONE_STAIRS.get()); + output.accept(AetherBlocks.MOSSY_HOLYSTONE_SLAB.get()); + output.accept(AetherBlocks.MOSSY_HOLYSTONE_WALL.get()); + output.accept(AetherBlocks.HOLYSTONE_BRICKS.get()); + output.accept(AetherBlocks.HOLYSTONE_BRICK_STAIRS.get()); + output.accept(AetherBlocks.HOLYSTONE_BRICK_SLAB.get()); + output.accept(AetherBlocks.HOLYSTONE_BRICK_WALL.get()); + output.accept(AetherBlocks.ICESTONE.get()); + output.accept(AetherBlocks.ICESTONE_STAIRS.get()); + output.accept(AetherBlocks.ICESTONE_SLAB.get()); + output.accept(AetherBlocks.ICESTONE_WALL.get()); + output.accept(AetherBlocks.AMBROSIUM_BLOCK.get()); + output.accept(AetherBlocks.ZANITE_BLOCK.get()); + output.accept(AetherBlocks.ENCHANTED_GRAVITITE.get()); + output.accept(AetherBlocks.AEROGEL.get()); + output.accept(AetherBlocks.AEROGEL_STAIRS.get()); + output.accept(AetherBlocks.AEROGEL_SLAB.get()); + output.accept(AetherBlocks.AEROGEL_WALL.get()); + }).build()); + public static RegistryObject AETHER_DUNGEON_BLOCKS = CREATIVE_MODE_TABS.register("dungeon_blocks", () -> CreativeModeTab.builder() + .withTabsBefore(new ResourceLocation(Aether.MODID, "building_blocks")) + .withTabsAfter(new ResourceLocation(Aether.MODID, "natural_blocks")) + .icon(() -> new ItemStack(AetherBlocks.LIGHT_ANGELIC_STONE.get())) + .title(Component.translatable("itemGroup." + Aether.MODID + ".dungeon_blocks")) + .displayItems((features, output) -> { + output.accept(AetherBlocks.CARVED_STONE.get()); + output.accept(AetherBlocks.LOCKED_CARVED_STONE.get()); + output.accept(AetherBlocks.TRAPPED_CARVED_STONE.get()); + output.accept(AetherBlocks.BOSS_DOORWAY_CARVED_STONE.get()); + output.accept(AetherBlocks.TREASURE_DOORWAY_CARVED_STONE.get()); + output.accept(AetherBlocks.CARVED_STAIRS.get()); + output.accept(AetherBlocks.CARVED_SLAB.get()); + output.accept(AetherBlocks.CARVED_WALL.get()); + output.accept(AetherBlocks.SENTRY_STONE.get()); + output.accept(AetherBlocks.LOCKED_SENTRY_STONE.get()); + output.accept(AetherBlocks.TRAPPED_SENTRY_STONE.get()); + output.accept(AetherBlocks.BOSS_DOORWAY_SENTRY_STONE.get()); + output.accept(AetherBlocks.TREASURE_DOORWAY_SENTRY_STONE.get()); + output.accept(AetherBlocks.ANGELIC_STONE.get()); + output.accept(AetherBlocks.LOCKED_ANGELIC_STONE.get()); + output.accept(AetherBlocks.TRAPPED_ANGELIC_STONE.get()); + output.accept(AetherBlocks.BOSS_DOORWAY_ANGELIC_STONE.get()); + output.accept(AetherBlocks.TREASURE_DOORWAY_ANGELIC_STONE.get()); + output.accept(AetherBlocks.ANGELIC_STAIRS.get()); + output.accept(AetherBlocks.ANGELIC_SLAB.get()); + output.accept(AetherBlocks.ANGELIC_WALL.get()); + output.accept(AetherBlocks.LIGHT_ANGELIC_STONE.get()); + output.accept(AetherBlocks.LOCKED_LIGHT_ANGELIC_STONE.get()); + output.accept(AetherBlocks.TRAPPED_LIGHT_ANGELIC_STONE.get()); + output.accept(AetherBlocks.BOSS_DOORWAY_LIGHT_ANGELIC_STONE.get()); + output.accept(AetherBlocks.TREASURE_DOORWAY_LIGHT_ANGELIC_STONE.get()); + output.accept(AetherBlocks.PILLAR.get()); + output.accept(AetherBlocks.PILLAR_TOP.get()); + output.accept(AetherBlocks.HELLFIRE_STONE.get()); + output.accept(AetherBlocks.LOCKED_HELLFIRE_STONE.get()); + output.accept(AetherBlocks.TRAPPED_HELLFIRE_STONE.get()); + output.accept(AetherBlocks.BOSS_DOORWAY_HELLFIRE_STONE.get()); + output.accept(AetherBlocks.TREASURE_DOORWAY_HELLFIRE_STONE.get()); + output.accept(AetherBlocks.HELLFIRE_STAIRS.get()); + output.accept(AetherBlocks.HELLFIRE_SLAB.get()); + output.accept(AetherBlocks.HELLFIRE_WALL.get()); + output.accept(AetherBlocks.LIGHT_HELLFIRE_STONE.get()); + output.accept(AetherBlocks.LOCKED_LIGHT_HELLFIRE_STONE.get()); + output.accept(AetherBlocks.TRAPPED_LIGHT_HELLFIRE_STONE.get()); + output.accept(AetherBlocks.BOSS_DOORWAY_LIGHT_HELLFIRE_STONE.get()); + output.accept(AetherBlocks.TREASURE_DOORWAY_LIGHT_HELLFIRE_STONE.get()); + output.accept(AetherBlocks.TREASURE_CHEST.get()); + output.accept(AetherBlocks.CHEST_MIMIC.get()); + }).build()); + public static RegistryObject AETHER_NATURAL_BLOCKS = CREATIVE_MODE_TABS.register("natural_blocks", () -> CreativeModeTab.builder() + .withTabsBefore(new ResourceLocation(Aether.MODID, "dungeon_blocks")) + .withTabsAfter(new ResourceLocation(Aether.MODID, "functional_blocks")) + .icon(() -> new ItemStack(AetherBlocks.AETHER_GRASS_BLOCK.get())) + .title(Component.translatable("itemGroup." + Aether.MODID + ".natural_blocks")) + .displayItems((features, output) -> { + output.accept(AetherBlocks.AETHER_GRASS_BLOCK.get()); + output.accept(AetherBlocks.ENCHANTED_AETHER_GRASS_BLOCK.get()); + output.accept(AetherBlocks.AETHER_DIRT_PATH.get()); + output.accept(AetherBlocks.AETHER_DIRT.get()); + output.accept(AetherBlocks.AETHER_FARMLAND.get()); + output.accept(AetherBlocks.QUICKSOIL.get()); + output.accept(AetherBlocks.HOLYSTONE.get()); + output.accept(AetherBlocks.MOSSY_HOLYSTONE.get()); + output.accept(AetherBlocks.ICESTONE.get()); + output.accept(AetherBlocks.AMBROSIUM_ORE.get()); + output.accept(AetherBlocks.ZANITE_ORE.get()); + output.accept(AetherBlocks.GRAVITITE_ORE.get()); + output.accept(AetherBlocks.SKYROOT_LOG.get()); + output.accept(AetherBlocks.GOLDEN_OAK_LOG.get()); + output.accept(AetherBlocks.SKYROOT_LEAVES.get()); + output.accept(AetherBlocks.GOLDEN_OAK_LEAVES.get()); + output.accept(AetherBlocks.CRYSTAL_LEAVES.get()); + output.accept(AetherBlocks.CRYSTAL_FRUIT_LEAVES.get()); + output.accept(AetherBlocks.HOLIDAY_LEAVES.get()); + output.accept(AetherBlocks.DECORATED_HOLIDAY_LEAVES.get()); + output.accept(AetherBlocks.SKYROOT_SAPLING.get()); + output.accept(AetherBlocks.GOLDEN_OAK_SAPLING.get()); + output.accept(AetherBlocks.BERRY_BUSH_STEM.get()); + output.accept(AetherBlocks.BERRY_BUSH.get()); + output.accept(AetherBlocks.PURPLE_FLOWER.get()); + output.accept(AetherBlocks.WHITE_FLOWER.get()); + output.accept(AetherBlocks.COLD_AERCLOUD.get()); + output.accept(AetherBlocks.BLUE_AERCLOUD.get()); + output.accept(AetherBlocks.GOLDEN_AERCLOUD.get()); + output.accept(AetherBlocks.PRESENT.get()); + }).build()); + public static RegistryObject AETHER_FUNCTIONAL_BLOCKS = CREATIVE_MODE_TABS.register("functional_blocks", () -> CreativeModeTab.builder() + .withTabsBefore(new ResourceLocation(Aether.MODID, "natural_blocks")) + .withTabsAfter(new ResourceLocation(Aether.MODID, "redstone_blocks")) + .icon(() -> new ItemStack(AetherBlocks.SKYROOT_SIGN.get())) + .title(Component.translatable("itemGroup." + Aether.MODID + ".functional_blocks")) + .displayItems((features, output) -> { + output.accept(AetherBlocks.AMBROSIUM_TORCH.get()); + output.accept(AetherBlocks.ALTAR.get()); + output.accept(AetherBlocks.FREEZER.get()); + output.accept(AetherBlocks.INCUBATOR.get()); + output.accept(AetherBlocks.SUN_ALTAR.get()); + output.accept(AetherBlocks.SKYROOT_BOOKSHELF.get()); + output.accept(AetherBlocks.SKYROOT_SIGN.get()); + output.accept(AetherBlocks.SKYROOT_HANGING_SIGN.get()); + output.accept(AetherBlocks.SKYROOT_BED.get()); + output.accept(AetherBlocks.TREASURE_CHEST.get()); + output.accept(AetherBlocks.CHEST_MIMIC.get()); + output.accept(AetherBlocks.PRESENT.get()); + }).build()); + public static RegistryObject AETHER_REDSTONE_BLOCKS = CREATIVE_MODE_TABS.register("redstone_blocks", () -> CreativeModeTab.builder() + .withTabsBefore(new ResourceLocation(Aether.MODID, "functional_blocks")) + .withTabsAfter(new ResourceLocation(Aether.MODID, "tools_and_utilities")) + .icon(() -> new ItemStack(AetherBlocks.SKYROOT_FENCE_GATE.get())) + .title(Component.translatable("itemGroup." + Aether.MODID + ".redstone_blocks")) + .displayItems((features, output) -> { + output.accept(AetherBlocks.SKYROOT_BUTTON.get()); + output.accept(AetherBlocks.HOLYSTONE_BUTTON.get()); + output.accept(AetherBlocks.SKYROOT_PRESSURE_PLATE.get()); + output.accept(AetherBlocks.HOLYSTONE_PRESSURE_PLATE.get()); + output.accept(AetherBlocks.ALTAR.get()); + output.accept(AetherBlocks.FREEZER.get()); + output.accept(AetherBlocks.INCUBATOR.get()); + output.accept(AetherBlocks.TREASURE_CHEST.get()); + output.accept(AetherItems.SKYROOT_CHEST_BOAT.get()); + output.accept(AetherBlocks.SKYROOT_DOOR.get()); + output.accept(AetherBlocks.SKYROOT_FENCE_GATE.get()); + output.accept(AetherBlocks.SKYROOT_TRAPDOOR.get()); + output.accept(AetherBlocks.ENCHANTED_GRAVITITE.get()); + }).build()); + public static RegistryObject AETHER_EQUIPMENT_AND_UTILITIES = CREATIVE_MODE_TABS.register("equipment_and_utilities", () -> CreativeModeTab.builder() + .withTabsBefore(new ResourceLocation(Aether.MODID, "redstone_blocks")) + .withTabsAfter(new ResourceLocation(Aether.MODID, "armor_and_accessories")) + .icon(() -> new ItemStack(AetherItems.GRAVITITE_PICKAXE.get())) + .title(Component.translatable("itemGroup." + Aether.MODID + ".equipment_and_utilities")) + .displayItems((features, output) -> { + output.accept(AetherItems.SKYROOT_SWORD.get()); + output.accept(AetherItems.SKYROOT_SHOVEL.get()); + output.accept(AetherItems.SKYROOT_PICKAXE.get()); + output.accept(AetherItems.SKYROOT_AXE.get()); + output.accept(AetherItems.SKYROOT_HOE.get()); + output.accept(AetherItems.HOLYSTONE_SWORD.get()); + output.accept(AetherItems.HOLYSTONE_SHOVEL.get()); + output.accept(AetherItems.HOLYSTONE_PICKAXE.get()); + output.accept(AetherItems.HOLYSTONE_AXE.get()); + output.accept(AetherItems.HOLYSTONE_HOE.get()); + output.accept(AetherItems.ZANITE_SWORD.get()); + output.accept(AetherItems.ZANITE_SHOVEL.get()); + output.accept(AetherItems.ZANITE_PICKAXE.get()); + output.accept(AetherItems.ZANITE_AXE.get()); + output.accept(AetherItems.ZANITE_HOE.get()); + output.accept(AetherItems.GRAVITITE_SWORD.get()); + output.accept(AetherItems.GRAVITITE_SHOVEL.get()); + output.accept(AetherItems.GRAVITITE_PICKAXE.get()); + output.accept(AetherItems.GRAVITITE_AXE.get()); + output.accept(AetherItems.GRAVITITE_HOE.get()); + output.accept(AetherItems.VALKYRIE_LANCE.get()); + output.accept(AetherItems.VALKYRIE_SHOVEL.get()); + output.accept(AetherItems.VALKYRIE_PICKAXE.get()); + output.accept(AetherItems.VALKYRIE_AXE.get()); + output.accept(AetherItems.VALKYRIE_HOE.get()); + output.accept(AetherItems.GOLDEN_DART_SHOOTER.get()); + output.accept(AetherItems.GOLDEN_DART.get()); + output.accept(AetherItems.POISON_DART_SHOOTER.get()); + output.accept(AetherItems.POISON_DART.get()); + output.accept(AetherItems.ENCHANTED_DART_SHOOTER.get()); + output.accept(AetherItems.ENCHANTED_DART.get()); + output.accept(AetherItems.CANDY_CANE_SWORD.get()); + output.accept(AetherItems.HOLY_SWORD.get()); + output.accept(AetherItems.VAMPIRE_BLADE.get()); + output.accept(AetherItems.LIGHTNING_SWORD.get()); + output.accept(AetherItems.LIGHTNING_KNIFE.get()); + output.accept(AetherItems.FLAMING_SWORD.get()); + output.accept(AetherItems.PHOENIX_BOW.get()); + output.accept(AetherItems.PIG_SLAYER.get()); + output.accept(AetherItems.HAMMER_OF_KINGBDOGZ.get()); + output.accept(AetherItems.CLOUD_STAFF.get()); + output.accept(AetherItems.SKYROOT_BUCKET.get()); + output.accept(AetherItems.SKYROOT_WATER_BUCKET.get()); + output.accept(AetherItems.SKYROOT_PUFFERFISH_BUCKET.get()); + output.accept(AetherItems.SKYROOT_SALMON_BUCKET.get()); + output.accept(AetherItems.SKYROOT_COD_BUCKET.get()); + output.accept(AetherItems.SKYROOT_TROPICAL_FISH_BUCKET.get()); + output.accept(AetherItems.SKYROOT_AXOLOTL_BUCKET.get()); + output.accept(AetherItems.SKYROOT_TADPOLE_BUCKET.get()); + output.accept(AetherItems.SKYROOT_POWDER_SNOW_BUCKET.get()); + output.accept(AetherItems.SKYROOT_MILK_BUCKET.get()); + output.accept(AetherItems.SKYROOT_REMEDY_BUCKET.get()); + output.accept(AetherItems.SKYROOT_POISON_BUCKET.get()); + output.accept(AetherItems.BOOK_OF_LORE.get()); + output.accept(AetherItems.COLD_PARACHUTE.get()); + output.accept(AetherItems.GOLDEN_PARACHUTE.get()); + output.accept(AetherItems.AMBROSIUM_SHARD.get()); + output.accept(AetherItems.SWET_BALL.get()); + output.accept(AetherItems.BLUE_MOA_EGG.get()); + output.accept(AetherItems.WHITE_MOA_EGG.get()); + output.accept(AetherItems.BLACK_MOA_EGG.get()); + output.accept(AetherItems.NATURE_STAFF.get()); + output.accept(AetherItems.SKYROOT_BOAT.get()); + output.accept(AetherItems.SKYROOT_CHEST_BOAT.get()); + output.accept(AetherItems.BRONZE_DUNGEON_KEY.get()); + output.accept(AetherItems.SILVER_DUNGEON_KEY.get()); + output.accept(AetherItems.GOLD_DUNGEON_KEY.get()); + output.accept(AetherItems.VICTORY_MEDAL.get()); + output.accept(AetherItems.MUSIC_DISC_AETHER_TUNE.get()); + output.accept(AetherItems.MUSIC_DISC_ASCENDING_DAWN.get()); + output.accept(AetherItems.AETHER_PORTAL_FRAME.get()); + }).build()); + public static RegistryObject AETHER_ARMOR_AND_ACCESSORIES = CREATIVE_MODE_TABS.register("armor_and_accessories", () -> CreativeModeTab.builder() + .withTabsBefore(new ResourceLocation(Aether.MODID, "equipment_and_utilities")) + .withTabsAfter(new ResourceLocation(Aether.MODID, "food_and_drinks")) + .icon(() -> new ItemStack(AetherItems.VALKYRIE_CHESTPLATE.get())) + .title(Component.translatable("itemGroup." + Aether.MODID + ".armor_and_accessories")) + .displayItems((features, output) -> { + output.accept(AetherItems.ZANITE_HELMET.get()); + output.accept(AetherItems.ZANITE_CHESTPLATE.get()); + output.accept(AetherItems.ZANITE_LEGGINGS.get()); + output.accept(AetherItems.ZANITE_BOOTS.get()); + output.accept(AetherItems.ZANITE_GLOVES.get()); + output.accept(AetherItems.GRAVITITE_HELMET.get()); + output.accept(AetherItems.GRAVITITE_CHESTPLATE.get()); + output.accept(AetherItems.GRAVITITE_LEGGINGS.get()); + output.accept(AetherItems.GRAVITITE_BOOTS.get()); + output.accept(AetherItems.GRAVITITE_GLOVES.get()); + output.accept(AetherItems.NEPTUNE_HELMET.get()); + output.accept(AetherItems.NEPTUNE_CHESTPLATE.get()); + output.accept(AetherItems.NEPTUNE_LEGGINGS.get()); + output.accept(AetherItems.NEPTUNE_BOOTS.get()); + output.accept(AetherItems.NEPTUNE_GLOVES.get()); + output.accept(AetherItems.VALKYRIE_HELMET.get()); + output.accept(AetherItems.VALKYRIE_CHESTPLATE.get()); + output.accept(AetherItems.VALKYRIE_LEGGINGS.get()); + output.accept(AetherItems.VALKYRIE_BOOTS.get()); + output.accept(AetherItems.VALKYRIE_GLOVES.get()); + output.accept(AetherItems.PHOENIX_HELMET.get()); + output.accept(AetherItems.PHOENIX_CHESTPLATE.get()); + output.accept(AetherItems.PHOENIX_LEGGINGS.get()); + output.accept(AetherItems.PHOENIX_BOOTS.get()); + output.accept(AetherItems.PHOENIX_GLOVES.get()); + output.accept(AetherItems.OBSIDIAN_HELMET.get()); + output.accept(AetherItems.OBSIDIAN_CHESTPLATE.get()); + output.accept(AetherItems.OBSIDIAN_LEGGINGS.get()); + output.accept(AetherItems.OBSIDIAN_BOOTS.get()); + output.accept(AetherItems.OBSIDIAN_GLOVES.get()); + output.accept(AetherItems.SENTRY_BOOTS.get()); + output.accept(AetherItems.IRON_RING.get()); + output.accept(AetherItems.IRON_PENDANT.get()); + output.accept(AetherItems.GOLDEN_RING.get()); + output.accept(AetherItems.GOLDEN_PENDANT.get()); + output.accept(AetherItems.ZANITE_RING.get()); + output.accept(AetherItems.ZANITE_PENDANT.get()); + output.accept(AetherItems.ICE_RING.get()); + output.accept(AetherItems.ICE_PENDANT.get()); + output.accept(AetherItems.WHITE_CAPE.get()); + output.accept(AetherItems.YELLOW_CAPE.get()); + output.accept(AetherItems.RED_CAPE.get()); + output.accept(AetherItems.BLUE_CAPE.get()); + output.accept(AetherItems.AGILITY_CAPE.get()); + output.accept(AetherItems.SWET_CAPE.get()); + output.accept(AetherItems.INVISIBILITY_CLOAK.get()); + if (AetherConfig.SERVER.spawn_valkyrie_cape.get()) { + output.accept(AetherItems.VALKYRIE_CAPE.get()); + } + if (AetherConfig.SERVER.spawn_golden_feather.get()) { + output.accept(AetherItems.GOLDEN_FEATHER.get()); + } + output.accept(AetherItems.REGENERATION_STONE.get()); + output.accept(AetherItems.IRON_BUBBLE.get()); + output.accept(AetherItems.SHIELD_OF_REPULSION.get()); + }).build()); + public static RegistryObject AETHER_FOOD_AND_DRINKS = CREATIVE_MODE_TABS.register("food_and_drinks", () -> CreativeModeTab.builder() + .withTabsBefore(new ResourceLocation(Aether.MODID, "combat")) + .withTabsAfter(new ResourceLocation(Aether.MODID, "ingredients")) + .icon(() -> new ItemStack(AetherItems.BLUE_GUMMY_SWET.get())) + .title(Component.translatable("itemGroup." + Aether.MODID + ".food_and_drinks")) + .displayItems((features, output) -> { + output.accept(AetherItems.BLUE_BERRY.get()); + output.accept(AetherItems.ENCHANTED_BERRY.get()); + output.accept(AetherItems.WHITE_APPLE.get()); + if (AetherConfig.SERVER.edible_ambrosium.get()) { + output.accept(AetherItems.AMBROSIUM_SHARD.get()); + } + output.accept(AetherItems.HEALING_STONE.get()); + output.accept(AetherItems.BLUE_GUMMY_SWET.get()); + output.accept(AetherItems.GOLDEN_GUMMY_SWET.get()); + output.accept(AetherItems.GINGERBREAD_MAN.get()); + output.accept(AetherItems.CANDY_CANE.get()); + output.accept(AetherItems.SKYROOT_MILK_BUCKET.get()); + output.accept(AetherItems.SKYROOT_REMEDY_BUCKET.get()); + output.accept(AetherItems.SKYROOT_POISON_BUCKET.get()); + output.accept(AetherItems.LIFE_SHARD.get()); + }).build()); + public static RegistryObject AETHER_INGREDIENTS = CREATIVE_MODE_TABS.register("ingredients", () -> CreativeModeTab.builder() + .withTabsBefore(new ResourceLocation(Aether.MODID, "food_and_drinks")) + .withTabsAfter(new ResourceLocation(Aether.MODID, "spawn_eggs")) + .icon(() -> new ItemStack(AetherItems.AMBROSIUM_SHARD.get())) + .title(Component.translatable("itemGroup." + Aether.MODID + ".ingredients")) + .displayItems((features, output) -> { + output.accept(AetherItems.AMBROSIUM_SHARD.get()); + output.accept(AetherItems.ZANITE_GEMSTONE.get()); + output.accept(AetherBlocks.ENCHANTED_GRAVITITE.get()); + output.accept(AetherItems.SKYROOT_STICK.get()); + output.accept(AetherItems.GOLDEN_AMBER.get()); + output.accept(AetherItems.AECHOR_PETAL.get()); + output.accept(AetherItems.SKYROOT_POISON_BUCKET.get()); + output.accept(AetherItems.SWET_BALL.get()); + }).build()); + public static RegistryObject AETHER_SPAWN_EGGS = CREATIVE_MODE_TABS.register("spawn_eggs", () -> CreativeModeTab.builder() + .withTabsBefore(new ResourceLocation(Aether.MODID, "ingredients")) + .icon(() -> new ItemStack(AetherItems.AERBUNNY_SPAWN_EGG.get())) + .title(Component.translatable("itemGroup." + Aether.MODID + ".spawn_eggs")) + .displayItems((features, output) -> { + output.accept(AetherItems.BLUE_MOA_EGG.get()); + output.accept(AetherItems.WHITE_MOA_EGG.get()); + output.accept(AetherItems.BLACK_MOA_EGG.get()); + output.accept(AetherItems.AECHOR_PLANT_SPAWN_EGG.get()); + output.accept(AetherItems.AERBUNNY_SPAWN_EGG.get()); + output.accept(AetherItems.AERWHALE_SPAWN_EGG.get()); + output.accept(AetherItems.BLUE_SWET_SPAWN_EGG.get()); + output.accept(AetherItems.COCKATRICE_SPAWN_EGG.get()); + output.accept(AetherItems.EVIL_WHIRLWIND_SPAWN_EGG.get()); + output.accept(AetherItems.FIRE_MINION_SPAWN_EGG.get()); + output.accept(AetherItems.FLYING_COW_SPAWN_EGG.get()); + output.accept(AetherItems.GOLDEN_SWET_SPAWN_EGG.get()); + output.accept(AetherItems.MIMIC_SPAWN_EGG.get()); + output.accept(AetherItems.MOA_SPAWN_EGG.get()); + output.accept(AetherItems.PHYG_SPAWN_EGG.get()); + output.accept(AetherItems.SENTRY_SPAWN_EGG.get()); + output.accept(AetherItems.SHEEPUFF_SPAWN_EGG.get()); + output.accept(AetherItems.WHIRLWIND_SPAWN_EGG.get()); + output.accept(AetherItems.VALKYRIE_SPAWN_EGG.get()); + output.accept(AetherItems.ZEPHYR_SPAWN_EGG.get()); + }).build()); @SubscribeEvent - public static void buildCreativeModeTabs(CreativeModeTabEvent.BuildContents event) { - CreativeModeTab tab = event.getTab(); + public static void buildCreativeModeTabs(BuildCreativeModeTabContentsEvent event) { + ResourceKey tab = event.getTabKey(); if (tab == CreativeModeTabs.COMBAT) { event.getEntries().putAfter(new ItemStack(Items.LEATHER_BOOTS), new ItemStack(AetherItems.LEATHER_GLOVES.get()), CreativeModeTab.TabVisibility.PARENT_AND_SEARCH_TABS); event.getEntries().putAfter(new ItemStack(Items.CHAINMAIL_BOOTS), new ItemStack(AetherItems.CHAINMAIL_GLOVES.get()), CreativeModeTab.TabVisibility.PARENT_AND_SEARCH_TABS); diff --git a/src/main/java/com/aetherteam/aether/item/AetherItems.java b/src/main/java/com/aetherteam/aether/item/AetherItems.java index f4e59d83a0..06210edf11 100644 --- a/src/main/java/com/aetherteam/aether/item/AetherItems.java +++ b/src/main/java/com/aetherteam/aether/item/AetherItems.java @@ -190,17 +190,17 @@ public class AetherItems { public static final RegistryObject ICE_PENDANT = ITEMS.register("ice_pendant", () -> new IcePendantItem(new Item.Properties().durability(250))); public static final RegistryObject LEATHER_GLOVES = ITEMS.register("leather_gloves", () -> new LeatherGlovesItem(0.25, new Item.Properties().durability(59))); - public static final RegistryObject CHAINMAIL_GLOVES = ITEMS.register("chainmail_gloves", () -> new GlovesItem(0.35,"chainmail_gloves", () -> SoundEvents.ARMOR_EQUIP_CHAIN, new Item.Properties().durability(131))); - public static final RegistryObject IRON_GLOVES = ITEMS.register("iron_gloves", () -> new GlovesItem(0.5, "iron_gloves", () -> SoundEvents.ARMOR_EQUIP_IRON, new Item.Properties().durability(250))); + public static final RegistryObject CHAINMAIL_GLOVES = ITEMS.register("chainmail_gloves", () -> new GlovesItem(ArmorMaterials.CHAIN, 0.35, "chainmail_gloves", () -> SoundEvents.ARMOR_EQUIP_CHAIN, new Item.Properties().durability(131))); + public static final RegistryObject IRON_GLOVES = ITEMS.register("iron_gloves", () -> new GlovesItem(ArmorMaterials.IRON, 0.5, "iron_gloves", () -> SoundEvents.ARMOR_EQUIP_IRON, new Item.Properties().durability(250))); public static final RegistryObject GOLDEN_GLOVES = ITEMS.register("golden_gloves", () -> new GoldGlovesItem(0.25, new Item.Properties().durability(32))); - public static final RegistryObject DIAMOND_GLOVES = ITEMS.register("diamond_gloves", () -> new GlovesItem(0.75, "diamond_gloves", () -> SoundEvents.ARMOR_EQUIP_DIAMOND, new Item.Properties().durability(1561))); - public static final RegistryObject NETHERITE_GLOVES = ITEMS.register("netherite_gloves", () -> new GlovesItem(1.0, "netherite_gloves", () -> SoundEvents.ARMOR_EQUIP_NETHERITE, new Item.Properties().durability(2031).fireResistant())); + public static final RegistryObject DIAMOND_GLOVES = ITEMS.register("diamond_gloves", () -> new GlovesItem(ArmorMaterials.DIAMOND, 0.75, "diamond_gloves", () -> SoundEvents.ARMOR_EQUIP_DIAMOND, new Item.Properties().durability(1561))); + public static final RegistryObject NETHERITE_GLOVES = ITEMS.register("netherite_gloves", () -> new GlovesItem(ArmorMaterials.NETHERITE, 1.0, "netherite_gloves", () -> SoundEvents.ARMOR_EQUIP_NETHERITE, new Item.Properties().durability(2031).fireResistant())); public static final RegistryObject ZANITE_GLOVES = ITEMS.register("zanite_gloves", () -> new ZaniteGlovesItem(0.5, new Item.Properties().durability(250))); - public static final RegistryObject GRAVITITE_GLOVES = ITEMS.register("gravitite_gloves", () -> new GlovesItem(0.75, "gravitite_gloves", AetherSoundEvents.ITEM_ARMOR_EQUIP_GRAVITITE, new Item.Properties().durability(1561))); - public static final RegistryObject VALKYRIE_GLOVES = ITEMS.register("valkyrie_gloves", () -> new GlovesItem(1.0, "valkyrie_gloves", AetherSoundEvents.ITEM_ARMOR_EQUIP_VALKYRIE, new Item.Properties().stacksTo(1).rarity(AETHER_LOOT).durability(1561))); - public static final RegistryObject NEPTUNE_GLOVES = ITEMS.register("neptune_gloves", () -> new GlovesItem(0.5, "neptune_gloves", AetherSoundEvents.ITEM_ARMOR_EQUIP_NEPTUNE, new Item.Properties().stacksTo(1).rarity(AETHER_LOOT).durability(250))); - public static final RegistryObject PHOENIX_GLOVES = ITEMS.register("phoenix_gloves", () -> new GlovesItem(1.0, "phoenix_gloves", AetherSoundEvents.ITEM_ARMOR_EQUIP_PHOENIX, new Item.Properties().stacksTo(1).rarity(AETHER_LOOT).fireResistant().durability(1561))); - public static final RegistryObject OBSIDIAN_GLOVES = ITEMS.register("obsidian_gloves", () -> new GlovesItem(1.0, "obsidian_gloves", AetherSoundEvents.ITEM_ARMOR_EQUIP_OBSIDIAN, new Item.Properties().stacksTo(1).rarity(AETHER_LOOT).durability(2031))); + public static final RegistryObject GRAVITITE_GLOVES = ITEMS.register("gravitite_gloves", () -> new GlovesItem(AetherArmorMaterials.GRAVITITE, 0.75, "gravitite_gloves", AetherSoundEvents.ITEM_ARMOR_EQUIP_GRAVITITE, new Item.Properties().durability(1561))); + public static final RegistryObject VALKYRIE_GLOVES = ITEMS.register("valkyrie_gloves", () -> new GlovesItem(AetherArmorMaterials.VALKYRIE, 1.0, "valkyrie_gloves", AetherSoundEvents.ITEM_ARMOR_EQUIP_VALKYRIE, new Item.Properties().stacksTo(1).rarity(AETHER_LOOT).durability(1561))); + public static final RegistryObject NEPTUNE_GLOVES = ITEMS.register("neptune_gloves", () -> new GlovesItem(AetherArmorMaterials.NEPTUNE, 0.5, "neptune_gloves", AetherSoundEvents.ITEM_ARMOR_EQUIP_NEPTUNE, new Item.Properties().stacksTo(1).rarity(AETHER_LOOT).durability(250))); + public static final RegistryObject PHOENIX_GLOVES = ITEMS.register("phoenix_gloves", () -> new GlovesItem(AetherArmorMaterials.PHOENIX, 1.0, "phoenix_gloves", AetherSoundEvents.ITEM_ARMOR_EQUIP_PHOENIX, new Item.Properties().stacksTo(1).rarity(AETHER_LOOT).fireResistant().durability(1561))); + public static final RegistryObject OBSIDIAN_GLOVES = ITEMS.register("obsidian_gloves", () -> new GlovesItem(AetherArmorMaterials.OBSIDIAN, 1.0, "obsidian_gloves", AetherSoundEvents.ITEM_ARMOR_EQUIP_OBSIDIAN, new Item.Properties().stacksTo(1).rarity(AETHER_LOOT).durability(2031))); public static final RegistryObject RED_CAPE = ITEMS.register("red_cape", () -> new CapeItem("red_cape", new Item.Properties().stacksTo(1))); public static final RegistryObject BLUE_CAPE = ITEMS.register("blue_cape", () -> new CapeItem("blue_cape", new Item.Properties().stacksTo(1))); diff --git a/src/main/java/com/aetherteam/aether/item/EquipmentUtil.java b/src/main/java/com/aetherteam/aether/item/EquipmentUtil.java index f372e46b9f..019a476926 100644 --- a/src/main/java/com/aetherteam/aether/item/EquipmentUtil.java +++ b/src/main/java/com/aetherteam/aether/item/EquipmentUtil.java @@ -7,12 +7,15 @@ import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; +import net.minecraftforge.common.util.LazyOptional; import top.theillusivec4.curios.api.CuriosApi; import top.theillusivec4.curios.api.SlotResult; +import top.theillusivec4.curios.api.type.capability.ICuriosItemHandler; import javax.annotation.Nullable; import java.util.List; import java.util.Optional; +import java.util.function.Predicate; public final class EquipmentUtil { /** @@ -42,7 +45,7 @@ public static double calculateZaniteBuff(ItemStack stack, double baseValue) { */ @Nullable public static SlotResult getGloves(LivingEntity entity) { - Optional slotResultOptional = CuriosApi.getCuriosHelper().findFirstCurio(entity, (stack) -> stack.getItem() instanceof GlovesItem); + Optional slotResultOptional = EquipmentUtil.findFirstCurio(entity, (stack) -> stack.getItem() instanceof GlovesItem); return slotResultOptional.orElse(null); } @@ -98,7 +101,7 @@ public static boolean hasInvisibilityCloak(LivingEntity entity) { * @return The result of the check, as a {@link Boolean}. */ public static boolean hasCape(LivingEntity entity) { - return CuriosApi.getCuriosHelper().findFirstCurio(entity, stack -> stack.getItem() instanceof CapeItem).isPresent(); + return findFirstCurio(entity, stack -> stack.getItem() instanceof CapeItem).isPresent(); } /** @@ -108,7 +111,7 @@ public static boolean hasCape(LivingEntity entity) { */ @Nullable public static SlotResult getCape(LivingEntity entity) { - return CuriosApi.getCuriosHelper().findFirstCurio(entity, stack -> stack.getItem() instanceof CapeItem).orElse(null); + return findFirstCurio(entity, stack -> stack.getItem() instanceof CapeItem).orElse(null); } /** @@ -118,7 +121,7 @@ public static SlotResult getCape(LivingEntity entity) { * @return The result of the check, as a {@link Boolean}. */ public static boolean hasCurio(LivingEntity entity, Item item) { - return CuriosApi.getCuriosHelper().findFirstCurio(entity, item).isPresent(); + return findFirstCurio(entity, item).isPresent(); } /** @@ -129,7 +132,7 @@ public static boolean hasCurio(LivingEntity entity, Item item) { */ @Nullable public static SlotResult getCurio(LivingEntity entity, Item item) { - return CuriosApi.getCuriosHelper().findFirstCurio(entity, item).orElse(null); + return findFirstCurio(entity, item).orElse(null); } /** @@ -139,7 +142,12 @@ public static SlotResult getCurio(LivingEntity entity, Item item) { * @return The {@link List} of {@link SlotResult}s for the curio items. */ public static List getCurios(LivingEntity entity, Item item) { - return CuriosApi.getCuriosHelper().findCurios(entity, item); + LazyOptional inventoryOptional = CuriosApi.getCuriosInventory(entity); + if (inventoryOptional.isPresent() && inventoryOptional.resolve().isPresent()) { + ICuriosItemHandler inventory = inventoryOptional.resolve().get(); + return inventory.findCurios(item); + } + return List.of(); } /** @@ -211,7 +219,7 @@ private static boolean hasArmorSet(LivingEntity entity, Item helmet, Item chestp && entity.getItemBySlot(EquipmentSlot.CHEST).is(chestplate) && entity.getItemBySlot(EquipmentSlot.LEGS).is(leggings) && entity.getItemBySlot(EquipmentSlot.FEET).is(boots) - && CuriosApi.getCuriosHelper().findFirstCurio(entity, gloves).isPresent(); + && findFirstCurio(entity, gloves).isPresent(); } /** @@ -229,6 +237,25 @@ private static boolean hasAnyArmor(LivingEntity entity, Item helmet, Item chestp || entity.getItemBySlot(EquipmentSlot.CHEST).is(chestplate) || entity.getItemBySlot(EquipmentSlot.LEGS).is(leggings) || entity.getItemBySlot(EquipmentSlot.FEET).is(boots) - || CuriosApi.getCuriosHelper().findFirstCurio(entity, gloves).isPresent(); + || findFirstCurio(entity, gloves).isPresent(); + } + + /** + * @see ICuriosItemHandler#findFirstCurio(Item) + */ + public static Optional findFirstCurio(LivingEntity entity, Item item) { + return findFirstCurio(entity, (itemStack) -> itemStack.is(item)); + } + + /** + * @see ICuriosItemHandler#findFirstCurio(Predicate) + */ + public static Optional findFirstCurio(LivingEntity entity, Predicate predicate) { + LazyOptional inventoryOptional = CuriosApi.getCuriosInventory(entity); + if (inventoryOptional.isPresent() && inventoryOptional.resolve().isPresent()) { + ICuriosItemHandler inventory = inventoryOptional.resolve().get(); + return inventory.findFirstCurio(predicate); + } + return Optional.empty(); } } diff --git a/src/main/java/com/aetherteam/aether/item/accessories/abilities/FreezingAccessory.java b/src/main/java/com/aetherteam/aether/item/accessories/abilities/FreezingAccessory.java index bca5bd3b97..8efaa0b323 100644 --- a/src/main/java/com/aetherteam/aether/item/accessories/abilities/FreezingAccessory.java +++ b/src/main/java/com/aetherteam/aether/item/accessories/abilities/FreezingAccessory.java @@ -28,8 +28,8 @@ public interface FreezingAccessory extends FreezingBehavior { default void freezeTick(SlotContext context, ItemStack stack) { LivingEntity livingEntity = context.entity(); if (!(livingEntity instanceof Player player) || (!player.getAbilities().flying && !player.isSpectator())) { - int damage = this.freezeBlocks(livingEntity.getLevel(), livingEntity.blockPosition(), stack, 1.9F); - stack.hurtAndBreak(damage / 3, livingEntity, wearer -> CuriosApi.getCuriosHelper().onBrokenCurio(context)); + int damage = this.freezeBlocks(livingEntity.level(), livingEntity.blockPosition(), stack, 1.9F); + stack.hurtAndBreak(damage / 3, livingEntity, wearer -> CuriosApi.broadcastCurioBreakEvent(context)); } } diff --git a/src/main/java/com/aetherteam/aether/item/accessories/abilities/ShieldOfRepulsionAccessory.java b/src/main/java/com/aetherteam/aether/item/accessories/abilities/ShieldOfRepulsionAccessory.java index bb764d9b97..392806bfaf 100644 --- a/src/main/java/com/aetherteam/aether/item/accessories/abilities/ShieldOfRepulsionAccessory.java +++ b/src/main/java/com/aetherteam/aether/item/accessories/abilities/ShieldOfRepulsionAccessory.java @@ -37,7 +37,7 @@ static void deflectProjectile(ProjectileImpactEvent event, HitResult hitResult, if (impactedLiving instanceof Player player) { AetherPlayer.get(player).ifPresent(aetherPlayer -> { if (!aetherPlayer.isMoving()) { - if (aetherPlayer.getPlayer().getLevel().isClientSide()) { // Values used by the Shield of Repulsion screen overlay vignette. + if (aetherPlayer.getPlayer().level().isClientSide()) { // Values used by the Shield of Repulsion screen overlay vignette. aetherPlayer.setProjectileImpactedMaximum(150); aetherPlayer.setProjectileImpactedTimer(150); } @@ -71,7 +71,7 @@ private static void handleDeflection(ProjectileImpactEvent event, Projectile pro damagingProjectileEntity.yPower *= -0.25; damagingProjectileEntity.zPower *= -0.25; } - slotResult.stack().hurtAndBreak(1, impactedLiving, (entity) -> CuriosApi.getCuriosHelper().onBrokenCurio(slotResult.slotContext())); + slotResult.stack().hurtAndBreak(1, impactedLiving, (entity) -> CuriosApi.broadcastCurioBreakEvent(slotResult.slotContext())); } } } diff --git a/src/main/java/com/aetherteam/aether/item/accessories/abilities/SlowFallAccessory.java b/src/main/java/com/aetherteam/aether/item/accessories/abilities/SlowFallAccessory.java index a724c92674..3bd993ad21 100644 --- a/src/main/java/com/aetherteam/aether/item/accessories/abilities/SlowFallAccessory.java +++ b/src/main/java/com/aetherteam/aether/item/accessories/abilities/SlowFallAccessory.java @@ -15,7 +15,7 @@ public interface SlowFallAccessory { default void handleSlowFall(LivingEntity livingEntity) { AttributeInstance gravity = livingEntity.getAttribute(net.minecraftforge.common.ForgeMod.ENTITY_GRAVITY.get()); if (gravity != null) { - if (livingEntity.getDeltaMovement().y() <= -0.06 && !livingEntity.isOnGround() && !livingEntity.isFallFlying() && !livingEntity.isInFluidType() && !livingEntity.isShiftKeyDown() && gravity.getValue() > 0.0075) { + if (livingEntity.getDeltaMovement().y() <= -0.06 && !livingEntity.onGround() && !livingEntity.isFallFlying() && !livingEntity.isInFluidType() && !livingEntity.isShiftKeyDown() && gravity.getValue() > 0.0075) { livingEntity.setDeltaMovement(livingEntity.getDeltaMovement().multiply(1.0, 0.6, 1.0)); } } diff --git a/src/main/java/com/aetherteam/aether/item/accessories/cape/InvisibilityCloakItem.java b/src/main/java/com/aetherteam/aether/item/accessories/cape/InvisibilityCloakItem.java index 89d4200c08..0fa8bcb3ff 100644 --- a/src/main/java/com/aetherteam/aether/item/accessories/cape/InvisibilityCloakItem.java +++ b/src/main/java/com/aetherteam/aether/item/accessories/cape/InvisibilityCloakItem.java @@ -26,14 +26,14 @@ public InvisibilityCloakItem(Properties properties) { @Override public void curioTick(SlotContext slotContext, ItemStack stack) { LivingEntity livingEntity = slotContext.entity(); - if (livingEntity.getLevel().isClientSide() && livingEntity instanceof Player player) { + if (livingEntity.level().isClientSide() && livingEntity instanceof Player player) { AetherPlayer.get(player).ifPresent((aetherPlayer) -> { if (AetherKeys.INVISIBILITY_TOGGLE.consumeClick()) { aetherPlayer.setSynched(INBTSynchable.Direction.SERVER, "setInvisibilityEnabled", !aetherPlayer.isInvisibilityEnabled()); } }); } - if (!livingEntity.getLevel().isClientSide() && livingEntity instanceof Player player) { + if (!livingEntity.level().isClientSide() && livingEntity instanceof Player player) { AetherPlayer.get(player).ifPresent((aetherPlayer) -> { if (aetherPlayer.isInvisibilityEnabled()) { if (!AetherConfig.SERVER.balance_invisibility_cloak.get()) { @@ -74,7 +74,7 @@ public void curioTick(SlotContext slotContext, ItemStack stack) { @Override public void onUnequip(SlotContext slotContext, ItemStack newStack, ItemStack stack) { LivingEntity livingEntity = slotContext.entity(); - if (!livingEntity.getLevel().isClientSide() && livingEntity instanceof Player player) { + if (!livingEntity.level().isClientSide() && livingEntity instanceof Player player) { AetherPlayer.get(player).ifPresent((aetherPlayer) -> aetherPlayer.setSynched(INBTSynchable.Direction.CLIENT, "setWearingInvisibilityCloak", false)); } livingEntity.setInvisible(false); diff --git a/src/main/java/com/aetherteam/aether/item/accessories/gloves/GlovesItem.java b/src/main/java/com/aetherteam/aether/item/accessories/gloves/GlovesItem.java index 2dbb650840..35785b7608 100644 --- a/src/main/java/com/aetherteam/aether/item/accessories/gloves/GlovesItem.java +++ b/src/main/java/com/aetherteam/aether/item/accessories/gloves/GlovesItem.java @@ -9,6 +9,7 @@ import net.minecraft.world.entity.ai.attributes.Attribute; import net.minecraft.world.entity.ai.attributes.AttributeModifier; import net.minecraft.world.entity.ai.attributes.Attributes; +import net.minecraft.world.item.ArmorMaterial; import net.minecraft.world.item.ItemStack; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; @@ -20,19 +21,22 @@ import java.util.function.Supplier; public class GlovesItem extends AccessoryItem { + protected final ArmorMaterial material; protected final double damage; protected ResourceLocation GLOVES_TEXTURE; protected final Supplier equipSound; - public GlovesItem(double punchDamage, String glovesName, Supplier glovesSound, Properties properties) { + public GlovesItem(ArmorMaterial material, double punchDamage, String glovesName, Supplier glovesSound, Properties properties) { super(properties); + this.material = material; this.damage = punchDamage; this.setRenderTexture(Aether.MODID, glovesName); this.equipSound = glovesSound; } - public GlovesItem(double punchDamage, ResourceLocation glovesName, Supplier glovesSound, Properties properties) { + public GlovesItem(ArmorMaterial material, double punchDamage, ResourceLocation glovesName, Supplier glovesSound, Properties properties) { super(properties); + this.material = material; this.damage = punchDamage; this.setRenderTexture(glovesName.getNamespace(), glovesName.getPath()); this.equipSound = glovesSound; @@ -50,6 +54,28 @@ public ICurio.SoundInfo getEquipSound(SlotContext slotContext, ItemStack stack) return new ICurio.SoundInfo(this.equipSound.get(), 1.0F, 1.0F); } + /** + * Warning for "deprecation" is suppressed because the method is fine to override. + */ + @SuppressWarnings("deprecation") + @Override + public int getEnchantmentValue() { + return this.material.getEnchantmentValue(); + } + + @Override + public boolean isValidRepairItem(ItemStack item, ItemStack material) { + return this.material.getRepairIngredient().test(material) || super.isValidRepairItem(item, material); + } + + public ArmorMaterial getMaterial() { + return this.material; + } + + public double getDamage() { + return this.damage; + } + public void setRenderTexture(String modId, String registryName) { this.GLOVES_TEXTURE = new ResourceLocation(modId, "textures/models/accessory/gloves/" + registryName + "_accessory.png"); } diff --git a/src/main/java/com/aetherteam/aether/item/accessories/gloves/GoldGlovesItem.java b/src/main/java/com/aetherteam/aether/item/accessories/gloves/GoldGlovesItem.java index d49d409947..5dc83e1e39 100644 --- a/src/main/java/com/aetherteam/aether/item/accessories/gloves/GoldGlovesItem.java +++ b/src/main/java/com/aetherteam/aether/item/accessories/gloves/GoldGlovesItem.java @@ -2,11 +2,12 @@ import net.minecraft.sounds.SoundEvents; import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.item.ArmorMaterials; import net.minecraft.world.item.ItemStack; public class GoldGlovesItem extends GlovesItem { public GoldGlovesItem(double punchDamage, Properties properties) { - super(punchDamage, "gold_gloves", () -> SoundEvents.ARMOR_EQUIP_GOLD, properties); + super(ArmorMaterials.GOLD, punchDamage, "gold_gloves", () -> SoundEvents.ARMOR_EQUIP_GOLD, properties); } @Override diff --git a/src/main/java/com/aetherteam/aether/item/accessories/gloves/LeatherGlovesItem.java b/src/main/java/com/aetherteam/aether/item/accessories/gloves/LeatherGlovesItem.java index adffdce533..12d23d43e7 100644 --- a/src/main/java/com/aetherteam/aether/item/accessories/gloves/LeatherGlovesItem.java +++ b/src/main/java/com/aetherteam/aether/item/accessories/gloves/LeatherGlovesItem.java @@ -1,10 +1,11 @@ package com.aetherteam.aether.item.accessories.gloves; import net.minecraft.sounds.SoundEvents; +import net.minecraft.world.item.ArmorMaterials; import net.minecraft.world.item.DyeableLeatherItem; public class LeatherGlovesItem extends GlovesItem implements DyeableLeatherItem { public LeatherGlovesItem(double punchDamage, Properties properties) { - super(punchDamage, "leather_gloves", () -> SoundEvents.ARMOR_EQUIP_LEATHER, properties); + super(ArmorMaterials.LEATHER, punchDamage, "leather_gloves", () -> SoundEvents.ARMOR_EQUIP_LEATHER, properties); } } diff --git a/src/main/java/com/aetherteam/aether/item/accessories/gloves/ZaniteGlovesItem.java b/src/main/java/com/aetherteam/aether/item/accessories/gloves/ZaniteGlovesItem.java index b5b32e1721..7fdbf287eb 100644 --- a/src/main/java/com/aetherteam/aether/item/accessories/gloves/ZaniteGlovesItem.java +++ b/src/main/java/com/aetherteam/aether/item/accessories/gloves/ZaniteGlovesItem.java @@ -1,6 +1,7 @@ package com.aetherteam.aether.item.accessories.gloves; import com.aetherteam.aether.client.AetherSoundEvents; +import com.aetherteam.aether.item.combat.AetherArmorMaterials; import com.google.common.collect.HashMultimap; import com.google.common.collect.Multimap; import net.minecraft.world.entity.ai.attributes.Attribute; @@ -13,7 +14,7 @@ public class ZaniteGlovesItem extends GlovesItem { public ZaniteGlovesItem(double punchDamage, Properties properties) { - super(punchDamage, "zanite_gloves", AetherSoundEvents.ITEM_ARMOR_EQUIP_ZANITE, properties); + super(AetherArmorMaterials.ZANITE, punchDamage, "zanite_gloves", AetherSoundEvents.ITEM_ARMOR_EQUIP_ZANITE, properties); } @Override diff --git a/src/main/java/com/aetherteam/aether/item/combat/abilities/armor/GravititeArmor.java b/src/main/java/com/aetherteam/aether/item/combat/abilities/armor/GravititeArmor.java index cd630c5316..978e3f24eb 100644 --- a/src/main/java/com/aetherteam/aether/item/combat/abilities/armor/GravititeArmor.java +++ b/src/main/java/com/aetherteam/aether/item/combat/abilities/armor/GravititeArmor.java @@ -21,7 +21,7 @@ static void boostedJump(LivingEntity entity) { if (EquipmentUtil.hasFullGravititeSet(entity)) { if (entity instanceof Player player) { AetherPlayer.get(player).ifPresent(aetherPlayer -> { - if (aetherPlayer.getPlayer().isOnGround() && aetherPlayer.isGravititeJumpActive()) { + if (aetherPlayer.getPlayer().onGround() && aetherPlayer.isGravititeJumpActive()) { aetherPlayer.getPlayer().push(0.0, 1.0, 0.0); if (aetherPlayer.getPlayer() instanceof ServerPlayer serverPlayer) { serverPlayer.connection.send(new ClientboundSetEntityMotionPacket(serverPlayer)); diff --git a/src/main/java/com/aetherteam/aether/item/combat/abilities/armor/PhoenixArmor.java b/src/main/java/com/aetherteam/aether/item/combat/abilities/armor/PhoenixArmor.java index 9b3fd8d407..0d3d60ff7c 100644 --- a/src/main/java/com/aetherteam/aether/item/combat/abilities/armor/PhoenixArmor.java +++ b/src/main/java/com/aetherteam/aether/item/combat/abilities/armor/PhoenixArmor.java @@ -49,7 +49,7 @@ static void boostLavaSwimming(LivingEntity entity) { entity.moveRelative(0.04F * defaultBoost, new Vec3(entity.xxa, entity.yya, entity.zza)); } } - if (entity.getLevel() instanceof ServerLevel level) { + if (entity.level() instanceof ServerLevel level) { level.sendParticles(ParticleTypes.FLAME, entity.getX() + (level.getRandom().nextGaussian() / 5.0), entity.getY() + (level.getRandom().nextGaussian() / 3.0), @@ -120,9 +120,9 @@ static void damageArmor(LivingEntity entity) { if (entity instanceof Player player) { AetherPlayer.get(player).ifPresent((aetherPlayer) -> { if (EquipmentUtil.hasAnyPhoenixArmor(entity) && entity.isInWaterRainOrBubble()) { - if (entity.getLevel().getGameTime() % 15 == 0) { + if (entity.level().getGameTime() % 15 == 0) { aetherPlayer.setObsidianConversionTime(aetherPlayer.getObsidianConversionTime() + 1); - entity.getLevel().levelEvent(1501, entity.blockPosition(), 0); + entity.level().levelEvent(1501, entity.blockPosition(), 0); } } else { aetherPlayer.setObsidianConversionTime(0); @@ -180,7 +180,7 @@ private static void breakPhoenixGloves(LivingEntity entity, SlotResult slotResul if (slotResult.stack().hasTag()) { outcomeStack.setTag(slotResult.stack().getTag()); } - CuriosApi.getCuriosHelper().getCuriosHandler(entity).ifPresent(iCuriosItemHandler -> { + CuriosApi.getCuriosInventory(entity).ifPresent(iCuriosItemHandler -> { Map curios = iCuriosItemHandler.getCurios(); // Map of Curio slot names -> slot stack handlers. ICurioStacksHandler inv = curios.get(slotResult.slotContext().identifier()); // Stack handler for the Curio slot, gotten using the identifier through slotResult. if (inv != null) { diff --git a/src/main/java/com/aetherteam/aether/item/combat/abilities/armor/ValkyrieArmor.java b/src/main/java/com/aetherteam/aether/item/combat/abilities/armor/ValkyrieArmor.java index ccaa49e64a..594d793b63 100644 --- a/src/main/java/com/aetherteam/aether/item/combat/abilities/armor/ValkyrieArmor.java +++ b/src/main/java/com/aetherteam/aether/item/combat/abilities/armor/ValkyrieArmor.java @@ -55,6 +55,6 @@ static void handleFlight(LivingEntity entity) { } private static boolean onGround(Player player) { - return player.isOnGround() || player.isInFluidType(); + return player.onGround() || player.isInFluidType(); } } diff --git a/src/main/java/com/aetherteam/aether/item/combat/abilities/weapon/GravititeWeapon.java b/src/main/java/com/aetherteam/aether/item/combat/abilities/weapon/GravititeWeapon.java index 8438970365..3bbc20a312 100644 --- a/src/main/java/com/aetherteam/aether/item/combat/abilities/weapon/GravititeWeapon.java +++ b/src/main/java/com/aetherteam/aether/item/combat/abilities/weapon/GravititeWeapon.java @@ -15,7 +15,7 @@ public interface GravititeWeapon { */ default void launchEntity(LivingEntity target, LivingEntity attacker) { if (EquipmentUtil.isFullStrength(attacker)) { - if (!target.getType().is(AetherTags.Entities.UNLAUNCHABLE) && (target.isOnGround() || target.isInFluidType())) { + if (!target.getType().is(AetherTags.Entities.UNLAUNCHABLE) && (target.onGround() || target.isInFluidType())) { target.push(0.0, 1.0, 0.0); if (target instanceof ServerPlayer serverPlayer) { serverPlayer.connection.send(new ClientboundSetEntityMotionPacket(serverPlayer)); diff --git a/src/main/java/com/aetherteam/aether/item/combat/abilities/weapon/HolystoneWeapon.java b/src/main/java/com/aetherteam/aether/item/combat/abilities/weapon/HolystoneWeapon.java index 15b65ba21e..d40f9f2fd7 100644 --- a/src/main/java/com/aetherteam/aether/item/combat/abilities/weapon/HolystoneWeapon.java +++ b/src/main/java/com/aetherteam/aether/item/combat/abilities/weapon/HolystoneWeapon.java @@ -14,7 +14,7 @@ public interface HolystoneWeapon { */ default void dropAmbrosium(LivingEntity target, LivingEntity attacker) { if (EquipmentUtil.isFullStrength(attacker)) { - if (!target.getType().is(AetherTags.Entities.NO_AMBROSIUM_DROPS) && target.getLevel().getRandom().nextInt(25) == 0) { + if (!target.getType().is(AetherTags.Entities.NO_AMBROSIUM_DROPS) && target.level().getRandom().nextInt(25) == 0) { target.spawnAtLocation(AetherItems.AMBROSIUM_SHARD.get()); } } diff --git a/src/main/java/com/aetherteam/aether/item/combat/loot/CandyCaneSwordItem.java b/src/main/java/com/aetherteam/aether/item/combat/loot/CandyCaneSwordItem.java index 4706db1b49..d3edf5a859 100644 --- a/src/main/java/com/aetherteam/aether/item/combat/loot/CandyCaneSwordItem.java +++ b/src/main/java/com/aetherteam/aether/item/combat/loot/CandyCaneSwordItem.java @@ -24,7 +24,7 @@ public CandyCaneSwordItem() { @Override public boolean hurtEnemy(ItemStack stack, LivingEntity target, LivingEntity attacker) { if (EquipmentUtil.isFullStrength(attacker)) { - if (!target.getType().is(AetherTags.Entities.NO_CANDY_CANE_DROPS) && target.getLevel().getRandom().nextBoolean()) { + if (!target.getType().is(AetherTags.Entities.NO_CANDY_CANE_DROPS) && target.level().getRandom().nextBoolean()) { target.spawnAtLocation(AetherItems.CANDY_CANE.get()); } } diff --git a/src/main/java/com/aetherteam/aether/item/combat/loot/CloudStaffItem.java b/src/main/java/com/aetherteam/aether/item/combat/loot/CloudStaffItem.java index b2e318c2e2..a9252ba0cd 100644 --- a/src/main/java/com/aetherteam/aether/item/combat/loot/CloudStaffItem.java +++ b/src/main/java/com/aetherteam/aether/item/combat/loot/CloudStaffItem.java @@ -37,7 +37,7 @@ public InteractionResultHolder use(Level level, Player player, Intera ItemStack heldItem = player.getItemInHand(hand); AetherPlayer.get(player).ifPresent(aetherPlayer -> { Player innerPlayer = aetherPlayer.getPlayer(); - Level innerLevel = innerPlayer.getLevel(); + Level innerLevel = innerPlayer.level(); if (aetherPlayer.getCloudMinions().isEmpty()) { innerPlayer.swing(hand); if (!innerLevel.isClientSide()) { @@ -94,7 +94,7 @@ public boolean onEntitySwing(ItemStack stack, LivingEntity entity) { * @param player The {@link Player} to spawn the particles at. */ private void spawnExplosionParticles(Player player) { - if (player.getLevel().isClientSide()) { + if (player.level().isClientSide()) { EntityUtil.spawnSummoningExplosionParticles(player); } } diff --git a/src/main/java/com/aetherteam/aether/item/combat/loot/HolySwordItem.java b/src/main/java/com/aetherteam/aether/item/combat/loot/HolySwordItem.java index 33555a3649..6de76da453 100644 --- a/src/main/java/com/aetherteam/aether/item/combat/loot/HolySwordItem.java +++ b/src/main/java/com/aetherteam/aether/item/combat/loot/HolySwordItem.java @@ -1,6 +1,6 @@ package com.aetherteam.aether.item.combat.loot; -import com.aetherteam.aether.data.resources.AetherDamageTypes; +import com.aetherteam.aether.data.resources.registries.AetherDamageTypes; import com.aetherteam.aether.item.AetherItems; import com.aetherteam.aether.item.EquipmentUtil; import com.aetherteam.aether.item.combat.AetherItemTiers; @@ -30,7 +30,7 @@ public HolySwordItem() { public boolean hurtEnemy(ItemStack stack, LivingEntity target, LivingEntity attacker) { if (EquipmentUtil.isFullStrength(attacker)) { if (target.getMobType() == MobType.UNDEAD || target.isInvertedHealAndHarm()) { - DamageSource damageSource = AetherDamageTypes.entityDamageSource(attacker.level, AetherDamageTypes.ARMOR_PIERCING_ATTACK, attacker); + DamageSource damageSource = AetherDamageTypes.entityDamageSource(attacker.level(), AetherDamageTypes.ARMOR_PIERCING_ATTACK, attacker); float damageAmount = 15.0F; int smiteModifier = stack.getEnchantmentLevel(Enchantments.SMITE); if (smiteModifier > 0) { diff --git a/src/main/java/com/aetherteam/aether/item/combat/loot/LightningSwordItem.java b/src/main/java/com/aetherteam/aether/item/combat/loot/LightningSwordItem.java index 9a9c7a5cb8..0efc2a2640 100644 --- a/src/main/java/com/aetherteam/aether/item/combat/loot/LightningSwordItem.java +++ b/src/main/java/com/aetherteam/aether/item/combat/loot/LightningSwordItem.java @@ -28,11 +28,11 @@ public LightningSwordItem() { @Override public boolean hurtEnemy(ItemStack stack, LivingEntity target, LivingEntity attacker) { if (EquipmentUtil.isFullStrength(attacker)) { - LightningBolt lightningBolt = EntityType.LIGHTNING_BOLT.create(attacker.getLevel()); + LightningBolt lightningBolt = EntityType.LIGHTNING_BOLT.create(attacker.level()); if (lightningBolt != null) { LightningTracker.get(lightningBolt).ifPresent(lightningTracker -> lightningTracker.setOwner(attacker)); lightningBolt.setPos(target.getX(), target.getY(), target.getZ()); - attacker.getLevel().addFreshEntity(lightningBolt); + attacker.level().addFreshEntity(lightningBolt); } } return super.hurtEnemy(stack, target, attacker); diff --git a/src/main/java/com/aetherteam/aether/item/combat/loot/PigSlayerItem.java b/src/main/java/com/aetherteam/aether/item/combat/loot/PigSlayerItem.java index 1947837023..784edefcb7 100644 --- a/src/main/java/com/aetherteam/aether/item/combat/loot/PigSlayerItem.java +++ b/src/main/java/com/aetherteam/aether/item/combat/loot/PigSlayerItem.java @@ -2,7 +2,7 @@ import com.aetherteam.aether.Aether; import com.aetherteam.aether.AetherTags; -import com.aetherteam.aether.data.resources.AetherDamageTypes; +import com.aetherteam.aether.data.resources.registries.AetherDamageTypes; import com.aetherteam.aether.item.AetherItems; import com.aetherteam.aether.item.EquipmentUtil; import com.aetherteam.aether.item.combat.AetherItemTiers; @@ -46,9 +46,9 @@ public boolean hurtEnemy(ItemStack stack, LivingEntity target, LivingEntity atta zombifiedPiglinAccessor.callAlertOthers(); } } - DamageSource damageSource = AetherDamageTypes.entityDamageSource(attacker.level, AetherDamageTypes.ARMOR_PIERCING_ATTACK, attacker); + DamageSource damageSource = AetherDamageTypes.entityDamageSource(attacker.level(), AetherDamageTypes.ARMOR_PIERCING_ATTACK, attacker); target.hurt(damageSource, 26); // This doesn't deal 26 hearts of damage, it deals 20. - if (target.getLevel() instanceof ServerLevel level) { + if (target.level() instanceof ServerLevel level) { for (int i = 0; i < 20; i++) { double d0 = level.getRandom().nextGaussian() * 0.02; double d1 = level.getRandom().nextGaussian() * 0.02; diff --git a/src/main/java/com/aetherteam/aether/item/miscellaneous/ParachuteItem.java b/src/main/java/com/aetherteam/aether/item/miscellaneous/ParachuteItem.java index 51123d6548..0e5fdbc522 100644 --- a/src/main/java/com/aetherteam/aether/item/miscellaneous/ParachuteItem.java +++ b/src/main/java/com/aetherteam/aether/item/miscellaneous/ParachuteItem.java @@ -34,7 +34,7 @@ public ParachuteItem(Supplier> parachu @Override public InteractionResultHolder use(Level level, Player player, InteractionHand hand) { ItemStack heldStack = player.getItemInHand(hand); - if (!player.isOnGround() && !player.isInFluidType() && !player.isShiftKeyDown()) { // Player has to be on ground and can't be in liquid, and also can't be holding shift. + if (!player.onGround() && !player.isInFluidType() && !player.isShiftKeyDown()) { // Player has to be on ground and can't be in liquid, and also can't be holding shift. Entity entity = this.getParachuteEntity().get().create(level); if (entity instanceof Parachute parachute) { parachute.setPos(player.getX(), player.getY() - 1.0, player.getZ()); // Spawn Parachute below player. diff --git a/src/main/java/com/aetherteam/aether/mixin/AetherMixinHooks.java b/src/main/java/com/aetherteam/aether/mixin/AetherMixinHooks.java index 5a2db7b5b7..7c56d5cc14 100644 --- a/src/main/java/com/aetherteam/aether/mixin/AetherMixinHooks.java +++ b/src/main/java/com/aetherteam/aether/mixin/AetherMixinHooks.java @@ -1,11 +1,26 @@ package com.aetherteam.aether.mixin; +import com.aetherteam.aether.Aether; +import com.aetherteam.aether.AetherConfig; +import com.aetherteam.aether.AetherTags; import com.aetherteam.aether.client.WorldDisplayHelper; +import com.aetherteam.aether.item.EquipmentUtil; import com.aetherteam.aether.item.accessories.cape.CapeItem; +import com.aetherteam.aether.item.accessories.gloves.GlovesItem; +import com.aetherteam.aether.item.accessories.pendant.PendantItem; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.screens.worldselection.SelectWorldScreen; -import net.minecraft.client.player.AbstractClientPlayer; +import net.minecraft.core.registries.Registries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.tags.TagKey; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.Mob; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.enchantment.EnchantmentHelper; import net.minecraftforge.common.util.LazyOptional; +import top.theillusivec4.curios.Curios; import top.theillusivec4.curios.api.CuriosApi; import top.theillusivec4.curios.api.SlotResult; import top.theillusivec4.curios.api.type.capability.ICuriosItemHandler; @@ -15,18 +30,20 @@ import java.util.Optional; public class AetherMixinHooks { + private static final ResourceLocation SWUFF_CAPE_LOCATION = new ResourceLocation(Aether.MODID, "textures/models/accessory/capes/swuff_accessory.png"); + /** * Checks whether a cape accessory is visible. - * @param player The {@link AbstractClientPlayer} wearing the cape. + * @param livingEntity The {@link LivingEntity} wearing the cape. * @return Whether the cape is visible, as a {@link Boolean}. * @see com.aetherteam.aether.mixin.mixins.client.AbstractClientPlayerMixin */ - public static boolean isCapeVisible(AbstractClientPlayer player) { - Optional slotResult = CuriosApi.getCuriosHelper().findFirstCurio(player, (item) -> item.getItem() instanceof CapeItem); + public static boolean isCapeVisible(LivingEntity livingEntity) { + Optional slotResult = EquipmentUtil.findFirstCurio(livingEntity, (item) -> item.getItem() instanceof CapeItem); if (slotResult.isPresent()) { String identifier = slotResult.get().slotContext().identifier(); int id = slotResult.get().slotContext().index(); - LazyOptional itemHandler = CuriosApi.getCuriosHelper().getCuriosHandler(player); + LazyOptional itemHandler = CuriosApi.getCuriosInventory(livingEntity); if (itemHandler.resolve().isPresent()) { Optional stacksHandler = itemHandler.resolve().get().getStacksHandler(identifier); if (stacksHandler.isPresent()) { @@ -37,6 +54,22 @@ public static boolean isCapeVisible(AbstractClientPlayer player) { return false; } + /** + * Gets the cape texture from a {@link CapeItem}. + * @param stack The {@link ItemStack}. + * @return The {@link ResourceLocation} texture from the cape. + */ + public static ResourceLocation getCapeTexture(ItemStack stack) { + if (stack.getItem() instanceof CapeItem capeItem) { + if (stack.getHoverName().getString().equalsIgnoreCase("swuff_'s cape")) { // Easter Egg cape texture. + return SWUFF_CAPE_LOCATION; + } else { + return capeItem.getCapeTexture(); + } + } + return null; + } + /** * Checks whether the {@link SelectWorldScreen} is open and the level that the lock belongs to is the same one as the level loaded by the world preview. * @param basePath The {@link Path} for the level directory. @@ -49,4 +82,93 @@ public static boolean canUnlockLevel(Path basePath) { } return false; } + + /** + * Whether an accessory can be equipped or replace an already equipped accessory. + * @param mob The {@link Mob} to equip the accessory to. + * @param candidate The {@link ItemStack} to try to equip. + * @param existing The {@link ItemStack} already equipped. + * @return Whether the accessory can be equipped or replaced, as a {@link Boolean}. + */ + public static boolean canReplaceCurrentAccessory(Mob mob, ItemStack candidate, ItemStack existing) { + if (EnchantmentHelper.hasBindingCurse(existing)) { + return false; + } else { + if (candidate.getItem() instanceof GlovesItem candidateGloves) { + if (!(existing.getItem() instanceof GlovesItem existingGloves)) { + return true; + } else { + if (candidateGloves.getDamage() != existingGloves.getDamage()) { + return candidateGloves.getDamage() > existingGloves.getDamage(); + } else { + return mob.canReplaceEqualItem(candidate, existing); + } + } + } else if (candidate.getItem() instanceof PendantItem) { + if (!(existing.getItem() instanceof PendantItem)) { + return true; + } else { + return mob.canReplaceEqualItem(candidate, existing); + } + } + } + return false; + } + + /** + * Gets the corresponding slot identifier for an accessory item. + * @param livingEntity The {@link LivingEntity} to get the accessory from. + * @param stack The accessory {@link ItemStack}. + * @return The slot identifier {@link String}. + */ + public static String getIdentifierForItem(LivingEntity livingEntity, ItemStack stack) { + if (AetherConfig.COMMON.use_curios_menu.get()) { + TagKey glovesTag = TagKey.create(Registries.ITEM, new ResourceLocation(Curios.MODID, "hands")); + TagKey pendantTag = TagKey.create(Registries.ITEM, new ResourceLocation(Curios.MODID, "necklace")); + if (stack.is(glovesTag)) { + return "hands"; + } else if (stack.is(pendantTag) && (livingEntity.getType() == EntityType.PIGLIN || livingEntity.getType() == EntityType.ZOMBIFIED_PIGLIN)) { + return "necklace"; + } + } else { + if (stack.is(AetherTags.Items.AETHER_GLOVES)) { + return "aether_gloves"; + } else if (stack.is(AetherTags.Items.AETHER_PENDANT) && (livingEntity.getType() == EntityType.PIGLIN || livingEntity.getType() == EntityType.ZOMBIFIED_PIGLIN)) { + return "aether_pendant"; + } + } + return ""; + } + + /** + * Gets an accessory from an entity. + * @param livingEntity The {@link LivingEntity} to get the accessory from. + * @param identifier The {@link String} for the slot identifier. + * @return The accessory {@link ItemStack} gotten from the entity. + */ + public static ItemStack getItemByIdentifier(LivingEntity livingEntity, String identifier) { + LazyOptional lazyHandler = CuriosApi.getCuriosInventory(livingEntity); + if (lazyHandler.isPresent() && lazyHandler.resolve().isPresent()) { + ICuriosItemHandler handler = lazyHandler.resolve().get(); + Optional optionalResult = handler.findCurio(identifier, 0); + if (optionalResult.isPresent()) { + return optionalResult.get().stack(); + } + } + return ItemStack.EMPTY; + } + + /** + * Equips an accessory to an entity. + * @param livingEntity The {@link LivingEntity} to equip to. + * @param itemStack The {@link ItemStack} to equip. + * @param identifier The {@link String} for the slot identifier. + */ + public static void setItemByIdentifier(LivingEntity livingEntity, ItemStack itemStack, String identifier) { + LazyOptional lazyHandler = CuriosApi.getCuriosInventory(livingEntity); + if (lazyHandler.isPresent() && lazyHandler.resolve().isPresent()) { + ICuriosItemHandler handler = lazyHandler.resolve().get(); + handler.setEquippedCurio(identifier, 0, itemStack); + } + } } diff --git a/src/main/java/com/aetherteam/aether/mixin/mixins/client/AbstractClientPlayerMixin.java b/src/main/java/com/aetherteam/aether/mixin/mixins/client/AbstractClientPlayerMixin.java index e80c62fc29..a7ef0c3eb9 100644 --- a/src/main/java/com/aetherteam/aether/mixin/mixins/client/AbstractClientPlayerMixin.java +++ b/src/main/java/com/aetherteam/aether/mixin/mixins/client/AbstractClientPlayerMixin.java @@ -1,13 +1,10 @@ package com.aetherteam.aether.mixin.mixins.client; -import com.aetherteam.aether.Aether; import com.aetherteam.aether.item.EquipmentUtil; -import com.aetherteam.aether.item.accessories.cape.CapeItem; import com.aetherteam.aether.mixin.AetherMixinHooks; import net.minecraft.client.player.AbstractClientPlayer; import net.minecraft.resources.ResourceLocation; import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; @@ -15,9 +12,6 @@ @Mixin(AbstractClientPlayer.class) public class AbstractClientPlayerMixin { - @Unique - private static final ResourceLocation SWUFF_CAPE_LOCATION = new ResourceLocation(Aether.MODID, "textures/models/accessory/capes/swuff_accessory.png"); - /** * Sets the player as having a loaded cape if they have a cape accessory equipped and visible. * @param cir The {@link Boolean} {@link CallbackInfoReturnable} used for the method's return value. @@ -38,11 +32,10 @@ private void isCapeLoaded(CallbackInfoReturnable cir) { private void getCloakTextureLocation(CallbackInfoReturnable cir) { AbstractClientPlayer player = (AbstractClientPlayer) (Object) this; SlotResult result = EquipmentUtil.getCape(player); - if (AetherMixinHooks.isCapeVisible(player) && result != null && result.stack().getItem() instanceof CapeItem capeItem) { - if (result.stack().getHoverName().getString().equalsIgnoreCase("swuff_'s cape")) { // Easter Egg cape texture. - cir.setReturnValue(SWUFF_CAPE_LOCATION); - } else { - cir.setReturnValue(capeItem.getCapeTexture()); + if (result != null && AetherMixinHooks.isCapeVisible(player)) { + ResourceLocation texture = AetherMixinHooks.getCapeTexture(result.stack()); + if (texture != null) { + cir.setReturnValue(texture); } } } diff --git a/src/main/java/com/aetherteam/aether/mixin/mixins/client/AdvancementToastMixin.java b/src/main/java/com/aetherteam/aether/mixin/mixins/client/AdvancementToastMixin.java index c23ab1ef57..3bcd7b2f44 100644 --- a/src/main/java/com/aetherteam/aether/mixin/mixins/client/AdvancementToastMixin.java +++ b/src/main/java/com/aetherteam/aether/mixin/mixins/client/AdvancementToastMixin.java @@ -2,8 +2,8 @@ import com.aetherteam.aether.Aether; import com.aetherteam.aether.client.AetherSoundEvents; -import com.mojang.blaze3d.vertex.PoseStack; import net.minecraft.advancements.Advancement; +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.toasts.AdvancementToast; import net.minecraft.client.gui.components.toasts.Toast; import net.minecraft.client.gui.components.toasts.ToastComponent; @@ -26,13 +26,13 @@ public class AdvancementToastMixin { /** * Plays the Aether's advancement sounds when the player gets an Aether advancement. - * @param poseStack The {@link PoseStack} for rendering. + * @param guiGraphics The {@link GuiGraphics} for rendering. * @param toastComponent The {@link ToastComponent} for rendering. * @param timeSinceLastVisible The {@link Long} time since the toast was last visible. * @param cir The {@link net.minecraft.client.gui.components.toasts.Toast.Visibility} {@link CallbackInfoReturnable} used for the method's return value. */ - @Inject(at = @At(value = "FIELD", target = "net/minecraft/client/gui/components/toasts/AdvancementToast.playedSound:Z"), method = "render(Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/gui/components/toasts/ToastComponent;J)Lnet/minecraft/client/gui/components/toasts/Toast$Visibility;") - private void render(PoseStack poseStack, ToastComponent toastComponent, long timeSinceLastVisible, CallbackInfoReturnable cir) { + @Inject(at = @At(value = "FIELD", target = "net/minecraft/client/gui/components/toasts/AdvancementToast.playedSound:Z"), method = "render(Lnet/minecraft/client/gui/GuiGraphics;Lnet/minecraft/client/gui/components/toasts/ToastComponent;J)Lnet/minecraft/client/gui/components/toasts/Toast$Visibility;") + private void render(GuiGraphics guiGraphics, ToastComponent toastComponent, long timeSinceLastVisible, CallbackInfoReturnable cir) { if (!this.playedSound) { // Checks if a sound hasn't been played yet. if (this.checkRoot()) { this.playedSound = true; diff --git a/src/main/java/com/aetherteam/aether/mixin/mixins/client/BossHealthOverlayMixin.java b/src/main/java/com/aetherteam/aether/mixin/mixins/client/BossHealthOverlayMixin.java index 292a3e49ca..732894e8a9 100644 --- a/src/main/java/com/aetherteam/aether/mixin/mixins/client/BossHealthOverlayMixin.java +++ b/src/main/java/com/aetherteam/aether/mixin/mixins/client/BossHealthOverlayMixin.java @@ -16,7 +16,7 @@ public class BossHealthOverlayMixin { * @param event The original {@link net.minecraftforge.client.event.CustomizeGuiOverlayEvent.BossEventProgress} parameter value. * @return The modified {@link net.minecraftforge.client.event.CustomizeGuiOverlayEvent.BossEventProgress} parameter value. */ - @ModifyVariable(at = @At(value = "STORE"), method = "render(Lcom/mojang/blaze3d/vertex/PoseStack;)V", index = 7) + @ModifyVariable(at = @At(value = "STORE"), method = "render(Lnet/minecraft/client/gui/GuiGraphics;)V", index = 7) private CustomizeGuiOverlayEvent.BossEventProgress event(CustomizeGuiOverlayEvent.BossEventProgress event) { event.setCanceled(GuiHooks.BOSS_EVENTS.contains(event.getBossEvent().getId())); return event; diff --git a/src/main/java/com/aetherteam/aether/mixin/mixins/client/ConnectScreenMixin.java b/src/main/java/com/aetherteam/aether/mixin/mixins/client/ConnectScreenMixin.java index 1f737adf73..9289f44e00 100644 --- a/src/main/java/com/aetherteam/aether/mixin/mixins/client/ConnectScreenMixin.java +++ b/src/main/java/com/aetherteam/aether/mixin/mixins/client/ConnectScreenMixin.java @@ -22,12 +22,13 @@ public class ConnectScreenMixin { * @param minecraft The {@link Minecraft} instance. * @param serverAddress The {@link ServerAddress} of the server being connected to. * @param serverData The {@link ServerData} of the server being connected to. + * @param isQuickPlay A {@link Boolean} for whether quick play is used from the launcher. * @param ci The {@link CallbackInfo} for the void method return. * @see WorldDisplayHelper#isActive() * @see WorldDisplayHelper#stopLevel(Screen) */ - @Inject(at = @At(value = "HEAD"), method = "startConnecting(Lnet/minecraft/client/gui/screens/Screen;Lnet/minecraft/client/Minecraft;Lnet/minecraft/client/multiplayer/resolver/ServerAddress;Lnet/minecraft/client/multiplayer/ServerData;)V") - private static void startConnecting(Screen screen, Minecraft minecraft, ServerAddress serverAddress, ServerData serverData, CallbackInfo ci) { + @Inject(at = @At(value = "HEAD"), method = "startConnecting(Lnet/minecraft/client/gui/screens/Screen;Lnet/minecraft/client/Minecraft;Lnet/minecraft/client/multiplayer/resolver/ServerAddress;Lnet/minecraft/client/multiplayer/ServerData;Z)V") + private static void startConnecting(Screen screen, Minecraft minecraft, ServerAddress serverAddress, ServerData serverData, boolean isQuickPlay, CallbackInfo ci) { if (WorldDisplayHelper.isActive()) { WorldDisplayHelper.stopLevel(new GenericDirtMessageScreen(Component.literal(""))); } diff --git a/src/main/java/com/aetherteam/aether/mixin/mixins/client/ElytraLayerMixin.java b/src/main/java/com/aetherteam/aether/mixin/mixins/client/ElytraLayerMixin.java new file mode 100644 index 0000000000..2c0dd2d6a4 --- /dev/null +++ b/src/main/java/com/aetherteam/aether/mixin/mixins/client/ElytraLayerMixin.java @@ -0,0 +1,51 @@ +package com.aetherteam.aether.mixin.mixins.client; + +import com.aetherteam.aether.AetherConfig; +import com.aetherteam.aether.mixin.AetherMixinHooks; +import net.minecraft.client.renderer.entity.layers.ElytraLayer; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.decoration.ArmorStand; +import net.minecraft.world.item.ItemStack; +import net.minecraftforge.common.util.LazyOptional; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import top.theillusivec4.curios.api.CuriosApi; +import top.theillusivec4.curios.api.type.capability.ICuriosItemHandler; +import top.theillusivec4.curios.api.type.inventory.ICurioStacksHandler; +import top.theillusivec4.curios.api.type.inventory.IDynamicStackHandler; + +import java.util.Optional; + +@Mixin(ElytraLayer.class) +public class ElytraLayerMixin { + /** + * Used to change the elytra texture on an armor stand based on the equipped cape. + * @param stack The elytra {@link ItemStack}. + * @param entity The entity wearing the elytra. + * @param cir The {@link ResourceLocation} {@link CallbackInfoReturnable} used for the method's return value. + */ + @Inject(at = @At("HEAD"), method = "getElytraTexture(Lnet/minecraft/world/item/ItemStack;Lnet/minecraft/world/entity/LivingEntity;)Lnet/minecraft/resources/ResourceLocation;", cancellable = true, remap = false) + private void getElytraTexture(ItemStack stack, T entity, CallbackInfoReturnable cir) { + if (entity instanceof ArmorStand armorStand) { + String identifier = AetherConfig.COMMON.use_curios_menu.get() ? "back" : "aether_cape"; + LazyOptional lazyHandler = CuriosApi.getCuriosInventory(armorStand); + if (lazyHandler.isPresent() && lazyHandler.resolve().isPresent()) { + ICuriosItemHandler handler = lazyHandler.resolve().get(); + Optional stacksHandler = handler.getStacksHandler(identifier); + if (stacksHandler.isPresent()) { + IDynamicStackHandler stackHandler = stacksHandler.get().getCosmeticStacks(); + if (0 < stackHandler.getSlots()) { + ItemStack itemStack = stackHandler.getStackInSlot(0); + ResourceLocation texture = AetherMixinHooks.getCapeTexture(itemStack); + if (texture != null) { + cir.setReturnValue(texture); + } + } + } + } + } + } +} diff --git a/src/main/java/com/aetherteam/aether/mixin/mixins/client/SmithingScreenMixin.java b/src/main/java/com/aetherteam/aether/mixin/mixins/client/SmithingScreenMixin.java new file mode 100644 index 0000000000..def8226750 --- /dev/null +++ b/src/main/java/com/aetherteam/aether/mixin/mixins/client/SmithingScreenMixin.java @@ -0,0 +1,64 @@ +package com.aetherteam.aether.mixin.mixins.client; + +import com.aetherteam.aether.AetherConfig; +import com.aetherteam.aether.item.accessories.gloves.GlovesItem; +import net.minecraft.client.gui.screens.inventory.SmithingScreen; +import net.minecraft.world.entity.decoration.ArmorStand; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraftforge.common.util.LazyOptional; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import top.theillusivec4.curios.api.CuriosApi; +import top.theillusivec4.curios.api.type.ISlotType; +import top.theillusivec4.curios.api.type.capability.ICuriosItemHandler; +import top.theillusivec4.curios.api.type.inventory.ICurioStacksHandler; +import top.theillusivec4.curios.api.type.inventory.IDynamicStackHandler; +import top.theillusivec4.curios.common.inventory.CurioStacksHandler; + +import javax.annotation.Nullable; +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; + +@Mixin(SmithingScreen.class) +public class SmithingScreenMixin { + @Shadow + @Nullable + private ArmorStand armorStandPreview; + + /** + * Renders gloves on the armor stand in the smithing screen when applying armor trims to them. + * @param stack The {@link ItemStack} to try to render on the armor stand. + * @param ci The {@link CallbackInfo} for the void method return. + */ + @Inject(at = @At("HEAD"), method = "updateArmorStandPreview(Lnet/minecraft/world/item/ItemStack;)V", cancellable = true) + private void updateArmorStandPreview(ItemStack stack, CallbackInfo ci) { + if (this.armorStandPreview != null) { + String identifier = AetherConfig.COMMON.use_curios_menu.get() ? "hands" : "aether_gloves"; + LazyOptional lazyHandler = CuriosApi.getCuriosInventory(this.armorStandPreview); + if (lazyHandler.isPresent() && lazyHandler.resolve().isPresent()) { + ICuriosItemHandler handler = lazyHandler.resolve().get(); + ISlotType slot = CuriosApi.getEntitySlots(this.armorStandPreview.getType()).get(identifier); // Temporary workaround to Curios not registering slots for client-only entities. + handler.setCurios(new HashMap<>(Map.of(identifier, new CurioStacksHandler(handler, slot.getIdentifier(), slot.getSize(), slot.useNativeGui(), slot.hasCosmetic(), slot.canToggleRendering(), slot.getDropRule())))); + Optional stacksHandler = handler.getStacksHandler(identifier); + if (stacksHandler.isPresent()) { + IDynamicStackHandler stackHandler = stacksHandler.get().getCosmeticStacks(); + if (0 < stackHandler.getSlots()) { + stackHandler.setStackInSlot(0, ItemStack.EMPTY); + if (!stack.isEmpty()) { + Item item = stack.getItem(); + if (item instanceof GlovesItem) { + stackHandler.setStackInSlot(0, stack.copy()); + ci.cancel(); + } + } + } + } + } + } + } +} diff --git a/src/main/java/com/aetherteam/aether/mixin/mixins/client/accessor/GuiAccessor.java b/src/main/java/com/aetherteam/aether/mixin/mixins/client/accessor/GuiAccessor.java index ac59b07021..8923d8fe92 100644 --- a/src/main/java/com/aetherteam/aether/mixin/mixins/client/accessor/GuiAccessor.java +++ b/src/main/java/com/aetherteam/aether/mixin/mixins/client/accessor/GuiAccessor.java @@ -1,11 +1,9 @@ package com.aetherteam.aether.mixin.mixins.client.accessor; -import com.mojang.blaze3d.vertex.PoseStack; import net.minecraft.client.gui.Gui; import net.minecraft.util.RandomSource; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.gen.Accessor; -import org.spongepowered.asm.mixin.gen.Invoker; @Mixin(Gui.class) public interface GuiAccessor { @@ -17,7 +15,4 @@ public interface GuiAccessor { @Accessor("healthBlinkTime") long aether$getHealthBlinkTime(); - - @Invoker - void callRenderHeart(PoseStack poseStack, Gui.HeartType heartType, int x, int y, int p_168705_, boolean p_168706_, boolean p_168707_); } \ No newline at end of file diff --git a/src/main/java/com/aetherteam/aether/mixin/mixins/client/accessor/TitleScreenAccessor.java b/src/main/java/com/aetherteam/aether/mixin/mixins/client/accessor/TitleScreenAccessor.java index fdf70e2520..04def83a7b 100644 --- a/src/main/java/com/aetherteam/aether/mixin/mixins/client/accessor/TitleScreenAccessor.java +++ b/src/main/java/com/aetherteam/aether/mixin/mixins/client/accessor/TitleScreenAccessor.java @@ -1,5 +1,6 @@ package com.aetherteam.aether.mixin.mixins.client.accessor; +import net.minecraft.client.gui.components.SplashRenderer; import net.minecraft.client.gui.screens.TitleScreen; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mutable; @@ -8,7 +9,10 @@ @Mixin(TitleScreen.class) public interface TitleScreenAccessor { @Accessor("splash") - String aether$getSplash(); + SplashRenderer aether$getSplash(); + + @Accessor("splash") + void aether$setSplash(SplashRenderer splash); @Accessor("fading") boolean aether$isFading(); diff --git a/src/main/java/com/aetherteam/aether/mixin/mixins/common/AbstractArrowMixin.java b/src/main/java/com/aetherteam/aether/mixin/mixins/common/AbstractArrowMixin.java index 807facf19c..088475837b 100644 --- a/src/main/java/com/aetherteam/aether/mixin/mixins/common/AbstractArrowMixin.java +++ b/src/main/java/com/aetherteam/aether/mixin/mixins/common/AbstractArrowMixin.java @@ -29,7 +29,7 @@ private void tick(CallbackInfo ci) { PhoenixArrow.get(arrow).ifPresent(phoenixArrow -> { AbstractArrow innerArrow = phoenixArrow.getArrow(); if (phoenixArrow.isPhoenixArrow()) { - if (!innerArrow.getLevel().isClientSide()) { + if (!innerArrow.level().isClientSide()) { phoenixArrow.setSynched(INBTSynchable.Direction.CLIENT, "setPhoenixArrow", true); // Sync Phoenix Arrow variable to client. if (this.inGround) { // Spawn less particles when the arrow is in the ground. if (this.inGroundTime % 5 == 0) { @@ -48,7 +48,7 @@ private void tick(CallbackInfo ci) { } private void spawnParticles(AbstractArrow arrow) { - if (arrow.getLevel() instanceof ServerLevel serverLevel) { + if (arrow.level() instanceof ServerLevel serverLevel) { serverLevel.sendParticles(ParticleTypes.FLAME, arrow.getX() + (serverLevel.getRandom().nextGaussian() / 5.0), arrow.getY() + (serverLevel.getRandom().nextGaussian() / 3.0), diff --git a/src/main/java/com/aetherteam/aether/mixin/mixins/common/ArmorStandMixin.java b/src/main/java/com/aetherteam/aether/mixin/mixins/common/ArmorStandMixin.java new file mode 100644 index 0000000000..32a89137bb --- /dev/null +++ b/src/main/java/com/aetherteam/aether/mixin/mixins/common/ArmorStandMixin.java @@ -0,0 +1,44 @@ +package com.aetherteam.aether.mixin.mixins.common; + +import com.aetherteam.aether.AetherConfig; +import com.aetherteam.aether.item.accessories.cape.CapeItem; +import com.aetherteam.aether.item.accessories.gloves.GlovesItem; +import com.aetherteam.aether.item.accessories.miscellaneous.ShieldOfRepulsionItem; +import com.aetherteam.aether.item.accessories.pendant.PendantItem; +import com.aetherteam.aether.mixin.AetherMixinHooks; +import net.minecraft.world.entity.Mob; +import net.minecraft.world.entity.decoration.ArmorStand; +import net.minecraft.world.item.ItemStack; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(ArmorStand.class) +public class ArmorStandMixin { + /** + * Allows {@link ArmorStand}s to accept accessories from {@link net.minecraft.world.entity.EntitySelector.MobCanWearArmorEntitySelector}. + * @param stack The {@link ItemStack}. + * @param cir The {@link Boolean} {@link CallbackInfoReturnable} used for the method's return value. + */ + @Inject(at = @At(value = "HEAD"), method = "canTakeItem(Lnet/minecraft/world/item/ItemStack;)Z", cancellable = true) + private void canTakeItem(ItemStack stack, CallbackInfoReturnable cir) { + ArmorStand armorStand = (ArmorStand) (Object) this; + String identifier = ""; + if (stack.getItem() instanceof GlovesItem) { + identifier = AetherConfig.COMMON.use_curios_menu.get() ? "hands" : "aether_gloves"; + } else if (stack.getItem() instanceof PendantItem) { + identifier = AetherConfig.COMMON.use_curios_menu.get() ? "necklace" : "aether_pendant"; + } else if (stack.getItem() instanceof CapeItem) { + identifier = AetherConfig.COMMON.use_curios_menu.get() ? "back" : "aether_cape"; + } else if (stack.getItem() instanceof ShieldOfRepulsionItem) { + identifier = AetherConfig.COMMON.use_curios_menu.get() ? "body" : "aether_shield"; + } + if (!identifier.isEmpty()) { + ItemStack accessory = AetherMixinHooks.getItemByIdentifier(armorStand, identifier); + if (accessory.isEmpty()) { + cir.setReturnValue(true); + } + } + } +} diff --git a/src/main/java/com/aetherteam/aether/mixin/mixins/common/MobMixin.java b/src/main/java/com/aetherteam/aether/mixin/mixins/common/MobMixin.java new file mode 100644 index 0000000000..f5e79f8e17 --- /dev/null +++ b/src/main/java/com/aetherteam/aether/mixin/mixins/common/MobMixin.java @@ -0,0 +1,60 @@ +package com.aetherteam.aether.mixin.mixins.common; + +import com.aetherteam.aether.capability.accessory.MobAccessory; +import com.aetherteam.aether.event.hooks.EntityHooks; +import com.aetherteam.aether.mixin.AetherMixinHooks; +import net.minecraft.world.entity.Mob; +import net.minecraft.world.item.ItemStack; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(Mob.class) +public class MobMixin { + /** + * Allows {@link Mob}s to accept accessories from {@link net.minecraft.world.entity.EntitySelector.MobCanWearArmorEntitySelector}. + * @param stack The {@link ItemStack}. + * @param cir The {@link Boolean} {@link CallbackInfoReturnable} used for the method's return value. + */ + @Inject(at = @At(value = "HEAD"), method = "canTakeItem(Lnet/minecraft/world/item/ItemStack;)Z", cancellable = true) + private void canTakeItem(ItemStack stack, CallbackInfoReturnable cir) { + Mob mob = (Mob) (Object) this; + if (EntityHooks.canMobSpawnWithAccessories(mob)) { + String identifier = AetherMixinHooks.getIdentifierForItem(mob, stack); + if (!identifier.isEmpty()) { + ItemStack accessory = AetherMixinHooks.getItemByIdentifier(mob, identifier); + if (accessory.isEmpty() && mob.canPickUpLoot()) { + cir.setReturnValue(true); + } + } + } + } + + /** + * Handles equipping accessories for {@link Mob}s. + * @param stack The {@link ItemStack}. + * @param cir The {@link Boolean} {@link CallbackInfoReturnable} used for the method's return value. + */ + @Inject(at = @At(value = "HEAD"), method = "equipItemIfPossible(Lnet/minecraft/world/item/ItemStack;)Lnet/minecraft/world/item/ItemStack;", cancellable = true) + private void equipItemIfPossible(ItemStack stack, CallbackInfoReturnable cir) { + Mob mob = (Mob) (Object) this; + MobAccessory.get(mob).ifPresent((accessoryMob) -> { + String identifier = AetherMixinHooks.getIdentifierForItem(accessoryMob.getMob(), stack); + if (!identifier.isEmpty()) { + ItemStack accessory = AetherMixinHooks.getItemByIdentifier(accessoryMob.getMob(), identifier); + boolean flag = AetherMixinHooks.canReplaceCurrentAccessory(accessoryMob.getMob(), stack, accessory); + if (flag && accessoryMob.getMob().canHoldItem(stack)) { + double dropChance = accessoryMob.getEquipmentDropChance(identifier); + if (!accessory.isEmpty() && Math.max(accessoryMob.getMob().getRandom().nextFloat() - 0.1F, 0.0F) < dropChance) { + mob.spawnAtLocation(accessory); + } + AetherMixinHooks.setItemByIdentifier(mob, stack, identifier); + accessoryMob.setGuaranteedDrop(identifier); + mob.setPersistenceRequired(); + cir.setReturnValue(stack); + } + } + }); + } +} diff --git a/src/main/java/com/aetherteam/aether/mixin/mixins/common/ModelBuilderMixin.java b/src/main/java/com/aetherteam/aether/mixin/mixins/common/ModelBuilderMixin.java new file mode 100644 index 0000000000..eafff8f49e --- /dev/null +++ b/src/main/java/com/aetherteam/aether/mixin/mixins/common/ModelBuilderMixin.java @@ -0,0 +1,31 @@ +package com.aetherteam.aether.mixin.mixins.common; + +import net.minecraft.resources.ResourceLocation; +import net.minecraftforge.client.model.generators.ModelBuilder; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +import java.util.Map; + +/** + * Used only in runData to get around an incorrect missing texture issue with armor trim data generation. + */ +@Mixin(ModelBuilder.class) +public abstract class ModelBuilderMixin> { + @Shadow(remap = false) + @Final + protected Map textures; + + @Shadow(remap = false) + protected abstract T self(); + + @Inject(at = @At(value = "HEAD"), method = "texture(Ljava/lang/String;Lnet/minecraft/resources/ResourceLocation;)Lnet/minecraftforge/client/model/generators/ModelBuilder;", cancellable = true, remap = false) + private void texture(String key, ResourceLocation texture, CallbackInfoReturnable cir) { + this.textures.put(key, texture.toString()); + cir.setReturnValue(this.self()); + } +} diff --git a/src/main/java/com/aetherteam/aether/mixin/mixins/common/PlayerMixin.java b/src/main/java/com/aetherteam/aether/mixin/mixins/common/PlayerMixin.java index a0a582d9dd..181f9036f2 100644 --- a/src/main/java/com/aetherteam/aether/mixin/mixins/common/PlayerMixin.java +++ b/src/main/java/com/aetherteam/aether/mixin/mixins/common/PlayerMixin.java @@ -30,7 +30,7 @@ private void attack(Entity target, CallbackInfo ci) { @Inject(at = @At(value = "HEAD"), method = "rideTick()V") private void rideTick(CallbackInfo ci) { Player player = (Player) (Object) this; - if (!player.getLevel().isClientSide()) { + if (!player.level().isClientSide()) { if (player.isPassenger() && player.getVehicle() instanceof MountableAnimal mountableAnimal) { mountableAnimal.setPlayerTriedToCrouch(player.isShiftKeyDown()); } diff --git a/src/main/java/com/aetherteam/aether/network/packet/clientbound/AetherTravelPacket.java b/src/main/java/com/aetherteam/aether/network/packet/clientbound/AetherTravelPacket.java index 4570738ca8..b33183a23b 100644 --- a/src/main/java/com/aetherteam/aether/network/packet/clientbound/AetherTravelPacket.java +++ b/src/main/java/com/aetherteam/aether/network/packet/clientbound/AetherTravelPacket.java @@ -2,7 +2,6 @@ import com.aetherteam.aether.event.hooks.DimensionHooks; import com.aetherteam.nitrogen.network.BasePacket; -import com.mojang.blaze3d.vertex.PoseStack; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.screens.Screen; import net.minecraft.network.FriendlyByteBuf; @@ -10,7 +9,7 @@ /** * Marks the player as being in the process of teleporting to the Aether. This is used for displaying "Ascending to the Aether" in the world loading screen. - * @see com.aetherteam.aether.client.event.hooks.GuiHooks#drawAetherTravelMessage(Screen, PoseStack) + * @see com.aetherteam.aether.client.event.hooks.GuiHooks#drawAetherTravelMessage(Screen, net.minecraft.client.gui.GuiGraphics) */ public record AetherTravelPacket(boolean displayAetherTravel) implements BasePacket { @Override diff --git a/src/main/java/com/aetherteam/aether/network/packet/clientbound/CloudMinionPacket.java b/src/main/java/com/aetherteam/aether/network/packet/clientbound/CloudMinionPacket.java index bc8619805c..c077b4fc9e 100644 --- a/src/main/java/com/aetherteam/aether/network/packet/clientbound/CloudMinionPacket.java +++ b/src/main/java/com/aetherteam/aether/network/packet/clientbound/CloudMinionPacket.java @@ -29,7 +29,7 @@ public static CloudMinionPacket decode(FriendlyByteBuf buf) { @Override public void execute(Player playerEntity) { if (Minecraft.getInstance().player != null && Minecraft.getInstance().level != null) { - Level world = Minecraft.getInstance().player.getLevel(); + Level world = Minecraft.getInstance().player.level(); if (world.getEntity(this.entityID()) instanceof Player player && world.getEntity(this.rightCloudMinionID()) instanceof CloudMinion cloudMinionRight && world.getEntity(this.leftCloudMinionID()) instanceof CloudMinion cloudMinionLeft) { AetherPlayer.get(player).ifPresent(aetherPlayer -> { if (aetherPlayer.getCloudMinions().isEmpty()) { diff --git a/src/main/java/com/aetherteam/aether/network/packet/clientbound/HealthResetPacket.java b/src/main/java/com/aetherteam/aether/network/packet/clientbound/HealthResetPacket.java index e912b4af94..d1e94eda3e 100644 --- a/src/main/java/com/aetherteam/aether/network/packet/clientbound/HealthResetPacket.java +++ b/src/main/java/com/aetherteam/aether/network/packet/clientbound/HealthResetPacket.java @@ -27,7 +27,7 @@ public static HealthResetPacket decode(FriendlyByteBuf buf) { @Override public void execute(Player playerEntity) { - if (Minecraft.getInstance().player != null && Minecraft.getInstance().level != null && Minecraft.getInstance().player.getLevel().getEntity(this.entityID()) instanceof Player player) { + if (Minecraft.getInstance().player != null && Minecraft.getInstance().level != null && Minecraft.getInstance().player.level().getEntity(this.entityID()) instanceof Player player) { AetherPlayer.get(player).ifPresent(aetherPlayer -> { aetherPlayer.setSynched(INBTSynchable.Direction.SERVER, "setLifeShardCount", this.value()); AttributeInstance attribute = aetherPlayer.getPlayer().getAttribute(Attributes.MAX_HEALTH); diff --git a/src/main/java/com/aetherteam/aether/network/packet/clientbound/MoaInteractPacket.java b/src/main/java/com/aetherteam/aether/network/packet/clientbound/MoaInteractPacket.java index 061f0038e2..b9d8a5eb64 100644 --- a/src/main/java/com/aetherteam/aether/network/packet/clientbound/MoaInteractPacket.java +++ b/src/main/java/com/aetherteam/aether/network/packet/clientbound/MoaInteractPacket.java @@ -26,7 +26,7 @@ public static MoaInteractPacket decode(FriendlyByteBuf buf) { @Override public void execute(Player playerEntity) { if (Minecraft.getInstance().player != null && Minecraft.getInstance().level != null) { - Entity entity = Minecraft.getInstance().player.getLevel().getEntity(this.playerID()); + Entity entity = Minecraft.getInstance().player.level().getEntity(this.playerID()); if (entity instanceof Player player) { player.swing(this.mainHand() ? InteractionHand.MAIN_HAND : InteractionHand.OFF_HAND); } diff --git a/src/main/java/com/aetherteam/aether/network/packet/clientbound/RemountAerbunnyPacket.java b/src/main/java/com/aetherteam/aether/network/packet/clientbound/RemountAerbunnyPacket.java index 3c939c38b5..da2e2d1c0b 100644 --- a/src/main/java/com/aetherteam/aether/network/packet/clientbound/RemountAerbunnyPacket.java +++ b/src/main/java/com/aetherteam/aether/network/packet/clientbound/RemountAerbunnyPacket.java @@ -29,7 +29,7 @@ public static RemountAerbunnyPacket decode(FriendlyByteBuf buf) { @Override public void execute(Player playerEntity) { if (Minecraft.getInstance().player != null && Minecraft.getInstance().level != null) { - Level world = Minecraft.getInstance().player.getLevel(); + Level world = Minecraft.getInstance().player.level(); if (world.getEntity(this.vehicleID()) instanceof Player player && world.getEntity(this.aerbunnyID()) instanceof Aerbunny aerbunny) { aerbunny.startRiding(player); AetherPlayer.get(player).ifPresent(aetherPlayer -> aetherPlayer.setMountedAerbunny(aerbunny)); diff --git a/src/main/java/com/aetherteam/aether/network/packet/clientbound/SetVehiclePacket.java b/src/main/java/com/aetherteam/aether/network/packet/clientbound/SetVehiclePacket.java index 754fcc0a1a..718f92f20b 100644 --- a/src/main/java/com/aetherteam/aether/network/packet/clientbound/SetVehiclePacket.java +++ b/src/main/java/com/aetherteam/aether/network/packet/clientbound/SetVehiclePacket.java @@ -25,8 +25,8 @@ public static SetVehiclePacket decode(FriendlyByteBuf buf) { @Override public void execute(Player playerEntity) { if (Minecraft.getInstance().player != null && Minecraft.getInstance().level != null) { - Entity passenger = Minecraft.getInstance().player.getLevel().getEntity(this.passengerID()); - Entity vehicle = Minecraft.getInstance().player.getLevel().getEntity(this.vehicleID()); + Entity passenger = Minecraft.getInstance().player.level().getEntity(this.passengerID()); + Entity vehicle = Minecraft.getInstance().player.level().getEntity(this.vehicleID()); if (passenger != null && vehicle != null) { passenger.startRiding(vehicle); } diff --git a/src/main/java/com/aetherteam/aether/network/packet/clientbound/ZephyrSnowballHitPacket.java b/src/main/java/com/aetherteam/aether/network/packet/clientbound/ZephyrSnowballHitPacket.java index 376d295d4e..e56f9826d5 100644 --- a/src/main/java/com/aetherteam/aether/network/packet/clientbound/ZephyrSnowballHitPacket.java +++ b/src/main/java/com/aetherteam/aether/network/packet/clientbound/ZephyrSnowballHitPacket.java @@ -26,7 +26,7 @@ public static ZephyrSnowballHitPacket decode(FriendlyByteBuf buf) { @Override public void execute(Player playerEntity) { - if (Minecraft.getInstance().player != null && Minecraft.getInstance().level != null && Minecraft.getInstance().player.getLevel().getEntity(this.entityID()) instanceof LocalPlayer localPlayer) { + if (Minecraft.getInstance().player != null && Minecraft.getInstance().level != null && Minecraft.getInstance().player.level().getEntity(this.entityID()) instanceof LocalPlayer localPlayer) { if (!localPlayer.isBlocking()) { localPlayer.setDeltaMovement(localPlayer.getDeltaMovement().x(), localPlayer.getDeltaMovement().y() + 0.5, localPlayer.getDeltaMovement().z()); } diff --git a/src/main/java/com/aetherteam/aether/network/packet/serverbound/AerbunnyPuffPacket.java b/src/main/java/com/aetherteam/aether/network/packet/serverbound/AerbunnyPuffPacket.java index 9c405ce439..6847fbc6fa 100644 --- a/src/main/java/com/aetherteam/aether/network/packet/serverbound/AerbunnyPuffPacket.java +++ b/src/main/java/com/aetherteam/aether/network/packet/serverbound/AerbunnyPuffPacket.java @@ -23,7 +23,7 @@ public static AerbunnyPuffPacket decode(FriendlyByteBuf buf) { @Override public void execute(@Nullable Player playerEntity) { - if (playerEntity != null && playerEntity.getServer() != null && playerEntity.getLevel().getEntity(this.entityID()) instanceof Aerbunny aerbunny) { + if (playerEntity != null && playerEntity.getServer() != null && playerEntity.level().getEntity(this.entityID()) instanceof Aerbunny aerbunny) { aerbunny.puff(); } } diff --git a/src/main/java/com/aetherteam/aether/network/packet/serverbound/ClearItemPacket.java b/src/main/java/com/aetherteam/aether/network/packet/serverbound/ClearItemPacket.java index 920162afea..add453d4ca 100644 --- a/src/main/java/com/aetherteam/aether/network/packet/serverbound/ClearItemPacket.java +++ b/src/main/java/com/aetherteam/aether/network/packet/serverbound/ClearItemPacket.java @@ -24,7 +24,7 @@ public static ClearItemPacket decode(FriendlyByteBuf buf) { @Override public void execute(@Nullable Player playerEntity) { - if (playerEntity != null && playerEntity.getServer() != null && playerEntity.getLevel().getEntity(this.playerID()) instanceof ServerPlayer serverPlayer) { + if (playerEntity != null && playerEntity.getServer() != null && playerEntity.level().getEntity(this.playerID()) instanceof ServerPlayer serverPlayer) { serverPlayer.containerMenu.setCarried(ItemStack.EMPTY); } } diff --git a/src/main/java/com/aetherteam/aether/network/packet/serverbound/HammerProjectileLaunchPacket.java b/src/main/java/com/aetherteam/aether/network/packet/serverbound/HammerProjectileLaunchPacket.java index ced947a751..e0b7e798ea 100644 --- a/src/main/java/com/aetherteam/aether/network/packet/serverbound/HammerProjectileLaunchPacket.java +++ b/src/main/java/com/aetherteam/aether/network/packet/serverbound/HammerProjectileLaunchPacket.java @@ -25,8 +25,8 @@ public static HammerProjectileLaunchPacket decode(FriendlyByteBuf buf) { @Override public void execute(Player playerEntity) { if (playerEntity != null && playerEntity.getServer() != null) { - Entity target = playerEntity.getLevel().getEntity(this.targetID()); - Entity projectile = playerEntity.getLevel().getEntity(this.projectileID()); + Entity target = playerEntity.level().getEntity(this.targetID()); + Entity projectile = playerEntity.level().getEntity(this.projectileID()); if (projectile instanceof HammerProjectile hammerProjectile) { hammerProjectile.launchTarget(target); } diff --git a/src/main/java/com/aetherteam/aether/network/packet/serverbound/LoreExistsPacket.java b/src/main/java/com/aetherteam/aether/network/packet/serverbound/LoreExistsPacket.java index de8637c4f4..57b9587d02 100644 --- a/src/main/java/com/aetherteam/aether/network/packet/serverbound/LoreExistsPacket.java +++ b/src/main/java/com/aetherteam/aether/network/packet/serverbound/LoreExistsPacket.java @@ -29,7 +29,7 @@ public static LoreExistsPacket decode(FriendlyByteBuf buf) { @Override public void execute(@Nullable Player player) { - if (player != null && player.getServer() != null && player.getLevel().getEntity(this.playerID()) instanceof ServerPlayer && player.containerMenu instanceof LoreBookMenu menu) { + if (player != null && player.getServer() != null && player.level().getEntity(this.playerID()) instanceof ServerPlayer && player.containerMenu instanceof LoreBookMenu menu) { menu.setLoreEntryExists(this.exists()); } } diff --git a/src/main/java/com/aetherteam/aether/network/packet/serverbound/NpcPlayerInteractPacket.java b/src/main/java/com/aetherteam/aether/network/packet/serverbound/NpcPlayerInteractPacket.java index f069d481f1..ba75649282 100644 --- a/src/main/java/com/aetherteam/aether/network/packet/serverbound/NpcPlayerInteractPacket.java +++ b/src/main/java/com/aetherteam/aether/network/packet/serverbound/NpcPlayerInteractPacket.java @@ -23,7 +23,7 @@ public static NpcPlayerInteractPacket decode(FriendlyByteBuf buf) { @Override public void execute(@Nullable Player playerEntity) { - if (playerEntity != null && playerEntity.getServer() != null && playerEntity.getLevel().getEntity(this.entityID()) instanceof NpcDialogue npc) { + if (playerEntity != null && playerEntity.getServer() != null && playerEntity.level().getEntity(this.entityID()) instanceof NpcDialogue npc) { npc.handleNpcInteraction(playerEntity, this.interactionID()); } } diff --git a/src/main/java/com/aetherteam/aether/network/packet/serverbound/StepHeightPacket.java b/src/main/java/com/aetherteam/aether/network/packet/serverbound/StepHeightPacket.java index 7455322afb..22789caf95 100644 --- a/src/main/java/com/aetherteam/aether/network/packet/serverbound/StepHeightPacket.java +++ b/src/main/java/com/aetherteam/aether/network/packet/serverbound/StepHeightPacket.java @@ -25,7 +25,7 @@ public static StepHeightPacket decode(FriendlyByteBuf buf) { @Override public void execute(@Nullable Player playerEntity) { - if (playerEntity != null && playerEntity.getServer() != null && playerEntity.getLevel().getEntity(this.entityID()) instanceof MountableAnimal mountableAnimal) { + if (playerEntity != null && playerEntity.getServer() != null && playerEntity.level().getEntity(this.entityID()) instanceof MountableAnimal mountableAnimal) { AttributeInstance stepHeight = mountableAnimal.getAttribute(ForgeMod.STEP_HEIGHT_ADDITION.get()); if (stepHeight != null) { if (stepHeight.hasModifier(mountableAnimal.getDefaultStepHeightModifier())) { diff --git a/src/main/java/com/aetherteam/aether/network/packet/serverbound/SunAltarUpdatePacket.java b/src/main/java/com/aetherteam/aether/network/packet/serverbound/SunAltarUpdatePacket.java index d69278a5a5..295cec7a92 100644 --- a/src/main/java/com/aetherteam/aether/network/packet/serverbound/SunAltarUpdatePacket.java +++ b/src/main/java/com/aetherteam/aether/network/packet/serverbound/SunAltarUpdatePacket.java @@ -28,7 +28,7 @@ public static SunAltarUpdatePacket decode(FriendlyByteBuf buf) { @Override public void execute(@Nullable Player playerEntity) { - if (playerEntity != null && playerEntity.getLevel() instanceof ServerLevel level && (!AetherConfig.SERVER.sun_altar_whitelist.get() || playerEntity.hasPermissions(4) || SunAltarWhitelist.INSTANCE.isWhiteListed(playerEntity.getGameProfile()))) { + if (playerEntity != null && playerEntity.level() instanceof ServerLevel level && (!AetherConfig.SERVER.sun_altar_whitelist.get() || playerEntity.hasPermissions(4) || SunAltarWhitelist.INSTANCE.isWhiteListed(playerEntity.getGameProfile()))) { // Get how many days have passed in the world first, then add to it. var dayBase = level.getDayTime() / (long) AetherDimensions.AETHER_TICKS_PER_DAY; var dayTime = (dayBase * AetherDimensions.AETHER_TICKS_PER_DAY) + this.dayTime(); diff --git a/src/main/java/com/aetherteam/aether/perk/data/ClientPerkData.java b/src/main/java/com/aetherteam/aether/perk/data/ClientPerkData.java index c48a7db009..5d14e83d3a 100644 --- a/src/main/java/com/aetherteam/aether/perk/data/ClientPerkData.java +++ b/src/main/java/com/aetherteam/aether/perk/data/ClientPerkData.java @@ -40,7 +40,7 @@ public Map getClientPerkData() { * @return The result of the check, as a {@link Boolean}. */ public boolean canSync(Player player) { - return UserData.Client.getClientUser() != null && player.getLevel().isClientSide() && Minecraft.getInstance().player != null && player.getUUID().equals(Minecraft.getInstance().player.getUUID()); + return UserData.Client.getClientUser() != null && player.level().isClientSide() && Minecraft.getInstance().player != null && player.getUUID().equals(Minecraft.getInstance().player.getUUID()); } public abstract void syncFromClient(Player player); diff --git a/src/main/java/com/aetherteam/aether/world/feature/AetherLakeFeature.java b/src/main/java/com/aetherteam/aether/world/feature/AetherLakeFeature.java index e52d6ce560..94643579ff 100644 --- a/src/main/java/com/aetherteam/aether/world/feature/AetherLakeFeature.java +++ b/src/main/java/com/aetherteam/aether/world/feature/AetherLakeFeature.java @@ -12,12 +12,12 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.levelgen.feature.Feature; import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; -import net.minecraft.world.level.material.Material; /** * [CODE COPY] - {@link net.minecraft.world.level.levelgen.feature.LakeFeature}.

* Modified to be for water only. */ +@SuppressWarnings("deprecation") public class AetherLakeFeature extends Feature { private static final BlockState AIR = Blocks.CAVE_AIR.defaultBlockState(); @@ -67,11 +67,11 @@ public boolean place(FeaturePlaceContext context) { for (int l2 = 0; l2 < 8; ++l2) { boolean flag = !booleans[(k1 * 16 + k) * 8 + l2] && (k1 < 15 && booleans[((k1 + 1) * 16 + k) * 8 + l2] || k1 > 0 && booleans[((k1 - 1) * 16 + k) * 8 + l2] || k < 15 && booleans[(k1 * 16 + k + 1) * 8 + l2] || k > 0 && booleans[(k1 * 16 + (k - 1)) * 8 + l2] || l2 < 7 && booleans[(k1 * 16 + k) * 8 + l2 + 1] || l2 > 0 && booleans[(k1 * 16 + k) * 8 + (l2 - 1)]); if (flag) { - Material material = level.getBlockState(blockPos.offset(k1, l2, k)).getMaterial(); - if (l2 >= 4 && material.isLiquid()) { + BlockState offsetState = level.getBlockState(blockPos.offset(k1, l2, k)); + if (l2 >= 4 && offsetState.liquid()) { return false; } - if (l2 < 4 && !material.isSolid() && level.getBlockState(blockPos.offset(k1, l2, k)) != fluidBlockState) { + if (l2 < 4 && !offsetState.isSolid() && level.getBlockState(blockPos.offset(k1, l2, k)) != fluidBlockState) { return false; } } diff --git a/src/main/java/com/aetherteam/aether/world/processor/DoubleDropsProcessor.java b/src/main/java/com/aetherteam/aether/world/processor/DoubleDropsProcessor.java index a061de4c7d..dbb1cded11 100644 --- a/src/main/java/com/aetherteam/aether/world/processor/DoubleDropsProcessor.java +++ b/src/main/java/com/aetherteam/aether/world/processor/DoubleDropsProcessor.java @@ -21,8 +21,8 @@ public class DoubleDropsProcessor extends StructureProcessor { @Nullable @Override public StructureTemplate.StructureBlockInfo process(LevelReader level, BlockPos origin, BlockPos centerBottom, StructureTemplate.StructureBlockInfo originalBlockInfo, StructureTemplate.StructureBlockInfo modifiedBlockInfo, StructurePlaceSettings settings, @Nullable StructureTemplate template) { - if (modifiedBlockInfo.state.hasProperty(AetherBlockStateProperties.DOUBLE_DROPS)) { - return new StructureTemplate.StructureBlockInfo(modifiedBlockInfo.pos, modifiedBlockInfo.state.setValue(AetherBlockStateProperties.DOUBLE_DROPS, true), modifiedBlockInfo.nbt); + if (modifiedBlockInfo.state().hasProperty(AetherBlockStateProperties.DOUBLE_DROPS)) { + return new StructureTemplate.StructureBlockInfo(modifiedBlockInfo.pos(), modifiedBlockInfo.state().setValue(AetherBlockStateProperties.DOUBLE_DROPS, true), modifiedBlockInfo.nbt()); } return super.process(level, origin, centerBottom, originalBlockInfo, modifiedBlockInfo, settings, template); } diff --git a/src/main/java/com/aetherteam/aether/world/processor/GlowstonePortalAgeProcessor.java b/src/main/java/com/aetherteam/aether/world/processor/GlowstonePortalAgeProcessor.java index 94c4718eb2..dcf350d04c 100644 --- a/src/main/java/com/aetherteam/aether/world/processor/GlowstonePortalAgeProcessor.java +++ b/src/main/java/com/aetherteam/aether/world/processor/GlowstonePortalAgeProcessor.java @@ -27,23 +27,23 @@ public GlowstonePortalAgeProcessor(float mossiness) { @Nullable @Override public StructureTemplate.StructureBlockInfo process(LevelReader level, BlockPos otherPos, BlockPos pos, StructureTemplate.StructureBlockInfo blockInfo, StructureTemplate.StructureBlockInfo relativeBlockInfo, StructurePlaceSettings settings, @Nullable StructureTemplate template) { - RandomSource random = settings.getRandom(relativeBlockInfo.pos); - BlockState originalState = relativeBlockInfo.state; - BlockPos blockPos = relativeBlockInfo.pos; + RandomSource random = settings.getRandom(relativeBlockInfo.pos()); + BlockState originalState = relativeBlockInfo.state(); + BlockPos blockPos = relativeBlockInfo.pos(); BlockState newState = null; if (!originalState.is(Blocks.COBBLESTONE)) { if (originalState.is(Blocks.COBBLESTONE_STAIRS)) { - newState = this.maybeReplaceStairs(random, relativeBlockInfo.state); + newState = this.maybeReplaceStairs(random, relativeBlockInfo.state()); } else if (originalState.is(Blocks.COBBLESTONE_SLAB)) { - newState = this.maybeReplaceSlab(random, relativeBlockInfo.state); + newState = this.maybeReplaceSlab(random, relativeBlockInfo.state()); } else if (originalState.is(Blocks.COBBLESTONE_WALL)) { - newState = this.maybeReplaceWall(random, relativeBlockInfo.state); + newState = this.maybeReplaceWall(random, relativeBlockInfo.state()); } } else { newState = this.maybeReplaceFullStoneBlock(random); } - return newState != null ? new StructureTemplate.StructureBlockInfo(blockPos, newState, relativeBlockInfo.nbt) : relativeBlockInfo; + return newState != null ? new StructureTemplate.StructureBlockInfo(blockPos, newState, relativeBlockInfo.nbt()) : relativeBlockInfo; } @Nullable diff --git a/src/main/java/com/aetherteam/aether/world/processor/HolystoneReplaceProcessor.java b/src/main/java/com/aetherteam/aether/world/processor/HolystoneReplaceProcessor.java index 764d49f6ec..93da79747d 100644 --- a/src/main/java/com/aetherteam/aether/world/processor/HolystoneReplaceProcessor.java +++ b/src/main/java/com/aetherteam/aether/world/processor/HolystoneReplaceProcessor.java @@ -41,11 +41,11 @@ private HolystoneReplaceProcessor() { } @Nullable @Override public StructureTemplate.StructureBlockInfo process(LevelReader level, BlockPos otherPos, BlockPos pos, StructureTemplate.StructureBlockInfo blockInfo, StructureTemplate.StructureBlockInfo relativeBlockInfo, StructurePlaceSettings settings, @Nullable StructureTemplate template) { - Block block = this.replacements.get(relativeBlockInfo.state.getBlock()); + Block block = this.replacements.get(relativeBlockInfo.state().getBlock()); if (block == null) { return relativeBlockInfo; } else { - BlockState originalState = relativeBlockInfo.state; + BlockState originalState = relativeBlockInfo.state(); BlockState newState = block.defaultBlockState(); if (originalState.hasProperty(StairBlock.FACING)) { newState = newState.setValue(StairBlock.FACING, originalState.getValue(StairBlock.FACING)); @@ -56,7 +56,7 @@ public StructureTemplate.StructureBlockInfo process(LevelReader level, BlockPos if (originalState.hasProperty(SlabBlock.TYPE)) { newState = newState.setValue(SlabBlock.TYPE, originalState.getValue(SlabBlock.TYPE)); } - return new StructureTemplate.StructureBlockInfo(relativeBlockInfo.pos, newState, relativeBlockInfo.nbt); + return new StructureTemplate.StructureBlockInfo(relativeBlockInfo.pos(), newState, relativeBlockInfo.nbt()); } } diff --git a/src/main/java/com/aetherteam/aether/world/processor/NoReplaceProcessor.java b/src/main/java/com/aetherteam/aether/world/processor/NoReplaceProcessor.java index a9b77e6e5d..913bbe9615 100644 --- a/src/main/java/com/aetherteam/aether/world/processor/NoReplaceProcessor.java +++ b/src/main/java/com/aetherteam/aether/world/processor/NoReplaceProcessor.java @@ -34,9 +34,9 @@ public NoReplaceProcessor(Block baseBlock) { @Nullable @Override public StructureTemplate.StructureBlockInfo process(LevelReader level, BlockPos origin, BlockPos centerBottom, StructureTemplate.StructureBlockInfo originalBlockInfo, StructureTemplate.StructureBlockInfo modifiedBlockInfo, StructurePlaceSettings settings, @Nullable StructureTemplate template) { - BlockState state = level.getBlockState(modifiedBlockInfo.pos); + BlockState state = level.getBlockState(modifiedBlockInfo.pos()); if (state.is(this.baseBlock)) { - return new StructureTemplate.StructureBlockInfo(modifiedBlockInfo.pos, state, null); + return new StructureTemplate.StructureBlockInfo(modifiedBlockInfo.pos(), state, null); } return modifiedBlockInfo; } diff --git a/src/main/java/com/aetherteam/aether/world/processor/SurfaceRuleProcessor.java b/src/main/java/com/aetherteam/aether/world/processor/SurfaceRuleProcessor.java index 52941a3a78..656e9c713b 100644 --- a/src/main/java/com/aetherteam/aether/world/processor/SurfaceRuleProcessor.java +++ b/src/main/java/com/aetherteam/aether/world/processor/SurfaceRuleProcessor.java @@ -43,21 +43,21 @@ public class SurfaceRuleProcessor extends StructureProcessor { public StructureTemplate.StructureBlockInfo process(LevelReader level, BlockPos origin, BlockPos centerBottom, StructureTemplate.StructureBlockInfo originalBlockInfo, StructureTemplate.StructureBlockInfo modifiedBlockInfo, StructurePlaceSettings settings, @Nullable StructureTemplate template) { if (level instanceof WorldGenLevel worldGenLevel) { // If the processor is running outside the center chunk, return immediately. - if (worldGenLevel instanceof WorldGenRegion region && BlockLogicUtil.isOutOfBounds(modifiedBlockInfo.pos, region.getCenter())) { + if (worldGenLevel instanceof WorldGenRegion region && BlockLogicUtil.isOutOfBounds(modifiedBlockInfo.pos(), region.getCenter())) { return modifiedBlockInfo; } if (worldGenLevel.getChunkSource() instanceof ServerChunkCache serverChunkCache) { if (serverChunkCache.getGenerator() instanceof NoiseBasedChunkGenerator noiseBasedChunkGenerator) { NoiseGeneratorSettings settingsHolder = noiseBasedChunkGenerator.generatorSettings().get(); SurfaceRules.RuleSource surfaceRule = settingsHolder.surfaceRule(); - ChunkAccess chunkAccess = worldGenLevel.getChunk(modifiedBlockInfo.pos); + ChunkAccess chunkAccess = worldGenLevel.getChunk(modifiedBlockInfo.pos()); NoiseChunk noisechunk = ((ChunkAccessAccessor) chunkAccess).aether$getNoiseChunk(); if (noisechunk != null) { CarvingContext carvingcontext = new CarvingContext(noiseBasedChunkGenerator, worldGenLevel.registryAccess(), chunkAccess.getHeightAccessorForGeneration(), noisechunk, serverChunkCache.randomState(), surfaceRule); - Optional state = carvingcontext.topMaterial(worldGenLevel.getBiomeManager()::getBiome, chunkAccess, modifiedBlockInfo.pos, false); + Optional state = carvingcontext.topMaterial(worldGenLevel.getBiomeManager()::getBiome, chunkAccess, modifiedBlockInfo.pos(), false); if (state.isPresent()) { - if (modifiedBlockInfo.state.is(AetherTags.Blocks.AETHER_DIRT) && !modifiedBlockInfo.state.is(AetherBlocks.AETHER_DIRT.get()) && state.get().is(AetherTags.Blocks.AETHER_DIRT)) { - return new StructureTemplate.StructureBlockInfo(modifiedBlockInfo.pos, state.get(), null); + if (modifiedBlockInfo.state().is(AetherTags.Blocks.AETHER_DIRT) && !modifiedBlockInfo.state().is(AetherBlocks.AETHER_DIRT.get()) && state.get().is(AetherTags.Blocks.AETHER_DIRT)) { + return new StructureTemplate.StructureBlockInfo(modifiedBlockInfo.pos(), state.get(), null); } } } diff --git a/src/main/java/com/aetherteam/aether/world/processor/VerticalGradientProcessor.java b/src/main/java/com/aetherteam/aether/world/processor/VerticalGradientProcessor.java index 0e55ae5055..1324cd1fb4 100644 --- a/src/main/java/com/aetherteam/aether/world/processor/VerticalGradientProcessor.java +++ b/src/main/java/com/aetherteam/aether/world/processor/VerticalGradientProcessor.java @@ -29,11 +29,11 @@ public class VerticalGradientProcessor extends StructureProcessor { public StructureTemplate.StructureBlockInfo process(LevelReader level, BlockPos origin, BlockPos centerBottom, StructureTemplate.StructureBlockInfo originalBlockInfo, StructureTemplate.StructureBlockInfo modifiedBlockInfo, StructurePlaceSettings settings, @Nullable StructureTemplate template) { if (level instanceof WorldGenLevel worldGenLevel) { // If the processor is running outside the center chunk, return immediately. - if (worldGenLevel instanceof WorldGenRegion region && BlockLogicUtil.isOutOfBounds(modifiedBlockInfo.pos, region.getCenter())) { + if (worldGenLevel instanceof WorldGenRegion region && BlockLogicUtil.isOutOfBounds(modifiedBlockInfo.pos(), region.getCenter())) { return modifiedBlockInfo; } - if (modifiedBlockInfo.state.is(AetherBlocks.AETHER_DIRT.get())) { - BlockPos below = modifiedBlockInfo.pos.below(); + if (modifiedBlockInfo.state().is(AetherBlocks.AETHER_DIRT.get())) { + BlockPos below = modifiedBlockInfo.pos().below(); if (worldGenLevel.getBlockState(below).is(AetherTags.Blocks.HOLYSTONE)) { RandomSource random = settings.getRandom(below); if (random.nextBoolean()) { diff --git a/src/main/java/com/aetherteam/aether/world/structure/SilverDungeonStructure.java b/src/main/java/com/aetherteam/aether/world/structure/SilverDungeonStructure.java index 6086be60e5..6bda3282a3 100644 --- a/src/main/java/com/aetherteam/aether/world/structure/SilverDungeonStructure.java +++ b/src/main/java/com/aetherteam/aether/world/structure/SilverDungeonStructure.java @@ -216,7 +216,7 @@ private void buildCloudBed(StructurePiecesBuilder builder, RandomSource random, @Override public void afterPlace(WorldGenLevel level, StructureManager structureManager, ChunkGenerator generator, RandomSource random, BoundingBox chunkBox, ChunkPos chunkPos, PiecesContainer pieces) { AABB chunkBounds = new AABB(chunkBox.minX(), chunkBox.minY(), chunkBox.minZ(), chunkBox.maxX(), chunkBox.maxY(), chunkBox.maxZ()); - level.getLevel().getEntitiesOfClass(ValkyrieQueen.class, chunkBounds).forEach(queen -> { + level.getEntitiesOfClass(ValkyrieQueen.class, chunkBounds).forEach(queen -> { BoundingBox box = pieces.calculateBoundingBox(); AABB dungeonBounds = new AABB(box.minX(), box.minY(), box.minZ(), box.maxX() + 1, box.maxY() + 1, box.maxZ() + 1); queen.setDungeonBounds(dungeonBounds); diff --git a/src/main/resources/META-INF/mods.toml b/src/main/resources/META-INF/mods.toml index a4709ece20..890a459df5 100644 --- a/src/main/resources/META-INF/mods.toml +++ b/src/main/resources/META-INF/mods.toml @@ -1,5 +1,5 @@ modLoader = "javafml" -loaderVersion = "[45,)" +loaderVersion = "[47,)" license = "Assets: All Rights Reserved; Code: LGPL-3.0" issueTrackerURL = "https://github.com/The-Aether-Team/The-Aether/issues" @@ -7,7 +7,7 @@ issueTrackerURL = "https://github.com/The-Aether-Team/The-Aether/issues" modId = "aether" version = "${file.jarVersion}" displayName = "The Aether" -updateJSONURL = "https://github.com/The-Aether-Team/The-Aether/raw/1.19.4-develop/update.json" +updateJSONURL = "https://github.com/The-Aether-Team/The-Aether/raw/1.20.1-develop/update.json" displayURL = "https://modrinth.com/mod/aether" logoFile = "aether.png" credits = "The Aether Team, former Aether Team Collaborators for their prior work on The Aether Mod, Modding Legacy for their work on Aether Legacy, GitHub contributors for their additional help, and C4 for Curios API, the source code of which can be found at https://github.com/TheIllusiveC4/Curios" @@ -19,18 +19,18 @@ description = ''' [[dependencies.aether]] modId = "forge" mandatory = true - versionRange = "[45.1.0,)" + versionRange = "[47.1.0,)" ordering = "NONE" side = "BOTH" [[dependencies.aether]] modId = "curios" mandatory = true - versionRange = "[1.19.4-5.1.3.1,)" + versionRange = "[5.3.1+1.20.1,)" ordering = "NONE" side = "BOTH" [[dependencies.aether]] modId = "minecraft" mandatory = true - versionRange = "[1.19.4]" + versionRange = "[1.20.1]" ordering = "NONE" side = "BOTH" diff --git a/src/main/resources/aether.mixins.json b/src/main/resources/aether.mixins.json index 08919cfd3a..839b99cc37 100644 --- a/src/main/resources/aether.mixins.json +++ b/src/main/resources/aether.mixins.json @@ -6,10 +6,13 @@ "refmap": "aether.refmap.json", "mixins": [ "common.AbstractArrowMixin", + "common.ArmorStandMixin", "common.DimensionTypeMixin", "common.DirectoryLockMixin", "common.FeatureMixin", "common.LivingEntityMixin", + "common.MobMixin", + "common.ModelBuilderMixin", "common.PlayerMixin", "common.accessor.AbstractContainerMenuAccessor", "common.accessor.AbstractFurnaceBlockEntityAccessor", @@ -40,8 +43,10 @@ "client.BossHealthOverlayMixin", "client.ConnectScreenMixin", "client.CreateWorldScreenMixin", + "client.ElytraLayerMixin", "client.PanoramaRendererMixin", "client.PauseScreenMixin", + "client.SmithingScreenMixin", "client.TippableArrowRendererMixin", "client.TitleScreenMixin", "client.WorldListEntryMixin", diff --git a/src/main/resources/assets/aether/textures/entity/mobs/cockatrice/cockatrice.png b/src/main/resources/assets/aether/textures/entity/mobs/cockatrice/cockatrice.png index 8ff96dd0ab2b248ae019e4d8fb989b301564e7ff..05f6192b1e88ffa649f2a5f4212e9bf89ef2f53d 100644 GIT binary patch literal 5451 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 literal 5255 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 bw(SS9QWCjAWz@`100000NkvXXu0mjf%_iVF literal 4540 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 diff --git a/src/main/resources/assets/aether/textures/entity/mobs/moa/black_moa.png b/src/main/resources/assets/aether/textures/entity/mobs/moa/black_moa.png index e957d827d33ba3ec0c3f37992648e7586b043446..7777152cc620a31cd315d92643998c2f7ee963a3 100644 GIT binary patch delta 4969 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 literal 5160 zcmb7IXH=8TwhkRJNR=9z4Mds{iUDaN)qwP_gd$Qx=nx?UBf>9bc~|L4Q`bLn*3Y4Nh}EA&S(+o%9qr;Ho5 zWsCrA*PSzda&ioeFK`+T#J7W?;iMipV5gkxVK;PEn**WJ&S|?s0Rj*zPV(vO(PGiC zr{e29H=@{gcAo(-lQe}636#(WH?jFHHtwDwBimiku-pwud>6*KIQ(O<(xQs7TF!7v zDouiQ8C8ocGHcICmXc&6W{c*-uzX!z*NVoH?^Wk!uf5@TmHe^QTOPGGK!xOdL zPZk?Xd&qFKZlRr?Yc+t14*o3xi68Q)d|FrrSa@5~Y2 z3jB%hPASDRgdibDjY>YYMGN3VoQ0o1(v4r+m4Cl!_6st8^r_Bdovjql(~MyKTeoT< zCc<|M><}aHdf$uprINd(HTM=aF>ibrIeETMP34^)-3F+tx>rX4NQcF;j@f9&4p59| zi`IP5j=Msj<7yvSZ}W_DE(cB7d~@IA1=LVO+PD;;#V(g=O!KxKh1Q)64y8<)SJmOY zAzjkkYlqM1wKQGAn5Z`|-LB0%tDW4Sf#7Z$EhD)C^!TD(;h9r`{p1#s z!dl4lC1Bbul8tqpSrWzU@& ziWhj|muzm_>#hp@^R)*I?Xqg!CaYY6@$H@==1rBcG>?lNOmSL-8pSRpsKVA^qmF5T zvtncj0&U=fYiKvW-R@kua9l0^)$f}(#B^W7(T?I=DVoxEEo8L4ihi$Qcs6Hev+q62 zUr~;+ffu~rR@J9(HdlpzKc2OoN$In(4R!wY{KKgnaB@ghdPtD2z`QlHex6PgJFJlY zY81?hRMRBo4bTQupJ6O}lw zqhDiVSM7EI)MNTQ+g`#oT0V%u-x+2eCx_q$5#b^l-2|qBA zDcBV!75=Riit(Kqe%dFqckIxDCLQ`YTK_V-M+mw;lB`@{SE3+%ok6L`Z>`3j*;G8i zrH0i@L&jJxaW??Q_d_K?l3>Ue9s5zMjpPE!W~YxuPt>H6Qnj(a^l1im-NzF0!X50i zTzA&m&Nr|+reC*SXL^l>@kP)2fGt!*ut*LwU}f$rHY~wzT7FqNC-N9&V1RT6mI#QOAJfX@ zR?C%gcwgcnkn!=RDS<1;IJ?;qEYAnmhIb zvqDM-7^*uDm>DW|&w6mfYaI@WPo~%tz*N4266By<2&9NduOEmkP3K1d$9{NPRt9}n zmBNYJz!jQi784Bl$G$m9A*whVVeh=wu`s@VV&S&+sFTYrpxB2k`ZvCk$z4m)xd9UV?QZYht zEeK-NaYI*(b=VISP7;s1(w{1s9efc=kig#h_QV{B&n0b0^2&ksizk0B?INpe?fLy` zt*nW{3<}b|#mt%Gpy=mjv;&+yW^px?n%{1ZGB?>$7sO1Niz72W-d;QWr;{CJ;5PUI zb>FMPRZ_v=YRft|u`XSjCyqvGUF1z@`{S*gBlRpbjxX%JS@V9NV8pz$%9^=ETCc0r zNsF*grT)h9bC!0(4wfCWLrrBU6(3$JMTRovBiVfjM;_s!?M5f~k zjTQl)6~<&=!hQ>Em^4KJ@V=Ms+B|!x>lrppG6-HfZ2Vk3hH-uDL+tl@o_jUQpC%+E zcyjGA3q?6mnCACu)sUm3j-pl0HIL+>jh4kohk3V=ZL>1vr!8u^7P!w+?R#qX&vwy~ zCsuU#h@;@wK1I+5GdFo*p$z&TtW1^c7@wlo_7cu(kb|;lmbFBGx{u9y&BglzRSJ<+ zKL<5sU*jt~C67{4)UVAMwaK1ilMLDQIKEaoXA>{SDLJ-J8yPgb*#DD>**?txRRS@Q zdTb(ql30a#Un+wgUo3gm4j%kY)tVAl61b+fgH-hdV0_X0jY5DQDpy`zxr}(-e6NVk zh_}Mv?${L~;f>Q^4?V`i8ElPFd?qAHIq#^95EWNd`%7 zqfNz3FPYr813Qb@H;_X_j{4m|-~s}@f7OAwOhTWS%ayvkJg9S46DG4VS$G9~c>oJ1fa@@zg(BVCz8 zibusbK_$-D$gS{Ny&$Vwp9p1vDfE5Mi=1;%B;x#c43#^|(SH;~{b=R`Kkxpw%hPmM z3tJwDm~rA`H093o5GcbAMhQKBAp!Jg@&0_6Id$nz$W+qrcc?Hl=> zw!cf_fM)ZOmOslaK_lSHXKg+|igX(6%pd$uhSrZ@Z-32OIsZF@<}Z42o1ZQU_K8JV zRFCAEyz0x76bOU1>Os^}|ha@QdyA{usH_fDsY8m|aek}u!BPx7^}4drTZNLci(2!6nr zye?@i`Nh_V$&LNzsX8@DRT6Hd^&37n>klpDUijcUTjQI`_fgtk;Uvw&sZq+?cB5n5 zTWN-w^L4G#SVK5ug&E@{O=n=T!Kp2mGi=!=^Q|O)WJL{DnN)?6Hi)M^j_dIvi^ywerCiSg~PP2#dQ;Z^}KoQPZ$9B<(ip zabof(8x=h$!cqqpX^>8y3q%$lvts$(ADdN073^sjKj6MkJj}d@|KNG&VWp(bJ5L=Bo0*8rg~qK0 zD=tUfEPI-3E!h6c*Y|&AJEqbK^EL=ZBR^l(LhFN+{gIb_eHfC|TZtYem_f?kutj^C zL@&(C#AGf)Flq3~4obt892%|o411ZElNu=c@RHMs%~`xrbl2*AMuWU+-dl3YENc8!6u zSW7N>+|HjLvn+sH*Z)Z?o^#`-cq`@Gl~HSg>ZxS`d3Cm-U$joOqU5l{*5*3IE)N5; z96vuVT#q2>GIvmoLbLU~tueulml6Qqrwl`G_lhl?5eO5w5%n&d)Sf8il>A5p0vu3`&jGh|P zz;Se!d8vHFjGvg+0x!+7|8Xz;099_xq-)CuI*cXWNDow@FNzgh0iM-@#C-dQv7Kt-B<; z%xniWzH}ewqJC|NbSIFh<^GPj;%|rfOA9I%ne>Kun3(_nWJxQudSt(p2P*sV%Z!?KkcVHFeK zBgm-cO_cSPt`NQHy|29^KLI6}kuZ`$h8Tm0LT|8wO(?f-QT z!--%k#$`2c1cbLan>e=L7M1}OVMP2vx7zO|xG;qF`jrCM?j&4Z5bLR=Ra;WAii`pE cu>4LU+t3LAe~ZrPHd>;I9*QP9|M|6l0lvoIW&i*H diff --git a/src/main/resources/assets/aether/textures/entity/mobs/moa/blue_moa.png b/src/main/resources/assets/aether/textures/entity/mobs/moa/blue_moa.png index 07b14b42a474b2689dcd6d72d85cbc520c1fab46..23211403f1f783df200c289d4c5566d517280cff 100644 GIT binary patch delta 5723 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 N002ovPDHLkV1oIqIvM}~ delta 5440 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 JLtb8BWchBdz1PH> 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 diff --git a/src/main/resources/assets/aether/textures/entity/mobs/moa/raptor.png b/src/main/resources/assets/aether/textures/entity/mobs/moa/raptor.png index 551e2c2d75956a8eb6c8773a7ef5dc13ca0b1d4f..a3c3d5a1d4c3a6b88751efd21e4581218f70a87e 100644 GIT binary patch literal 6242 zcmV-o7@g;dP)^N6iGxuRCt{2oqKQ_*M09l`v4Y;2VWp5QBUek`EAKcVk@p~C2zyL#G|H7ZfDw=tE8PtT6S7HmDSs;+OZT#ab#D1 zNRF-dgL+VuK!F4aU>6HuvHjy<7XV3FAPLcu>hBDOi?iqa&cXi9?{R+Tw}%q7BKC>{ z@DJa(gPZ3y0uTtQWQ_u;R1#J3vG+uh-`n&)=qe;k{{D|XO+H`XGuO`~(x8$WE}&^D zmQ?`YXureIV4VN;7jMBU4@)(Vr4r9PVAW5~6ck8=Q$J5#WU4Ijcr>Ue;N!q5hqU(?~plwipiO z_aW#b7;a+e42|g>DuV-pMso`c4ygDwSV)04;{^!%ygsgb@Sh!k^x?gP7vDnV_5RIk zM*qqSCYS}79f1obnM|5cC`>REp{;#9zpezo0+v02hEqhZ&ZvC?=qgcV0BAy0eGDds z$m$^gvPOY?P9>clF4X~MN0{4~12hH)@TC4+UxDczD#wow5)4JSsj~svgQL2;bK@UY ze7l?X{`Qw+kE>M|lb|#aEGx_0c?-D^KSw5$uKDMA2#!l8rk-A%F|N_go-?0tLnC%U zFf$NT8B7c@V^$-k3E^-9X4ViUz_LjV4-pJS06eBQw={FEuRt&qLDN(q0&&CZ+u_Cj<%8-N+K%?M-Kjm!v{Y=(=_zb1RWP_=hAgPPI`4l?GwN( zkWLQ+Fk`l0c-APO>mkmb8A8`Xq|?K+wN3}~Fqj3Vbr{rcVP+VGcECcx7OPyWK8X9%J?yPjS_bF`Hs2S1>F`b=bC?!3j^ z`K{eTtHe*jlfQ5lZQG9H*c|=TZ^2LQ`)FfXZ*@IRdLwOgt+sulkZZ1Kt?knZ21A@ZbCTw0E6k3tVbvTk@}McmvJYAI316WWP@eX7?%m? zzi>`SxCBno2Mnsagfx`t`EI=lTP?HthB8ckehYBsr>c=Hzi^%<802$RkNI zs!t^pZWTU-uCi(KQP5Qu?Rf)53DAAl?eNgg%Q`mV2TkG7pMRDmGs03;c?pNkrky2! z_A9}}RE|+~MwU&M9#rZ4ktV^bbP>~VvHBN7?Iyr>$YjzS_~2daqK#=}JoTSW4bj#* z-CKeI;8zHSBN*uvmQ~>Bp`HrI4{{cq>gmBqr^HgJgrD8lChgz6MmlxiJJQeYYmF5z;`5X31}90{;}%-Skxuf{JI_@lTM*&0a8OrF!F48aG@ZWFp(q~$0 zgDQmmEO~YZd~K_<@A!cC^!6PeaQNC*XUVfWAnY%D^KSbRv+GW;MmUaB#q5#aYenrE zK#>TA!rs#A^r_>d)2#rUIo(4j6e-_VBuHlY++XeI^*^`{Ba`wR!bn3ig99nf_YGmB zQ{4Y=iE){L`&Z53yRY^@#7`!jA{360P7UMNG)&XrT;Ca3(jrX2g9~ZWRSw4&&>rz~ zt7X%@?bIlm$A54SW~M-)P^qdVKKzqA&_gQozy0RufqaBruQ$ER3Du48VdNpI3-#I_ z^wcQeIZw?kZ7lA(iA>3PbDg->_703picly*f4mP`g@cG9@wxwVU^LByS*7*~`rv_= z9HKgl_PoK7Rrdg}Xxny=5(WdLpM9bSDB6;ZlMdl&SHvi2YwVqHR| zm-=7+bd2@4&tU!SGg$s~%&Y(WW7n}E)&&ti_ph1*sT`J-WgyW{p->CBtI$a4h@Zbd5HMP=S-4G@M#*&Q59(7>=_~LdN6`%W-v{wstq7$>8hX& zqA$yaxWUHmgKUU(u_4w)Z_*-@vk8?RMkZ$yyK6Qxn>4IKk&WF4iLIVT_lFlCVG?O* zq*%03Rh4`$$8d5$IF(VIjoVHUTQ&`@ZzZHHC7#OhKzoplFCP*1*RQbe8@F=v_y3av ze{u%^TA<7XJ*0Br`Og5b^jp6cb^r1mp{k8Sc|!Y@`qG(;WO=SQsQ`4Nw=TZ>PV+4tP1IQGIF$dUv}OSH|E7_TYy zr#Hn=Ih`t-fK*P{ZC65FCom-@L2_t-rp6Z1=`^Q$E{I(~(^pyw4ijl;CJ+dC6NaEq z&~WLwj;3q-Dkod1f9II()ps0wRQ*kd2B5PMW=ELTF^l1$B#lkY_%%&zMzyws^&5!l zbZH5V}LISYL}Wi3QK^0>8rk z7w^XBm&?mmBM(i1`qGp}FiHBZNtyR!f=xh)w-H}NS4KRDI*b&Sc!pTV{lY}D; zbj%E67>20Z*-)N9F5Fc{+^Dj7>u;YS?6p}ymVLxl&m*>ao)^B2Et|&r+h>T%L7!+_ z+H7iSi4xF*_edR55)bF^SNc)DUzjC%%P zx-}1D<#OZ;1@eUgRxZc7H4g)DUk{Nu+|&gvJGpAt)53nQ$$qH$O}!8Fd>!0$fU?+vz+cZhN7y(&-K#UHeK9r z55l1VXb-Y!^HJeA_6Udd_z&(uktGyGVcnXC3FyMl*}MC7>D@P8liq#fHEHke*Cl{} z?ql7Whfx#-MV2`JgL}$PucWf;O|Mo+l2rAX2vj;7g+wMyp;|RXsAgByLMejgBbiK+ z&zb1K2%%6&sCz)yh1Teg_lc!q#8(}4J2X&U`dPMMM9^2JA2-~I2K0-b}TK(qpc^-T85daE> z0(MbFktG6wvSS(IzlvJzd0QL-(O+%{ugG?iZw@S8c6AWpreefZM+^A(m_`2ToE`^Ip{6sWCIS$}rqyq>-^+tTGe0C=v z{>=j3Qgei>#Y3dZlM9(6~IVG(4}jYojo@O5YiNO?s>y2FBbEx zzqeED=rw6o%fX4lr^yr@6-ky@^OXm%-RR**AfGR=<|_~2^ZD@kReYK(CZ?v;o!(TV z90zdit81H~Y^z=AuP_6$;;$kU&~+k_rmAJ5$Nb8eLd0La(x4OvF!F5p-5Xi{bd0W2 zTs*XT9!TjeEFrSC|J0s4-uFtT|Yw>Y9Mg#xlc8 zd4ir#kjg>4yef#To<}BUbNH9G*T3V~+x= z_xX=t@<-jfQgEs5?5iA;e|Nd$<N~Y>Gu&_y9qlxObJH zcd(BeXDudUW$7I(=QhN?y13dAbYa;djqNJOq$fZ)tkbpk8NTt&bvRA|P4n~QxBe$x zd!Hd3)-O%q3c)+QJ@gLt5z+#@)7#^f@BQ8*#O|6cUPb}$#gy2xY3%*pBOlLT>xfC) z=i6?(MV#rAHW|);4n++Uk~VwHfBWsdSF{hXc<}-!)-(@*L{><6G*C)YPoAKmA;RFG zSnfUgSO0-kDDtlxz6d~bbL5KueIqfcL!vH*KtQaS!~D8bq7w*cWV2R1$X`~-vPx&P zot{M8V?01-v>kc)bXDDd`h(w|>fv2>)a?W#cM@ES@cG1Ja+5yX@7Dq*?E|=s4+eu( zpUQhz13IJaV_v%mhjn~D6`xPNs(hPEp)OO|W%$T4!?+3pJ;3)*yyI;O0gya_ESDdR z%kWCZUn`S9^3DesnY^j15b@LX>hD+m*s-K~tO)>&IRPsDf^^#C;Jtrcev_xN@5+}| zN(qx)Z@y2lXmfbR{OYp|+_n11GY(30H^jPl?N1*XbBun!kCv8Z1_lPJ%H6VDZtQr* z7ryy(k<40pPNU8~a8u%bb79Q(9&T(cze54c-TVZ$ZKEg(wrz9f%-N52GN1f~GoJRN z^8s|V{1%WqXcuvVgSWg$I&FGI*{tP#YQ

(rHs9TU4&CI~%J5ND;pmdtda%+XMnW zG|kWao_EU=#LYT#-z})jIx2;3HC4v%_l^2YpWaSOOEVxCUiop$rcZAlv#q9yn5IEnTa-XR!!V3dTELb5Y}TT`KY^|XtJ)vDGRsR2`YKgd5|hu&f-%7u;43%UY5iFbT9jC>6_9eKJAQY-` zc7j*8(tq$$y(50;Y-I7aXV~}4FY(0Yh2GIF?wiWTmM(|(AdB938-OD>-E{Tt#>HN7 zMrB1;9ANqW^6!ZY*RNQvI-_U}TwFx0=R{g7%Y7O2l4qW;SVT z+rOGg3!{I~6^}}-*}t$18+?8_rHa#1UP!d^sL*?5G<72FN1|pEaQs}l zs^a|V;mazK*J^)Dmv%XT$DGPdGxs{1wY>0qYipAiWi8PwWZ&H}B6h4ezh2DyXW;+_@sqcJkzD3We%Z#{2rLDi!YDn`rxy7}s|2m%jKT zoMM50`PctFo@Nuqwb-Ao3u$yi<1H=CoIEKqkLJ#u?d?idO0X;S9Uajs4KR`RBT=&n zSaQ>!IWLlh`AX@Thy^ZNF#FdlNGO zvNE*^5Z7vdmSuWNG*^u;SRj&8`})pTsc%`9uq+e5Uxa-V32_F~WZPGw<_TaIGCcC_ z|3QPM^5bXzzV=@{L0qf-MWZdAgt`*!s_>4EX;l*Js`>tYaUNq^n^57CZC{C+C%`?= zijA6KtKeN$|oROjimIc6%_c-oId%@ZJ%%@Ym#z3a=3Yqh^bVxUTe z%d*6xMGFAv?d_|I;8~Vn*spf|idnN}GJnDRQ6^-(?MI^K3Gff=Z=2Fhmut1ZN)vEk z|A(A8)5{m`y%&I;J9aT^)=ZXOcRe6fcsgw|Yt~H8oayxtON;U^#*)_LvK zR{=P2;sp7;MLutF;=~C6UVHUbPt`k)P3OFMeD==IivOQbhxV2DFW@oM{)caY)c^nh M07*qoM6N<$f}$a5$p8QV literal 3107 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 SD?&SXh5$1o47$|7E#^O=bzTAh diff --git a/src/main/resources/assets/aether/textures/entity/mobs/moa/skins/arctic_moa/arctic_moa.png b/src/main/resources/assets/aether/textures/entity/mobs/moa/skins/arctic_moa/arctic_moa.png index 343c6658f10e84b1d81b9da2f127b84aede75ad2..1ccc236cf8a09ad7e879f4c54c3a79469f4c6f0a 100644 GIT binary patch literal 5586 zcmW+)1z1!~7hXz`rIeIhq#H>k79<4e*i~skYH49%>5xVm=@OQuL;52Y6e;PDknWHc z5Rm#W|MSe;xzF4?ao+QuGv`dCj+P23F+DK|1R{N@s-y?Bfk2ffx(7VRCIbS1=Dv%n zfg1?KuYOl?FtRBnAP{xPOQq*9&#b*{9|y)BzaBYMV++bh<&SE@&xFSWk>vvE`TUtR zC7m^V`Z3@ZvazRM=*8jjgof85(B`t@`{!`uQvkWT1oI^TrS7hs?0{Mk!r6(#{5T^Udx%px$f$ zsSHy=Uf!&;?6kBubvd7%XFVqUta!*pNrT5~gi{dt#lIO7e(ku!C!*tGL7(mDg93B9 z;*D+n<@85i!ZcU^O7Aay9L_dYLxIj+DZEduHh(4T(- z)BIk;pC8s>i@nK1fbzRnu8nxHDgkq~1vgPuM%>rNRQ!OL78ygT$Nzi>1_qW+y=#9L zjPo2m{UAtJLlKRnA3P}HH;#3j?YDpimOkyUF^q+H%DCYPWUCF9-LCP;9`83*2iOy2 zECx(?hgx7xDkt}Ip>EpGPhEGw{4ep!%gQr)kd2V@YaEU5UyHb>8#JvsgTu@wsWk{| z{Lx7t%c{CQUtA~BJhhWch*&-TSF=wWm7bn%b!H{LMa@6}4z$WB!17$($frrC-bCi*=?l_E~|WJi-?}W{H?tB6XiKh9x7f|sb@h#pGB#&*X};G zXAF(NFcj%x7qhPe>Wc;17I5RG6;jI{fkV%J!x_`Uf)-gI*;)x&m>Sc8ol}c+PXB_?Xa4mZ?D=ro z4@=_x;nUBrH2_>eBt*IHy-&RY zg~KdovRZz)0xXt&x}hw6KbDznu4cdVL^Pcw#fo|^ccSpM1OE>~VG_KmseYux9RhE) zx-^x!o{$84@`stz7iYXcy5hpeM_hL6W*Lc!XI2(=TFJ^vEuEai9>=S3=)&MBjrI4o z(*%6JOmcC&IKI?{C&y&c7a$HVe7C+qDDam0&*q(Otv|Dji`9m_X;sWBl-GIRRGQQ9Uv$LNtkf7Sak`{$=i4h&S2(| zY7v@31WodSA8Nk2+_%?N_sczsfu05cn4@Z41r9R2hvVbyEAI^|OWZgWCd8tVGhW*U zq;Ctxhk8UAH51Z?SkN262s(URsVJdba`F)ZwrYYDetGAw&cld_ZJwp zxRTx_1?&`76zIL=V&&*_$ebZP1xBR`nS63rZc47+nCGLxPK3B3h#9iT%fc1#OX=_9 zBTHVG4>d*g6x|P18##TOqBeE3?FW80rB zvxou+qBNcBmozbnfcZl{ze_K)%#juo)lj@?CQz9692c&kJ8)Vp1nemV0cx}>gZ*<`ZSew+yasD#kQM}xS*sp^-! zFTT)SED667o^{+*P7fp^P-f~X(xDOLI`hhxp%}rWO#hnfNY}@LEcwB+4H${LBS0jG znK(h!5*%cdbpPAK4;A4G04aQ-ET(akKL8&M&FxrMr#<2!?ukXcKOA8Oq*zh%;euK< zIJ~OY?kPOOQmhxmt$WE5^seZkZ7j|b=(SgHC97DVwoN0WA=(Pk{J`U2> zEv_h2X>kNcX`9;^fdL!K|NgS$LC@$-_n}r*0=N-qKhkJ-$tzUqTr|u{2O(`poXP zggEXHdr~D~tuMiH#73~=tcW(`H@IT?^x}|*IFrHI;y>fA^HXUUykgU+Di`gf&lZg5 zw>#gSS;!mOlj|3w!ZP#C2mN|WjMwYGBTnC_4=9h$!g0X7i;GWQF_^k!wZV9K;1~wr zFcz$eA8?oUcOps_s{FoAeVi!vfu{tf7be?5s{>Eo9M*ONz2GHu<`IBgz`0c>*6 z9{i>-GP!zj$Ha)UQqyJaW@8rh8k$XF40J2%!Amc8R`IJELEth zPsf`JoJbo{!2h<{%RAREQnu0Ouazze7S?z03&iuYGSsk~l-2x2lNjvlkZTC%Hibnb{?%F%|WR z0!EGRJMfitr&|IfwXuiyG~vX{5&PTwTStJ7y?{An2>;gq`3ZI&85Ix9=jMin-ihp{4OQB$7<`724`B7mYyMv2h^cEF*aA2pvff_Q7ZbI zD)%_iVl*6frmqXrbmMflRw?RP%>#5|qjg$?x^)7OV3er~kFBgO_quk*{^_T->hox* zpFYJ2rQFN*-J)z9tz%V1DHWmZ9ZctAE1&$`U(^I7ww|YnmAR!~yxL_3dIqakO~$%u zlS~EKQZr^ucx4XAI2^wrmEr5X$wNteLsKw;Dn%m8c}WdL&R|!j=Z)STV7#y7g6xrE zPZg%-m-$_aXMgtg*kKD|#4s2uf}&{JAiu-?3MKpgtu6X@E}zL={~RgYZd(_74-E5^b02j9iwrq&N*s)GX+18R-9%AMoxZ*3%>GS9LIZji_+hrnR8;T8w z_Nh(92{Dm$5#mndrdze=4JC}A6C(&*h@Dw=(+xc7*%c}H6lcT!}X7n=PeT? z`&%I|!Q~1*^Fg9@C2i*~-H(UmQOt~6$3#62PmrjS2=BiD4eyRY#Pr~jJc|uOhcc#- zj=26f-;^~&egmh|mNut0B0I>d)(Je=(Uh&ItJ1mHK^WLXfL?LV9S%p(iJVBgm8RCB zX}(|U0{*6B^+-ogF9Y=(RYJEP=la%c2QKFU1z0{RD_xDu$Lf2ZcNH|w9A>o%JGH2k zxC|)u(Lf}qlSye@aTPHbjp#V5GapTwVqmrdXSVha=GR)eO8Eq^keGrFbfOd8DuO1?Z-14zW&6+Vv z^c{>o_6P<}sJwYv<73rbF&-)`9%Vy*X$%j`D|X#42J#U*yn5N(JxRZ#iP8Kv4(MNx^@<>`KRsYMqqL?n{jdGgVI z+(Rabpwb=8!M6C1e3uos4~ z#DrBz+VS>3(Yr5b+NPjsb#b~sRGP;PmH)NGo)GpW>nkwxpDjh{z-O1a%D?yz)1A zu&D``^T_WGPOXtZ?Ax$sw^1lSc3ie&7d6^L?n0{jiARDJ|FJ!aO(ek9A+bAbkgfz@ z@m>5d$Ll`W>u6|yT#$2r1?&TZ4e~bx&5VZYhCnK zOjLe_0+oUb`Y~OlOUT>5hVlg;V(J8vQ(F5rcuo=LaC;aU zouHL>fk(GZb$cbbXegHO%5>2|2y@MZnoF2iIG%hv@QNBfG%wVBWz4?@A|}G&7GtDR zfHcH6(I&P^jtqlo9|Go@_fJF8D6;_w4HvJ5^#7nY6$RhTzbQ9)VtbOiXCjtFbcoWH zO*%z|uP^(UowL7?>dMZ&l`^)9`<8mpBHJ&DHN0#ED|Ft|O>;xieD7VNpnNS@i@}5* zHmh}qhyQtjvm|_*ox{vKIb{m}@~}F@Sc;RZn8FCFfRd)5Jr#AdgDRfa5o%0q%*|X`9vu36 z+LL?v2nZw!HLI&NlGuiC6K|hhwM-e~QBlUt%{mZTYvbdE2kj%?FP}wRcCb9O>JSrb zyq+ZGFj(w&``7Vb#m@8Y?iV#fyA`Hp-`|-9XxuRI4=zZMeK9}Y_+a{PEEIga&tc)# z5}b4Ok?T>Dhz*~5f5)d!pR6b3wnw-2w-RjbMNq3q&On1y_8l9#nD0MxwP7-CRD@tr%WGk3)rishG-aU-+tHubpLS*AK3D950jknB(%f zJrq|54H#7BGvRSq@u4O8syR`Y4VX}Zfu;-k8AikO3=Lwn*Tn%O53HP-Nv%b}p5SsJ8YgD2d$HlkMwbuE% z1Ju>FiR5g&U(Sb2b6oH|Wu`~Utbfk^H(LcUBx|P1(52v!Z=X*QCVxE4iO`;Fu*tv0?x!vs% z64VCW>?oz~k>l(55(9S&Ec3J8n(zZdzXj)j-Bk~S^69SFvC-8~t{;OubL?q79^o{y zUm%)<>_H~ox1!>6cP^DAEzTcrIQbBZN4Y(<*W_zcKkdvay_V&_qmOf2Z;$`^v=@4que2^IMX66cUI&NM6ThX$2fzlG#2i{#x?Ai}Xb?g~hR6w0q z`m8Q?rrfWZhfHd%s@ks}Zd)cIUH31Xky_RzF1ihKe-AO`H^60x^sM1p9_g$HwM1mi zLtvBe@+yLj!X$=_46p0;RM3ArL4@m_Npx7r`I&(hXQ?xf-36Yi)LCFn@K@P}=O`r` zAdfk_@FQqHbgiDul@xiZ7P%b*`z2*Za}?zsov4%za*F@ zW>6uJZGY{B+r&FZ+9*Y97r?RSruzj%R~V$FYHD_;nbT~4QT0&1(hilIC32iCuL?H4 zVA@QV8a*_#<~H%JJ`qy*^{gwY@&F}fM8#3%t7j?MuC>2id0BPt(3x)~uY z(&PL3`wxEC^*(#IYwvrVbMEIp=iKLs*Vk3MPx6oi1OnaHP**Vo?h(LJymuG){4o_C z4%~=6)geA0kdW5Dg;)9vQ2_$coNA~j83pF-<+{2tPx}pqH^@oIHE4NX{Ab8P8(+nZ zEUNmLSpHvQrG65gEbbduEz1+*_kD`*B@HPW@2>yy%i++cF4O&v;V)^_okc~SDpgbU z@!S0>XQ@ML^Oih9HS^CPRN={doosERq2ofbH)8FXZKK?(n)UYa*LV89e(ease$DZj zxXAZ8U=dhbTeB}JD~pARjkvOaj3@6AkkpU-Xigg3b%6O2=u8_(C8-F-pmu*DR4=mh z7oU7Gf~#;OLm}E~B78xDmiYZYPj!QzChZvGozK(n_iA!~554fWu{C(#2rYJ*wcu~qdO=?A=?VN|d4nz70#jfFfcyR40R)SY^HvB^rr=%+XOQ^GS> z=Dht*fn#i8(-Y^p0m&OsNty;M22YV)zl(FiK_Oc0Oj2kz54Bq|>D+_peABVmUD1xs ztOB7?wsX~+!R=O#j*f?cV2Gb#1sC6bG?jEKMU@fB0=AgXG;vKPlN&Z8T?4Phf9^C` zO86@zoLVi}&+1inw0X0{e@vZ4PmYydE_BS30{8 zf#@w;%ZHmx1x(`Wc-GIcW zhiIDQ&)I3g)jZ|TDOvxSy*!uQqSA^)iDKuT=b1}iEVks?A{Fs~t9zA-dGHZyN~$K$ zh6Ln+c>e8%%`hE1bgl%f0h8x+T@L}XI^PE(BYdZ-!fCs`)Td5#yjYN-Y5Bv>g@*8beeesQ@~hP`+sX4_xwLuJ;$(w9GN+%v}mh`SHio+^pi*ZVm= zy9vGc{Jr$>Fpou7l4^jAfGc3cw-E4UWtg}s_}xZ1z_NAauShr4xmHJae0jF1;RP-a zV{9>l$XB+1ZJA;;IOxoerS`prq8_CK&iq|8!&KoMlnrQxvkBfF_RBs7xs4Wm(O)_L z?*BCrB^&&tzQlD*ThH467O{a37=g(@uMe4tL^2xbq|+%*`$}47(t+y7zeMbxQ0CW5@!4 z<)ig+s>PfTWOK9i%_R?X!Ik%Y(*ABzizWL-jlcrw^UtsRm zOebug-7x^MVy^tLXQ3UxnsYOK@E{@%!*pHs!k)}8)MAiGWNOq|Aebwi*yItj+6z2I zL}}dM>yx)^DT4^9OV#Yk+AM>ORG^dDYkAsfrZzZAI@C0^=^-*4! zqM2AkpfU01={L08wlOn>tX^D3q$JsEDqL$VQUPwwX$4JK zxS|<1&)?ewFeC3`U|N0dWV{Gn;TF2w zl~(g>2==*Fn6y`{G{Psf848c;=c4j5(kT|$@hth25PB70@PrE6(P@S9fnBrB z*Q=U=A)7K)mL^HIAIU7**>~Z`^KsgW9Sq%+EK+yy5|7QudOtX7_)^Uq(BGr6$-)Vx zyJv+Ve^UE_7$5LZd2M5VHwrhrUB1Nj6tP?1ns(f&J_zNP8b2!DgJDm?C2QEiarpx8 zxM_`yjE{HAI=`~r_LGBTU|R%Ne-Bp8L(UA__MW`BB#PHfTsD@1p|l>nj4zG#xxF;Y z#}C!2{zCCKgo;3l4KPB>jnqC&3dySFg;L2*ecv@MrDbUijLe$VAtU>9N8gmDqy;M^ z)s+1$v@=MvLBFx!VGJ@O5oBVnJt;cbh>zJMf%^J>R4h3DT6#3Nv-)ApG-)fiXh9%4uL1NSv*uBTrlu;zO0WnR$g)8%F*1n+S*IAs9s;xG zj8cl8!8t?*_xae8eKR*hyX{BAL%X-6s==FMAII9C`8Xz4RFwbDN9`v5As7Flz&9sy z-}uL`AByH!hSEaKAo&I>=W_AN-)0<0?N%Ony?X*2_)5Ce@vX22%?`uf`4ehh@l2F~ zVAiSX%1!f6I*G>T7cGBn6JyL}E4JpX*PQk+F32)|5&jGd_6+UK4RiEXNrd`1iNlb? zHsYD}FJ(#D6CYe(v?VvoU~uD(N% z{A8a~*8JnSsY+3>oj~3;0fP5L*K(kp{MOvF(K|DK5J3| zcoDv@Ngcpa#_4p*WZ=m^>2aS8eq546ORx(8hiC!UN;D%Gy4)ZZ$XO)%L5xLFMR=e@ z#!BO8$Euf$$Bgzw+rjct@QHYsG1#sYxl>A#JaCrOihxI zQxSFMF63@FrHx%T2Z;fM`}ZMKpkblOp&(myvr1F?40sQ zIPmp53ceDoznPx1UdgQ%fw1N>6k^Av?SnRtnxX(fQ#N_Bxk4!3kcHaLJniOwpR3D_ z{o1+b_=7IvHxlxed3oQ=;URCW$_SBC0zb({R^+M1A) zEDL}>S(YGk)^TZBcrl#S^q~qex*2m9s070RhbR86zngM1^WWGYo) zCgAMVw0+Df!B2%He3TjceDwP47#h-*q7t)F`ER(iwO%r2x43Pz-bbVB0Ye8jt9}67 zQIB5A{+ucWZ1UZNJ{wuQ%06EdwJQ7MLuPDj&>`^ejl)7}nlN9v3G%Ug34PLpDDhYk z$ai{E&yHKrb6%QH*#z@ ze_|`lu~?&_F}a@$Q?dg9M*yH~O`x004ZP?3^!@;55T0T0!k&4z4-{Dpsml6_h~*Q0 zB_85NH`4K`1`cA%%XkgOLNcVrqlkr1<6Tu!Tf2oW&xKzJsE%kFn3}3gWP1z=Edi`R zqmGY=a5NFs)KCax*Vfy%r`sOkI3EzJ>&+My+Z7Q}*(~O~SFWYj<5nbWM)pN`2yaB1 zNAPSDLG2li2OB&1bY@{zTk>I{JCt%TmWu2&X65;eh}9+@!Eyg4$5$fzdR{gH@*y2U zQjU)rt8Wj^0z2MdzW(_mStf^J+`0eKq?(FVlY&*#6I0C8zt)Y^v9rfS=z%Xe(f*-H z$(dHDwbIOsuiu?!a84;e1?x#80hD7m^1CF^?=pqscHecJNgwr1gcB*2^R$-q^G7}Z znNi6cwgH`eI{2$4++-0WPR?$a3Yjc#=rl{*@1Iw6oX=+>v^T>~WuyiM8$hA}g=rW! zr*W%xdy(sZry;c%Qdz zA{A{{z*>*4J8KD|KvAR8eN7!`coE;*SSo<}|8^9p#bsY=)Uv=|6y7(X9ZL&|FG&wvRc42QsSTVp?H@NQ=W1-KQjRaJ<`n z{~c8wg97YSsLeck25=6j4{i$(z1LcIy5A3rit1`PSoHsVmwhkGGEYb*LTnl-2<{NRS3lUh*o7q(whzYIQQX?!VQSg`_DC!4GoMnmdr0q2s~Pw=!*CAnBeK_`=qV)v?*ib zn^3KswXrwvZHDa4SDE34h^9P66}<22=kQm*+O75d*lj zs1v10zvR3mvHB*1tl!6$azTKMpy~7^M?P9trq-N(=sen_U6?g~9?cD0Z(W`^Wo(dy z7y3wZRGZ?F^{)H)IRJSyv#>Le1;BVc{ItfRgddeEL63k@d{VUCez>#KVtL?h@zSCW zKTdl!lu0KhxEI(|n7>wCj+$xQ=iMxkT?>z`pv~=*+%`t9eiC;7hU?$3D1DvxpX7Eg znl=u9>D|(M(sC`mX>r?y|0S@38X;(3bFW!2FrezI&VvK6Su1GIh$5VZvXqi;(`PxO z*x+99am8L&&h12O|A@T$klMLB9aUhzL09A;`Qc6UQrYFa^T(tOg^&=utS~_$R)ww; zg`1=M;|TGx^pgzB-R+IaB*A77t#Jl(;5CTJ)nmoToZdWO%4gKkDYrh&0Y>KR_Qi$Ij;(g|prLVktd-1|?0Y8hp0&)|s2JBIT+32~ za7!Um*yU2#op8?}#_vqDCaQQ5L2{n%k^s8ZRAa29aYnTn-uB086kSZ?BOAT6f)Nz3 z{jb?ah22cb{6-5UCG}bH-K3Bx(Tb{pyg<>){qde_39p|*UE^foh1oQ4wKd3+$6X6r zsz8Z?lKQ6yb&9IS+&E!yU|CkXtxD53Ke-L zOpwQao~=s!L3$!(R5}9QpB?UZSV!m~mTztS1`CxZH02Wqbj5mGN;t3Uql#ZuKM=3h z!;}=OWm`Rpha(3U=;eR6U#)?>J#2)iEYGVYDEI_QP}NpAUBw)8UAff&5Q}Js(5QHZ zAT`>(9=9)QHK_vG4+d>~!j%_SWaYG3YoC8MjRTR~BQ$l9;rpQI_Gr{X{n*M{^otBz z8PLq(lV!gQTkacAp6@G!>dF6s4bi&s&|NM3d{ca;eO822S;h!Pkod@X*d}iY#iZht zcw&ft&3{v@ZA=6JY&QV4_Jo&JCZtKZidL8&y|EBsp%yKtFfYTG+i{-%xCtm!V91_h zTA&@cJ?dL(_aN7A@A$9W{EJO)q-vPQf1hr<%HYPff1z`ZzV>lj>oOj=0ZSf#Y)8m( z@**5P!p#qlm>?6`F|-Q8sa}LGuM&<3DtFDh6fIqn$Vj!Bo4V0o9oT2JF_VfR!dfan z5~Y~l7y7$%+gp?OdN6v4t8vkxr~8NaMP~f5pVpE?y18`A__s?JfAF~uZpCB*ufREL zUK7`FLJXV+ur4-415G=JQD+iU5!c3?5Ixc9KO@~qLO+s?9b}pOBk|-(+Udh4xKsxC za!+j|AbjOI;PcAulI`TYW3+$Hgg7%a>IIHih;>Z!WqrOgF;!f`I1 zUH^A-99E!XAmp75D-nfbGoPt81oDn68jbc|XZupae7l$Zbw9=Zo)|v~p`)Gm_deuzj$L2)PT))YL9elxoL?xX<*%|BK1iT>{yHcGkjS2~)18 zdxV1c&j+6AB;2KL57@59%c)iih?v$bycdBZKD1MN=>y} diff --git a/src/main/resources/assets/aether/textures/entity/mobs/moa/skins/boko_yellow/boko_yellow.png b/src/main/resources/assets/aether/textures/entity/mobs/moa/skins/boko_yellow/boko_yellow.png index fe79763df431175e642ec645e2782c469144da6c..b63136f56020c45d691d64c5b8bc55999292e1ac 100644 GIT binary patch literal 6287 zcmV;A7;xu_P)^NK}keGRCt{2ookFF*LB~2x87Y<-P6-Oz4P9goqcduB56vL7&DY& z1x6%UNCXNtWGILeCHW9CNSs7pjl@!b1hx?bVeAM2960)r4@uxeL1GB70S9s@XJe7n z>OpeJ-QjX)=e;x2(~s)vs;*Z)^j1yx%^${XxDF2zVIS+ zd=LpjC?tvkfk)7MpHAChcllkWKl9t-K&J!1U-{j{Yp!&!yVXRJ$0$sFgd}X>IolMU z_}a1fR^RzINwcxW+;hKmPr7e?>stVP^{ZbUD!-RrdI`_-2EJayFaVCE>E+)GY2cm! zt2mEUd5*wu68UWqGEwLwWF1MfDWClXiW8TJf`FE@OBi^R&wL&s83;+f)1!h21B7N{ zR4yVE6~$JMa~XZ`nk#s%CPsdyt9Y_O5;l;uGP&ZyvH3}g%IMhn`@WtJn%}UY4BAlB za>)89imak)CPBv~bR*(0AeMZDq=E>LwNWH#nc~DHG;0pYut@@!Bnb&T2h|V=*&t|b zqNo-|;S6CgxW?~?k)HupGDS$@1U)LzY2G4q+UVoQQDK?n#sK9S!*QB*pfi)^%!q7V^BsHJJBts!eUAVLldqA&o!tu2wi z&l?CrL9YBXh#a!Hfxo+jSKUIfbQH@tK0mLCrdjuSH6J{`VdEGIkPwF+L2Dh=nnnnS zLmz!~fy8$R;slX|NLrc5St9YaQT1nty*fz($<7+63X#`FE|id^0&!!7C}@)(9o$qm z7hg#lD~s6UCFI;JdSMQ?`VNE|MsWm+Wm?;Bqlr1(-9^OWD~VfMB6I@m@e(7KzHv`q z97O?96b$}Yj==r!OZ_?=?b}a^fn$J9r%e>c2w@NhP5jml0J1D2Gz$?2D5{MR5mC?~ zjzhfqb)q0ZmJJXfX?Y+a_I%<_4OvzYLP6FBAE}yQQkXf1*J={FK8mc88(F}t%;Py* zB%w@k;t~L%6QCI;W^oRCyoA?k9?f623H{c<*YlwH4I9S_0^^Q@s@o{4MI7v+Xn8tL zjl^#uWDT!z6C@q0^byRFGZ-W1QB4~(olbj~*xg0wMF`pmNk`6^MBX~B-S-B*hT6te zpetOnT%o!BHbO`wafFBrG)t%Bxwy3@?D108-fJ~6i*rZv7n)4m36Jww9w@(IV_+Ac z=E}rz9idE-;G^5Kgnol4@CcF!f*P?<@ps-N^lNCEi8A^uQ9A;^gPxxxiQ6Q89Y|2* zgs78{$oXUWNW;o!!fiJQ{d~@dATlWdXOjiKg4M>s3DcGY+a@vv%d{43nRC z^A%yt|D(P8H4e9qcXJJQYrlW`mttTAsNa5%^5iAF#tK@_MmCBFG-7HbULDn%By_jY ztWjhUBkLuSmP32%IkW+2B8oaf7&M7vpU?@AiY1_lvsuL+FA@1ZB5Yt6XHktjRtXfL0(HD3#OXM;EY+B0{#X6$Oz96wN{iLC|rDjM1U;3u8VCymi!b*e~e2 z3H~SytN>8qTNI>@(3XDHVBglS|FaE)3bwJN9Y7}JQqnVA*%{%WuErd`xqq?Az8?Bow0LIQ`@+T zVdasECAvW)L_t6l?w}hsLC2-t+C@=w7?Pm5dyS;iK~c=Ed$LsMY(Xbav)#lhj3WfJ zoEPBQvAW9d$t)yyk68djz?-fGi23 zpb3(VY|leb!@2!7PJIVeH&AR9uel6BeXZ+%-P#hCJxZtJ5_Eh3iW8S8%$#HM^{*uW zW^oRya+5=j}s+x>B71>D*aW9Od6 zYp&3)Hqpk4$aj)bF>!kPsKzYjgpZahksx7@U8Li6uQ6wp2tyCe7(-SZOx3_^>>?W) zz>xVJV`4T0NM>=4;>4xCY+M{vyJoi4HKCys5IO;gm!O)bs4o71R(*xtmDkz5^<4sI ziN@`>P|Z__K+f7bo7K!@$3Yc9N zCW&Lbc7S49BuR)Q>qK!(d*eE)J&IzV!f!W-+9AYk468_zBq&BMdtSrl_aGs;wIw>9 zn?2~z>CRcx=o!HG8rf&<)-`;ufm>TfHpU2@pnIR+{OxuWgvuveQE)BdkeRI3wykj^_wbo<~kG= zAtZD?kF)tES}u<)*9fcEQS}O8;3DD>-8@CG{T7|wcadThW3)uO-Gmt0t!<*vBMyV1 z^Lx;cfJ_hoW9ObmQcKxGQ*0I8C}ae_*FZN4Bwm8Qy$+B)hyx9g8_%qPVdbf9T*V$QA&CGzf0~Zx(5^3IRVL7L zBUvAYmCqDAbsa)h@ZBn^ZeiMa!gh;}qm#7T$T<@sWDo+QJWK4lcr6tOaJPPds_MjX zfSxO&2op(ChR*LnLrP6?DvWg0r6VqMf=sZziqPvadfTM%y+)=$DgWBW)lA^Mu18W! z=sBCvc^_|kl`wGNj$c)^h>_C#0c+s3nuMKzjy*D>-lnYBsXOM1>Q z3Mg?Mx4MB8#Dur6(%HC%l0Snwat?$*AR~-%)WTW9-9`MZC8Uml@9q*b-b0dP+gN9k;M_IAbNSHS-Q{(?o184ZQHE|sy*KI zt;z_AvX{kEY&G-g&SsT3s8U~f8#PzKYi{B<93p=cXKNW}vx-@qV|($(nY$=XT%xhE zNYZW-Zm*z@OrVcW5=t8S#1qK2MQQ#Q#n{4E#P!WHqP+0SLa~Y%IUuGRg!j#C~$_(?|yLk^5y%Y0}!`=@*CM|Svqw}eRW~x9MH88&So_eZf`8mi{9Vt z@lvJ)jg>_dTg}q3>Gy7sS49>oEvL)hEY1-nGInvAPGgnk?hWi>g}`egWO3wb-chLk z;2VjSt00*ZMBWaGl1D2|;W-;DZlCYt{X}Isk+d99vx=%lM3I6B8wBlb)LaR-xs6P~ zF!`0H%7Tf%m(koS!?$1X&p-eCv7d(m-O*m#xY{+XbcNuulnDy@g?pG1^ag>x*Fb5h zK(j9p?09Z>{@$Yu&SsVT+%t?-o+I?P2;Ez#<_wxSiL-eHedH|msi&xJ{usZ0gOOw3 zVn6iJIfz4IRYxyg#BFYnpZu)I1B=_2`yS%u%ZTTnf1c*rcM?Uj2y2@V?4a4>DE2I- zTm<0`mmj;wx}SdjmyfLkid$QPo>j7RdS+O8Jh~=3bb?Ia)>!#a7XZC+Kp_)+YPx&* z!k+I}Y?WMo3c)V2R-(4{21YW1kZz(VDvDL4ar+AP=o3`yH;#34he60TvJ&BYE}lq8 zh*(`+y=(i`)m2n?1FbWLh!a$+LL3Q%tb<`8LTRY{22p^c_)kwyAIT#{mIp|)Y_ONG zNrmNmjckM;HsyogX%;FsF#xg;>LFBDaIr}`;=p?eLW6wQD?A2)3 zmj}L~qo5Wi&`v##l+!7n`6Y4c+*ie|Tepy9nKNh3^tGLxokf;q-rK$;it}F-l9odo zyM#JANuuc}*67gr4T7WiA15Zr@&Ku+PXn%W?hM^g-;4d3W&~L#Pze#? zUgpXeo1(t*PG4-029ar2PEt!*T+zE;58!N88Ncu>zPpY+{sJ9$lj`#2EIvs;$3O9} z`vR-pvgkoer2jnP$g=R%3iL+&so)h`?VAR6&s9j2y-F9~Sx2+Y?r~4slt(&s>&*-T z*@9DH<{VKR5Yy$M3YR}c%GLDy!ZG+3X&mEClBPhK4=`PD)=y@rdGn)ki!`$Ie!oHz#PMH~kt zN!(ZY^Qd5Tcb%tZF3|G5KUcGWq0}K)cT2RdZvg){JC_@qpx|sWa%mVneDHWp`Vs7c zr5n5^{fN=t^yg!Y6Dz>#^$xkQuE6(Wb3I}3(u9YLQCsIV=SQG*k5f!6Ow)YpW?vwf z27nU_kILQM9Vb?RRPffFMWGa}-CKt$#ZMb@x zlt&QxTsNcHYzKYc9|sII2z-=Lw6sHyQ%o#Olh3K-bLwMZ`cn+W0_->c>ABYKtzoeL zz;Sk}NZSvY>Zx?=HUFu=djdOiA7jO1f{-mW?p%bvVo*e4e4^sf(Pz7jj zZ!kV7`YMCc6124M{pDh5v1$@qByxze{8qNh=#4*oAAl!6_ay+fuYVr^-x(~+sM}@6 z&OevYrAW^mhfhie@a7+Wd+(n8!`~5<(-l7b%by_*s@Xk$`LBNyKM2uP1wRP+-&fwd zXCke+_)2md`u+P16vN76pYz zy|@=$@3}#F^y10SeTnVs-)G~->VaUg7wNXO^z##+`K!GC-9Nw&LSFbQFW!}ISo8|? zROqm`fD<|ag^>!dSJ!v_t(%BNRmw9@(eYe9{*`<06gvHhzj@?CI12a6V-ULf)n88}wUk)_ zD;H)X*vbv|-k+1uE2$tF&LV5?SEDE?8K0F|$Y>O-AOQLC+Q7PMO)*nNQQ$Tq5eM zJ@TpMRCv%G#jUo7u68X(t9^8V>q+Uey@62}vVLuwchCF>{@JhoBES7BHo4L^zx{7qT=~09pP$UOlEdCR{?uF zLQSae223u<+<2ptH5@&4(43@!&)s5yRQQJlQoFbJv~%*J$M%Xz`BZoMWtRja<$j)} z*`Gy7DpBYY_$}%;e~4nMkKAhG=IdWe(mfKX5YvFS*OaG$F>vUfiuO1%R{Ip>3%~a5 zBS&UF-!)g2F@q~VzQyLoZ9e{~7c=3fOUk4#h;nvOwQjmLZSyE16=FK;>fL_b6CT>G<3nUS2uiHkn{?>LH*{5mTBB#B{&wb&u0Q|{!{)l!b!1eY_ zb?r~Dkkj4-==<${>G$K<%fV^#;X&bX>u;*uO=qVgc<$m;{KA-Se-|&z_XTqKayc{M&%N+5nmaoO0=+kW*!@$jXP-F>aANvi zd>8{f_3YJNu;`B4Jz)R<002ovPDHLk FV1jFlOI`o~ delta 6000 zcmV-$7mw(VG4n2vIDZ!DyWuCA(nu*n`aUrP?>u|sKRz1CVA zY*vZ=CDK|5HWFY6wqYZZjU-Z_K!K3tixW5ooB%O`K#MrC5dn#u=u==sK>!P|g9LG8 zdmycM$6DqPaP>f2(OgIXBt@ZEe+fyq5Cn-Na3PLJ;*iGO|4ZPz=w=Z~kdX@K=(TP$ zeEBordmtnTf=nXI5V!=LTlhVjox49`;^+RoaNwp#KxgsQBn}#gN)>?5{qooGf)GuS z@q&>5bN#&&jepy?@wKE}`v^(w;56=0diw95Xq^4on-*rZU<2sp)~#xlCX_y zZ&7*rtH-)ezxc(0cJVkjGb=NgwHFAy4w2UbK_Uu0 z1W7|wEru`rJeB$!Q4r9zcL)QQ;qxyeh&qBO?cPyF2!8_v)k3dbL68+>OF7Oo1`r30 z{C^xY_?e&k+qv*x`dgnl@wl>TBFG9P5o*yq@i_b8c9wCw9rWU4x=bqGy;1a8LXI0HRVQvjS!z%q@Uf&`&(35IY3U22tn} zc{`kZq(SJ#Nnklwgd|STqAGsp4x!yc8$I552_VTQUqDAz01!|LBOvP_iYS6e0))ML z2znVofWY^Nyf(6|;JXfz-b0K+gg8Q}PC#=NNq;Q>5mKNNg#iFgbBW>!A0QJxq*kEY zbJ3LavAVsJE0)t-8aO`b{PrUV1q#E@f>1y**70^WaT}Y+riN@DU(EuygQ}j~LLEZ^ z65`M$=&qrd69@vtp@%j!OXArCae|P9i0Uwry+q<}p=i$$yDgFglI>McWFohRRH`D0 zC4b`fGEvZ@ICON=xAB)>O^nKPE_6|;;&wav`G4|-B7ET&5tS-VbBWgcZzkD!-7Hd` z`>kX7*z7(hMQ8EVq`ka|HCja~Ore#gaT+%uRM9JCs0`EHdIwdQ#@Sg!SbQ~cnoERs zfHhkEvGa|hfG7%1JijAz0N?Ks#W8}Q6MqLCyzVvtk|ZIhCPEw_D;9zf5d}VR9OAYX zh=Kq~(m?=GEdmL#>k<1+BuPdPWF+-?n%__QG6Csk5u-AlK2)DoaJ!xSoV{@}VP@l= z1gdUOn!JeH?GQR1vZPQb&tlYOaP3W!P@+D)xQHmn=fBdw=5j z9g76UzKx<;$cjlE>>#T}e7i~FbrB>Lw|yH#4YT?YjPiN(@+B0*0#(EB?GQUV2wDY# z9)hSL6$~PGjqc8SN1j7y2e{o1anQi+cG54_4)PUmZ#43Ap`EUbOd*a#Hcun;el*wT z^LZP?H9A}GAP6E!93ezHs;S|-4u4K_32U^P_jkLUBh5ijC1O83@%)bL0+hlqaoj?X z$4T(etSLgTO%%8UNd!TYSWxh`-y-yysH%ZH^gK~70?$V)j*-MY60Zd$$WlV&CnQqw z*gh<@16=k5Y>lSE&pz85jdTU=_G#OTdB39~Guxt4rMHn4{4w6^b}D{k%@WW@w! z@B3@b|7PL_I+fZiPGkPd?oLHWCdv5dynCG)deRiaAE;Y@wP%NPj|%q*Y0}HoeUSBx8!uU7=8{BPc3K5)-*DPJ0C*>Y$kQ zBY&Z?r4ZTy-K}lRkzqnRV0-B{nqJCRcz0_XHqySH+aBmwo;&ibfYWmTx7(popTq4e zqi92Ttv32l1z9N*1|8zqOD$NX3UqSijXVz_Y-3fXQ1l{Z6=cPrV1JDeMlP+z-%sr2 zx3R{bp->oN<$r%Ek!w#;9Gb<{D+rQ_CCdnjkcPB^kVbAX9|hjdzt5vSh*23Q79euh zNdg_A*Fn~c2teYl6DARoTEOjWA;~7&x86dKBoeWRK!jQtf+RwcW!&~X0=EM}lSHYo z{qCPJF?FFr5!wO1>mVvsBt=H4 z&CuJtg>))n(OoEW)ZPc-L*at1p!gGjiy@!zC*9OgRB(LMS;%FyClAk zEE}miH5KqT!7tM3bude#2m*BNZG5kTVbur&4^!O}KBNkeWPcOQh)1>7&dm~}S{(Gi z?cBq#%1D)2BvBv=Iv`p|)(iwq?0fHEx3*C<9obTFJ9hzSt)~9WX)a+}L-@W!;Cld6 z>T{GPFS7BMUriwOy=Ltx;%gE@(~u|^Ova{a%-^^}5`!Sdn1)0WizG43U3rSN zyPLFnU6NR&pns;8q30i+EziFE2RZvbuGQ#A=AMkoG=fyb@2+9hFX1$Ap_yZdav68$ z&D;t&%_T-IK8xE~rq}48j#Q9#lV~wSpU-(r?mA=z zK@icjBKF2xsD&bu)Ff;yplCJ1z(I&ZG~*n>*4y|yKSGQZ^r0%fUI$|6b+?E@mpD9V z0e|Iek{L!WK8x=B~x7S2i+|9* zMHKjiQ3PUYx)n7-H)d$Ad=H~C&G>MtU}IA?0H&{8+4FeYrz<8SX^O{ryUk#kH_UG_x#TbA3MN0*<|nBoUC#uAY>fl@1Ch|B2Za|mhyks!?k zsyb@1Mifk!q#$*(h;A11G-|ej_bWiZ$=CGK zp-Gp$u{$}l&#Vu?@WfTz)_)30`2tbcMvis}-H@QYl;5}2>*gU|<_2E=OzPji|L4~S z%)ea9c~xvT9i-DieM-nanSF?(O$o{ryVexot|y#aywnvHCY9e&zyRco7T=^ac`<+Ht;IJu-;p|Ms5%_|?Drk0_Z2-}=wL3#2Y! z?d~Qe(|@4dbto4eTxr+Cf*@H)a)jqPxI#ig#LCLbefzJhte`mSsQw5-oS>LB;z&S{ zG|)}E)UGcAc?$>hv?*$>h^Kbt( zzyEt*%cFru2}-4odhS`og2wRqUl7h+{Je1I&K)F4;{5sZ1AV8arjR6w_qOJQ%FHW* zs1{I1=1_*lNK_5k96B)mULIgK^y^On>-9<8?mXtmaJs{`i~CuD{x)+YjpMTzx8Lmd z=YIiw*P&pP(X0sq&mnNPkt7kP+eGsnf=ECq%|O(qa_$Ph{U86`K!uF1>->X%`p>cfXYMuhNW|^%o?xmlyL3@=Tx{B7cN?!|5aAw3crSaD$9Q_Gh^=UeUk*4QaeQ zdii-gXANugC46Ut#@%bVLT3L*f99Y900$J{41>tZ!ax7AM}Iv)UJ;b#+T);+$NZV# zvwijciW=Ffk;r={)w9=7Eh9bd>zj>{RqFI-1|i+y%Oa2{4v0y|Pz&{Re`0qNDSz9q z*bmorbAk6CpW$c_Ar(Sai{^Gaxw-DIw8_H2%(Oe}OUPD@!q8IyxXl(qC?i`+-Z#r> zSL$==_VBJ%QFUV=*_0_u7Kv=HUB_wPreKu!@&$caz%!g2{i`3+Fi?QO-9IxJmWA%f;2iJZCur@4fvI0HA$($7wFX~3i( zR(d`96W+x8&cFI>@`r!+9@R#T&E2rERxoK)H~EE6T%bNX!NS|O554x%M`!rhFa7QV zd1L5Y`E+Cp*I7p^m+%}2?R$Nsv2-9)2ppPH{va_{9%8ok z6e~MxAM{in8cuBivWlYEYk#8_YKTe&89xsJ?^oNd>7~5S2aWTi2ieDAZI2^PtpFKA zcU%V{c2E@qLETIJI?bg+eSTV2_Tgdn6GLNkJ(ruCcbFI&`=F=u&~R!OkfnbW^&ah( zObLNrW3Te3KZCd*?|1IQgfLDXTN3y{H~01;JGa%bsB4Q4S!Lo9?0B1YFNK{ z|MctooqJSpY6a-u<x*DWxAgG zL`4Cowg3Q)ohrSBb>J`Zw!%oAlD%=Nw`v|HUK4)+J78)$uZcfks6YMr7~|9mu(IG& z7)b@b9~)~46Q{kwLw~}MrSY2m15nfB4E5OwI&a?|Ac7eItj|6wPj`QuS^+Y_o4cDr z8M-@n4poW|8w#3C#Z+l_{Q<#OOqGH*`1L$4%)cKG#05O=C>GL;W~Ubne1078KuO@E zjEboqdYqv?J3+CaP%J2qh3U`mKrFz1^PjbKckVoh;eX<|Fn?a5=Y@>-y-3_|{xgC1 z3;uCYg8cUZ`pd#}>xX%V{u;rJwdB}-eg1#__JHH;ZLKppCJa;t_5Y^NVdY|3v1$^V zBvOcd_wD>Gqu2lV768wD>azfBEqosU&puj~u|7M&$fXzZ>oR0*KW?0B-}t2jK(mJP z>j2*R<8SXhvwwGZF=|1R`Sfpm`vXms$+}rYFHR0@-)6-c?bc>qC%CY%0HgxUa8zaJ zzXsCi;KFlz`vsfpx2V<6Q<}V(mXPgMZ)b1HLI<@xi#0rj+gU}aP2zSp(9L2lzzqGz zzyZPbfwwIY1^qOc2)J_4>7T&(i zrH{@G4DfzY02~y4Hpavyb>Kb2{lDPV|2kM!qga~x7^+rad+9G2p1g|hIutK{<&jP` zKP=quw}R!&^tSCqR&Oyf1}}YdhS$FLBR>Auo<7ke`mbGC z@N*@2<9~b0C`u~F*~=!TRmm-qONa8zb7+MU?3S60oc|lNHsPeEeJ3oiMiw z)@T*oEYjV28@IDcXl<`k z9pM z6pN_`uZ`$jfAbC->-YHBCq9!4Kig7f*J({T_6~}grfai4XE+^%BzgSu+h;gB&Qifo zIL;K{3CEcNJmEM~fF~Sh3h;#EOaY#7oGHK)jxz;#!f~bmPdLsL;0ec>0zBb3Q-CKN eXA1Cyj63@lVA>jwS-g^e+=FzJx_qI;38qZ#dJ z?VIYvSvT4uY6mH^W@BbXm*`Bcx#mYXdlBzl(xfJ-_iEvs56G40o_n4L&-eUz&OKK` zDFugJO4d67&icXyz&OIA{_hGZ_~~b#Qvl?Xk3Z72Y_aTVcu)5_S*Cxe5nyZOCOUY> zvtk+d)gHR3+=|2dURzaQoVB4S0m#uMB&zFZ-}p?<`+egxRE{oTE*#Y*IF9iMMU*88 z$8P#$=sF~886EU*M54M5UauE>Z6Qp}{+kkrV>fIL5Flh&&>a0JMgRan=E6}50Ny_W zcszO=0AQ+6v|j&aT`hm{dcC+eHi;w0b&Zu{0A#%H+ky*seLnyI*lSDm?(v9&*4EYn z05SQ8R2u-G?Nq(4fvWIDpuQBf2537~kBIMnx`{0R008cdO(NpEZ&>4V^e1Bq=)TfL zmxuD_rf})@@#PT#0FE4Q$vfnCU+JPwy98&2M2;M9dEuZr`k{XbzE$8%s+pMCz0Q=z3yGj=I$M)&4+gZ0H#9`j7|h70Mu@EqRL^@%D9>i z0H{4403JO48ZN-jsMN9Unu}m>9lL_2_8@WsR^QDLs`a^vo>f`fT!=FW~_ADb$66VCIJ9};JoHb zw4~hkkN8l#)w$yH>IlKn7Xbi{9@vJX2exU(%kI0{?_JmWDFC#cZYXN#efBvyx zA62?NseONhLVA70hO&(5fuj$CB${KFdU~lk*QP02j7YT#20s;VZv^Hh*Zncrlw$vkE*}FV6yWL@2cJ3r+QkLCx#ky~DKOV9knU`$v5E;N(%>_&QVYd4ODv-+bY# zoMnIf;=`hXa5Wtw={texJi8Of(HFwM3t$_5ESzz;02qf0fN_dF6q-f5tC5;b0?I5V z06>3fNouVYPdvq<5(5CznYOdYdAV4%000oX&6;I23j!q3f|)tKd-pQKrvS#`X&~e9 z5rA>H02pW0i@?@*>Zr|HhH^;+04&84FbSntRAPvv&H#{}8$+vg!!ZawvH+M(0{pY{ z88$~n{&)PG^+&ffFjp#Qw^=bUHLHUQj!}Q;G6JZiH};M#oAs=kV-P$IWE`FaFb)?0 z<8T2mjpOK60D5i=>3Sqftrt1=2`-*FM(s9hRxBL-$(se( ztYtusZv}OL*sNtaSD+@L)Bty!TxbF)EzLa}Y!EGwM2jKLjjWqf7(%Htg;zld03?%75l)Ui7J0e#&!8VXBCk1@4p4#Q~-0-PTzR-|M~dgUoo86 z{|W&BBUj^>&Yi^V(SNdhZzA&q0BW{W!Z#Io?(;VXe={sL7SOhW+uPey{~2WVQR>d- zJrn@x?Cdl=i1qZ%I{aM#qkd0LI}0 lU>q(0#^C~B94-LH`47q_OIK7F7DWI6002ovPDHLkV1f|7>YM-o delta 1584 zcmV-02G9BY4EYR@IRPt?IwyaHQgpOi-t>j6Z!A<8>jwS-!p7cMm=t8b=w4*&XhsXI zeN&w{>qc8d?I2~=Y)of#iO%Gjm>=crMZ9;3rY5QPYT-T~kSph&d!7f+_nh-Q=bkI$ zoP#hfMVsvavAK`{436-$@B6$ee(~j3902?LvrjdxTPO$WKGeKTBU69S46w6&8y~pu zS+kD&MmOJ9YQ^zGZ>`HQVq+*s0CHpriOL$@J2sQ`e(%@}mm^D<3q>?>j?f>WfVwQ< z*w3F2-hyN;;R91!k*KVJ*XzYWTM(18|E2`u*bkcn3<&DxG@%`Z2mk=sTqwc;!25?E z&qnS608C|3b=1FGQ_X+8UN0VwPT<68O?@SFfQ|Kjmv`mPANm0R2W_d*Jr;KG>gs9$ zV5X@-r3?Vja=unmM-?at)Rux`fR^*M2>TwT7qR6Z0Kmi1350!*bnARVdoq@QuIrtA zc`AQt3YT6!wmc&Mz=_jMIj8)t>z&+bm*6au*oo6kuk19T9jbo-+&8`{cu%;{kv}`DAc;1A3LfuA_iB723kMtGj1AO66+8fTav-{rqdPeYEzarXE=^bPv} z0Lq95fXC1Nh9sH+0Ch*J(BfqB)I zXi1sx8}^}kr*qBcl^KH276AZG9@&MHM|P=&*W3@(-#c&iaR6w!P*>2@yYe|XvIGD~ zpH;d%seONhd`5lQmXeI+fzSp)63wyp?jEkJwQ2A!Pd{2N)G?(q3#H{k9qaP+^Jpxo zwyB6qj>cnE6 zl^H;3Gkped_Y83Wm=4N0MKB$t{R2H%GVDHax&)N*A> zSXnj|2;t7pUdjSAM98=E^G)>%LCNdgJwv?iXw{l^`-Xk^xbY-)zQ*Kz9zg5PPsi18 zjHT}crn7PqlNB{;$69KeeZamd~xlxOzhz(}lF+i)Uo|{bqN-QP- zKyiOjDprdpUSKgA0|3^MwzEjQUKDyNI2+7vv#u&M3j!q3f|)tmy?dRZ7{K6A8fb86 z1~51z0E4scAh7vd4YyfKP%4Q4fTdUhCZQOM(HO$1GXSjn_TYNW5IUhn767wJz|`z~ zMwz25_d9-K^U*8~%$5q;ZB~p=&T3$S&5(j@U1ZrOxO(vvx7)0%d?Ba;f6UkLKuUSc3mI2p{S*OUk!W;PC%3xlx!q>feRSDvRyH#i zS~c23VVU_R{R{vLg=H2B%PbO&W?X-l?-T2QUHRxe_$K|B<97beoByxJPyUMG%;7f} z0O%Qww_k3=y^()b+1|$H830u6D2H#-|I+904E&~>Z$?1f3T|y}P5oz(*{7*H+YfL6 ztfQktcPBQ}w$Y(?0S1S50u2rcz~GPo3=Rpv;E(_e4hg{EkN^x03Bcfx01PA!3Bcfx i01OTZz~GPo49*7*BHm0000mZ>;q| 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 KDpo64h5ip9$_v~8 literal 5250 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 delta 392 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 bugCuf)!lwmQxv^|00000NkvXXu0mjfQ=gT6 delta 6105 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 f;8;1uFXI~vA(`{00000NkvXXu0mjfDVfnH diff --git a/src/main/resources/assets/aether/textures/entity/mobs/moa/skins/crookjaw_purple/crookjaw_purple_emissive.png b/src/main/resources/assets/aether/textures/entity/mobs/moa/skins/crookjaw_purple/crookjaw_purple_emissive.png index 9f71ad61c4996c092d65672d281652b64aa2e53a..c7acf7452f54961de170c76f6dc3343ed790b70c 100644 GIT binary patch delta 463 zcmV;=0WkjU1F{5=Mj2+##6yOGf!oqgo|ldP_UZrs0002(2gQz&Un_r;Nkln7zC%mM(&GJMO7lX4nn0RgYz=#{=i z2q~v=RsetgeUjr+J(Yh7ue6lYIV*rR%6pqcj{(U?@jV|Ma8>|Um%`}v=D>U4Ansxz zcfe@@1uSL1SsY5a18f2iTyeTtvD#8j!z=(?tUDeeQclAt0BiN!l34KTT2fBOC;-A< zB!{&7rJRmQz+NlC^-|}3=F&*SBp{TF3@!jjxfF|-1Z1@m)cAj1%B5JuB%lXNz>EUG zee(_0iy0kofqzj4u^gDufq)|Z-3D710n5xvbpk*DG_z7AKz32@ixA1o zN|gY~d{El&HKNA&*B01Ar?xy(r(oQ)4l{80XmG_1=r98|1T7=bu4@bQsZ&=T$~W4F z9=ihYZprcZqloGXK%9R%%2f>PNC2($S#H$ylcW#l>yZGmsLmy|*ZnxPau-GdXvSvl z_2)w?B|Wxs7lr~{q>(Z}4(tcO;wcb-Vgj5205zQ5b~yrY{z*rYi{P^g-UO6`sVO^x zBS6kyq&47+fECzky25_eUm=OT*IRA9ym z5X(#l%~*l<-})_@vI4FOfB^U>fHB__{-^>V73j~a9+y?^8?B2OLsXGc`(N_kG{9w@ n0w4eaAOHd&00Q900NeHgH_*I{ryeGg00000NkvXXu0mjfoZGX% diff --git a/src/main/resources/assets/aether/textures/entity/mobs/moa/skins/gharrix_red/gharrix_red.png b/src/main/resources/assets/aether/textures/entity/mobs/moa/skins/gharrix_red/gharrix_red.png index 2f1d5d1e4cf2108baf6f97d5eef3ac1e5fd8db15..3a7da2d4b743ebfb4628d26c846eed9c2ca1d9ca 100644 GIT binary patch delta 5816 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 a4qw<7?ypX_l{>irq|(#X&t;ucLK6U5{%^AY delta 245 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 R3cSXGXsSI_tx&NE{~!7imu3I} literal 6712 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 KuZ~f5c=A7Jxgq5M diff --git a/src/main/resources/assets/aether/textures/entity/mobs/moa/skins/sentry_moa/sentry_moa_emissive.png b/src/main/resources/assets/aether/textures/entity/mobs/moa/skins/sentry_moa/sentry_moa_emissive.png index 488d1802f9cbcbc8436da03b4f0e331219a6e697..4cf7e3dee773abc425c3d7dcedb88eb68ed91fc3 100644 GIT binary patch delta 587 zcmV-R0<`^^1-Au|MrI;cx*1WlFJ!_vYso%w&nsWQC|~Dbh@rRGtMMtq({OCwr_T37J(-gc;j(T9%WS&D-5$p{~Be9K_2M>LST?bvcOu1 zHHKL{Nek{>OiB#$2n)O`xe-EEO5q#7tN;wN2n%R<^$X4g{5*+3-|t1>b$HN=1R6}}+-olFyvr^iodBT)O?x=BtOBqGYLWoJ+5#tlVGO-M`mYqj z8tB@#n^Qn{z&{h9p^L67=6@9cURvM?2KtBzoqPc>$hba-KpqqUrdtx%5CmYG-e5@O zG}tS={92i@`CVbRTlf_K7<-K0)xf76A{Y4iBLZy?lfdf=7@+}SURJ;w;aVW(`TigQ z;{;|ZKoSTMI2d=PGY4EU6CeOYAG*is3mmPIHpfK(r!#QE1)aWtu9VVC3fKyc9~eW( zoIv-lS~x>9;6Gw_VHeO&fPc_}tUjM>RsooSiX;HAw!jHs451Z>e@ZdTKvUPvk^-gy z{+R#`Q#4JntN`%R0v9ka7hKSpE&v7-zMn&28We%4ZwUq=2*5VI$H>TUf$Z*Jaq2Wy zg8*fd3ZzqkyIrk2SVt=rWt$G96?p$>^8-G=F!*0YMM9YYrLGtm2{sqVE2*xt&wz*A v?UHL;@Ih$7JS2f6kOY!I5=a6I3t0ONXA+DI7UfF@00000NkvXXu0mjf7vt$6 diff --git a/src/main/resources/assets/aether/textures/entity/mobs/moa/skins/tivalier_green/tivalier_green.png b/src/main/resources/assets/aether/textures/entity/mobs/moa/skins/tivalier_green/tivalier_green.png index a0e363de46c2f1e799b26625e97910c5f50947c5..6ea5268f5c6e2128263ab86b0eabd160fd7ed829 100644 GIT binary patch delta 5839 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 X8TW;k9e0fEAnb*ZRhFrMzYF{yfBIyU delta 5598 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 TCk|=@00000NkvXXu0mjfcYj$6 delta 5570 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 Ef)dk|Hvj+t delta 1384 zcmV-u1(*8j3XltsIe$V)L_t(|ob8)YXj4}h$A3riGO5&78=I0fShC{F1VQq$Fc=8E zpx^{yC7K6aT&gShuo<6LWAVj8_p%nr%tVL;2M%;7i|AkveGZO*!&1n?f7OiZwA=T585SXYD!0xNSd9+xwP0szjI7S4u3!eW!w z1r-ClgPB5s13f+B+rB=b3t=PD@KeA%a5@^50He{UX`|HH(jp!_c);zucX76~Y{=0M z8^8k$$K!G|8h_=7=)YWy$4#5hW(oyn3I&GGoM9t-fQE|!_6Gv8t)l~gZ98_*x@8Mr zeenmy+xPkTp9|z?XZicZ3jkhDPA>cXon&&uj^_VE!%YFje4b)HPjhQ4FDEA{=JPll zhkrmONg zk%&AuFaW^QOorsOYXAg}9_6F1E&$FC4jRHxn1}eJr$>&ZQkML&eod3x+S(YsbcyqW zg8=9wUVmpxb29+v1_t>0Kh*n2Bp*G0uYynhThxO=kpnz zKOB!U8jbRXvs{eF`6d*Ct}c8&AHUzbSM~E1)qmjt`26^B`Km(I?COz+#D=~k9C5As z#!i=u*pMKT_(}S;$IGs7FIDpZyxrYA&19gfi~0F^UKV;O-oDTL`~{{<9>Ck(tpuR+zw=J-}EhC6Xf}0^qx2e-Zldd;O9aOQnQ9_b={z{kYxjW@&7osDCY{ z#Q@LJX?l(U>;=+vdcFFk_vP;@x3?J61n{m+CDXZ_8s&A&x)g!}{rx0IMoho2!hB3k z0|Wj2X5LOw15_#4=BQGz%~1ldIZ6OFM+v~@n3e@p$^cXiou_EDh9G z?yOv+_iLJEud3ORG7q4y>RCyr*MF-DN;O0Ufi|a10MF8CtL&&N8|;Mg05-?b8xBiA zT#v zZKc%lHD4hrMgJsYTVY{4napLgf`v^ZqGac?QN93|unPEx%Li2&F zG16*@+v73b3eIKsg4!)q6V!6B%~3(1%~1ldIZ6OFM+v~@C;`|UB>8M(A8(;bQ@TK$rA%HBEqf9B`>IF#xaM zf5gTDH)cOw>p&1l+~9u~O@&Hc4G6^1tEc(UEUaj|*vOlIHX8FlC>a`1y*vyX)NNCb ztRMDiI+$~aoUuW$OGa5;v%Z2zqnCcp;GX^Sef*E=_wdhj?2)EzRpY zuVDAM5<}^%JT8sgCa~BUjO^Itd24fZ2xCs~o)YNDWMvK0`!}Z!^!K^h<%GMe_bD zS=)#rd756*qGKb)3$stc(7Y)q2w#o<9{XwbPZ7EPsT9UPMf?2~mJ77;pgt$|xcGRQ zknOp_;bEo>64OIzcs8)OIQE@I9gPzYL%dp?pZrS?)aGLPJ39%IJZqUTlRds8_FNTI zW}LF{CA9HN&$u$y;t$>{XdHxYz~S*OEBL{)edCvVpODHSl z;~KE5AVqkqO@);>kcB!*Sk< z8Mx`-u9Nw|iF=m@mUb4tq}?L_p4Di!qQ91_?~HQeFh&aCdkQ@wY$50l@g^29_VdDawd#Y^IWIg zW#5#PSh%S{hxhmWIVI9|m-reL*Hs=M9{*h&!xk=5HW-CKIuX>9cx%!X9a?#QB zZ*Pv|xjvG}=M@mBG^t@{qW>Iw-feOyw4FhEHL;$m{a%*u63}aa<~_tlLkrO>E+HXY za2$$qylqM{6U+TsZ`+=ex=*3%<7T#k|4}IBPjFjj=!Z&Wa+{KX1b}L~yH!!+u(g1K zwKZ2jSr>YB1fw+|!w#_~WMOHkqN?`gsj9SeJdz;x@_F9Zm+9%wD43k@q8WKK zSgtu@foRdMb9-R@_;ulm!WO#W+b=Yt*-8^1%)rQ~;I{-qRW^I!CA4*Pc%e{X9C_lefMtXX1REE23Ep*bRUie@?F*9UTUiETEB{}ne#Kpyj13~PW7;7slkj=<#_~EF2y+!138yVeGALoXG zsg_QVQZ2VmJkxT$xM~L|nzfK5|CQt) zr7HN~Y(Mi>KDJ09kO3#l*{9WNfU-7Bm9nid6S~6UPu{Vg$^Xv=r!%>!to+@}7uA#7&X zpQFzo3aAp_V1I+1$?x}n(n0o?WWeLzO}QIU2%dl7Mn-ZAwP>o<VcDT!)5+KKqjxT5Zw?lG(^DJ$T31 zXpP{@{E0sh>?b=h;gCfY{eKHz@8s$OLJ-SMOJ?^tH z^|Dv5cMM_AT&=}etgNlC3uM-*3Uh=Xtm*+g1L@ytHAY4~hSD#Pbzk7`C@tG>QG_Nb8o6Vgwv2MPRgI$}(KC`eA%_t>&2_1;O z17)ofhD-50adjQ!_*dW1@NNt30*RM;SYfiS$?QY%C4`g~#;@9l<?#r;xX&H=}s7<*2$lqX0op!E69@N90!sLL3C z`G`O6I<2=M%D@!#dv|yJU=0gZ3`#jWi!qvC+&U9TZv9EKdK&R&=qaHsEpz!{3XB!n zQf|v6F;aqfH91kt;ir_~V=D=fc+BKqQ7jw@_9 z^l~CAGNV)*p=zP78Dp~s^g?)HPVv`7ciH>qDyQJ$Wjf#OqDTfK7o@Te|SE}Z`YJyS)1>B`WjIewcq-N?#Bu10%RUIyn3c3QHQs(ta zGbdEcb7RgafrcuX|L}qW)vQ%!uP6?^ksOl1AyV-InHFaX&rqlY$>zF;sK_ zZBemCw3#HdLAVT~C;-|oFc$!d1LI}<8U z)=1BvC9r>VY)^TWiV3M3sccS!`=+L*o;JtZ?L>?F4qQns8eA`;OqxRRQWvVmC}ghL zFJ6E5FNH8g{G^N82`n|meFkb}n>|N_0Tu-rT}$RR4^nKu+U&s~AA1HxHw3PYa<+m! zBO>?!F9g1!qoa$?{I@lj8TQ)B&JejV7t&YBd#wPva(WU7Rf#ZzZvx>V;c$H-%aHYG zg|~E>*#!p%vAt2t%kAGpDIOWrl_0h-bx_!K*tEi)aa%n*k>XCRzi8d+uE z4|_Q?6C{ZyLdL{nnbb7dq(7ZrZ+^8OB> z^FoWAh&PJn`CjC4nB!2fQVp{2N}tmkYBRlHrKR$7qM*TE;oH!mz^bq_A8)Gub7YEp z%OKB5)YM_L$XgM_5~BCa>K&;W*oP3`y%g>At7ZQ#s7!&jHyyt%bbL}-Sv`j**>XJ4 zxYJLpbmgO0_mf)=W#RZUl6Pz8W0M^5v=8;5DcgScD@aX;!RodQfXx1!SL|G~ouTJi zgI$Muy#=W^p3d_Z{^W2S6m~Ro7i9P4*Z}l#cIW#T9UV-vbFb4=(^Zl4 z`i7AYE=mb~QpB_4P%{P9-q7yDJELnK=MvYx5UF2uU|2((cSBWlWLY(A5GoT*5nXwf zAGe?wzVQ4RfT3^q3Ed!l+}sjySpEF@b7OZGvrE2v_wK;zsxUC<8?x5qvxa5FCo^pg zy`Srt2qq-+H+DxPdEsM5R$NBk!{@GZP8@{qEgg`Y5QL9Css#j zv5vF9w3b+KeroFDuO#W6dA;D5v~RUevH8Tu?(Tn^J@1xEiv0?eWW=r?LY2dew?&V? z8%Wl$kTB+}U^c<1-@D<^`*S+^+o+vwA7H5L2&uo>_w3m-`}9u*$Ea$menmep91lN{ zIXzwH1$7_fS}N-M$|y{8zGngtM3n2DOl3+`?_Ruk5f~08OpODm|AJ-Vj{#!?0%bJi zzGb6>xhsOetFG*>x8D^>p4P7hf}hI%F-o`F+vLxWo^uHu#JPy%`QoGAx}OVUQZnDK zhK8Wq7lM8hAM_8N7p!e6Ij+>7t0PZ^y?&Mt?Q!?~y%1Nc8bDztFu|?QMg1(byN>6) zdg%_Uwjw^^(l*oEs_Gd&`9?&bJ*@NQI`x`j&tn$DNRBgPcUg5M)x!d+J$1#Ax;c>i zZS9ba%P5Ar6+4tHsQOt1IBBmA)8lYBPr+_G3C!|9veMaGWL)KkEOsHZB|KFuzm<2- zNue_mKB!H=)(Sr)Rv6@?zSj_VbMlq$-J2;YD*A0}Z;u=z`5*m%aD4E0=~=f1BL*e6 z&OI%nMp5W!?_&GKpKsPeICqjtnOJ}9>YB(e=ks<;k%NN+2zs-p9=6hPxViN4PosKV zt0@Cpi}UI~9u0r-&!0n`>sj;wm1dZr{UQK?&H%a7pGzMW+z z-X@b)h}_l2gN^HEa#Uv17CwY*hG8nZR?-)nj*d|OJ zc`sold%!Ir{ZVVVmS|*~^Y7_>E^gBjm+vZ(HkxUe$0gpilx~&Cr0Lf2HeVe)9}qwh zCCW7!rLw@&Yo_gwJb0YJH^zWn(J$4v$LKd(9aL|IE{;T)eYPXGQ+#6%ZA;dz$w7XS z?OrEHsIPl<>xQNY39tcW->xH5(6hidPhJ-@XnuK+%x;yg!ac8MVf z*pBgY)QJiR2FsxFMtAW~M8#Dp3+%mO2_2~arnT)`8Ljl=$mso(h>+Vqj(4Z`7bADk zI*E+5e2$bkLAt$T!fu#M*smZj)pNm~(2T6CuG3|~=(Xz{9~Y0ef#5x_uthsrHSu(2e|Xs8Y*X?aC3n8<2&$feev3IF)1+WR$>m-A=WNXKxdh6b SR0{A1A4pFNq1mABl<M|% literal 5141 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/aether/textures/entity/tiles/chest/lootr/treasure_chest_unopened.png b/src/main/resources/assets/aether/textures/entity/tiles/chest/lootr/treasure_chest_unopened.png new file mode 100644 index 0000000000000000000000000000000000000000..944e2689e856226f6fae97bbabccf3c5e45ede48 GIT binary patch literal 2230 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/aether/textures/item/miscellaneous/skyroot_hanging_sign.png b/src/main/resources/assets/aether/textures/item/miscellaneous/skyroot_hanging_sign.png new file mode 100644 index 0000000000000000000000000000000000000000..adac01fa1977626cd68ff6b2cd7cf3874c8d201e GIT binary patch literal 406 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