From f534e84ee43e0d0b8beb3815df88c4ec64da1224 Mon Sep 17 00:00:00 2001 From: bconlon <67203206+bconlon1@users.noreply.github.com> Date: Wed, 21 Dec 2022 11:39:49 -0800 Subject: [PATCH] update!: Port to 1.19.3 (#883) Port to 1.19.3 and cleanup data and recipe packages BREAKING CHANGE: Update to new version; Forge and Vanilla have had numerous breaking changes closes #831 merged from #883 --- build.gradle | 4 +- gradle.properties | 14 +- ... 0fe122e549a2e3aeeca535edbc3649f31121d28e} | 2 +- .../103d9f3f36b01595f1aa5172191e60eff02e6924 | 60 + ... 1742123cf955ee7ecf092ba55decb836aa65bc2c} | 2 +- ... 201562cc5cd18b504c6c9e32f9399e466b1b8cf1} | 2 +- ... 22b50738883487d1ef1961d9e5ff26fe1c21b339} | 2 +- ... 232d7dc54f63e89526c247ba29265b5afad0215c} | 3 +- .../248190968468b9dc2bff1b7b2131784d0d7857d4 | 2 +- ... 27361c9f93b2c74f19780f93ccf4ad52b49349af} | 2 +- .../3b0fe09deeb115c0ed24c9963614d6853a6f89e0 | 5 - .../4a620f08c2dd26e75e94524bbb71add0ad1bc325 | 5 - ... 59eb3dbb5f86130e09b3c62d89b9525ee01cf52d} | 6 +- .../63a021942da19534fa76a96f23a5878ca1d9a371 | 5 - .../735031f3addf80804addae5e3f53249900116f1e | 4 +- .../7448c942dea71deed59a9581856c68cf60b193de | 24 - .../84fe6562c3263bad7911908ec1f7b4c6a74e7999 | 23 - ... 8c612d57ec52f747b666a8d00c73628b9773ba1d} | 2 +- ... 93ef46d8e2a70c25df1652217c68bb7a1c161142} | 50 +- .../9fb1092f32d4fcbf9e061ffd718d4ec689c6c95e | 796 +++++++------ .../c622617f6fabf890a00b9275cd5f643584a8a2c8 | 4 +- .../e4d7f7b05c507d533af44beac9beab0a9fabc42f | 2 - ... e5c5eb35b4ba40351ecb7d9f04c3527f2f5779b0} | 10 +- .../f9f349c9a38c23d71c2b92e2db2e508baf1c26de | 2 - ... feecd04c25d277e5de10185e187a010c8d7228ee} | 2 +- .../resources/assets/aether/lang/en_us.json | 53 +- .../item/boss_doorway_angelic_stone.json | 1 + .../item/boss_doorway_carved_stone.json | 1 + .../item/boss_doorway_hellfire_stone.json | 1 + .../boss_doorway_light_angelic_stone.json | 1 + .../boss_doorway_light_hellfire_stone.json | 1 + .../item/boss_doorway_sentry_stone.json | 1 + .../models/item/locked_angelic_stone.json | 1 + .../models/item/locked_carved_stone.json | 1 + .../models/item/locked_hellfire_stone.json | 1 + .../item/locked_light_angelic_stone.json | 1 + .../item/locked_light_hellfire_stone.json | 1 + .../models/item/locked_sentry_stone.json | 1 + .../models/item/trapped_angelic_stone.json | 1 + .../models/item/trapped_carved_stone.json | 1 + .../models/item/trapped_hellfire_stone.json | 1 + .../item/trapped_light_angelic_stone.json | 1 + .../item/trapped_light_hellfire_stone.json | 1 + .../models/item/trapped_sentry_stone.json | 1 + .../item/treasure_doorway_angelic_stone.json | 1 + .../item/treasure_doorway_carved_stone.json | 1 + .../item/treasure_doorway_hellfire_stone.json | 1 + .../treasure_doorway_light_angelic_stone.json | 1 + ...treasure_doorway_light_hellfire_stone.json | 1 + .../item/treasure_doorway_sentry_stone.json | 1 + .../resources/assets/aether/sounds.json | 2 +- ...ity_and_beyond.json => blue_aercloud.json} | 4 +- .../data/aether/advancements/craft_altar.json | 4 +- ...craft_incubator.json => incubate_moa.json} | 20 +- .../data/aether/advancements/mount_phyg.json | 2 +- .../aether_blocks/golden_log_to_planks.json | 34 - .../aether_blocks/golden_wood_to_planks.json | 34 - ..._to_holystone_brick_wall_stonecutting.json | 34 - .../aether_blocks/pillar_stonecutting.json | 34 - .../pillar_top_stonecutting.json | 34 - .../aether_blocks/stripped_log_to_planks.json | 34 - .../stripped_wood_to_planks.json | 34 - .../recipes/aether_blocks/wood_to_planks.json | 34 - .../aerogel_slab.json | 0 ...rogel_slab_from_aerogel_stonecutting.json} | 4 +- .../aerogel_stairs.json | 0 ...gel_stairs_from_aerogel_stonecutting.json} | 4 +- .../ambrosium_block.json | 0 .../angelic_slab.json | 0 ...slab_from_angelic_stone_stonecutting.json} | 4 +- .../angelic_stairs.json | 0 ...tairs_from_angelic_stone_stonecutting.json | 34 + ...from_light_angelic_stone_stonecutting.json | 0 ...ngelic_stone_from_pillar_stonecutting.json | 0 ...ic_stone_from_pillar_top_stonecutting.json | 0 .../blue_aercloud_freezing.json | 0 .../carved_slab.json | 0 ..._slab_from_carved_stone_stonecutting.json} | 4 +- .../carved_stairs.json | 0 ...tairs_from_carved_stone_stonecutting.json} | 4 +- ...stone_from_sentry_stone_stonecutting.json} | 4 +- .../crystal_leaves_freezing.json | 0 .../enchanted_gravitite_enchanting.json | 0 .../golden_oak_wood.json | 4 +- .../hellfire_slab.json | 0 ...lab_from_hellfire_stone_stonecutting.json} | 4 +- .../hellfire_stairs.json | 0 ...irs_from_hellfire_stone_stonecutting.json} | 4 +- ...rom_light_hellfire_stone_stonecutting.json | 0 .../holystone_brick_slab.json | 0 ...b_from_holystone_bricks_stonecutting.json} | 4 +- ...ick_slab_from_holystone_stonecutting.json} | 4 +- .../holystone_brick_stairs.json | 0 ...s_from_holystone_bricks_stonecutting.json} | 4 +- ...ck_stairs_from_holystone_stonecutting.json | 34 + .../holystone_bricks.json | 0 ...e_bricks_from_holystone_stonecutting.json} | 4 +- .../holystone_slab.json | 0 ...one_slab_from_holystone_stonecutting.json} | 4 +- .../holystone_stairs.json | 0 ...e_stairs_from_holystone_stonecutting.json} | 4 +- .../icestone_slab.json | 0 .../icestone_stairs.json | 0 ...stone_from_angelic_stone_stonecutting.json | 34 + ...one_from_hellfire_stone_stonecutting.json} | 4 +- .../mossy_holystone_slab.json | 0 ...ab_from_mossy_holystone_stonecutting.json} | 4 +- .../mossy_holystone_stairs.json | 0 ...rs_from_mossy_holystone_stonecutting.json} | 4 +- .../mossy_holystone_with_moss.json | 0 .../mossy_holystone_with_vine.json | 0 ...llar_from_angelic_stone_stonecutting.json} | 4 +- .../pillar_from_pillar_top_stonecutting.json | 0 ..._top_from_angelic_stone_stonecutting.json} | 4 +- .../pillar_top_from_pillar_stonecutting.json | 0 .../quicksoil_glass_enchanting.json | 0 ...stone_from_carved_stone_stonecutting.json} | 4 +- .../skyroot_bookshelf.json | 0 .../skyroot_planks.json | 8 +- .../skyroot_slab.json | 0 .../skyroot_stairs.json | 0 .../skyroot_wood.json | 4 +- .../stripped_skyroot_wood.json | 4 +- .../zanite_block.json | 0 .../blue_cape.json | 0 .../chainmail_gloves_repairing.json | 0 .../diamond_gloves.json | 0 .../diamond_gloves_repairing.json | 0 .../golden_dart.json | 14 +- .../golden_dart_shooter.json | 4 +- .../golden_gloves.json | 0 .../golden_gloves_repairing.json | 0 .../golden_pendant.json | 0 .../golden_ring.json | 0 .../gravitite_boots.json | 0 .../gravitite_boots_repairing.json | 0 .../gravitite_chestplate.json | 0 .../gravitite_chestplate_repairing.json | 0 .../gravitite_gloves.json | 0 .../gravitite_gloves_repairing.json | 0 .../gravitite_helmet.json | 0 .../gravitite_helmet_repairing.json | 0 .../gravitite_leggings.json | 0 .../gravitite_leggings_repairing.json | 0 .../gravitite_sword.json | 0 .../gravitite_sword_repairing.json | 0 .../holystone_sword.json | 0 .../holystone_sword_repairing.json | 0 .../iron_gloves.json | 0 .../iron_gloves_repairing.json | 0 .../iron_pendant.json | 0 .../iron_ring.json | 0 .../leather_gloves.json | 0 .../leather_gloves_repairing.json | 0 .../netherite_gloves_repairing.json | 0 .../netherite_gloves_smithing.json | 4 +- .../poison_dart.json | 4 +- .../poison_dart_shooter.json | 0 .../red_cape.json | 0 .../skyroot_sword.json | 0 .../skyroot_sword_repairing.json | 0 .../white_cape.json | 0 .../yellow_cape.json | 0 .../zanite_boots.json | 0 .../zanite_boots_repairing.json | 0 .../zanite_chestplate.json | 0 .../zanite_chestplate_repairing.json | 0 .../zanite_gloves.json | 0 .../zanite_gloves_repairing.json | 0 .../zanite_helmet.json | 0 .../zanite_helmet_repairing.json | 0 .../zanite_leggings.json | 0 .../zanite_leggings_repairing.json | 0 .../zanite_pendant.json | 0 .../zanite_pendant_repairing.json | 0 .../zanite_ring.json | 0 .../zanite_ring_repairing.json | 0 .../zanite_sword.json | 0 .../zanite_sword_repairing.json | 0 .../aerogel_wall.json | 0 ...rogel_wall_from_aerogel_stonecutting.json} | 4 +- .../{aether_blocks => decorations}/altar.json | 0 .../ambrosium_torch.json | 0 .../angelic_wall.json | 0 ...wall_from_angelic_stone_stonecutting.json} | 4 +- .../carved_wall.json | 0 ..._wall_from_carved_stone_stonecutting.json} | 4 +- .../freezer.json | 0 .../decorations/gravitite_jukebox.json | 4 +- .../hellfire_wall.json | 0 ...all_from_hellfire_stone_stonecutting.json} | 4 +- .../holystone_brick_wall.json | 0 ...l_from_holystone_bricks_stonecutting.json} | 4 +- ...ick_wall_from_holystone_stonecutting.json} | 4 +- .../holystone_wall.json | 0 ...one_wall_from_holystone_stonecutting.json} | 4 +- .../icestone_wall.json | 0 .../incubator.json | 0 .../mossy_holystone_wall.json | 0 ...ll_from_mossy_holystone_stonecutting.json} | 4 +- .../quicksoil_glass_pane.json | 0 .../recipes/decorations/skyroot_barrel.json | 4 +- .../skyroot_bed.json | 16 +- .../decorations/skyroot_crafting_table.json | 4 +- .../skyroot_fence.json | 0 .../skyroot_gravitite_jukebox.json | 4 +- .../skyroot_sign.json | 4 +- .../enchanted_berry_enchanting.json | 0 .../healing_stone_enchanting.json | 0 .../aether_tune_enchanting.json | 0 ...ambrosium_shard_from_ambrosium_block.json} | 4 +- .../ambrosium_shard_from_blasting.json} | 4 +- .../ambrosium_shard_from_smelting.json} | 4 +- .../{aether_misc => misc}/book_of_lore.json | 0 .../chinchilla_enchanting.json | 0 .../enchanted_dart_enchanting.json | 0 .../enchanted_dart_shooter_enchanting.json | 0 .../ice_pendant_from_freezing.json | 0 .../ice_ring_from_freezing.json | 0 .../legacy_enchanting.json | 0 .../remedy_bucket_enchanting.json | 0 .../{aether_misc => misc}/skyroot_bucket.json | 4 +- .../skyroot_stick.json | 4 +- .../welcoming_skies_freezing.json | 0 .../zanite_gemstone_from_blasting.json} | 4 +- .../zanite_gemstone_from_smelting.json} | 4 +- .../zanite_gemstone_from_zanite_block.json} | 4 +- .../holystone_button.json | 0 .../holystone_pressure_plate.json | 0 .../skyroot_button.json | 4 +- .../skyroot_door.json | 4 +- .../skyroot_fence_gate.json | 0 .../skyroot_pressure_plate.json | 4 +- .../skyroot_trapdoor.json | 4 +- .../aether_saddle.json | 0 .../cold_parachute.json | 4 +- .../golden_parachute.json | 4 +- .../gravitite_axe.json | 0 .../gravitite_axe_repairing.json | 0 .../gravitite_hoe.json | 0 .../gravitite_hoe_repairing.json | 0 .../gravitite_pickaxe.json | 0 .../gravitite_pickaxe_repairing.json | 0 .../gravitite_shovel.json | 0 .../gravitite_shovel_repairing.json | 0 .../holystone_axe.json | 0 .../holystone_axe_repairing.json | 0 .../holystone_hoe.json | 0 .../holystone_hoe_repairing.json | 0 .../holystone_pickaxe.json | 0 .../holystone_pickaxe_repairing.json | 0 .../holystone_shovel.json | 0 .../holystone_shovel_repairing.json | 0 .../{aether_misc => tools}/nature_staff.json | 4 +- .../{aether_tools => tools}/skyroot_axe.json | 0 .../skyroot_axe_repairing.json | 0 .../{aether_tools => tools}/skyroot_hoe.json | 0 .../skyroot_hoe_repairing.json | 0 .../skyroot_pickaxe.json | 0 .../skyroot_pickaxe_repairing.json | 0 .../skyroot_shovel.json | 0 .../skyroot_shovel_repairing.json | 0 .../{aether_tools => tools}/zanite_axe.json | 0 .../zanite_axe_repairing.json | 0 .../{aether_tools => tools}/zanite_hoe.json | 0 .../zanite_hoe_repairing.json | 0 .../zanite_pickaxe.json | 0 .../zanite_pickaxe_repairing.json | 0 .../zanite_shovel.json | 0 .../zanite_shovel_repairing.json | 0 .../skyroot_boat.json | 0 .../skyroot_chest_boat.json | 4 +- .../loot_tables/blocks/treasure_chest.json | 5 - .../data/aether/recipes/aerogel_slab.json | 5 +- ...rogel_slab_from_aerogel_stonecutting.json} | 0 .../data/aether/recipes/aerogel_stairs.json | 9 +- ...gel_stairs_from_aerogel_stonecutting.json} | 0 .../data/aether/recipes/aerogel_wall.json | 7 +- ...rogel_wall_from_aerogel_stonecutting.json} | 0 .../data/aether/recipes/aether_saddle.json | 1 + .../recipes/aether_tune_enchanting.json | 1 + .../resources/data/aether/recipes/altar.json | 1 + .../data/aether/recipes/ambrosium_block.json | 1 + ...ambrosium_shard_from_ambrosium_block.json} | 2 + ...son => ambrosium_shard_from_blasting.json} | 1 + ...son => ambrosium_shard_from_smelting.json} | 1 + .../data/aether/recipes/ambrosium_torch.json | 9 +- .../data/aether/recipes/angelic_slab.json | 5 +- ...slab_from_angelic_stone_stonecutting.json} | 0 .../data/aether/recipes/angelic_stairs.json | 9 +- ...airs_from_angelic_stone_stonecutting.json} | 0 .../data/aether/recipes/angelic_wall.json | 7 +- ...wall_from_angelic_stone_stonecutting.json} | 0 .../recipes/blue_aercloud_freezing.json | 1 + .../data/aether/recipes/blue_cape.json | 9 +- .../aether/recipes/blue_ice_freezing.json | 1 + .../data/aether/recipes/book_of_lore.json | 1 + .../data/aether/recipes/carved_slab.json | 5 +- ..._slab_from_carved_stone_stonecutting.json} | 0 .../data/aether/recipes/carved_stairs.json | 9 +- ...tairs_from_carved_stone_stonecutting.json} | 0 ...stone_from_sentry_stone_stonecutting.json} | 0 .../data/aether/recipes/carved_wall.json | 7 +- ..._wall_from_carved_stone_stonecutting.json} | 0 .../aether/recipes/chinchilla_enchanting.json | 1 + .../data/aether/recipes/cold_parachute.json | 7 +- .../recipes/crystal_leaves_freezing.json | 1 + .../data/aether/recipes/diamond_gloves.json | 5 +- .../recipes/enchanted_berry_enchanting.json | 1 + .../recipes/enchanted_dart_enchanting.json | 1 + .../enchanted_dart_shooter_enchanting.json | 1 + .../enchanted_gravitite_enchanting.json | 1 + .../aether/recipes/flower_to_purple_dye.json | 1 + .../aether/recipes/flower_to_white_dye.json | 1 + .../data/aether/recipes/freezer.json | 5 +- .../data/aether/recipes/golden_dart.json | 9 +- .../aether/recipes/golden_dart_shooter.json | 7 +- .../data/aether/recipes/golden_gloves.json | 5 +- .../aether/recipes/golden_log_to_planks.json | 12 - .../data/aether/recipes/golden_oak_wood.json | 8 +- .../data/aether/recipes/golden_parachute.json | 7 +- .../data/aether/recipes/golden_pendant.json | 5 +- .../data/aether/recipes/golden_ring.json | 9 +- .../aether/recipes/golden_wood_to_planks.json | 12 - .../data/aether/recipes/gravitite_axe.json | 1 + .../data/aether/recipes/gravitite_boots.json | 7 +- .../aether/recipes/gravitite_chestplate.json | 9 +- .../data/aether/recipes/gravitite_gloves.json | 5 +- .../data/aether/recipes/gravitite_helmet.json | 7 +- .../data/aether/recipes/gravitite_hoe.json | 1 + .../aether/recipes/gravitite_jukebox.json | 1 + .../aether/recipes/gravitite_leggings.json | 9 +- .../aether/recipes/gravitite_pickaxe.json | 1 + .../data/aether/recipes/gravitite_shovel.json | 1 + .../data/aether/recipes/gravitite_sword.json | 1 + .../recipes/healing_stone_enchanting.json | 1 + .../data/aether/recipes/hellfire_slab.json | 5 +- ...lab_from_hellfire_stone_stonecutting.json} | 0 .../data/aether/recipes/hellfire_stairs.json | 9 +- ...irs_from_hellfire_stone_stonecutting.json} | 0 .../data/aether/recipes/hellfire_wall.json | 7 +- ...all_from_hellfire_stone_stonecutting.json} | 0 .../data/aether/recipes/holystone_axe.json | 1 + .../aether/recipes/holystone_brick_slab.json | 5 +- ...b_from_holystone_bricks_stonecutting.json} | 0 ...ick_slab_from_holystone_stonecutting.json} | 0 .../recipes/holystone_brick_stairs.json | 9 +- ...s_from_holystone_bricks_stonecutting.json} | 0 ...k_stairs_from_holystone_stonecutting.json} | 0 .../aether/recipes/holystone_brick_wall.json | 7 +- ...l_from_holystone_bricks_stonecutting.json} | 0 ...ick_wall_from_holystone_stonecutting.json} | 0 .../data/aether/recipes/holystone_bricks.json | 7 +- ...e_bricks_from_holystone_stonecutting.json} | 0 .../data/aether/recipes/holystone_button.json | 1 + .../data/aether/recipes/holystone_hoe.json | 1 + .../aether/recipes/holystone_pickaxe.json | 1 + .../recipes/holystone_pressure_plate.json | 5 +- .../data/aether/recipes/holystone_shovel.json | 1 + .../data/aether/recipes/holystone_slab.json | 5 +- ...one_slab_from_holystone_stonecutting.json} | 0 .../data/aether/recipes/holystone_stairs.json | 9 +- ...e_stairs_from_holystone_stonecutting.json} | 0 .../data/aether/recipes/holystone_sword.json | 1 + .../data/aether/recipes/holystone_wall.json | 7 +- ...one_wall_from_holystone_stonecutting.json} | 0 .../recipes/ice_from_bucket_freezing.json | 1 + .../recipes/ice_pendant_from_freezing.json | 1 + .../recipes/ice_ring_from_freezing.json | 1 + .../data/aether/recipes/icestone_slab.json | 5 +- .../data/aether/recipes/icestone_stairs.json | 9 +- .../data/aether/recipes/icestone_wall.json | 7 +- .../data/aether/recipes/incubator.json | 9 +- .../data/aether/recipes/iron_gloves.json | 5 +- .../data/aether/recipes/iron_pendant.json | 5 +- .../data/aether/recipes/iron_ring.json | 9 +- .../data/aether/recipes/leather_gloves.json | 5 +- .../aether/recipes/legacy_enchanting.json | 1 + ...tone_from_angelic_stone_stonecutting.json} | 0 ...one_from_hellfire_stone_stonecutting.json} | 0 .../aether/recipes/mossy_holystone_slab.json | 5 +- ...ab_from_mossy_holystone_stonecutting.json} | 0 .../recipes/mossy_holystone_stairs.json | 9 +- ...rs_from_mossy_holystone_stonecutting.json} | 0 .../aether/recipes/mossy_holystone_wall.json | 7 +- ...ll_from_mossy_holystone_stonecutting.json} | 0 .../recipes/mossy_holystone_with_moss.json | 1 + .../recipes/mossy_holystone_with_vine.json | 1 + .../data/aether/recipes/nature_staff.json | 5 +- .../obsidian_from_bucket_freezing.json | 1 + .../aether/recipes/packed_ice_freezing.json | 1 + ...llar_from_angelic_stone_stonecutting.json} | 0 ..._top_from_angelic_stone_stonecutting.json} | 0 .../data/aether/recipes/poison_dart.json | 9 +- .../aether/recipes/poison_dart_shooter.json | 1 + .../recipes/quicksoil_glass_enchanting.json | 1 + .../aether/recipes/quicksoil_glass_pane.json | 7 +- .../data/aether/recipes/red_cape.json | 9 +- .../recipes/remedy_bucket_enchanting.json | 1 + ...stone_from_carved_stone_stonecutting.json} | 0 .../data/aether/recipes/skyroot_axe.json | 1 + .../data/aether/recipes/skyroot_barrel.json | 9 +- .../data/aether/recipes/skyroot_bed.json | 5 +- .../data/aether/recipes/skyroot_beehive.json | 7 +- .../data/aether/recipes/skyroot_boat.json | 7 +- .../aether/recipes/skyroot_bookshelf.json | 7 +- .../data/aether/recipes/skyroot_bucket.json | 7 +- .../data/aether/recipes/skyroot_button.json | 1 + .../recipes/skyroot_cartography_table.json | 9 +- .../data/aether/recipes/skyroot_chest.json | 9 +- .../aether/recipes/skyroot_chest_boat.json | 1 + .../recipes/skyroot_crafting_table.json | 7 +- .../data/aether/recipes/skyroot_door.json | 9 +- .../data/aether/recipes/skyroot_fence.json | 2 + .../aether/recipes/skyroot_fence_gate.json | 2 + .../recipes/skyroot_fletching_table.json | 7 +- .../recipes/skyroot_gravitite_jukebox.json | 9 +- .../aether/recipes/skyroot_grindstone.json | 13 +- .../data/aether/recipes/skyroot_hoe.json | 1 + .../data/aether/recipes/skyroot_jukebox.json | 9 +- .../data/aether/recipes/skyroot_loom.json | 5 +- .../aether/recipes/skyroot_note_block.json | 13 +- .../data/aether/recipes/skyroot_pickaxe.json | 1 + .../data/aether/recipes/skyroot_piston.json | 9 +- .../data/aether/recipes/skyroot_planks.json | 4 +- .../recipes/skyroot_pressure_plate.json | 5 +- .../data/aether/recipes/skyroot_shield.json | 9 +- .../data/aether/recipes/skyroot_shovel.json | 1 + .../data/aether/recipes/skyroot_sign.json | 10 +- .../data/aether/recipes/skyroot_slab.json | 6 +- .../recipes/skyroot_smithing_table.json | 7 +- .../data/aether/recipes/skyroot_stairs.json | 10 +- .../data/aether/recipes/skyroot_stick.json | 8 +- .../data/aether/recipes/skyroot_sword.json | 1 + .../data/aether/recipes/skyroot_trapdoor.json | 7 +- .../aether/recipes/skyroot_tripwire_hook.json | 13 +- .../data/aether/recipes/skyroot_wood.json | 8 +- .../recipes/stripped_log_to_planks.json | 12 - .../aether/recipes/stripped_skyroot_wood.json | 8 +- .../recipes/stripped_wood_to_planks.json | 12 - .../data/aether/recipes/swet_lead.json | 1 + .../recipes/welcoming_skies_freezing.json | 1 + .../data/aether/recipes/white_cape.json | 9 +- .../data/aether/recipes/wood_to_planks.json | 12 - .../data/aether/recipes/yellow_cape.json | 9 +- .../data/aether/recipes/zanite_axe.json | 1 + .../data/aether/recipes/zanite_block.json | 1 + .../data/aether/recipes/zanite_boots.json | 7 +- .../aether/recipes/zanite_chestplate.json | 9 +- ...son => zanite_gemstone_from_blasting.json} | 1 + ...son => zanite_gemstone_from_smelting.json} | 1 + ...=> zanite_gemstone_from_zanite_block.json} | 2 + .../data/aether/recipes/zanite_gloves.json | 5 +- .../data/aether/recipes/zanite_helmet.json | 7 +- .../data/aether/recipes/zanite_hoe.json | 1 + .../data/aether/recipes/zanite_leggings.json | 9 +- .../data/aether/recipes/zanite_pendant.json | 5 +- .../data/aether/recipes/zanite_pickaxe.json | 1 + .../data/aether/recipes/zanite_ring.json | 9 +- .../data/aether/recipes/zanite_shovel.json | 1 + .../data/aether/recipes/zanite_sword.json | 1 + .../tags/items/crafts_skyroot_planks.json | 6 + .../placed_feature/blue_aercloud.json | 3 + .../placed_feature/cold_aercloud.json | 3 + .../placed_feature/crystal_island.json | 9 +- .../placed_feature/golden_aercloud.json | 3 + .../worldgen/placed_feature/grass_patch.json | 16 +- .../worldgen/placed_feature/holiday_tree.json | 17 +- .../placed_feature/pink_aercloud.json | 3 + .../placed_feature/quicksoil_shelf.json | 17 +- .../placed_feature/tall_grass_patch.json | 16 +- .../worldgen/placed_feature/water_lake.json | 8 +- .../worldgen/placed_feature/water_spring.json | 14 +- .../java/com/gildedgames/aether/Aether.java | 97 +- .../com/gildedgames/aether/AetherConfig.java | 2 +- .../com/gildedgames/aether/AetherTags.java | 17 +- .../AetherAdvancementTriggers.java | 1 + .../aether/advancement/IncubationTrigger.java | 55 + .../aether/advancement/LoreTrigger.java | 7 +- .../aether/block/AetherBlocks.java | 38 +- .../gildedgames/aether/block/Floatable.java | 5 +- .../block/construction/SkyrootSignBlock.java | 5 +- .../construction/SkyrootWallSignBlock.java | 2 - .../block/natural/BerryBushStemBlock.java | 3 +- .../block/portal/AetherPortalForcer.java | 4 +- .../blockentity/IcestoneBlockEntity.java | 5 +- .../blockentity/IncubatorBlockEntity.java | 40 +- .../aether/capability/AetherCapabilities.java | 2 +- .../aether/client/AetherAtlases.java | 24 - .../aether/client/AetherMusicManager.java | 4 +- .../aether/client/AetherRecipeCategories.java | 28 +- .../aether/client/AetherSoundEvents.java | 2 +- .../aether/client/CombinedResourcePack.java | 45 +- .../aether/client/event/hooks/AudioHooks.java | 2 +- .../event/hooks/DimensionClientHooks.java | 2 +- .../aether/client/event/hooks/GuiHooks.java | 18 +- .../client/event/hooks/LevelClientHooks.java | 4 +- .../client/gui/component/AccessoryButton.java | 11 +- .../gui/component/AetherMenuButton.java | 13 +- .../component/CustomizationSaveButton.java | 4 +- .../component/CustomizationUndoButton.java | 4 +- .../gui/component/DynamicMenuButton.java | 6 +- .../gui/component/InactiveImageButton.java | 9 +- .../client/gui/component/LorePageButton.java | 10 +- .../gui/component/PlayerDialogueButton.java | 12 +- .../screen/ValkyrieQueenDialogueScreen.java | 10 +- .../AbstractAetherFurnaceScreen.java | 6 - .../screen/inventory/AccessoriesScreen.java | 76 +- .../gui/screen/inventory/IncubatorScreen.java | 6 - .../gui/screen/menu/AetherTitleScreen.java | 46 +- .../screen/menu/VanillaLeftTitleScreen.java | 32 +- .../perks/AetherCustomizationsScreen.java | 60 +- .../client/renderer/AetherRenderers.java | 4 +- .../renderer/accessory/CapeRenderer.java | 10 +- .../blockentity/ChestMimicRenderer.java | 4 +- .../blockentity/SkyrootBedRenderer.java | 6 +- .../entity/AbstractCrystalRenderer.java | 8 +- .../renderer/entity/AerbunnyRenderer.java | 8 +- .../renderer/entity/AerwhaleRenderer.java | 4 +- .../entity/HammerProjectileRenderer.java | 8 +- .../entity/LightningKnifeRenderer.java | 10 +- .../renderer/entity/ParachuteRenderer.java | 6 +- .../renderer/entity/SkyrootBoatRenderer.java | 9 +- .../renderer/entity/SliderRenderer.java | 9 +- .../renderer/level/AetherRenderEffects.java | 2 +- .../level/AetherSkyRenderEffects.java | 15 +- .../generators/AetherAdvancementData.java | 83 +- .../data/generators/AetherBlockStateData.java | 328 +++--- .../data/generators/AetherDataGenerators.java | 66 -- .../data/generators/AetherItemModelData.java | 720 ++++++------ .../data/generators/AetherLanguageData.java | 73 +- .../data/generators/AetherLevelStemData.java | 43 + .../generators/AetherLootModifierData.java | 14 +- .../data/generators/AetherLootTableData.java | 51 +- .../data/generators/AetherRecipeData.java | 1006 ++++++++--------- .../data/generators/AetherSoundData.java | 13 +- .../data/generators/AetherWorldGenData.java | 34 + ...otData.java => AetherAdvancementLoot.java} | 7 +- .../data/generators/loot/AetherBlockLoot.java | 202 ++++ .../generators/loot/AetherBlockLootData.java | 195 ---- ...onLootData.java => AetherDungeonLoot.java} | 7 +- .../AetherEntityLoot.java} | 56 +- ...rLootData.java => AetherSelectorLoot.java} | 13 +- ...LootData.java => AetherStrippingLoot.java} | 7 +- .../generators/tags/AetherBiomeTagData.java | 43 +- .../generators/tags/AetherBlockTagData.java | 206 ++-- .../generators/tags/AetherEntityTagData.java | 61 +- .../generators/tags/AetherFluidTagData.java | 30 +- .../generators/tags/AetherItemTagData.java | 370 +++--- .../tags/AetherStructureTagData.java | 18 +- ...r.java => AetherBlockLootSubProvider.java} | 113 +- .../providers/AetherBlockStateProvider.java | 501 ++++---- .../providers/AetherItemModelProvider.java | 207 ++-- .../providers/AetherLanguageProvider.java | 76 +- .../data/providers/AetherRecipeProvider.java | 478 ++++---- .../aether/data/resources/AetherBiomes.java | 26 - .../resources/AetherConfiguredFeatures.java | 156 --- .../data/resources/AetherDimensions.java | 35 - .../AetherNoiseGeneratorSettings.java | 23 - .../data/resources/AetherPlacedFeatures.java | 123 -- .../data/resources/AetherStructureSets.java | 42 - .../data/resources/AetherStructures.java | 62 - .../builders/AetherBiomeBuilders.java | 99 +- .../AetherConfiguredFeatureBuilders.java | 38 + .../builders/AetherFeatureBuilders.java | 85 -- .../builders/AetherNoiseBuilders.java | 89 +- .../builders/AetherPlacedFeatureBuilders.java | 67 ++ .../builders/AetherStructureBuilders.java | 15 +- .../resources/registries/AetherBiomes.java | 32 + .../registries/AetherConfiguredFeatures.java | 145 +++ .../registries/AetherDimensions.java | 44 + .../registries/AetherNoiseSettings.java | 26 + .../registries/AetherPlacedFeatures.java | 133 +++ .../registries/AetherStructureSets.java | 31 + .../registries/AetherStructures.java | 52 + .../aether/effect/InebriationEffect.java | 2 +- .../entity/block/FloatingBlockEntity.java | 12 +- .../aether/entity/block/TntPresent.java | 6 +- .../entity/miscellaneous/CloudMinion.java | 3 +- .../entity/miscellaneous/Parachute.java | 3 +- .../entity/miscellaneous/SkyrootBoat.java | 3 +- .../miscellaneous/SkyrootChestBoat.java | 3 +- .../monster/dungeon/AbstractValkyrie.java | 3 +- .../aether/entity/monster/dungeon/Sentry.java | 2 +- .../entity/monster/dungeon/boss/Slider.java | 2 +- .../monster/dungeon/boss/SunSpirit.java | 2 +- .../aether/entity/passive/Moa.java | 7 +- .../entity/projectile/ZephyrSnowball.java | 3 +- .../projectile/crystal/AbstractCrystal.java | 3 +- .../projectile/crystal/CloudCrystal.java | 2 +- .../projectile/crystal/FireCrystal.java | 2 +- .../entity/projectile/crystal/IceCrystal.java | 2 +- .../projectile/crystal/ThunderCrystal.java | 10 +- .../entity/projectile/dart/AbstractDart.java | 3 +- .../projectile/weapon/HammerProjectile.java | 4 +- .../weapon/ThrownLightningKnife.java | 9 +- .../aether/event/AetherGameEvents.java | 4 +- .../aether/event/hooks/AbilityHooks.java | 10 +- .../aether/event/hooks/CapabilityHooks.java | 2 +- .../aether/event/hooks/DimensionHooks.java | 7 +- .../event/listeners/DimensionListener.java | 2 +- .../integration/jei/AetherJEIPlugin.java | 142 +-- .../AbstractAetherCookingRecipeCategory.java | 66 +- .../categories/AltarRepairRecipeCategory.java | 168 +-- .../EnchantingCookingRecipeCategory.java | 162 +-- .../categories/FreezingRecipeCategory.java | 162 +-- .../categories/IncubationRecipeCategory.java | 186 +-- .../categories/fuel/AetherFuelCategory.java | 222 ++-- .../jei/categories/fuel/AetherFuelRecipe.java | 66 +- .../fuel/AetherFuelRecipeMaker.java | 58 +- .../inventory/menu/AccessoriesMenu.java | 2 +- .../aether/inventory/menu/IncubatorMenu.java | 15 +- .../menu/slot/IncubatorItemSlot.java | 38 + .../aether/item/AetherCreativeTabs.java | 437 +++++++ .../aether/item/AetherItemGroups.java | 66 -- .../gildedgames/aether/item/AetherItems.java | 313 ++--- .../item/accessories/AccessoryItem.java | 29 + .../aether/item/combat/AetherArmorItem.java | 27 + .../aether/item/combat/AetherSwordItem.java | 40 + .../item/combat/GravititeSwordItem.java | 3 +- .../item/combat/HolystoneSwordItem.java | 3 +- .../aether/item/combat/SkyrootSwordItem.java | 3 +- .../aether/item/combat/ZaniteSwordItem.java | 3 +- .../item/combat/loot/CandyCaneSwordItem.java | 3 +- .../item/combat/loot/CloudStaffItem.java | 23 +- .../item/combat/loot/FlamingSwordItem.java | 7 +- .../item/combat/loot/HammerOfNotchItem.java | 7 +- .../item/combat/loot/HolySwordItem.java | 7 +- .../item/combat/loot/LightningKnifeItem.java | 23 +- .../item/combat/loot/LightningSwordItem.java | 7 +- .../item/combat/loot/PhoenixBowItem.java | 25 +- .../item/combat/loot/PigSlayerItem.java | 7 +- .../item/combat/loot/ValkyrieLanceItem.java | 6 +- .../item/combat/loot/VampireBladeItem.java | 7 +- .../aether/item/food/GummySwetItem.java | 24 +- .../aether/item/food/HealingStoneItem.java | 3 +- .../aether/item/food/WhiteAppleItem.java | 3 +- .../item/miscellaneous/AetherRecordItem.java | 41 + .../item/miscellaneous/LifeShardItem.java | 19 + .../aether/item/miscellaneous/MoaEggItem.java | 10 +- .../miscellaneous/SliderSpawnEggItem.java | 6 +- .../bucket/SkyrootSolidBucketItem.java | 16 - .../tools/gravitite/GravititeAxeItem.java | 3 +- .../tools/gravitite/GravititeHoeItem.java | 3 +- .../tools/gravitite/GravititePickaxeItem.java | 3 +- .../tools/gravitite/GravititeShovelItem.java | 3 +- .../tools/holystone/HolystoneAxeItem.java | 3 +- .../tools/holystone/HolystoneHoeItem.java | 3 +- .../tools/holystone/HolystonePickaxeItem.java | 3 +- .../tools/holystone/HolystoneShovelItem.java | 3 +- .../item/tools/skyroot/SkyrootAxeItem.java | 3 +- .../item/tools/skyroot/SkyrootHoeItem.java | 3 +- .../tools/skyroot/SkyrootPickaxeItem.java | 3 +- .../item/tools/skyroot/SkyrootShovelItem.java | 3 +- .../item/tools/valkyrie/ValkyrieAxeItem.java | 24 +- .../item/tools/valkyrie/ValkyrieHoeItem.java | 24 +- .../tools/valkyrie/ValkyriePickaxeItem.java | 24 +- .../tools/valkyrie/ValkyrieShovelItem.java | 24 +- .../item/tools/zanite/ZaniteAxeItem.java | 3 +- .../item/tools/zanite/ZaniteHoeItem.java | 3 +- .../item/tools/zanite/ZanitePickaxeItem.java | 3 +- .../item/tools/zanite/ZaniteShovelItem.java | 3 +- .../gildedgames/aether/loot/AetherLoot.java | 2 + .../aether/loot/AetherLootContexts.java | 3 +- .../loot/conditions/AetherLootConditions.java | 4 +- .../loot/functions/AetherLootFunctions.java | 4 +- .../client/accessor/ButtonAccessor.java | 12 + .../mixins/common/DimensionTypeMixin.java | 2 +- .../common/accessor/BlockLootAccessor.java | 4 +- .../packet/client/ClientGrabItemPacket.java | 11 +- .../packet/server/OpenAccessoriesPacket.java | 10 +- .../packet/server/OpenInventoryPacket.java | 14 +- .../aether/recipe/AetherBookCategory.java | 24 + .../recipe/AetherRecipeSerializers.java | 6 +- .../aether/recipe/AetherRecipeTypes.java | 20 +- .../aether/recipe/BlockPropertyPair.java | 21 + .../aether/recipe/BlockStateIngredient.java | 17 +- .../builder/AetherCookingRecipeBuilder.java | 170 +++ .../recipe/builder/AltarRepairBuilder.java | 64 +- .../builder/BiomeParameterRecipeBuilder.java | 5 +- .../recipe/builder/BlockBanBuilder.java | 7 +- .../builder/BlockStateRecipeBuilder.java | 42 +- .../recipe/builder/IncubationBuilder.java | 38 +- .../aether/recipe/builder/ItemBanBuilder.java | 7 +- .../recipe/builder/PlacementBanBuilder.java | 24 +- .../recipe/conditions/ConfigCondition.java | 14 +- .../ban/AbstractPlacementBanRecipe.java | 20 +- .../recipe/recipes/ban/BlockBanRecipe.java | 45 +- .../recipe/recipes/ban/ItemBanRecipe.java | 49 +- .../block/AbstractBiomeParameterRecipe.java | 9 + .../block/AbstractBlockStateRecipe.java | 36 +- .../block/AccessoryFreezableRecipe.java | 3 - .../recipe/recipes/block/AmbrosiumRecipe.java | 4 +- .../recipes/block/BlockStateRecipe.java | 14 +- .../block/IcestoneFreezableRecipe.java | 3 - .../recipes/block/MatchEventRecipe.java | 24 +- .../block/PlacementConversionRecipe.java | 9 +- .../recipe/recipes/block/SwetBallRecipe.java | 3 +- .../item/AbstractAetherCookingRecipe.java | 22 + .../recipes/item/AltarRepairRecipe.java | 42 +- .../recipe/recipes/item/EnchantingRecipe.java | 17 +- .../recipe/recipes/item/FreezingRecipe.java | 14 +- .../recipe/recipes/item/IncubationRecipe.java | 31 +- .../serializer/AetherCookingSerializer.java | 82 ++ .../BiomeParameterRecipeSerializer.java | 32 +- .../BlockStateRecipeSerializer.java | 38 +- .../PlacementBanRecipeSerializer.java | 34 +- .../aether/util/BlockStateRecipeUtil.java | 112 +- .../aether/util/ConstantsUtil.java | 3 - .../gildedgames/aether/util/LevelUtil.java | 6 +- .../world/feature/CrystalIslandFeature.java | 6 +- .../AetherPlacementModifiers.java | 4 +- .../DungeonBlacklistFilter.java | 3 +- .../processor/AetherStructureProcessors.java | 4 +- .../world/structure/AetherStructureTypes.java | 4 +- .../AetherStructurePieceTypes.java | 4 +- .../structurepiece/SilverDungeonPieces.java | 6 +- .../world/treegrower/GoldenOakTree.java | 20 +- .../aether/world/treegrower/SkyrootTree.java | 20 +- src/main/resources/META-INF/mods.toml | 8 +- src/main/resources/aether.mixins.json | 29 +- .../resources/assets/aether/lang/de_de.json | 6 +- .../resources/assets/aether/lang/en_ud.json | 6 +- .../resources/assets/aether/lang/es_mx.json | 6 +- .../resources/assets/aether/lang/fr_fr.json | 6 +- .../resources/assets/aether/lang/it_it.json | 6 +- .../resources/assets/aether/lang/ko_kr.json | 6 +- .../resources/assets/aether/lang/lol_us.json | 6 +- .../resources/assets/aether/lang/nl_nl.json | 6 +- .../resources/assets/aether/lang/pl_pl.json | 6 +- .../resources/assets/aether/lang/ro_ro.json | 6 +- .../resources/assets/aether/lang/ru_ru.json | 6 +- .../resources/assets/aether/lang/sv_se.json | 6 +- .../resources/assets/aether/lang/th_th.json | 6 +- .../resources/assets/aether/lang/uk_ua.json | 6 +- .../resources/assets/aether/lang/zh_cn.json | 6 +- .../resources/assets/aether/lang/zh_tw.json | 6 +- .../assets/aether/particles/white_smoke.json | 12 - .../assets/minecraft/atlases/blocks.json | 9 + .../assets/minecraft/atlases/chests.json | 9 + src/main/resources/pack.mcmeta | 4 +- 741 files changed, 7447 insertions(+), 6532 deletions(-) rename src/generated/resources/.cache/{8a4be48a5ee7e414aa9b943597b34daf4f2f95c1 => 0fe122e549a2e3aeeca535edbc3649f31121d28e} (94%) create mode 100644 src/generated/resources/.cache/103d9f3f36b01595f1aa5172191e60eff02e6924 rename src/generated/resources/.cache/{a676442aee94531405dc397b215bd68da3efd342 => 1742123cf955ee7ecf092ba55decb836aa65bc2c} (99%) rename src/generated/resources/.cache/{d7b3aac43b2c3c8ddf2d88d57d32ba6e7a4e9167 => 201562cc5cd18b504c6c9e32f9399e466b1b8cf1} (50%) rename src/generated/resources/.cache/{7452c67c310ec945bc69debcbc8a0b3dc4f92884 => 22b50738883487d1ef1961d9e5ff26fe1c21b339} (98%) rename src/generated/resources/.cache/{797771fa92c9781c2c346f8c74e71a22b0dcdf25 => 232d7dc54f63e89526c247ba29265b5afad0215c} (98%) rename src/generated/resources/.cache/{31e8da375e62dc325cd3de8be1b7d6a126a61eec => 27361c9f93b2c74f19780f93ccf4ad52b49349af} (54%) delete mode 100644 src/generated/resources/.cache/3b0fe09deeb115c0ed24c9963614d6853a6f89e0 delete mode 100644 src/generated/resources/.cache/4a620f08c2dd26e75e94524bbb71add0ad1bc325 rename src/generated/resources/.cache/{6a3d99b2dfe3b52b9e5c114da2da10317036c053 => 59eb3dbb5f86130e09b3c62d89b9525ee01cf52d} (99%) delete mode 100644 src/generated/resources/.cache/63a021942da19534fa76a96f23a5878ca1d9a371 delete mode 100644 src/generated/resources/.cache/7448c942dea71deed59a9581856c68cf60b193de delete mode 100644 src/generated/resources/.cache/84fe6562c3263bad7911908ec1f7b4c6a74e7999 rename src/generated/resources/.cache/{ff81da177a6c8ae35f28123afe13c95ba48aa6bf => 8c612d57ec52f747b666a8d00c73628b9773ba1d} (72%) rename src/generated/resources/.cache/{878d7dc758db8dc2bb3a6288d38cb36a95bf701b => 93ef46d8e2a70c25df1652217c68bb7a1c161142} (93%) delete mode 100644 src/generated/resources/.cache/e4d7f7b05c507d533af44beac9beab0a9fabc42f rename src/generated/resources/.cache/{8d737e70c6a24665a953b569e247c243dce7a914 => e5c5eb35b4ba40351ecb7d9f04c3527f2f5779b0} (63%) delete mode 100644 src/generated/resources/.cache/f9f349c9a38c23d71c2b92e2db2e508baf1c26de rename src/generated/resources/.cache/{55f0273cb61243ff3d2fde23212f03e66541da02 => feecd04c25d277e5de10185e187a010c8d7228ee} (93%) rename src/generated/resources/data/aether/advancements/{to_infinity_and_beyond.json => blue_aercloud.json} (89%) rename src/generated/resources/data/aether/advancements/{craft_incubator.json => incubate_moa.json} (52%) delete mode 100644 src/generated/resources/data/aether/advancements/recipes/aether_blocks/golden_log_to_planks.json delete mode 100644 src/generated/resources/data/aether/advancements/recipes/aether_blocks/golden_wood_to_planks.json delete mode 100644 src/generated/resources/data/aether/advancements/recipes/aether_blocks/holystone_to_holystone_brick_wall_stonecutting.json delete mode 100644 src/generated/resources/data/aether/advancements/recipes/aether_blocks/pillar_stonecutting.json delete mode 100644 src/generated/resources/data/aether/advancements/recipes/aether_blocks/pillar_top_stonecutting.json delete mode 100644 src/generated/resources/data/aether/advancements/recipes/aether_blocks/stripped_log_to_planks.json delete mode 100644 src/generated/resources/data/aether/advancements/recipes/aether_blocks/stripped_wood_to_planks.json delete mode 100644 src/generated/resources/data/aether/advancements/recipes/aether_blocks/wood_to_planks.json rename src/generated/resources/data/aether/advancements/recipes/{aether_blocks => building_blocks}/aerogel_slab.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_blocks/aerogel_slab_stonecutting.json => building_blocks/aerogel_slab_from_aerogel_stonecutting.json} (81%) rename src/generated/resources/data/aether/advancements/recipes/{aether_blocks => building_blocks}/aerogel_stairs.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_blocks/aerogel_wall_stonecutting.json => building_blocks/aerogel_stairs_from_aerogel_stonecutting.json} (80%) rename src/generated/resources/data/aether/advancements/recipes/{aether_blocks => building_blocks}/ambrosium_block.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_blocks => building_blocks}/angelic_slab.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_blocks/angelic_wall_stonecutting.json => building_blocks/angelic_slab_from_angelic_stone_stonecutting.json} (80%) rename src/generated/resources/data/aether/advancements/recipes/{aether_blocks => building_blocks}/angelic_stairs.json (100%) create mode 100644 src/generated/resources/data/aether/advancements/recipes/building_blocks/angelic_stairs_from_angelic_stone_stonecutting.json rename src/generated/resources/data/aether/advancements/recipes/{aether_blocks => building_blocks}/angelic_stone_from_light_angelic_stone_stonecutting.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_blocks => building_blocks}/angelic_stone_from_pillar_stonecutting.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_blocks => building_blocks}/angelic_stone_from_pillar_top_stonecutting.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_blocks => building_blocks}/blue_aercloud_freezing.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_blocks => building_blocks}/carved_slab.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_blocks/carved_slab_stonecutting.json => building_blocks/carved_slab_from_carved_stone_stonecutting.json} (80%) rename src/generated/resources/data/aether/advancements/recipes/{aether_blocks => building_blocks}/carved_stairs.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_blocks/sentry_stone_stoncutting.json => building_blocks/carved_stairs_from_carved_stone_stonecutting.json} (80%) rename src/generated/resources/data/aether/advancements/recipes/{aether_blocks/carved_stone_from_sentry_stone_stoncutting.json => building_blocks/carved_stone_from_sentry_stone_stonecutting.json} (80%) rename src/generated/resources/data/aether/advancements/recipes/{aether_blocks => building_blocks}/crystal_leaves_freezing.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_blocks => building_blocks}/enchanted_gravitite_enchanting.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_blocks => building_blocks}/golden_oak_wood.json (90%) rename src/generated/resources/data/aether/advancements/recipes/{aether_blocks => building_blocks}/hellfire_slab.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_blocks/hellfire_slab_stonecutting.json => building_blocks/hellfire_slab_from_hellfire_stone_stonecutting.json} (79%) rename src/generated/resources/data/aether/advancements/recipes/{aether_blocks => building_blocks}/hellfire_stairs.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_blocks/hellfire_wall_stonecutting.json => building_blocks/hellfire_stairs_from_hellfire_stone_stonecutting.json} (79%) rename src/generated/resources/data/aether/advancements/recipes/{aether_blocks => building_blocks}/hellfire_stone_from_light_hellfire_stone_stonecutting.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_blocks => building_blocks}/holystone_brick_slab.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_blocks/holystone_brick_slab_stonecutting.json => building_blocks/holystone_brick_slab_from_holystone_bricks_stonecutting.json} (77%) rename src/generated/resources/data/aether/advancements/recipes/{aether_blocks/holystone_to_holystone_brick_stairs_stonecutting.json => building_blocks/holystone_brick_slab_from_holystone_stonecutting.json} (80%) rename src/generated/resources/data/aether/advancements/recipes/{aether_blocks => building_blocks}/holystone_brick_stairs.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_blocks/holystone_brick_wall_stonecutting.json => building_blocks/holystone_brick_stairs_from_holystone_bricks_stonecutting.json} (77%) create mode 100644 src/generated/resources/data/aether/advancements/recipes/building_blocks/holystone_brick_stairs_from_holystone_stonecutting.json rename src/generated/resources/data/aether/advancements/recipes/{aether_blocks => building_blocks}/holystone_bricks.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_blocks/holystone_stairs_stonecutting.json => building_blocks/holystone_bricks_from_holystone_stonecutting.json} (79%) rename src/generated/resources/data/aether/advancements/recipes/{aether_blocks => building_blocks}/holystone_slab.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_blocks/holystone_brick_stonecutting.json => building_blocks/holystone_slab_from_holystone_stonecutting.json} (80%) rename src/generated/resources/data/aether/advancements/recipes/{aether_blocks => building_blocks}/holystone_stairs.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_blocks/holystone_wall_stonecutting.json => building_blocks/holystone_stairs_from_holystone_stonecutting.json} (79%) rename src/generated/resources/data/aether/advancements/recipes/{aether_blocks => building_blocks}/icestone_slab.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_blocks => building_blocks}/icestone_stairs.json (100%) create mode 100644 src/generated/resources/data/aether/advancements/recipes/building_blocks/light_angelic_stone_from_angelic_stone_stonecutting.json rename src/generated/resources/data/aether/advancements/recipes/{aether_blocks/light_hellfire_stone_stonecutting.json => building_blocks/light_hellfire_stone_from_hellfire_stone_stonecutting.json} (78%) rename src/generated/resources/data/aether/advancements/recipes/{aether_blocks => building_blocks}/mossy_holystone_slab.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_blocks/mossy_holystone_slab_stonecutting.json => building_blocks/mossy_holystone_slab_from_mossy_holystone_stonecutting.json} (78%) rename src/generated/resources/data/aether/advancements/recipes/{aether_blocks => building_blocks}/mossy_holystone_stairs.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_blocks/mossy_holystone_wall_stonecutting.json => building_blocks/mossy_holystone_stairs_from_mossy_holystone_stonecutting.json} (77%) rename src/generated/resources/data/aether/advancements/recipes/{aether_blocks => building_blocks}/mossy_holystone_with_moss.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_blocks => building_blocks}/mossy_holystone_with_vine.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_blocks/angelic_slab_stonecutting.json => building_blocks/pillar_from_angelic_stone_stonecutting.json} (81%) rename src/generated/resources/data/aether/advancements/recipes/{aether_blocks => building_blocks}/pillar_from_pillar_top_stonecutting.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_blocks/angelic_stairs_stonecutting.json => building_blocks/pillar_top_from_angelic_stone_stonecutting.json} (80%) rename src/generated/resources/data/aether/advancements/recipes/{aether_blocks => building_blocks}/pillar_top_from_pillar_stonecutting.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_blocks => building_blocks}/quicksoil_glass_enchanting.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_blocks/carved_wall_stonecutting.json => building_blocks/sentry_stone_from_carved_stone_stonecutting.json} (80%) rename src/generated/resources/data/aether/advancements/recipes/{aether_blocks => building_blocks}/skyroot_bookshelf.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_blocks => building_blocks}/skyroot_planks.json (79%) rename src/generated/resources/data/aether/advancements/recipes/{aether_blocks => building_blocks}/skyroot_slab.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_blocks => building_blocks}/skyroot_stairs.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_blocks => building_blocks}/skyroot_wood.json (91%) rename src/generated/resources/data/aether/advancements/recipes/{aether_blocks => building_blocks}/stripped_skyroot_wood.json (89%) rename src/generated/resources/data/aether/advancements/recipes/{aether_blocks => building_blocks}/zanite_block.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_accessories => combat}/blue_cape.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_accessories => combat}/chainmail_gloves_repairing.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_accessories => combat}/diamond_gloves.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_accessories => combat}/diamond_gloves_repairing.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_weapons => combat}/golden_dart.json (93%) rename src/generated/resources/data/aether/advancements/recipes/{aether_weapons => combat}/golden_dart_shooter.json (90%) rename src/generated/resources/data/aether/advancements/recipes/{aether_accessories => combat}/golden_gloves.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_accessories => combat}/golden_gloves_repairing.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_accessories => combat}/golden_pendant.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_accessories => combat}/golden_ring.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_armor => combat}/gravitite_boots.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_armor => combat}/gravitite_boots_repairing.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_armor => combat}/gravitite_chestplate.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_armor => combat}/gravitite_chestplate_repairing.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_accessories => combat}/gravitite_gloves.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_accessories => combat}/gravitite_gloves_repairing.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_armor => combat}/gravitite_helmet.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_armor => combat}/gravitite_helmet_repairing.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_armor => combat}/gravitite_leggings.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_armor => combat}/gravitite_leggings_repairing.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_weapons => combat}/gravitite_sword.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_weapons => combat}/gravitite_sword_repairing.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_weapons => combat}/holystone_sword.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_weapons => combat}/holystone_sword_repairing.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_accessories => combat}/iron_gloves.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_accessories => combat}/iron_gloves_repairing.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_accessories => combat}/iron_pendant.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_accessories => combat}/iron_ring.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_accessories => combat}/leather_gloves.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_accessories => combat}/leather_gloves_repairing.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_accessories => combat}/netherite_gloves_repairing.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_accessories => combat}/netherite_gloves_smithing.json (90%) rename src/generated/resources/data/aether/advancements/recipes/{aether_weapons => combat}/poison_dart.json (92%) rename src/generated/resources/data/aether/advancements/recipes/{aether_weapons => combat}/poison_dart_shooter.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_accessories => combat}/red_cape.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_weapons => combat}/skyroot_sword.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_weapons => combat}/skyroot_sword_repairing.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_accessories => combat}/white_cape.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_accessories => combat}/yellow_cape.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_armor => combat}/zanite_boots.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_armor => combat}/zanite_boots_repairing.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_armor => combat}/zanite_chestplate.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_armor => combat}/zanite_chestplate_repairing.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_accessories => combat}/zanite_gloves.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_accessories => combat}/zanite_gloves_repairing.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_armor => combat}/zanite_helmet.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_armor => combat}/zanite_helmet_repairing.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_armor => combat}/zanite_leggings.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_armor => combat}/zanite_leggings_repairing.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_accessories => combat}/zanite_pendant.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_accessories => combat}/zanite_pendant_repairing.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_accessories => combat}/zanite_ring.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_accessories => combat}/zanite_ring_repairing.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_weapons => combat}/zanite_sword.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_weapons => combat}/zanite_sword_repairing.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_blocks => decorations}/aerogel_wall.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_blocks/aerogel_stairs_stonecutting.json => decorations/aerogel_wall_from_aerogel_stonecutting.json} (81%) rename src/generated/resources/data/aether/advancements/recipes/{aether_blocks => decorations}/altar.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_blocks => decorations}/ambrosium_torch.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_blocks => decorations}/angelic_wall.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_blocks/light_angelic_stone_stonecutting.json => decorations/angelic_wall_from_angelic_stone_stonecutting.json} (80%) rename src/generated/resources/data/aether/advancements/recipes/{aether_blocks => decorations}/carved_wall.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_blocks/carved_stairs_stonecutting.json => decorations/carved_wall_from_carved_stone_stonecutting.json} (80%) rename src/generated/resources/data/aether/advancements/recipes/{aether_blocks => decorations}/freezer.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_blocks => decorations}/hellfire_wall.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_blocks/hellfire_stairs_stonecutting.json => decorations/hellfire_wall_from_hellfire_stone_stonecutting.json} (79%) rename src/generated/resources/data/aether/advancements/recipes/{aether_blocks => decorations}/holystone_brick_wall.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_blocks/holystone_brick_stairs_stonecutting.json => decorations/holystone_brick_wall_from_holystone_bricks_stonecutting.json} (77%) rename src/generated/resources/data/aether/advancements/recipes/{aether_blocks/holystone_to_holystone_brick_slab_stonecutting.json => decorations/holystone_brick_wall_from_holystone_stonecutting.json} (78%) rename src/generated/resources/data/aether/advancements/recipes/{aether_blocks => decorations}/holystone_wall.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_blocks/holystone_slab_stonecutting.json => decorations/holystone_wall_from_holystone_stonecutting.json} (80%) rename src/generated/resources/data/aether/advancements/recipes/{aether_blocks => decorations}/icestone_wall.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_blocks => decorations}/incubator.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_blocks => decorations}/mossy_holystone_wall.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_blocks/mossy_holystone_stairs_stonecutting.json => decorations/mossy_holystone_wall_from_mossy_holystone_stonecutting.json} (78%) rename src/generated/resources/data/aether/advancements/recipes/{aether_blocks => decorations}/quicksoil_glass_pane.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_blocks => decorations}/skyroot_bed.json (93%) rename src/generated/resources/data/aether/advancements/recipes/{aether_blocks => decorations}/skyroot_fence.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_blocks => decorations}/skyroot_sign.json (90%) rename src/generated/resources/data/aether/advancements/recipes/{aether_food => food}/enchanted_berry_enchanting.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_food => food}/healing_stone_enchanting.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_misc => misc}/aether_tune_enchanting.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_materials/ambrosium_shard.json => misc/ambrosium_shard_from_ambrosium_block.json} (82%) rename src/generated/resources/data/aether/advancements/recipes/{aether_materials/blast_ambrosium.json => misc/ambrosium_shard_from_blasting.json} (84%) rename src/generated/resources/data/aether/advancements/recipes/{aether_materials/smelt_ambrosium.json => misc/ambrosium_shard_from_smelting.json} (84%) rename src/generated/resources/data/aether/advancements/recipes/{aether_misc => misc}/book_of_lore.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_misc => misc}/chinchilla_enchanting.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_weapons => misc}/enchanted_dart_enchanting.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_weapons => misc}/enchanted_dart_shooter_enchanting.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_accessories => misc}/ice_pendant_from_freezing.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_accessories => misc}/ice_ring_from_freezing.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_misc => misc}/legacy_enchanting.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_misc => misc}/remedy_bucket_enchanting.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_misc => misc}/skyroot_bucket.json (90%) rename src/generated/resources/data/aether/advancements/recipes/{aether_materials => misc}/skyroot_stick.json (90%) rename src/generated/resources/data/aether/advancements/recipes/{aether_misc => misc}/welcoming_skies_freezing.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_materials/blast_zanite.json => misc/zanite_gemstone_from_blasting.json} (83%) rename src/generated/resources/data/aether/advancements/recipes/{aether_materials/smelt_zanite.json => misc/zanite_gemstone_from_smelting.json} (83%) rename src/generated/resources/data/aether/advancements/recipes/{aether_materials/zanite_gemstone.json => misc/zanite_gemstone_from_zanite_block.json} (82%) rename src/generated/resources/data/aether/advancements/recipes/{aether_blocks => redstone}/holystone_button.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_blocks => redstone}/holystone_pressure_plate.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_blocks => redstone}/skyroot_button.json (90%) rename src/generated/resources/data/aether/advancements/recipes/{aether_blocks => redstone}/skyroot_door.json (90%) rename src/generated/resources/data/aether/advancements/recipes/{aether_blocks => redstone}/skyroot_fence_gate.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_blocks => redstone}/skyroot_pressure_plate.json (91%) rename src/generated/resources/data/aether/advancements/recipes/{aether_blocks => redstone}/skyroot_trapdoor.json (90%) rename src/generated/resources/data/aether/advancements/recipes/{transportation => tools}/aether_saddle.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_misc => tools}/cold_parachute.json (91%) rename src/generated/resources/data/aether/advancements/recipes/{aether_misc => tools}/golden_parachute.json (90%) rename src/generated/resources/data/aether/advancements/recipes/{aether_tools => tools}/gravitite_axe.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_tools => tools}/gravitite_axe_repairing.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_tools => tools}/gravitite_hoe.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_tools => tools}/gravitite_hoe_repairing.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_tools => tools}/gravitite_pickaxe.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_tools => tools}/gravitite_pickaxe_repairing.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_tools => tools}/gravitite_shovel.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_tools => tools}/gravitite_shovel_repairing.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_tools => tools}/holystone_axe.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_tools => tools}/holystone_axe_repairing.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_tools => tools}/holystone_hoe.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_tools => tools}/holystone_hoe_repairing.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_tools => tools}/holystone_pickaxe.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_tools => tools}/holystone_pickaxe_repairing.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_tools => tools}/holystone_shovel.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_tools => tools}/holystone_shovel_repairing.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_misc => tools}/nature_staff.json (90%) rename src/generated/resources/data/aether/advancements/recipes/{aether_tools => tools}/skyroot_axe.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_tools => tools}/skyroot_axe_repairing.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_tools => tools}/skyroot_hoe.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_tools => tools}/skyroot_hoe_repairing.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_tools => tools}/skyroot_pickaxe.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_tools => tools}/skyroot_pickaxe_repairing.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_tools => tools}/skyroot_shovel.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_tools => tools}/skyroot_shovel_repairing.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_tools => tools}/zanite_axe.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_tools => tools}/zanite_axe_repairing.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_tools => tools}/zanite_hoe.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_tools => tools}/zanite_hoe_repairing.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_tools => tools}/zanite_pickaxe.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_tools => tools}/zanite_pickaxe_repairing.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_tools => tools}/zanite_shovel.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_tools => tools}/zanite_shovel_repairing.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_misc => transportation}/skyroot_boat.json (100%) rename src/generated/resources/data/aether/advancements/recipes/{aether_misc => transportation}/skyroot_chest_boat.json (87%) rename src/generated/resources/data/aether/recipes/{aerogel_slab_stonecutting.json => aerogel_slab_from_aerogel_stonecutting.json} (100%) rename src/generated/resources/data/aether/recipes/{aerogel_stairs_stonecutting.json => aerogel_stairs_from_aerogel_stonecutting.json} (100%) rename src/generated/resources/data/aether/recipes/{aerogel_wall_stonecutting.json => aerogel_wall_from_aerogel_stonecutting.json} (100%) rename src/generated/resources/data/aether/recipes/{ambrosium_shard.json => ambrosium_shard_from_ambrosium_block.json} (78%) rename src/generated/resources/data/aether/recipes/{blast_ambrosium.json => ambrosium_shard_from_blasting.json} (88%) rename src/generated/resources/data/aether/recipes/{smelt_ambrosium.json => ambrosium_shard_from_smelting.json} (88%) rename src/generated/resources/data/aether/recipes/{angelic_slab_stonecutting.json => angelic_slab_from_angelic_stone_stonecutting.json} (100%) rename src/generated/resources/data/aether/recipes/{angelic_stairs_stonecutting.json => angelic_stairs_from_angelic_stone_stonecutting.json} (100%) rename src/generated/resources/data/aether/recipes/{angelic_wall_stonecutting.json => angelic_wall_from_angelic_stone_stonecutting.json} (100%) rename src/generated/resources/data/aether/recipes/{carved_slab_stonecutting.json => carved_slab_from_carved_stone_stonecutting.json} (100%) rename src/generated/resources/data/aether/recipes/{carved_stairs_stonecutting.json => carved_stairs_from_carved_stone_stonecutting.json} (100%) rename src/generated/resources/data/aether/recipes/{carved_stone_from_sentry_stone_stoncutting.json => carved_stone_from_sentry_stone_stonecutting.json} (100%) rename src/generated/resources/data/aether/recipes/{carved_wall_stonecutting.json => carved_wall_from_carved_stone_stonecutting.json} (100%) delete mode 100644 src/generated/resources/data/aether/recipes/golden_log_to_planks.json delete mode 100644 src/generated/resources/data/aether/recipes/golden_wood_to_planks.json rename src/generated/resources/data/aether/recipes/{hellfire_slab_stonecutting.json => hellfire_slab_from_hellfire_stone_stonecutting.json} (100%) rename src/generated/resources/data/aether/recipes/{hellfire_stairs_stonecutting.json => hellfire_stairs_from_hellfire_stone_stonecutting.json} (100%) rename src/generated/resources/data/aether/recipes/{hellfire_wall_stonecutting.json => hellfire_wall_from_hellfire_stone_stonecutting.json} (100%) rename src/generated/resources/data/aether/recipes/{holystone_brick_slab_stonecutting.json => holystone_brick_slab_from_holystone_bricks_stonecutting.json} (100%) rename src/generated/resources/data/aether/recipes/{holystone_to_holystone_brick_slab_stonecutting.json => holystone_brick_slab_from_holystone_stonecutting.json} (100%) rename src/generated/resources/data/aether/recipes/{holystone_brick_stairs_stonecutting.json => holystone_brick_stairs_from_holystone_bricks_stonecutting.json} (100%) rename src/generated/resources/data/aether/recipes/{holystone_to_holystone_brick_stairs_stonecutting.json => holystone_brick_stairs_from_holystone_stonecutting.json} (100%) rename src/generated/resources/data/aether/recipes/{holystone_brick_wall_stonecutting.json => holystone_brick_wall_from_holystone_bricks_stonecutting.json} (100%) rename src/generated/resources/data/aether/recipes/{holystone_to_holystone_brick_wall_stonecutting.json => holystone_brick_wall_from_holystone_stonecutting.json} (100%) rename src/generated/resources/data/aether/recipes/{holystone_brick_stonecutting.json => holystone_bricks_from_holystone_stonecutting.json} (100%) rename src/generated/resources/data/aether/recipes/{holystone_slab_stonecutting.json => holystone_slab_from_holystone_stonecutting.json} (100%) rename src/generated/resources/data/aether/recipes/{holystone_stairs_stonecutting.json => holystone_stairs_from_holystone_stonecutting.json} (100%) rename src/generated/resources/data/aether/recipes/{holystone_wall_stonecutting.json => holystone_wall_from_holystone_stonecutting.json} (100%) rename src/generated/resources/data/aether/recipes/{light_angelic_stone_stonecutting.json => light_angelic_stone_from_angelic_stone_stonecutting.json} (100%) rename src/generated/resources/data/aether/recipes/{light_hellfire_stone_stonecutting.json => light_hellfire_stone_from_hellfire_stone_stonecutting.json} (100%) rename src/generated/resources/data/aether/recipes/{mossy_holystone_slab_stonecutting.json => mossy_holystone_slab_from_mossy_holystone_stonecutting.json} (100%) rename src/generated/resources/data/aether/recipes/{mossy_holystone_stairs_stonecutting.json => mossy_holystone_stairs_from_mossy_holystone_stonecutting.json} (100%) rename src/generated/resources/data/aether/recipes/{mossy_holystone_wall_stonecutting.json => mossy_holystone_wall_from_mossy_holystone_stonecutting.json} (100%) rename src/generated/resources/data/aether/recipes/{pillar_stonecutting.json => pillar_from_angelic_stone_stonecutting.json} (100%) rename src/generated/resources/data/aether/recipes/{pillar_top_stonecutting.json => pillar_top_from_angelic_stone_stonecutting.json} (100%) rename src/generated/resources/data/aether/recipes/{sentry_stone_stoncutting.json => sentry_stone_from_carved_stone_stonecutting.json} (100%) delete mode 100644 src/generated/resources/data/aether/recipes/stripped_log_to_planks.json delete mode 100644 src/generated/resources/data/aether/recipes/stripped_wood_to_planks.json delete mode 100644 src/generated/resources/data/aether/recipes/wood_to_planks.json rename src/generated/resources/data/aether/recipes/{blast_zanite.json => zanite_gemstone_from_blasting.json} (88%) rename src/generated/resources/data/aether/recipes/{smelt_zanite.json => zanite_gemstone_from_smelting.json} (88%) rename src/generated/resources/data/aether/recipes/{zanite_gemstone.json => zanite_gemstone_from_zanite_block.json} (78%) create mode 100644 src/generated/resources/data/aether/tags/items/crafts_skyroot_planks.json create mode 100644 src/main/java/com/gildedgames/aether/advancement/IncubationTrigger.java delete mode 100644 src/main/java/com/gildedgames/aether/data/generators/AetherDataGenerators.java create mode 100644 src/main/java/com/gildedgames/aether/data/generators/AetherLevelStemData.java create mode 100644 src/main/java/com/gildedgames/aether/data/generators/AetherWorldGenData.java rename src/main/java/com/gildedgames/aether/data/generators/loot/{AetherAdvancementLootData.java => AetherAdvancementLoot.java} (83%) create mode 100644 src/main/java/com/gildedgames/aether/data/generators/loot/AetherBlockLoot.java delete mode 100644 src/main/java/com/gildedgames/aether/data/generators/loot/AetherBlockLootData.java rename src/main/java/com/gildedgames/aether/data/generators/loot/{AetherDungeonLootData.java => AetherDungeonLoot.java} (98%) rename src/main/java/com/gildedgames/aether/data/generators/{AetherEntityLootData.java => loot/AetherEntityLoot.java} (82%) rename src/main/java/com/gildedgames/aether/data/generators/loot/{AetherSelectorLootData.java => AetherSelectorLoot.java} (78%) rename src/main/java/com/gildedgames/aether/data/generators/loot/{AetherStrippingLootData.java => AetherStrippingLoot.java} (82%) rename src/main/java/com/gildedgames/aether/data/providers/{AetherBlockLootProvider.java => AetherBlockLootSubProvider.java} (59%) delete mode 100644 src/main/java/com/gildedgames/aether/data/resources/AetherBiomes.java delete mode 100644 src/main/java/com/gildedgames/aether/data/resources/AetherConfiguredFeatures.java delete mode 100644 src/main/java/com/gildedgames/aether/data/resources/AetherDimensions.java delete mode 100644 src/main/java/com/gildedgames/aether/data/resources/AetherNoiseGeneratorSettings.java delete mode 100644 src/main/java/com/gildedgames/aether/data/resources/AetherPlacedFeatures.java delete mode 100644 src/main/java/com/gildedgames/aether/data/resources/AetherStructureSets.java delete mode 100644 src/main/java/com/gildedgames/aether/data/resources/AetherStructures.java create mode 100644 src/main/java/com/gildedgames/aether/data/resources/builders/AetherConfiguredFeatureBuilders.java delete mode 100644 src/main/java/com/gildedgames/aether/data/resources/builders/AetherFeatureBuilders.java create mode 100644 src/main/java/com/gildedgames/aether/data/resources/builders/AetherPlacedFeatureBuilders.java create mode 100644 src/main/java/com/gildedgames/aether/data/resources/registries/AetherBiomes.java create mode 100644 src/main/java/com/gildedgames/aether/data/resources/registries/AetherConfiguredFeatures.java create mode 100644 src/main/java/com/gildedgames/aether/data/resources/registries/AetherDimensions.java create mode 100644 src/main/java/com/gildedgames/aether/data/resources/registries/AetherNoiseSettings.java create mode 100644 src/main/java/com/gildedgames/aether/data/resources/registries/AetherPlacedFeatures.java create mode 100644 src/main/java/com/gildedgames/aether/data/resources/registries/AetherStructureSets.java create mode 100644 src/main/java/com/gildedgames/aether/data/resources/registries/AetherStructures.java create mode 100644 src/main/java/com/gildedgames/aether/inventory/menu/slot/IncubatorItemSlot.java create mode 100644 src/main/java/com/gildedgames/aether/item/AetherCreativeTabs.java delete mode 100644 src/main/java/com/gildedgames/aether/item/AetherItemGroups.java create mode 100644 src/main/java/com/gildedgames/aether/item/combat/AetherSwordItem.java create mode 100644 src/main/java/com/gildedgames/aether/item/miscellaneous/AetherRecordItem.java create mode 100644 src/main/java/com/gildedgames/aether/mixin/mixins/client/accessor/ButtonAccessor.java create mode 100644 src/main/java/com/gildedgames/aether/recipe/AetherBookCategory.java create mode 100644 src/main/java/com/gildedgames/aether/recipe/builder/AetherCookingRecipeBuilder.java create mode 100644 src/main/java/com/gildedgames/aether/recipe/recipes/item/AbstractAetherCookingRecipe.java create mode 100644 src/main/java/com/gildedgames/aether/recipe/serializer/AetherCookingSerializer.java delete mode 100644 src/main/resources/assets/aether/particles/white_smoke.json create mode 100644 src/main/resources/assets/minecraft/atlases/blocks.json create mode 100644 src/main/resources/assets/minecraft/atlases/chests.json diff --git a/build.gradle b/build.gradle index 98996d7a6b..52722a97fa 100644 --- a/build.gradle +++ b/build.gradle @@ -109,8 +109,8 @@ dependencies { compileOnly "top.theillusivec4.caelus:caelus-forge:${project.caelus_version}:api" compileOnly "top.theillusivec4.caelus:caelus-forge:${project.caelus_version}" - compileOnly "mezz.jei:jei-${project.mc_version}-common-api:${project.jei_version}" - compileOnly "mezz.jei:jei-${project.mc_version}-forge-api:${project.jei_version}" +// compileOnly "mezz.jei:jei-${project.mc_version}-common-api:${project.jei_version}" +// compileOnly "mezz.jei:jei-${project.mc_version}-forge-api:${project.jei_version}" // jarJar fg.deobf("com.gildedgames.nitrogen:nitrogen:${project.nitrogen_version}") { // jarJar.ranged(it, "[${project.nitrogen_version},)") diff --git a/gradle.properties b/gradle.properties index a521a3bf0e..7f32240832 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,16 +4,16 @@ org.gradle.jvmargs=-Xmx3G org.gradle.daemon=false # Mod -aether_version=0.2.0 -mc_version=1.19.2 -forge_version=43.1.65 -mappings=1.19.2-2022.08.14-1.19.2 +aether_version=0.3.0 +mc_version=1.19.3 +forge_version=44.0.36 +mappings=1.19.2-2022.08.14-1.19.3 # Dependencies #nitrogen_version=1.19.2-0.0.1 -curios_version=1.19.2-5.1.1.0 -caelus_version=1.19-3.0.0.3 -jei_version=11.3.0.262 +curios_version=1.19.3-5.1.1.2 +caelus_version=1.19.3-3.0.0.7 +#jei_version=11.3.0.262 #crafttweaker_version=1.16.5:7.1.0.338 #smoothboot_version=1.16.4-1.2.1 ##https://www.curseforge.com/minecraft/mc-mods/colytra/files/3310142 diff --git a/src/generated/resources/.cache/8a4be48a5ee7e414aa9b943597b34daf4f2f95c1 b/src/generated/resources/.cache/0fe122e549a2e3aeeca535edbc3649f31121d28e similarity index 94% rename from src/generated/resources/.cache/8a4be48a5ee7e414aa9b943597b34daf4f2f95c1 rename to src/generated/resources/.cache/0fe122e549a2e3aeeca535edbc3649f31121d28e index a41184e393..7550aa2a43 100644 --- a/src/generated/resources/.cache/8a4be48a5ee7e414aa9b943597b34daf4f2f95c1 +++ b/src/generated/resources/.cache/0fe122e549a2e3aeeca535edbc3649f31121d28e @@ -1,4 +1,4 @@ -// 1.19.2 2022-10-10T19:21:18.7681735 Aether Entity Tags +// 1.19.3 2022-12-09T19:53:20.0018387 Tags for minecraft:entity_type mod id aether 331548dcbc0ed9c39c0925678c3c465d98ce752a data/aether/tags/entity_types/aechor_plant_targets.json b0ea008baac0b727410a488f5b81e907b5a65cd2 data/aether/tags/entity_types/aercloud_spawnable.json b3a379df5d7bd0f9d26800bb985a7acba83143fe data/aether/tags/entity_types/deflectable_projectiles.json diff --git a/src/generated/resources/.cache/103d9f3f36b01595f1aa5172191e60eff02e6924 b/src/generated/resources/.cache/103d9f3f36b01595f1aa5172191e60eff02e6924 new file mode 100644 index 0000000000..8f83bd834a --- /dev/null +++ b/src/generated/resources/.cache/103d9f3f36b01595f1aa5172191e60eff02e6924 @@ -0,0 +1,60 @@ +// 1.19.3 2022-12-19T10:17:44.3766402 Registries +5655d4cd818dbc73a0baa2590d80dd274f85927d data/aether/dimension_type/the_aether.json +a89f0e3dbdd783366860d85ce52f274b674cb174 data/aether/worldgen/biome/golden_forest.json +f854a336e46654b1e33f12e9e3915dc6b96557b8 data/aether/worldgen/biome/skyroot_forest.json +e51bcf65cb5f00ee820876cd7122b58c69ec64eb data/aether/worldgen/biome/skyroot_grove.json +12d9b788e7e764195532eb3ccd0156f118d00fa6 data/aether/worldgen/biome/skyroot_thicket.json +18a65f6608e5a7aca8d2a54e9c2d73c87bc03dd6 data/aether/worldgen/configured_feature/aether_dirt_ore.json +16a2ae74f54e0744b412dfca906201c5df3d3653 data/aether/worldgen/configured_feature/ambrosium_ore.json +72653fc7374866ed421de23ca9e6aa202e88efed data/aether/worldgen/configured_feature/blue_aercloud.json +e8a26e105aaec63ce90962277b1d0075eaf16a71 data/aether/worldgen/configured_feature/cold_aercloud.json +55746da79ad2e897b37f03c882d3e7ec21353c58 data/aether/worldgen/configured_feature/crystal_island.json +1da0928a92c3e345d3b1cf64c6a4ba989ecd7bbb data/aether/worldgen/configured_feature/crystal_tree.json +b81fbd8ba1ee40b86491b8ee0f99c117c242d76a data/aether/worldgen/configured_feature/flower_patch.json +dfc78a16e715dbf5702264789746f4cc747bd188 data/aether/worldgen/configured_feature/golden_aercloud.json +2217bf18c74a0644d7d9ac6a18743fc781718398 data/aether/worldgen/configured_feature/golden_oak_tree.json +c75a69a06a66ad5a2ab402d7bca52e3e58098362 data/aether/worldgen/configured_feature/grass_patch.json +f663848a5a75d0573dea2aaf1791ba48669adc07 data/aether/worldgen/configured_feature/gravitite_ore_common.json +df7baff686b5d66e4e816e1ef2716751fe927f0e data/aether/worldgen/configured_feature/gravitite_ore_dense.json +601b9ac6551101ffa824913082400b735e3232a2 data/aether/worldgen/configured_feature/holiday_tree.json +4a2527816696c27fad74921b9c6cd3fb44d4649e data/aether/worldgen/configured_feature/icestone_ore.json +75713dabd68934c554b8cc2ca0f71a306257e664 data/aether/worldgen/configured_feature/pink_aercloud.json +a0650ffce1169e7d15f9aa207b6b139fa905c5b2 data/aether/worldgen/configured_feature/quicksoil_shelf.json +f46be64b74246276492162453c5ad440bb09a3fb data/aether/worldgen/configured_feature/skyroot_tree.json +06029a837eb77f1213cdb3c86f3b30cfa877ba18 data/aether/worldgen/configured_feature/tall_grass_patch.json +dde58eb494781d69e8c8545e7e013e2c558be608 data/aether/worldgen/configured_feature/trees_golden_oak_and_skyroot.json +ad9a38a87e4927b4b215fd473dbc459ed0a462bf data/aether/worldgen/configured_feature/trees_skyroot_and_golden_oak.json +e3a804c5d61371bc4fdfe9132d82488a30f465e8 data/aether/worldgen/configured_feature/water_lake.json +07742c52dac96e2e6dff9d8a1385bd2e81dcc4d5 data/aether/worldgen/configured_feature/water_spring.json +d42cdab79461449679a4a4ba478d5ca037b578ab data/aether/worldgen/configured_feature/zanite_ore.json +074fd227247dd9813023f1443ce697b34337da96 data/aether/worldgen/noise_settings/skylands.json +ae63d0e0f5d9c44eb75e02fc596fb3564e1c1ab8 data/aether/worldgen/placed_feature/aether_dirt_ore.json +abcf2c1d93a2b2e6fbb0a13571253e76d8768747 data/aether/worldgen/placed_feature/ambrosium_ore.json +7076addda607e56dd74c476fbfca47605c765d6c data/aether/worldgen/placed_feature/blue_aercloud.json +7dd76a82d8410247126e30bb615f4f67aa0485d2 data/aether/worldgen/placed_feature/cold_aercloud.json +73ba66e5fca7996dd7a4ce13bc87a4ec5f1afb35 data/aether/worldgen/placed_feature/crystal_island.json +56308956b159d158796893506af8d9ec40c00c8d data/aether/worldgen/placed_feature/flower_patch.json +da209ab2a9cfbe6914641131702aa8b682762881 data/aether/worldgen/placed_feature/golden_aercloud.json +16d0d98dfbf5c917197ca57652c397a20a4d30ea data/aether/worldgen/placed_feature/golden_forest_trees.json +aaecd5ff274d07010867dee6552e6b1537eec4b0 data/aether/worldgen/placed_feature/grass_patch.json +9c26bc2a4934655fb701a220bc35dc3962fd0cfa data/aether/worldgen/placed_feature/gravitite_ore_common.json +42550b21f6f1cdaaac4e4f6447fbf685a1ffa020 data/aether/worldgen/placed_feature/gravitite_ore_dense.json +65e9e7e461635a0ccbd74ee3c12cf8eb486fd117 data/aether/worldgen/placed_feature/holiday_tree.json +84687a9429ed6c84df7b9ef4e7667a354d788c56 data/aether/worldgen/placed_feature/icestone_ore.json +c84c94c071d2e3de1f08845df08224af0915dfc1 data/aether/worldgen/placed_feature/pink_aercloud.json +c0749bd36eedc21ba476a18b18af4c78284b808c data/aether/worldgen/placed_feature/quicksoil_shelf.json +038f5ed2d26be4b496e4083be035d295079a05ef data/aether/worldgen/placed_feature/skyroot_forest_trees.json +75556dce5eb1a04f81a232b2d2229aa67390902b data/aether/worldgen/placed_feature/skyroot_grove_trees.json +a206fc916937d21470bfb99c6a3549a2b153ae06 data/aether/worldgen/placed_feature/skyroot_thicket_trees.json +9e61185da06f3ccce0897ecf263bf306904dc815 data/aether/worldgen/placed_feature/tall_grass_patch.json +c0257210b58e2e3cf09cd0a140e56f66e63849d5 data/aether/worldgen/placed_feature/water_lake.json +d6594222a1792b2d047d2ece7870337455eef006 data/aether/worldgen/placed_feature/water_spring.json +f77bf9f1f4d11796afbe51e4af30c42fa5ffc996 data/aether/worldgen/placed_feature/zanite_ore.json +ddaec3fcac2f8f73f94831385e39eefc2d36e2e8 data/aether/worldgen/structure/bronze_dungeon.json +25469d369b63550f721e5ea8bf5205d41e999c3b data/aether/worldgen/structure/gold_dungeon.json +5d95d82aa273637160cb12c0d82e31d722ace6cd data/aether/worldgen/structure/large_aercloud.json +9f37f292b5ede93d396eb6bb65b5ab7e121916a7 data/aether/worldgen/structure/silver_dungeon.json +c6f5828f13a1f05ed7c94913a3cacfe5c93ef904 data/aether/worldgen/structure_set/bronze_dungeon.json +c128b9af7f6959fe80ca2fff258309a9baf90cf9 data/aether/worldgen/structure_set/gold_dungeon.json +e37ae90b21149e5827318fb1d6523d0f8363bbc0 data/aether/worldgen/structure_set/large_aercloud.json +0b8ff469c84c21c41895dc3e9ee0708e492b55f0 data/aether/worldgen/structure_set/silver_dungeon.json diff --git a/src/generated/resources/.cache/a676442aee94531405dc397b215bd68da3efd342 b/src/generated/resources/.cache/1742123cf955ee7ecf092ba55decb836aa65bc2c similarity index 99% rename from src/generated/resources/.cache/a676442aee94531405dc397b215bd68da3efd342 rename to src/generated/resources/.cache/1742123cf955ee7ecf092ba55decb836aa65bc2c index b676c8efda..4a23b84f7e 100644 --- a/src/generated/resources/.cache/a676442aee94531405dc397b215bd68da3efd342 +++ b/src/generated/resources/.cache/1742123cf955ee7ecf092ba55decb836aa65bc2c @@ -1,4 +1,4 @@ -// 1.19.2 2022-09-30T20:13:58.8908265 Aether Block States +// 1.19.3 2022-12-09T18:55:17.5048145 Block States: aether 79cb0c0ea34a92e86b03080a209cb60f268cb31e assets/aether/blockstates/aerogel.json 28f7eea22b621bda459b2328c2252cdebe0bcdb9 assets/aether/blockstates/aerogel_slab.json 0866f96b2339b894ff4c8a01aebb3d87103eb0fb assets/aether/blockstates/aether_dirt.json diff --git a/src/generated/resources/.cache/d7b3aac43b2c3c8ddf2d88d57d32ba6e7a4e9167 b/src/generated/resources/.cache/201562cc5cd18b504c6c9e32f9399e466b1b8cf1 similarity index 50% rename from src/generated/resources/.cache/d7b3aac43b2c3c8ddf2d88d57d32ba6e7a4e9167 rename to src/generated/resources/.cache/201562cc5cd18b504c6c9e32f9399e466b1b8cf1 index 9e61f7f8c1..eb56bb6f75 100644 --- a/src/generated/resources/.cache/d7b3aac43b2c3c8ddf2d88d57d32ba6e7a4e9167 +++ b/src/generated/resources/.cache/201562cc5cd18b504c6c9e32f9399e466b1b8cf1 @@ -1,2 +1,2 @@ -// 1.19.2 2022-11-25T13:50:12.599706 Tags for minecraft:worldgen/structure +// 1.19.3 2022-12-12T12:51:18.8763957 Tags for minecraft:worldgen/structure mod id aether 33ff3c45ed33469da0ca8bc68728d91d60f1057c data/aether/tags/worldgen/structure/dungeons.json diff --git a/src/generated/resources/.cache/7452c67c310ec945bc69debcbc8a0b3dc4f92884 b/src/generated/resources/.cache/22b50738883487d1ef1961d9e5ff26fe1c21b339 similarity index 98% rename from src/generated/resources/.cache/7452c67c310ec945bc69debcbc8a0b3dc4f92884 rename to src/generated/resources/.cache/22b50738883487d1ef1961d9e5ff26fe1c21b339 index af23036c87..1a118546be 100644 --- a/src/generated/resources/.cache/7452c67c310ec945bc69debcbc8a0b3dc4f92884 +++ b/src/generated/resources/.cache/22b50738883487d1ef1961d9e5ff26fe1c21b339 @@ -1,4 +1,4 @@ -// 1.19.2 2022-11-26T17:48:29.0998739 Aether Block Tags +// 1.19.3 2022-12-09T19:53:19.9958413 Tags for minecraft:block mod id aether fc9b66cee900f1b4f341fcec6da19eb45d575f43 data/aether/tags/blocks/aechor_plant_spawnable_on.json f2dedadb4e94e780ebd949b551d3349f0210feb9 data/aether/tags/blocks/aerclouds.json 16a15f0767946dfa61ee9dfb544a3aeb3439340c data/aether/tags/blocks/aerogel.json diff --git a/src/generated/resources/.cache/797771fa92c9781c2c346f8c74e71a22b0dcdf25 b/src/generated/resources/.cache/232d7dc54f63e89526c247ba29265b5afad0215c similarity index 98% rename from src/generated/resources/.cache/797771fa92c9781c2c346f8c74e71a22b0dcdf25 rename to src/generated/resources/.cache/232d7dc54f63e89526c247ba29265b5afad0215c index 8ccb1c1e3b..bcc51e970d 100644 --- a/src/generated/resources/.cache/797771fa92c9781c2c346f8c74e71a22b0dcdf25 +++ b/src/generated/resources/.cache/232d7dc54f63e89526c247ba29265b5afad0215c @@ -1,4 +1,4 @@ -// 1.19.2 2022-11-26T17:48:28.9358745 Aether Item Tags +// 1.19.3 2022-12-19T11:26:00.1320023 Tags for minecraft:item mod id aether 688ae9828b941d1f6760e1e9d3126fac6b99608c data/aether/tags/items/accepted_music_discs.json b1b83b96d9600b7878597cc26851b843bf99a3dd data/aether/tags/items/accessories.json 6404c17e75ed612591fd253fd1cfd8c6a5ea4a8a data/aether/tags/items/aerbunny_temptation_items.json @@ -10,6 +10,7 @@ eb4cdf6f9a5abc219ab893139c2ed512fb1e06de data/aether/tags/items/angelic_blocks.j 4c3f53ffa001534a8db6e1a65a1bdefc3fa0142f data/aether/tags/items/book_of_lore_materials.json d9dcb253fe96193998f03751892165ee5f5c1924 data/aether/tags/items/boss_doorway_dungeon_blocks.json ac1d9421f0295d2b3a733f9b307cb39c2a63629d data/aether/tags/items/candy_cane_repairing.json +c365c56c9363907f546b5d4778b8608912fa27c9 data/aether/tags/items/crafts_skyroot_planks.json 321cad0c802b794f364a9ba5a34536ecc36271ec data/aether/tags/items/darts.json 689feb68cd191d91398feec72aac2a3ba6fc6c1e data/aether/tags/items/dart_shooters.json e76fa7895d12cebf68ad53507c85f84321c922ad data/aether/tags/items/deployable_parachutes.json diff --git a/src/generated/resources/.cache/248190968468b9dc2bff1b7b2131784d0d7857d4 b/src/generated/resources/.cache/248190968468b9dc2bff1b7b2131784d0d7857d4 index ba9c9c9f83..301316dc82 100644 --- a/src/generated/resources/.cache/248190968468b9dc2bff1b7b2131784d0d7857d4 +++ b/src/generated/resources/.cache/248190968468b9dc2bff1b7b2131784d0d7857d4 @@ -1,2 +1,2 @@ -// 1.19.2 2022-08-14T09:50:51.868884 dimension generator for aether +// 1.19.3 2022-12-19T09:40:51.9778562 dimension generator for aether 3c827e33b3adaea91c5043a542772dffeea61fdd data/aether/dimension/the_aether.json diff --git a/src/generated/resources/.cache/31e8da375e62dc325cd3de8be1b7d6a126a61eec b/src/generated/resources/.cache/27361c9f93b2c74f19780f93ccf4ad52b49349af similarity index 54% rename from src/generated/resources/.cache/31e8da375e62dc325cd3de8be1b7d6a126a61eec rename to src/generated/resources/.cache/27361c9f93b2c74f19780f93ccf4ad52b49349af index 439e8c6cd0..c32ecd3995 100644 --- a/src/generated/resources/.cache/31e8da375e62dc325cd3de8be1b7d6a126a61eec +++ b/src/generated/resources/.cache/27361c9f93b2c74f19780f93ccf4ad52b49349af @@ -1,2 +1,2 @@ -// 1.19.2 2022-08-14T09:50:51.8548334 Aether Fluid Tags +// 1.19.3 2022-12-09T19:53:19.9928394 Tags for minecraft:fluid mod id aether c9ae54a7510073b17edf82f7591e14bdb2c51837 data/aether/tags/fluids/allowed_bucket_pickup.json diff --git a/src/generated/resources/.cache/3b0fe09deeb115c0ed24c9963614d6853a6f89e0 b/src/generated/resources/.cache/3b0fe09deeb115c0ed24c9963614d6853a6f89e0 deleted file mode 100644 index 28b4b94e1d..0000000000 --- a/src/generated/resources/.cache/3b0fe09deeb115c0ed24c9963614d6853a6f89e0 +++ /dev/null @@ -1,5 +0,0 @@ -// 1.19.2 2022-12-01T17:48:50.0511715 worldgen/biome generator for aether -a89f0e3dbdd783366860d85ce52f274b674cb174 data/aether/worldgen/biome/golden_forest.json -f854a336e46654b1e33f12e9e3915dc6b96557b8 data/aether/worldgen/biome/skyroot_forest.json -e51bcf65cb5f00ee820876cd7122b58c69ec64eb data/aether/worldgen/biome/skyroot_grove.json -12d9b788e7e764195532eb3ccd0156f118d00fa6 data/aether/worldgen/biome/skyroot_thicket.json diff --git a/src/generated/resources/.cache/4a620f08c2dd26e75e94524bbb71add0ad1bc325 b/src/generated/resources/.cache/4a620f08c2dd26e75e94524bbb71add0ad1bc325 deleted file mode 100644 index bb54ad3b18..0000000000 --- a/src/generated/resources/.cache/4a620f08c2dd26e75e94524bbb71add0ad1bc325 +++ /dev/null @@ -1,5 +0,0 @@ -// 1.19.2 2022-11-27T13:22:39.9892967 worldgen/structure generator for aether -ddaec3fcac2f8f73f94831385e39eefc2d36e2e8 data/aether/worldgen/structure/bronze_dungeon.json -25469d369b63550f721e5ea8bf5205d41e999c3b data/aether/worldgen/structure/gold_dungeon.json -5d95d82aa273637160cb12c0d82e31d722ace6cd data/aether/worldgen/structure/large_aercloud.json -9f37f292b5ede93d396eb6bb65b5ab7e121916a7 data/aether/worldgen/structure/silver_dungeon.json diff --git a/src/generated/resources/.cache/6a3d99b2dfe3b52b9e5c114da2da10317036c053 b/src/generated/resources/.cache/59eb3dbb5f86130e09b3c62d89b9525ee01cf52d similarity index 99% rename from src/generated/resources/.cache/6a3d99b2dfe3b52b9e5c114da2da10317036c053 rename to src/generated/resources/.cache/59eb3dbb5f86130e09b3c62d89b9525ee01cf52d index 3c1063b772..cf0a90957f 100644 --- a/src/generated/resources/.cache/6a3d99b2dfe3b52b9e5c114da2da10317036c053 +++ b/src/generated/resources/.cache/59eb3dbb5f86130e09b3c62d89b9525ee01cf52d @@ -1,4 +1,4 @@ -// 1.19.2 2022-11-08T17:03:06.551701107 Aether Loot Tables +// 1.19.3 2022-12-12T12:51:18.8533931 Loot Tables d025471306910ea35dcf85d28fc188182a1b3c8d data/aether/loot_tables/advancements/enter_aether.json 96aec873b17d2a5aed2a22fe094efa32b8d54645 data/aether/loot_tables/blocks/aerogel.json 9e100e6de96b47a3a1b9533e76ad9847d364b9c0 data/aether/loot_tables/blocks/aerogel_slab.json @@ -51,10 +51,10 @@ cbc3fb3a3766eef0e267efcae14f68f4beb991ec data/aether/loot_tables/blocks/hellfire 71c2dca6991829c42cdb80e19d8eee48200ef1d9 data/aether/loot_tables/blocks/hellfire_wall.json 4f280929cf5b6538cf20ef03b7b097883de796c2 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 82b89089226c25ceeb0c11506374073fa923862c 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 -55dac0b82e3254167cd0e58330e673947f7baa44 data/aether/loot_tables/blocks/holystone_bricks.json 10f246dcf4434028b08e52b5d52f881dcda12f90 data/aether/loot_tables/blocks/holystone_button.json 6161f683aa3c6ee8b09c6f9243c47cd9a1d218d9 data/aether/loot_tables/blocks/holystone_pressure_plate.json 3224fb702bec15b1444d318ea0e7109bdfc9f059 data/aether/loot_tables/blocks/holystone_slab.json @@ -117,7 +117,7 @@ aef28ccaa6b0f973eb16fbd41a29c98db3359637 data/aether/loot_tables/blocks/stripped 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 -50a9e24d188f74c43878b88b03bade4b18f636f9 data/aether/loot_tables/blocks/treasure_chest.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 diff --git a/src/generated/resources/.cache/63a021942da19534fa76a96f23a5878ca1d9a371 b/src/generated/resources/.cache/63a021942da19534fa76a96f23a5878ca1d9a371 deleted file mode 100644 index d24403f94e..0000000000 --- a/src/generated/resources/.cache/63a021942da19534fa76a96f23a5878ca1d9a371 +++ /dev/null @@ -1,5 +0,0 @@ -// 1.19.2 2022-11-24T23:31:56.4717525 worldgen/structure_set generator for aether -c6f5828f13a1f05ed7c94913a3cacfe5c93ef904 data/aether/worldgen/structure_set/bronze_dungeon.json -c128b9af7f6959fe80ca2fff258309a9baf90cf9 data/aether/worldgen/structure_set/gold_dungeon.json -e37ae90b21149e5827318fb1d6523d0f8363bbc0 data/aether/worldgen/structure_set/large_aercloud.json -0b8ff469c84c21c41895dc3e9ee0708e492b55f0 data/aether/worldgen/structure_set/silver_dungeon.json diff --git a/src/generated/resources/.cache/735031f3addf80804addae5e3f53249900116f1e b/src/generated/resources/.cache/735031f3addf80804addae5e3f53249900116f1e index 731e072d41..d84f261ddb 100644 --- a/src/generated/resources/.cache/735031f3addf80804addae5e3f53249900116f1e +++ b/src/generated/resources/.cache/735031f3addf80804addae5e3f53249900116f1e @@ -1,2 +1,2 @@ -// 1.19.2 2022-09-10T09:04:26.8283251 Sound Definitions -8dc29f14dff39e4125b0ce6b76bd81329c38d282 assets/aether/sounds.json +// 1.19.3 2022-12-09T18:55:17.5178138 Sound Definitions +6841606f823dfaf99bc274f0eb7cd482647b78b4 assets/aether/sounds.json diff --git a/src/generated/resources/.cache/7448c942dea71deed59a9581856c68cf60b193de b/src/generated/resources/.cache/7448c942dea71deed59a9581856c68cf60b193de deleted file mode 100644 index 47fd8f77d9..0000000000 --- a/src/generated/resources/.cache/7448c942dea71deed59a9581856c68cf60b193de +++ /dev/null @@ -1,24 +0,0 @@ -// 1.19.2 2022-08-14T09:50:51.8607632 worldgen/configured_feature generator for aether -18a65f6608e5a7aca8d2a54e9c2d73c87bc03dd6 data/aether/worldgen/configured_feature/aether_dirt_ore.json -16a2ae74f54e0744b412dfca906201c5df3d3653 data/aether/worldgen/configured_feature/ambrosium_ore.json -72653fc7374866ed421de23ca9e6aa202e88efed data/aether/worldgen/configured_feature/blue_aercloud.json -e8a26e105aaec63ce90962277b1d0075eaf16a71 data/aether/worldgen/configured_feature/cold_aercloud.json -55746da79ad2e897b37f03c882d3e7ec21353c58 data/aether/worldgen/configured_feature/crystal_island.json -1da0928a92c3e345d3b1cf64c6a4ba989ecd7bbb data/aether/worldgen/configured_feature/crystal_tree.json -b81fbd8ba1ee40b86491b8ee0f99c117c242d76a data/aether/worldgen/configured_feature/flower_patch.json -dfc78a16e715dbf5702264789746f4cc747bd188 data/aether/worldgen/configured_feature/golden_aercloud.json -2217bf18c74a0644d7d9ac6a18743fc781718398 data/aether/worldgen/configured_feature/golden_oak_tree.json -c75a69a06a66ad5a2ab402d7bca52e3e58098362 data/aether/worldgen/configured_feature/grass_patch.json -f663848a5a75d0573dea2aaf1791ba48669adc07 data/aether/worldgen/configured_feature/gravitite_ore_common.json -df7baff686b5d66e4e816e1ef2716751fe927f0e data/aether/worldgen/configured_feature/gravitite_ore_dense.json -601b9ac6551101ffa824913082400b735e3232a2 data/aether/worldgen/configured_feature/holiday_tree.json -4a2527816696c27fad74921b9c6cd3fb44d4649e data/aether/worldgen/configured_feature/icestone_ore.json -75713dabd68934c554b8cc2ca0f71a306257e664 data/aether/worldgen/configured_feature/pink_aercloud.json -a0650ffce1169e7d15f9aa207b6b139fa905c5b2 data/aether/worldgen/configured_feature/quicksoil_shelf.json -f46be64b74246276492162453c5ad440bb09a3fb data/aether/worldgen/configured_feature/skyroot_tree.json -06029a837eb77f1213cdb3c86f3b30cfa877ba18 data/aether/worldgen/configured_feature/tall_grass_patch.json -dde58eb494781d69e8c8545e7e013e2c558be608 data/aether/worldgen/configured_feature/trees_golden_oak_and_skyroot.json -ad9a38a87e4927b4b215fd473dbc459ed0a462bf data/aether/worldgen/configured_feature/trees_skyroot_and_golden_oak.json -e3a804c5d61371bc4fdfe9132d82488a30f465e8 data/aether/worldgen/configured_feature/water_lake.json -07742c52dac96e2e6dff9d8a1385bd2e81dcc4d5 data/aether/worldgen/configured_feature/water_spring.json -d42cdab79461449679a4a4ba478d5ca037b578ab data/aether/worldgen/configured_feature/zanite_ore.json diff --git a/src/generated/resources/.cache/84fe6562c3263bad7911908ec1f7b4c6a74e7999 b/src/generated/resources/.cache/84fe6562c3263bad7911908ec1f7b4c6a74e7999 deleted file mode 100644 index 3ca76d263b..0000000000 --- a/src/generated/resources/.cache/84fe6562c3263bad7911908ec1f7b4c6a74e7999 +++ /dev/null @@ -1,23 +0,0 @@ -// 1.19.2 2022-11-27T16:30:51.0265368 worldgen/placed_feature generator for aether -ae63d0e0f5d9c44eb75e02fc596fb3564e1c1ab8 data/aether/worldgen/placed_feature/aether_dirt_ore.json -abcf2c1d93a2b2e6fbb0a13571253e76d8768747 data/aether/worldgen/placed_feature/ambrosium_ore.json -1d87df9577a9df7d5dc62b1930fedb1e4183d4f9 data/aether/worldgen/placed_feature/blue_aercloud.json -ad3dd641f63e4645070a49bc18c83284eea4acb3 data/aether/worldgen/placed_feature/cold_aercloud.json -b920c3af0d7d24143821478ec8e9de4c580881b9 data/aether/worldgen/placed_feature/crystal_island.json -56308956b159d158796893506af8d9ec40c00c8d data/aether/worldgen/placed_feature/flower_patch.json -bbfc98ef28d36705448b516877924cafaa841385 data/aether/worldgen/placed_feature/golden_aercloud.json -16d0d98dfbf5c917197ca57652c397a20a4d30ea data/aether/worldgen/placed_feature/golden_forest_trees.json -91161f8a3cfc038407a71cff9d473ddfff3a9e09 data/aether/worldgen/placed_feature/grass_patch.json -9c26bc2a4934655fb701a220bc35dc3962fd0cfa data/aether/worldgen/placed_feature/gravitite_ore_common.json -42550b21f6f1cdaaac4e4f6447fbf685a1ffa020 data/aether/worldgen/placed_feature/gravitite_ore_dense.json -228dc702621073807591674b16e3db9e697851a1 data/aether/worldgen/placed_feature/holiday_tree.json -84687a9429ed6c84df7b9ef4e7667a354d788c56 data/aether/worldgen/placed_feature/icestone_ore.json -24c6a689765fac21805aff99c8845768cf24db8a data/aether/worldgen/placed_feature/pink_aercloud.json -b02739ecf5737c04d12ff59e2df3f694f88588d2 data/aether/worldgen/placed_feature/quicksoil_shelf.json -038f5ed2d26be4b496e4083be035d295079a05ef data/aether/worldgen/placed_feature/skyroot_forest_trees.json -75556dce5eb1a04f81a232b2d2229aa67390902b data/aether/worldgen/placed_feature/skyroot_grove_trees.json -a206fc916937d21470bfb99c6a3549a2b153ae06 data/aether/worldgen/placed_feature/skyroot_thicket_trees.json -fba1629bffd91d3c9080b68e2ce33da6b292b73b data/aether/worldgen/placed_feature/tall_grass_patch.json -578d4b6f0222292c00a2aa2ed36743e6df45a9f6 data/aether/worldgen/placed_feature/water_lake.json -9fb8091f9b36b552659045fcf49dcfa6c8fc37aa data/aether/worldgen/placed_feature/water_spring.json -f77bf9f1f4d11796afbe51e4af30c42fa5ffc996 data/aether/worldgen/placed_feature/zanite_ore.json diff --git a/src/generated/resources/.cache/ff81da177a6c8ae35f28123afe13c95ba48aa6bf b/src/generated/resources/.cache/8c612d57ec52f747b666a8d00c73628b9773ba1d similarity index 72% rename from src/generated/resources/.cache/ff81da177a6c8ae35f28123afe13c95ba48aa6bf rename to src/generated/resources/.cache/8c612d57ec52f747b666a8d00c73628b9773ba1d index d2caf44d64..96d8da6044 100644 --- a/src/generated/resources/.cache/ff81da177a6c8ae35f28123afe13c95ba48aa6bf +++ b/src/generated/resources/.cache/8c612d57ec52f747b666a8d00c73628b9773ba1d @@ -1,3 +1,3 @@ -// 1.19.2 2022-08-14T09:50:51.8649605 Aether Loot Modifiers +// 1.19.3 2022-12-19T15:43:57.966448 Global Loot Modifiers : aether 57f1a7642250141784a6ed47e848a4861fe5a54b data/aether/loot_modifiers/remove_seeds.json 638585b28d4a6059f61459bd2ea3fe9928aa95e7 data/forge/loot_modifiers/global_loot_modifiers.json diff --git a/src/generated/resources/.cache/878d7dc758db8dc2bb3a6288d38cb36a95bf701b b/src/generated/resources/.cache/93ef46d8e2a70c25df1652217c68bb7a1c161142 similarity index 93% rename from src/generated/resources/.cache/878d7dc758db8dc2bb3a6288d38cb36a95bf701b rename to src/generated/resources/.cache/93ef46d8e2a70c25df1652217c68bb7a1c161142 index 27de5163d1..b2d0371b53 100644 --- a/src/generated/resources/.cache/878d7dc758db8dc2bb3a6288d38cb36a95bf701b +++ b/src/generated/resources/.cache/93ef46d8e2a70c25df1652217c68bb7a1c161142 @@ -1,4 +1,4 @@ -// 1.19.2 2022-09-30T17:12:44.9748022 Aether Item Models +// 1.19.3 2022-12-10T08:22:25.5477753 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 @@ -32,12 +32,12 @@ cf7b2783076dfa52685c372f30df78d633653b41 assets/aether/models/item/blue_cape.jso 844560cd220fc6dd90531a06ccb1ffbbd28fe829 assets/aether/models/item/blue_moa_egg.json 63ec6c618a3a23eab4cab9c52d7d3250de9b516e assets/aether/models/item/blue_swet_spawn_egg.json b511582e963e02e1c5c1e4dc18331df7e638621f assets/aether/models/item/book_of_lore.json -38009a82b1be2cefa0ba7ecdef3b9e4f96796292 assets/aether/models/item/boss_doorway_angelic_stone.json -8dd31a077d3ce16cfb5e755448beed536d75d120 assets/aether/models/item/boss_doorway_carved_stone.json -a2d2dc58910189328906bccc22f009ccbd9faad9 assets/aether/models/item/boss_doorway_hellfire_stone.json -7bdd9631922e33d6810445783ae7f59cac252b19 assets/aether/models/item/boss_doorway_light_angelic_stone.json -54a894044906b11327b09d6edd21aa4c98dbde75 assets/aether/models/item/boss_doorway_light_hellfire_stone.json -935cb78a2b2755a9d1b5e5684aabcda671d0efb8 assets/aether/models/item/boss_doorway_sentry_stone.json +93ffe5d47b97d682b74bd4fe8e7edb2a8ef9a3a5 assets/aether/models/item/boss_doorway_angelic_stone.json +c216ce0c379bddf707a9ee7329b929ae6c2fb9fe assets/aether/models/item/boss_doorway_carved_stone.json +c678b64a334d0ae8e9cec263a988cd76a4dec6dc assets/aether/models/item/boss_doorway_hellfire_stone.json +6a2e2c24d1aa3859e9fba4a6cf6a1c44a9cb8438 assets/aether/models/item/boss_doorway_light_angelic_stone.json +bca5447293fbea5f7c0523005a4fd523b9ffdc1b assets/aether/models/item/boss_doorway_light_hellfire_stone.json +e3f46943165b623320edced340d44f054478d458 assets/aether/models/item/boss_doorway_sentry_stone.json 619292f2f6fb25c583cf5dd95f9daadbed226f31 assets/aether/models/item/bronze_dungeon_key.json 5267ca41c7a25c538947c478299c33d0e5cbbe77 assets/aether/models/item/candy_cane.json 2c102972f03a81b7df5d9011039a1a1d72b22449 assets/aether/models/item/candy_cane_sword.json @@ -136,12 +136,12 @@ c2d0568c3579d68fe7d2ae0a8a319128e0c3aaff assets/aether/models/item/iron_pendant. 4d27cd7eb2bbf7e9e5a7151751e13a7d03b1da0c assets/aether/models/item/lightning_sword.json b2eb3d83d27d03fa57cfc2c1dd95bcd82d78212e assets/aether/models/item/light_angelic_stone.json 5f03e27dbbb9611a0243b707ed0b25f0eb5a3eb0 assets/aether/models/item/light_hellfire_stone.json -dbc4f210021cf3b67856afbdeae1f26514e4aa52 assets/aether/models/item/locked_angelic_stone.json -4990cdc43e81bbaa03a9b4e86d223e168da62dac assets/aether/models/item/locked_carved_stone.json -0a3c540c1c31ff77764746724c383d89a48bc394 assets/aether/models/item/locked_hellfire_stone.json -b00db61a5c7237870215b5a9a8109e4a47505d65 assets/aether/models/item/locked_light_angelic_stone.json -f36c106d4e756b92777cd0164a5dde4c82ec0399 assets/aether/models/item/locked_light_hellfire_stone.json -f2946459bad0a3ff24dc702fbaa63cf90abc504e assets/aether/models/item/locked_sentry_stone.json +7caf65c14cd5e33716517fcfdb482ea5abd97dc1 assets/aether/models/item/locked_angelic_stone.json +1c209c970520dcfaaebfacbc1480807e36404eda assets/aether/models/item/locked_carved_stone.json +77b89c9dd87cf52d1e32b47ae398e02dca98e5a8 assets/aether/models/item/locked_hellfire_stone.json +fe9c8c6d432ab04b95b47c66bb9761316b24e964 assets/aether/models/item/locked_light_angelic_stone.json +4be2dde940739e384747117c07fb5c2e5910a92a assets/aether/models/item/locked_light_hellfire_stone.json +e9f5b107da723ba98ea80df9f4b22c2f2331a9dc assets/aether/models/item/locked_sentry_stone.json 63ec6c618a3a23eab4cab9c52d7d3250de9b516e assets/aether/models/item/mimic_spawn_egg.json 63ec6c618a3a23eab4cab9c52d7d3250de9b516e assets/aether/models/item/moa_spawn_egg.json 7758b0c4ef5373ecfdeea06559faa726d3387e65 assets/aether/models/item/mossy_holystone.json @@ -238,19 +238,19 @@ e0387df2707c173961406c32ca673a4e5fba405d assets/aether/models/item/skyroot_tropi 63ec6c618a3a23eab4cab9c52d7d3250de9b516e assets/aether/models/item/sun_spirit_spawn_egg.json 3ae7127b69ef7ba9076fc41a14a0cdb86c185d70 assets/aether/models/item/swet_ball.json 6f8516aafdcbbd75021e5e2ab82e570c4ea28c11 assets/aether/models/item/swet_cape.json -0b3f0f24069e28feaf8acf2a70e3f6c8940da702 assets/aether/models/item/trapped_angelic_stone.json -7d25fd5758c0b62a71f4c5bb5588f41db93c5417 assets/aether/models/item/trapped_carved_stone.json -6a286f6ad5c7417e75619fbd7d307787e7deb44f assets/aether/models/item/trapped_hellfire_stone.json -b5c64159449dec119815b1810947746a4044159a assets/aether/models/item/trapped_light_angelic_stone.json -b6d97f27ada126993504ffa147127eef3e85d090 assets/aether/models/item/trapped_light_hellfire_stone.json -83519a5dcf955f9a85bbe9a2b87f40cdaa11d776 assets/aether/models/item/trapped_sentry_stone.json +9784383ef8540c380bf634c4bedc4ac73ae1a717 assets/aether/models/item/trapped_angelic_stone.json +420cd4d775c8be80ad3106b058bfe3186d4ad997 assets/aether/models/item/trapped_carved_stone.json +aeb2c0ce4927200077548624e2b76739b6610d15 assets/aether/models/item/trapped_hellfire_stone.json +8ac9e3927328e61a3db09a845d0d699287a8b481 assets/aether/models/item/trapped_light_angelic_stone.json +b1393635222003327b0ea72a3f2316a27e4a88c1 assets/aether/models/item/trapped_light_hellfire_stone.json +6a6e1de68f7b275080df2ebc97705fa2b0bbfedc assets/aether/models/item/trapped_sentry_stone.json f6caba399494a58683561699d72ad1cc86e3d339 assets/aether/models/item/treasure_chest.json -52b0cc0358f4c1afd024d81dda2ffe7fef1e04c2 assets/aether/models/item/treasure_doorway_angelic_stone.json -85ed6bd1c03ebd3d489b6d70d579d5677e71b84d assets/aether/models/item/treasure_doorway_carved_stone.json -841b613be5644d47d6ed98c4dc265f70842b343e assets/aether/models/item/treasure_doorway_hellfire_stone.json -ed4bb81dca4ad6ed593f23d609cb034fd32ba72d assets/aether/models/item/treasure_doorway_light_angelic_stone.json -f157da5e2c8fde0ca97c653b8e735e723ae285a3 assets/aether/models/item/treasure_doorway_light_hellfire_stone.json -9c03d7362d78d86eb7191315fbbdd7e20f5592df assets/aether/models/item/treasure_doorway_sentry_stone.json +e284115210f6b0b01972f4cb3ddc5fc20a47b037 assets/aether/models/item/treasure_doorway_angelic_stone.json +926f79532319443e570a6f8e0dee62f6afc89712 assets/aether/models/item/treasure_doorway_carved_stone.json +5b1840d06c610f259fef07e7e40adfec401cb4c9 assets/aether/models/item/treasure_doorway_hellfire_stone.json +ad19b50aa6968538da78a72d3b6ae5c170d649ff assets/aether/models/item/treasure_doorway_light_angelic_stone.json +f4294163c79379b9cd89f11b6f5da17523d83d78 assets/aether/models/item/treasure_doorway_light_hellfire_stone.json +2025606a8a55c41f0b96eb9c3fb7f301481db939 assets/aether/models/item/treasure_doorway_sentry_stone.json c6790cd0595e0e9c1ba9fc72897be53dd0e196c5 assets/aether/models/item/valkyrie_axe.json db253500a2d4d5a185f0b0111f9ca227a1972a82 assets/aether/models/item/valkyrie_boots.json 8f9faf9d3071ee8803304fa07906cdc3cabd829a assets/aether/models/item/valkyrie_cape.json diff --git a/src/generated/resources/.cache/9fb1092f32d4fcbf9e061ffd718d4ec689c6c95e b/src/generated/resources/.cache/9fb1092f32d4fcbf9e061ffd718d4ec689c6c95e index f9cf40b499..90a1e1ddb5 100644 --- a/src/generated/resources/.cache/9fb1092f32d4fcbf9e061ffd718d4ec689c6c95e +++ b/src/generated/resources/.cache/9fb1092f32d4fcbf9e061ffd718d4ec689c6c95e @@ -1,271 +1,231 @@ -// 1.19.2 2022-11-15T22:41:31.8994694 Recipes -d000da625d82240dda7b149bfae6cafbdc56d4c0 data/aether/advancements/recipes/aether_accessories/blue_cape.json -e51fddb0b890fa94472e7882ae603719607fc2d6 data/aether/advancements/recipes/aether_accessories/chainmail_gloves_repairing.json -6a4414227977f3bc902dbeb8a926309ccbe75688 data/aether/advancements/recipes/aether_accessories/diamond_gloves.json -b6303e8e3580e0710fea2efff9a68dc9801713de data/aether/advancements/recipes/aether_accessories/diamond_gloves_repairing.json -4eec6f9966db5af43210c562e28a1afd37ac8413 data/aether/advancements/recipes/aether_accessories/golden_gloves.json -bbc59a1df1571383f8a21f7c5df69c6d81d37b2c data/aether/advancements/recipes/aether_accessories/golden_gloves_repairing.json -7bbc8b30de11e773666ef2e5fb2a69ab6e710f0e data/aether/advancements/recipes/aether_accessories/golden_pendant.json -29ff0fe956375cd27771709b4f295c6687ba891a data/aether/advancements/recipes/aether_accessories/golden_ring.json -cb9c17a1d29bcaccc535899409746a3c64591fad data/aether/advancements/recipes/aether_accessories/gravitite_gloves.json -2f9cb100cad16519abdcc8ac73c7c9dd3a057fc9 data/aether/advancements/recipes/aether_accessories/gravitite_gloves_repairing.json -e298f47ff2dca7b9805addb75782293c0fa9b6da data/aether/advancements/recipes/aether_accessories/ice_pendant_from_freezing.json -23605bf85519cea3f7a4d31c89f2bbbc2bf0079e data/aether/advancements/recipes/aether_accessories/ice_ring_from_freezing.json -f68b6f384b041424ff66c2501bf4dcd11977818d data/aether/advancements/recipes/aether_accessories/iron_gloves.json -17120bb2b91151743db955e2b0b62d7ce0e33e9f data/aether/advancements/recipes/aether_accessories/iron_gloves_repairing.json -a57f2422fe013995ee59d1897ae02d9df177e3d6 data/aether/advancements/recipes/aether_accessories/iron_pendant.json -e457f1987ad1a4020ae5d840d5d795d21d4c7f6c data/aether/advancements/recipes/aether_accessories/iron_ring.json -5c2c9b41a6d7c244395db0797aa675b18a4298ab data/aether/advancements/recipes/aether_accessories/leather_gloves.json -87e94aca1b7adeae17290c91481a963342227af9 data/aether/advancements/recipes/aether_accessories/leather_gloves_repairing.json -30ae79ea1d34dd3008f7408803bdb9a8c92137f0 data/aether/advancements/recipes/aether_accessories/netherite_gloves_repairing.json -ea92c35366c45bb58870233dbd3ddb153d9a1c4c data/aether/advancements/recipes/aether_accessories/netherite_gloves_smithing.json -20949f2277201ca8454a85557a52cf5bb7f7408b data/aether/advancements/recipes/aether_accessories/red_cape.json -859b48face2b900562defbcc3025e6d99f90c5aa data/aether/advancements/recipes/aether_accessories/white_cape.json -cb23c301f30d4f25e9cb68e9c6fb05e51ca9f6a2 data/aether/advancements/recipes/aether_accessories/yellow_cape.json -b25eba1785c02ec81b8abb8ba4b8d8fe0aba13a2 data/aether/advancements/recipes/aether_accessories/zanite_gloves.json -7261100e55114d0cccd786b75dad3f9cd538de92 data/aether/advancements/recipes/aether_accessories/zanite_gloves_repairing.json -e8adda5f3688ff3f969dfe8351538baf108f80c3 data/aether/advancements/recipes/aether_accessories/zanite_pendant.json -f3fc7b79f00e56cd41c3ac759e498c14dfb1b125 data/aether/advancements/recipes/aether_accessories/zanite_pendant_repairing.json -5a9c007e549dad2c4243b39b3130dcc2483df23f data/aether/advancements/recipes/aether_accessories/zanite_ring.json -e32e37a4d7b33271faf5d71cc9c8219fb466503b data/aether/advancements/recipes/aether_accessories/zanite_ring_repairing.json -10a1cefee44ae1b3d1af6784cddd950bc642e125 data/aether/advancements/recipes/aether_armor/gravitite_boots.json -70dc07002736259eb667dadcf242b68957fd4722 data/aether/advancements/recipes/aether_armor/gravitite_boots_repairing.json -081a2ec80fb2bfc9f4277afb7ff9f2aa3c59d6f1 data/aether/advancements/recipes/aether_armor/gravitite_chestplate.json -0dfa74217fe4b99f60fd326847e931cd90deb80a data/aether/advancements/recipes/aether_armor/gravitite_chestplate_repairing.json -2fd740dd814fa5d92d17393af6e7208c9504b352 data/aether/advancements/recipes/aether_armor/gravitite_helmet.json -aa7c36cb01b0d107ce34d7cf168a2393d4ca423b data/aether/advancements/recipes/aether_armor/gravitite_helmet_repairing.json -b5adf7e037c523e98fec17d417a5ddb4e18e589d data/aether/advancements/recipes/aether_armor/gravitite_leggings.json -361e3e4b2e56f13d5044141d1b894db30ae4ff0e data/aether/advancements/recipes/aether_armor/gravitite_leggings_repairing.json -43cecc38f88ca585e18f3ad388921c784af10a21 data/aether/advancements/recipes/aether_armor/zanite_boots.json -39afe8c16461123ccc305151f334fbc95aafd0b1 data/aether/advancements/recipes/aether_armor/zanite_boots_repairing.json -825982804b178cf9524be1fef6075432d0daca69 data/aether/advancements/recipes/aether_armor/zanite_chestplate.json -24e7b66bb843f0f7af6e6785ca4c8a4fc3494559 data/aether/advancements/recipes/aether_armor/zanite_chestplate_repairing.json -e4e71646b16cbe52640f619344970920419e489a data/aether/advancements/recipes/aether_armor/zanite_helmet.json -39d24f4ef1a6fef7fced32bd72fda4c1244a7208 data/aether/advancements/recipes/aether_armor/zanite_helmet_repairing.json -ba6544ca307aaad3eff79af4dd08b01af6739e8a data/aether/advancements/recipes/aether_armor/zanite_leggings.json -a2456cf22dd089cb7a2a6a889d6a4910556c0e98 data/aether/advancements/recipes/aether_armor/zanite_leggings_repairing.json -1d7abc4c8c4e7132f31bd563a8dd82a8f3285d0d data/aether/advancements/recipes/aether_blocks/aerogel_slab.json -dbe4c5ba304edd15e0d2f32943f1af7635b34037 data/aether/advancements/recipes/aether_blocks/aerogel_slab_stonecutting.json -6e53af7c3f7e89910ad337753c6d70a4cdcf0440 data/aether/advancements/recipes/aether_blocks/aerogel_stairs.json -07adc903387c62b78d26294437975a00c3dd8d3a data/aether/advancements/recipes/aether_blocks/aerogel_stairs_stonecutting.json -7e6fb62aa25f19514642234027c07f26826dcd9f data/aether/advancements/recipes/aether_blocks/aerogel_wall.json -a38425d092a5d6d9cb8c21d9dd1d180fe5028513 data/aether/advancements/recipes/aether_blocks/aerogel_wall_stonecutting.json -3703d32267821cf15e28bbd5bfc444b205c471ff data/aether/advancements/recipes/aether_blocks/altar.json -66b9e717884de7821ecccdab17fcc52cf06a6975 data/aether/advancements/recipes/aether_blocks/ambrosium_block.json -02f25c665d941c3c4f28aab3e1952ce11aca83e8 data/aether/advancements/recipes/aether_blocks/ambrosium_torch.json -3ffa4ca877710f6de8a32aceb60ccda1d46a9ed3 data/aether/advancements/recipes/aether_blocks/angelic_slab.json -79fd7bd5a6ce2319df5db0a4d2e4e67dc34ec9c1 data/aether/advancements/recipes/aether_blocks/angelic_slab_stonecutting.json -edd85b7301a1a8d5c058c69488a300ecc1ba3d7a data/aether/advancements/recipes/aether_blocks/angelic_stairs.json -fba6d98644dceaf66f016079d89509475295b1d7 data/aether/advancements/recipes/aether_blocks/angelic_stairs_stonecutting.json -a512a7532e66e9445616a1f39b8cfd8698407b39 data/aether/advancements/recipes/aether_blocks/angelic_stone_from_light_angelic_stone_stonecutting.json -cd6a65b844699a7eb8b98b924e98e487073325ef data/aether/advancements/recipes/aether_blocks/angelic_stone_from_pillar_stonecutting.json -68d547a77cf03284dc9fd7770030080c588cc19f data/aether/advancements/recipes/aether_blocks/angelic_stone_from_pillar_top_stonecutting.json -7c3ba0468af5959b35ec422eb4f28afe96736d29 data/aether/advancements/recipes/aether_blocks/angelic_wall.json -21a033bb3825a20bc88dc01d31bd6a77d6679b79 data/aether/advancements/recipes/aether_blocks/angelic_wall_stonecutting.json -8c8af56189212c4c42ddbeadb3809dfc800a2f0c data/aether/advancements/recipes/aether_blocks/blue_aercloud_freezing.json -984958c3aa72cdfd380f7703647f92d4856e37a8 data/aether/advancements/recipes/aether_blocks/carved_slab.json -031c510cb29b942e40b2a365917b4007ec6230dc data/aether/advancements/recipes/aether_blocks/carved_slab_stonecutting.json -97b19202100fffea4ff256b9d19140c5fd65843e data/aether/advancements/recipes/aether_blocks/carved_stairs.json -d2301f5234ad3b43619b0a4a77561b54f3890aba data/aether/advancements/recipes/aether_blocks/carved_stairs_stonecutting.json -dd24157563fcb90e3532b92221afc6e03a8e9646 data/aether/advancements/recipes/aether_blocks/carved_stone_from_sentry_stone_stoncutting.json -50d96b63e0396b6e4189efd73998a492fbb9926f data/aether/advancements/recipes/aether_blocks/carved_wall.json -25893d402201bccd98a1030e315172c9b880343b data/aether/advancements/recipes/aether_blocks/carved_wall_stonecutting.json -f7da2f0eed891d58dadc146fbec4c5265b10db1a data/aether/advancements/recipes/aether_blocks/crystal_leaves_freezing.json -5a57493909239e426a9e39abeee8ed1769082e2c data/aether/advancements/recipes/aether_blocks/enchanted_gravitite_enchanting.json -f8b3a38aff60de2179bfe7ae75a3182e86d9d92e data/aether/advancements/recipes/aether_blocks/freezer.json -c4ffaa272d80b2507e52defc8284f9f56b052edf data/aether/advancements/recipes/aether_blocks/golden_log_to_planks.json -ea5997bb58930ede495c38af0c036557117948f7 data/aether/advancements/recipes/aether_blocks/golden_oak_wood.json -4acfd81b7d514e708e9ea692342230badc4c9aa0 data/aether/advancements/recipes/aether_blocks/golden_wood_to_planks.json -7a7fb11628bd459185c4b479423592f56ef67262 data/aether/advancements/recipes/aether_blocks/hellfire_slab.json -d1070e3aa6bfc2204a5c67747dff9ac36b9ee6df data/aether/advancements/recipes/aether_blocks/hellfire_slab_stonecutting.json -83726b72faf2369228ef705fb459e5f2438e9d7f data/aether/advancements/recipes/aether_blocks/hellfire_stairs.json -c9a18ba137835294bde28803422a874ead78ee90 data/aether/advancements/recipes/aether_blocks/hellfire_stairs_stonecutting.json -a5fe0e54e686e2324e891e1932ab7f7ca7ee9b0e data/aether/advancements/recipes/aether_blocks/hellfire_stone_from_light_hellfire_stone_stonecutting.json -afbc2d3cd28058fe3eee7460b33b49be0cfd138a data/aether/advancements/recipes/aether_blocks/hellfire_wall.json -ea4d3afc9414d27c8d22e796ba3a68dc6df930b5 data/aether/advancements/recipes/aether_blocks/hellfire_wall_stonecutting.json -0cdcd0bf6cc327db6bf70e8c5829a8b020c78b51 data/aether/advancements/recipes/aether_blocks/holystone_bricks.json -088e42e8bb9e128f08c45f6ff922dd14e7a45ed9 data/aether/advancements/recipes/aether_blocks/holystone_brick_slab.json -202a0b777f4b4affd0ebc64d9d0973e835f16d37 data/aether/advancements/recipes/aether_blocks/holystone_brick_slab_stonecutting.json -06303863fd4fbce71c0bed0f7a67e99a09902c62 data/aether/advancements/recipes/aether_blocks/holystone_brick_stairs.json -224546b52a66298447577c6f6ba14da791bfd50e data/aether/advancements/recipes/aether_blocks/holystone_brick_stairs_stonecutting.json -c0605aa21089caa353003fc63d85fa97afff4f5b data/aether/advancements/recipes/aether_blocks/holystone_brick_stonecutting.json -b67d83b61f242ed5e16d5952dc91ae04c3c033d8 data/aether/advancements/recipes/aether_blocks/holystone_brick_wall.json -cdc797c19d5157d838186cddd50719817cef8cd4 data/aether/advancements/recipes/aether_blocks/holystone_brick_wall_stonecutting.json -47cfe7947bbc18a535ccd77e5edf45f3edd49f13 data/aether/advancements/recipes/aether_blocks/holystone_button.json -e274da8f4c4e40ec39e626d7353ae150f7cc6b3c data/aether/advancements/recipes/aether_blocks/holystone_pressure_plate.json -d33b8dffb84205dc44ab389148477c23b8db36f4 data/aether/advancements/recipes/aether_blocks/holystone_slab.json -9de153364db48d5c1d562b8058d58d60cf7ed89e data/aether/advancements/recipes/aether_blocks/holystone_slab_stonecutting.json -08d2b65b70d999c764f9d6ba16d33eb787c5a6e6 data/aether/advancements/recipes/aether_blocks/holystone_stairs.json -310b4cda633f4f01f4b9ce9a1aa163ab04e47414 data/aether/advancements/recipes/aether_blocks/holystone_stairs_stonecutting.json -2fedee88e97ba805b5d2f9d1d4c1fd58058fa8d2 data/aether/advancements/recipes/aether_blocks/holystone_to_holystone_brick_slab_stonecutting.json -cc2abc2456668ea813d8fce3ddf4b2b3776af2b0 data/aether/advancements/recipes/aether_blocks/holystone_to_holystone_brick_stairs_stonecutting.json -99cddd3902032cca76df2557fc03b06679246973 data/aether/advancements/recipes/aether_blocks/holystone_to_holystone_brick_wall_stonecutting.json -a493cdb14de46c67c9a2bdd0420a2ef2a6a78ee7 data/aether/advancements/recipes/aether_blocks/holystone_wall.json -af6d219f539c2e55f4e0974d1b828cd364c0e9ca data/aether/advancements/recipes/aether_blocks/holystone_wall_stonecutting.json -29d7db9aa189ccd4cc3bedde101c68ffdd600995 data/aether/advancements/recipes/aether_blocks/icestone_slab.json -8c2ab479deea7271d5a81e99eb4e91e06c4686ba data/aether/advancements/recipes/aether_blocks/icestone_stairs.json -5fab46aa6abb10baff6f256ff78e6269bf3a5c7d data/aether/advancements/recipes/aether_blocks/icestone_wall.json -ddd88956a201f3801a0f6c53ca5e912c2467b39e data/aether/advancements/recipes/aether_blocks/incubator.json -5337beada1d79de3103ac63b3b7ed85f9fe6b706 data/aether/advancements/recipes/aether_blocks/light_angelic_stone_stonecutting.json -b3058d14fb6b4b9b16e895feb65df7148ac047b1 data/aether/advancements/recipes/aether_blocks/light_hellfire_stone_stonecutting.json -93808ddddeac189ea2f749a4e8567b281f0c379e data/aether/advancements/recipes/aether_blocks/mossy_holystone_slab.json -f3aeb0aaa2c90667e6c5a4b0c4244b16938f8712 data/aether/advancements/recipes/aether_blocks/mossy_holystone_slab_stonecutting.json -be01a4acfa3875cf6027ac15220542dab1349800 data/aether/advancements/recipes/aether_blocks/mossy_holystone_stairs.json -da317cac78e336f49b9f045b51f6381202dde70a data/aether/advancements/recipes/aether_blocks/mossy_holystone_stairs_stonecutting.json -3642c57770aa9a8d59d23c0afd59e1182b1acb0b data/aether/advancements/recipes/aether_blocks/mossy_holystone_wall.json -07a874ef289e1c23fb30b29107e483639947ca44 data/aether/advancements/recipes/aether_blocks/mossy_holystone_wall_stonecutting.json -3691c2b8325e076655717a933f9249d725ab9b2a data/aether/advancements/recipes/aether_blocks/mossy_holystone_with_moss.json -110aa4da79bb9f7c773141ef383626243e77a367 data/aether/advancements/recipes/aether_blocks/mossy_holystone_with_vine.json -36940ac46e31d9dc4a32745e740b52e524aa9a90 data/aether/advancements/recipes/aether_blocks/pillar_from_pillar_top_stonecutting.json -1a5b81525ae95515b7def431748b19a4f450fdc6 data/aether/advancements/recipes/aether_blocks/pillar_stonecutting.json -ef5789fa2ec006fdfe47267ee7eb196524f2f693 data/aether/advancements/recipes/aether_blocks/pillar_top_from_pillar_stonecutting.json -cda957d56d9212cc510aa4c0194117c9dae399a4 data/aether/advancements/recipes/aether_blocks/pillar_top_stonecutting.json -241fa0999cff7582de9c0a79f02610aea56cf717 data/aether/advancements/recipes/aether_blocks/quicksoil_glass_enchanting.json -969321410958aca08e6050f98da5b157289925a8 data/aether/advancements/recipes/aether_blocks/quicksoil_glass_pane.json -b15226c78b1bba65b6f129917f7dcdaaea9c4f03 data/aether/advancements/recipes/aether_blocks/sentry_stone_stoncutting.json -8a70368aee826e458ce95e4c3f7b890ff608ee47 data/aether/advancements/recipes/aether_blocks/skyroot_bed.json -715780e3f7909da3c641278e32d2d7af5ab2ad34 data/aether/advancements/recipes/aether_blocks/skyroot_bookshelf.json -c248a2fa1f11b22da3080230810cf2ad21a08de2 data/aether/advancements/recipes/aether_blocks/skyroot_button.json -c303ccd4296c6701fb14755fc79e07c64962556b data/aether/advancements/recipes/aether_blocks/skyroot_door.json -542ce788a55a67f325baa9081f8bdf611434376a data/aether/advancements/recipes/aether_blocks/skyroot_fence.json -e0a7ddffea194cc14d5371daf2cb5631737c2a93 data/aether/advancements/recipes/aether_blocks/skyroot_fence_gate.json -9b1f946c35702788b11bc855a89496a84b9275bf data/aether/advancements/recipes/aether_blocks/skyroot_planks.json -cd6a834a0740b590440310558299c68862ac7b78 data/aether/advancements/recipes/aether_blocks/skyroot_pressure_plate.json -bda220c3b49693885aacff6df64ad969057b991b data/aether/advancements/recipes/aether_blocks/skyroot_sign.json -98bbe1feb26ead589e7278e7733a7941c48ea265 data/aether/advancements/recipes/aether_blocks/skyroot_slab.json -01ec3ddb2195f82f3533bd5c4edd676da97a9c86 data/aether/advancements/recipes/aether_blocks/skyroot_stairs.json -97c2059746c57fd988a0a1dabb2d2cb25b3fe138 data/aether/advancements/recipes/aether_blocks/skyroot_trapdoor.json -efd9997315d2da38de4798a0bfcdc05eca049f53 data/aether/advancements/recipes/aether_blocks/skyroot_wood.json -ea8f2db1ba89dfbc8c2b4e16e7684d4acba8ff74 data/aether/advancements/recipes/aether_blocks/stripped_log_to_planks.json -ce91f42a7fd2c611fb1537f39f9b8f1a1869b379 data/aether/advancements/recipes/aether_blocks/stripped_skyroot_wood.json -a57ad8b28181b1bdd34bb3cf6c86ded514dcca52 data/aether/advancements/recipes/aether_blocks/stripped_wood_to_planks.json -301b31d0da6421a032f2c46eba0beda9697204f4 data/aether/advancements/recipes/aether_blocks/wood_to_planks.json -99f3526173e56a6d96c07e3123e6fc6b31b3b8e1 data/aether/advancements/recipes/aether_blocks/zanite_block.json -46e18b152515d42df06329112900ecdb048aa25c data/aether/advancements/recipes/aether_food/enchanted_berry_enchanting.json -63271f144f306ce4f7c23aa5156877a353908e52 data/aether/advancements/recipes/aether_food/healing_stone_enchanting.json -c548b9a2953c2a425a061b2e485b3208d663ed70 data/aether/advancements/recipes/aether_materials/ambrosium_shard.json -be526378841d1bcf6eee35e10901b816bced00f3 data/aether/advancements/recipes/aether_materials/blast_ambrosium.json -46d5a0fcb7d2dd8f10e5d354c64185d723875d39 data/aether/advancements/recipes/aether_materials/blast_zanite.json -60b0f7d01817962a3730141a283a798256c2df65 data/aether/advancements/recipes/aether_materials/skyroot_stick.json -b970a1a5254087b4c358a6796f9694c2d0a15de0 data/aether/advancements/recipes/aether_materials/smelt_ambrosium.json -45e5cf000f67c2bce4f6447cf16d83679969d561 data/aether/advancements/recipes/aether_materials/smelt_zanite.json -89df4a4a98e8f4850d6bc199b798901ff1651f5c data/aether/advancements/recipes/aether_materials/zanite_gemstone.json -e1d24111bd658facc1a30af033b4790b3c8bdbb7 data/aether/advancements/recipes/aether_misc/aether_tune_enchanting.json -8aacf1750526e04e611d46895ae62796e1166593 data/aether/advancements/recipes/aether_misc/book_of_lore.json -34d5fd0f4192094e8912bfe54fa1567c400b415d data/aether/advancements/recipes/aether_misc/chinchilla_enchanting.json -d6942a77d87bb5fc3d6ac3e42d64675f75e6b1ab data/aether/advancements/recipes/aether_misc/cold_parachute.json -bff8ec2dd2e6c4f18b557e2765116af515574153 data/aether/advancements/recipes/aether_misc/golden_parachute.json -235d1d3b9fa3808c3ed3e633cf10034921080d67 data/aether/advancements/recipes/aether_misc/legacy_enchanting.json -f5c6d7e3169a15326e99e738912f0863767db3a5 data/aether/advancements/recipes/aether_misc/nature_staff.json -6dcfed6e98b83b93615f892eca612ea8a3e1bb0e data/aether/advancements/recipes/aether_misc/remedy_bucket_enchanting.json -31c9c42c92a9cca2988470528fb56a43e2941de5 data/aether/advancements/recipes/aether_misc/skyroot_boat.json -ff3e2b0cf3eeb3e4cf8b66dcadb4efc899d6fd57 data/aether/advancements/recipes/aether_misc/skyroot_bucket.json -66a5e5d37d06389684abf6a7c58cc70674e69654 data/aether/advancements/recipes/aether_misc/skyroot_chest_boat.json -df926bce4f33057224e58abf001817cf79ba0582 data/aether/advancements/recipes/aether_misc/welcoming_skies_freezing.json -fcac6dc709b170888e4f5b71f30f97e523aedfc9 data/aether/advancements/recipes/aether_tools/gravitite_axe.json -a53925e63b68c0a6b61e9f809a20ee10b11bfadb data/aether/advancements/recipes/aether_tools/gravitite_axe_repairing.json -2c5a200180e8e96709b56baf583bd5458d9b75c7 data/aether/advancements/recipes/aether_tools/gravitite_hoe.json -29596853ec38199fbdd3a1855da18fa57227cbd2 data/aether/advancements/recipes/aether_tools/gravitite_hoe_repairing.json -f92f9282c29e8ea1d5e2bd46649b69c36c82987e data/aether/advancements/recipes/aether_tools/gravitite_pickaxe.json -7e007450b185537e40e1f833b8e981b240b5fa56 data/aether/advancements/recipes/aether_tools/gravitite_pickaxe_repairing.json -c8f124feff0bf2eaadd6bddc97d4b8c36c525fa0 data/aether/advancements/recipes/aether_tools/gravitite_shovel.json -bc914ae2960720a5ca14a501c5755597f0c68bab data/aether/advancements/recipes/aether_tools/gravitite_shovel_repairing.json -cf8be3b8949eac81a7f176fe2d35711f11892155 data/aether/advancements/recipes/aether_tools/holystone_axe.json -156a47d6e9d97adfb9a4b3d8f227a3ac24e599d7 data/aether/advancements/recipes/aether_tools/holystone_axe_repairing.json -b127bdc1f173b443d16f2603fd876cae8b567082 data/aether/advancements/recipes/aether_tools/holystone_hoe.json -00fa1cf83c94345cb2d06cf5d09ebbeeeca95046 data/aether/advancements/recipes/aether_tools/holystone_hoe_repairing.json -655e124135272916d7166f3356ba1ea447059149 data/aether/advancements/recipes/aether_tools/holystone_pickaxe.json -3feab4d8066913fdfe92ac5d7beebd67c11fa537 data/aether/advancements/recipes/aether_tools/holystone_pickaxe_repairing.json -2f1b82d2d02d8d7072f46414bd855fceccae0607 data/aether/advancements/recipes/aether_tools/holystone_shovel.json -8e682e984e79e86043a88171ca18339772a3f00d data/aether/advancements/recipes/aether_tools/holystone_shovel_repairing.json -a655b1a1b6d227102643855a08fdae33c798b353 data/aether/advancements/recipes/aether_tools/skyroot_axe.json -84a8106994a08679147f16cde660475b098e70db data/aether/advancements/recipes/aether_tools/skyroot_axe_repairing.json -ab47a4d1fbe1a30683a0aacfa5cb1b07b3426b3b data/aether/advancements/recipes/aether_tools/skyroot_hoe.json -0dec4854ef0db14cf87120ce4d418f53d636f65a data/aether/advancements/recipes/aether_tools/skyroot_hoe_repairing.json -2a1926722e32d01505ba8ed95ccc6d6fbbd708c8 data/aether/advancements/recipes/aether_tools/skyroot_pickaxe.json -9cd59ee10bf4997ef47cb501ad5ea3c1a07b22fc data/aether/advancements/recipes/aether_tools/skyroot_pickaxe_repairing.json -816c9d087b2ec8638c7f06fd25213577f0f7c9df data/aether/advancements/recipes/aether_tools/skyroot_shovel.json -e2d2806214c2a6acb79e4618bd1ea1f2beb8da7b data/aether/advancements/recipes/aether_tools/skyroot_shovel_repairing.json -69419505dbd40da45d9e5a3553440d029d1da4d7 data/aether/advancements/recipes/aether_tools/zanite_axe.json -4daaa7f59472359774224fc84a026c3a3c574f44 data/aether/advancements/recipes/aether_tools/zanite_axe_repairing.json -0d2c21c9b62f2594600d3b9b58313bd685e8fe75 data/aether/advancements/recipes/aether_tools/zanite_hoe.json -c6ac56aaba839bafb9bfdba8a0160f16454b2be0 data/aether/advancements/recipes/aether_tools/zanite_hoe_repairing.json -5e3a6f97a413b68d6c4869857b45d85e11489da9 data/aether/advancements/recipes/aether_tools/zanite_pickaxe.json -1ba74b38ee2bc2cadee710fadd584606d457f08b data/aether/advancements/recipes/aether_tools/zanite_pickaxe_repairing.json -cde0684630edf235e3f019f7eadf6684a7665e0c data/aether/advancements/recipes/aether_tools/zanite_shovel.json -15361b570ad45475b5cb204844e7e6ef298db92d data/aether/advancements/recipes/aether_tools/zanite_shovel_repairing.json -ac359d6189e7df44336a09304bda231b08cce538 data/aether/advancements/recipes/aether_weapons/enchanted_dart_enchanting.json -c696b8e974d780d02ce13afec154a2fec81c0672 data/aether/advancements/recipes/aether_weapons/enchanted_dart_shooter_enchanting.json -ac6a6d38266323339a8559266d97ae489736e13f data/aether/advancements/recipes/aether_weapons/golden_dart.json -2bfc14217a5e86e560745a0667572b394b47b7b8 data/aether/advancements/recipes/aether_weapons/golden_dart_shooter.json -e99b1970989cdbcee3e40252e4ff1483df052346 data/aether/advancements/recipes/aether_weapons/gravitite_sword.json -df55d7f07d9214f8d0c2fb7087cb8f9f1d85187e data/aether/advancements/recipes/aether_weapons/gravitite_sword_repairing.json -7fb1947c4b8c54f898c880517acdcc3103940696 data/aether/advancements/recipes/aether_weapons/holystone_sword.json -f557dd9c22f4492757f16180afc7eb8e1fe6a92e data/aether/advancements/recipes/aether_weapons/holystone_sword_repairing.json -5a820f47490d908e54d84469ecfef7c5e0972ae3 data/aether/advancements/recipes/aether_weapons/poison_dart.json -f90648d6b3f82ca295aeb708b9baf433ddd49e22 data/aether/advancements/recipes/aether_weapons/poison_dart_shooter.json -9b30cd02300c4a676d0a876746926365c25428ae data/aether/advancements/recipes/aether_weapons/skyroot_sword.json -c9bac1460b02b54bdd1193ffde51432e0f644c22 data/aether/advancements/recipes/aether_weapons/skyroot_sword_repairing.json -1c2bcaea0a75008215ceeb28e55d3d4661268af6 data/aether/advancements/recipes/aether_weapons/zanite_sword.json -c1356dd404ad4a77eede6039600b5aedb9000a49 data/aether/advancements/recipes/aether_weapons/zanite_sword_repairing.json +// 1.19.3 2022-12-19T18:28:21.3866546 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 +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 +8c2ab479deea7271d5a81e99eb4e91e06c4686ba data/aether/advancements/recipes/building_blocks/icestone_stairs.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 +d000da625d82240dda7b149bfae6cafbdc56d4c0 data/aether/advancements/recipes/combat/blue_cape.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 +0cae25ee9acc79e6dbb30c82ee45d32c94196d6b 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 +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 9ce36a08e4781814ed9e45627de157c3a24e34a4 data/aether/advancements/recipes/combat/skyroot_shield.json +9b30cd02300c4a676d0a876746926365c25428ae data/aether/advancements/recipes/combat/skyroot_sword.json +c9bac1460b02b54bdd1193ffde51432e0f644c22 data/aether/advancements/recipes/combat/skyroot_sword_repairing.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 -b19d8fe17be476411ec6b2a1242dcbd0bb3c4c19 data/aether/advancements/recipes/decorations/gravitite_jukebox.json -a99e3240168d656c1a025f78f28470991ea01f92 data/aether/advancements/recipes/decorations/skyroot_barrel.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 +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 +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 +04a219b3ce71d215cb59f5f700cde8283f1d7a9e 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 -e6c7a1ec2027e9a91a695fa4f2969458465546f8 data/aether/advancements/recipes/decorations/skyroot_crafting_table.json +13e0ee2ba74cafd65e237e87c2c0f8cce60ec040 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 -d0e3fc34906d0f600970374a6da33df07fa0f4e8 data/aether/advancements/recipes/decorations/skyroot_gravitite_jukebox.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 624ed16f932356690a3edd9091df37bba5d6ba6f data/aether/advancements/recipes/incubation/black_moa_incubation.json 55960f7fe355b964c698a30480cd3fb5f3f97160 data/aether/advancements/recipes/incubation/blue_moa_incubation.json 9f1f8792d7e6b3433799c2159d267356df4c0366 data/aether/advancements/recipes/incubation/orange_moa_incubation.json ab12feda7f67509ed4daef63612f890dd3ac45c8 data/aether/advancements/recipes/incubation/white_moa_incubation.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 +e298f47ff2dca7b9805addb75782293c0fa9b6da data/aether/advancements/recipes/misc/ice_pendant_from_freezing.json +23605bf85519cea3f7a4d31c89f2bbbc2bf0079e data/aether/advancements/recipes/misc/ice_ring_from_freezing.json +235d1d3b9fa3808c3ed3e633cf10034921080d67 data/aether/advancements/recipes/misc/legacy_enchanting.json +6dcfed6e98b83b93615f892eca612ea8a3e1bb0e data/aether/advancements/recipes/misc/remedy_bucket_enchanting.json +a645fc52fc53df77272615bf5d0f968ee207d513 data/aether/advancements/recipes/misc/skyroot_bucket.json +df1aa5a220fdb95b1c2ab8527b695b37fdf52589 data/aether/advancements/recipes/misc/skyroot_stick.json +df926bce4f33057224e58abf001817cf79ba0582 data/aether/advancements/recipes/misc/welcoming_skies_freezing.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 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 +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 @@ -273,16 +233,42 @@ b9016a7f3d7398b1467e7393d3cc3036c79f9355 data/aether/advancements/recipes/tools/ 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 +a655b1a1b6d227102643855a08fdae33c798b353 data/aether/advancements/recipes/tools/skyroot_axe.json +84a8106994a08679147f16cde660475b098e70db data/aether/advancements/recipes/tools/skyroot_axe_repairing.json +ab47a4d1fbe1a30683a0aacfa5cb1b07b3426b3b data/aether/advancements/recipes/tools/skyroot_hoe.json +0dec4854ef0db14cf87120ce4d418f53d636f65a data/aether/advancements/recipes/tools/skyroot_hoe_repairing.json +2a1926722e32d01505ba8ed95ccc6d6fbbd708c8 data/aether/advancements/recipes/tools/skyroot_pickaxe.json +9cd59ee10bf4997ef47cb501ad5ea3c1a07b22fc data/aether/advancements/recipes/tools/skyroot_pickaxe_repairing.json +816c9d087b2ec8638c7f06fd25213577f0f7c9df 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 @@ -292,62 +278,71 @@ df99a5bb54f381c82cd00f9b5d79a2c024ea9da3 data/aether/advancements/recipes/tools/ 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 -94c996f9430545a6d34a50e2302aee3e29955822 data/aether/advancements/recipes/transportation/aether_saddle.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 5badcd0ba0108ef0b005743881a3efe163aeaa8b data/aether/recipes/accessory_freeze_lava.json 485337fa6e9d77bf15aeea4b061ff18fcd5540f7 data/aether/recipes/accessory_freeze_water.json 0db55d55d59157df6bd3dc51efb82cdf5a6614f4 data/aether/recipes/aerogel_conversion.json -76345db205be6e041e509fe70c812327427d4eb1 data/aether/recipes/aerogel_slab.json -550ff51db66fca47eee538cff73eb3676a22c4ff data/aether/recipes/aerogel_slab_stonecutting.json -b5a32efcda68a36539b05bed21227513cf07a2e0 data/aether/recipes/aerogel_stairs.json -b86b7fb30456ff6f186ab7a8d9862275151218f1 data/aether/recipes/aerogel_stairs_stonecutting.json -52084f470c731d2fb17e1391c2592d762538839c data/aether/recipes/aerogel_wall.json -cc8707e81ffb76bebe922b86a0a8543f87ec08f4 data/aether/recipes/aerogel_wall_stonecutting.json -07a389baabfd874e9a8b5e0d96bf4996bff7a033 data/aether/recipes/aether_saddle.json -21037e62e11f6322879a6e930bfe4fd83b306dbf data/aether/recipes/aether_tune_enchanting.json -7367625d3f1873d3b153ab7721133f224f65e099 data/aether/recipes/altar.json -09800b9740225a4d56b73708654786913f0d6c73 data/aether/recipes/ambrosium_block.json +dc936d19476ccf7ced000d6b51a0eb4c5ba9653e data/aether/recipes/aerogel_slab.json +550ff51db66fca47eee538cff73eb3676a22c4ff data/aether/recipes/aerogel_slab_from_aerogel_stonecutting.json +593932064671a7f456cd5b47c9369e2236f68930 data/aether/recipes/aerogel_stairs.json +b86b7fb30456ff6f186ab7a8d9862275151218f1 data/aether/recipes/aerogel_stairs_from_aerogel_stonecutting.json +914d51c84b09cd2b196cab36193af7a299013b79 data/aether/recipes/aerogel_wall.json +cc8707e81ffb76bebe922b86a0a8543f87ec08f4 data/aether/recipes/aerogel_wall_from_aerogel_stonecutting.json +7eee988b40a021b7ce5e36189bf0ab8e928f586f data/aether/recipes/aether_saddle.json +6cf757142ac1721ed27c3593b6c4617dcd37d04f data/aether/recipes/aether_tune_enchanting.json +5faf2618f5a7de5758f96948091895c0490712b8 data/aether/recipes/altar.json +1379fd75225b3224885dbfa3f1ce1f18ef7964b1 data/aether/recipes/ambrosium_block.json 453451e26bd4a68814efc558a9eae20afcbc8c3d data/aether/recipes/ambrosium_enchant_aether_grass_to_enchanted_aether_grass.json -3ec6110ed9b5e4a35fe6539b6a3063df0e70fbfc data/aether/recipes/ambrosium_shard.json -538692328ebb7f74f4f2b3966c9c5901a32df15d data/aether/recipes/ambrosium_torch.json -6f33befa3c195423772aa515758ec9bb4158d877 data/aether/recipes/angelic_slab.json -0c34c9b8029712e8dce8476a776b05b344e806ae data/aether/recipes/angelic_slab_stonecutting.json -711e51d1691182616f269f1f088eac99e888b54a data/aether/recipes/angelic_stairs.json -0ba7db9493481629b10e587d7684d95713f510e6 data/aether/recipes/angelic_stairs_stonecutting.json +311c797765eefdecd2e980cbbfb50217d7ad66ee data/aether/recipes/ambrosium_shard_from_ambrosium_block.json +4f194dde321a2e6a6db64b64dc33f993dc549219 data/aether/recipes/ambrosium_shard_from_blasting.json +affdc90fc8ebd8020b56c2db4f9d1c05f8c4e641 data/aether/recipes/ambrosium_shard_from_smelting.json +0b64e24fd4243140bd2d6fce464a678e9a8aad4a data/aether/recipes/ambrosium_torch.json +1ba86bf26721e3f30597617581b9125b22f23b63 data/aether/recipes/angelic_slab.json +0c34c9b8029712e8dce8476a776b05b344e806ae data/aether/recipes/angelic_slab_from_angelic_stone_stonecutting.json +8bf786daa0af29cb4649cb6f8e7acef461310fd7 data/aether/recipes/angelic_stairs.json +0ba7db9493481629b10e587d7684d95713f510e6 data/aether/recipes/angelic_stairs_from_angelic_stone_stonecutting.json 41844462a809c64934544d72046db726bd222886 data/aether/recipes/angelic_stone_from_light_angelic_stone_stonecutting.json 5259479fdf11de4ad006d50ad54e1aa627a08722 data/aether/recipes/angelic_stone_from_pillar_stonecutting.json c49785e15b330d047ee3472675c6593de1d2f0a5 data/aether/recipes/angelic_stone_from_pillar_top_stonecutting.json -d472b39d657d468f59f26a7c666db76fac08911c data/aether/recipes/angelic_wall.json -ce347b7983f3ea3c4652536ae86b7e5bcb9c739f data/aether/recipes/angelic_wall_stonecutting.json +2971779d636f157d5641e18e132b1173aea0f771 data/aether/recipes/angelic_wall.json +ce347b7983f3ea3c4652536ae86b7e5bcb9c739f data/aether/recipes/angelic_wall_from_angelic_stone_stonecutting.json aa6c002c10cf3d8922d028f07c465932bc197f22 data/aether/recipes/black_moa_incubation.json -592eb4fcd6c89063352dc1510735c4bf70d0116a data/aether/recipes/blast_ambrosium.json -352e957b781b535b96635916fe9fdf031dcb80a6 data/aether/recipes/blast_zanite.json -ab383164f951657a7eef41792de7a78a98e32014 data/aether/recipes/blue_aercloud_freezing.json -7df11ed752a72e69f69ce6aa8d498dc2703f256f data/aether/recipes/blue_cape.json -cc3df0a566c42eeca95e083b0cc719d7f5fb97dc data/aether/recipes/blue_ice_freezing.json +966ad02855b31c4865fbbdefc759b97a6cc6c856 data/aether/recipes/blue_aercloud_freezing.json +fa00fef69a85151bf3f94e77b75b3167ca2f140b data/aether/recipes/blue_cape.json +70c76b0edd0f7f37c7080090150dcf2a22e31fea data/aether/recipes/blue_ice_freezing.json 94245576592eedf6c170aebfdfd2db2859725b6b data/aether/recipes/blue_moa_incubation.json -e4ed1a9881b5f620ccef85233fedc6f6b899df61 data/aether/recipes/book_of_lore.json +d8114b025777becbeb12d4abbf34bc05a9288281 data/aether/recipes/book_of_lore.json ec7efbe6e37d9c207680520582d9fb032a5defe8 data/aether/recipes/bow_repairing.json c9f83c39321f48f405dbe5603160f607a0bac335 data/aether/recipes/campfire_conversion.json e371dab5f279637b6ec2b248bf7c864dd0d5849d data/aether/recipes/candle_conversion.json -c8d81dd85f865260e6648dfe47f876764a225223 data/aether/recipes/carved_slab.json -d71d055fa5c03d188a787c0715c29f4058416083 data/aether/recipes/carved_slab_stonecutting.json -58518533f69bee54c0e026b6e57224c06efe00ac data/aether/recipes/carved_stairs.json -eb6885c6337e3ba0b2085799f863c1347727666d data/aether/recipes/carved_stairs_stonecutting.json -9648328a720d796a90f4dc45c0cd326f30ed4630 data/aether/recipes/carved_stone_from_sentry_stone_stoncutting.json -e09b75e663d902b5006f8ced3603bd2c01e26ff8 data/aether/recipes/carved_wall.json -626bb06ab113fbcb57fce79d1d13ad5941bb8ec0 data/aether/recipes/carved_wall_stonecutting.json +6ec818fc4537df8ab45e49d6d38d72b7f5dc3f68 data/aether/recipes/carved_slab.json +d71d055fa5c03d188a787c0715c29f4058416083 data/aether/recipes/carved_slab_from_carved_stone_stonecutting.json +164130d13e07c16880daa9520a09e444e962be31 data/aether/recipes/carved_stairs.json +eb6885c6337e3ba0b2085799f863c1347727666d data/aether/recipes/carved_stairs_from_carved_stone_stonecutting.json +9648328a720d796a90f4dc45c0cd326f30ed4630 data/aether/recipes/carved_stone_from_sentry_stone_stonecutting.json +d85c26b0b1db71f42fd80df922a470f550fc5eb3 data/aether/recipes/carved_wall.json +626bb06ab113fbcb57fce79d1d13ad5941bb8ec0 data/aether/recipes/carved_wall_from_carved_stone_stonecutting.json eb4660804eccf5232cb26235435502a7835947d2 data/aether/recipes/chainmail_boots_repairing.json 01f9cf73510a970d539bcc78e88b3a3c16f38f26 data/aether/recipes/chainmail_chestplate_repairing.json 903b734b5e3012eac5e0d3526ec7095938e2297a data/aether/recipes/chainmail_gloves_repairing.json 870deb34a941f3a5b804fca3b34abfa79ee4dd08 data/aether/recipes/chainmail_helmet_repairing.json a5ee6e2afdc30c3c33d7ed8b6cfb39158156437e data/aether/recipes/chainmail_leggings_repairing.json -24df9c56a2c466cb3f29bed890b66f717a2128e2 data/aether/recipes/chinchilla_enchanting.json -b50b07a33d9b7a6a2028bb09652caa6913f37f28 data/aether/recipes/cold_parachute.json -e36df6dff8a71e0907b999b425d88cd69e1c1785 data/aether/recipes/crystal_leaves_freezing.json +f5ef3f886d2d87dd68301996470de5f6d012dcd5 data/aether/recipes/chinchilla_enchanting.json +634dbf809696715c5ab8d43f7108d95be0802d99 data/aether/recipes/cold_parachute.json +8762ae05ca82818106b65d7a1539049037e0fe0a data/aether/recipes/crystal_leaves_freezing.json 9edbe8580faad32f74d35bca0008ec485a5e7321 data/aether/recipes/diamond_axe_repairing.json df78ae7d5220048bca77b8da66aa1a8e904a8eeb data/aether/recipes/diamond_boots_repairing.json bf1f774b937ed107b9e721dadcec1c47fbd76327 data/aether/recipes/diamond_chestplate_repairing.json -5d1768f43370489bb2ee14bef4444b89aea0d815 data/aether/recipes/diamond_gloves.json +8423968c03d205798e41d1173bd5c83078493f0a data/aether/recipes/diamond_gloves.json 31caae4d4b9144b29e67177fcf2c4ebc614ea22d data/aether/recipes/diamond_gloves_repairing.json 2d45f53f6f4f11532113db30ff218e64b4ef1299 data/aether/recipes/diamond_helmet_repairing.json 983d2250f0df8cd8e494129bf3bfadb2b2371feb data/aether/recipes/diamond_hoe_repairing.json @@ -355,114 +350,112 @@ bf1f774b937ed107b9e721dadcec1c47fbd76327 data/aether/recipes/diamond_chestplate_ b1446d7552fa3c028a92d1d7d608d177fb57511b data/aether/recipes/diamond_pickaxe_repairing.json 16751e4f620477a2134110e113d91dce161161ab data/aether/recipes/diamond_shovel_repairing.json a12a1cb1c0ba72a1e95feb4d6bf51af97cc116b2 data/aether/recipes/diamond_sword_repairing.json -30803b13d972463259f50de867319cf7d2f4c420 data/aether/recipes/enchanted_berry_enchanting.json -0aae383cf941d77e383ca14e7263a97d6a889481 data/aether/recipes/enchanted_dart_enchanting.json -932740b8902073fef4fac01844a1eb37153bdb47 data/aether/recipes/enchanted_dart_shooter_enchanting.json -144cec62a348b93d61fe57aa7509e5296ae3bf22 data/aether/recipes/enchanted_gravitite_enchanting.json +5d87305d2cd6b59c037aa7a1dd3ee0190ea548fc data/aether/recipes/enchanted_berry_enchanting.json +8e83ae2a5922430c9fb57ba60243b59eb80dd8a0 data/aether/recipes/enchanted_dart_enchanting.json +6ae28ea12362296ee6b842b2922946b33ca87df2 data/aether/recipes/enchanted_dart_shooter_enchanting.json +9fea3632d3990a00f6f52dac160304a962a400ee data/aether/recipes/enchanted_gravitite_enchanting.json 9225e66c32285348459a9c225a5014cb9ae34003 data/aether/recipes/fire_block_ban.json 8c545e01188fc38ef5a953213a95bafcac1371aa data/aether/recipes/fire_charge_item_ban.json ae8fe526f9984576879df2041a8197eee0e38428 data/aether/recipes/fishing_rod_repairing.json 28bc3ddd35184585aea298479760e900fb40b281 data/aether/recipes/flint_and_steel_item_ban.json -445997973d3c9740a27a2b05914d064408370f4c data/aether/recipes/flower_to_purple_dye.json -db117466c3c5ad973abbac873260a19dfa2d27ca data/aether/recipes/flower_to_white_dye.json -92136f3c9aed6bf70a4320c1c3adb65f9227fa52 data/aether/recipes/freezer.json +32d4a6e16673154cd90064b8989305c6bf55c783 data/aether/recipes/flower_to_purple_dye.json +3a5c687629a80cee02181eda9fbd0a4b7fbe8133 data/aether/recipes/flower_to_white_dye.json +3e846cd060d61e49afa2355b6cac3b1defcfbefd data/aether/recipes/freezer.json 45fc01ae67ee5a50f5f180a33ddedd461358405c data/aether/recipes/golden_axe_repairing.json 9fc15b8b5536b8271434ac870acb80d18a8cad35 data/aether/recipes/golden_boots_repairing.json 8ab0a4bbd35d103350e40be929cbed833cfe5aa1 data/aether/recipes/golden_chestplate_repairing.json -5fe9f943313909b0035b21f8e1e0f350a546bd7d data/aether/recipes/golden_dart.json -e9e0043da4ff3517a55825acd55ff2ebd637cd45 data/aether/recipes/golden_dart_shooter.json -f38e723344bd4059f272600c8941fc0024d78c21 data/aether/recipes/golden_gloves.json +4b4a3be61be0b971e9ced736c08efdc90df39143 data/aether/recipes/golden_dart.json +c2223f9ca55b17207a180aa35b00a688d1e7b47b data/aether/recipes/golden_dart_shooter.json +fe996854eb05a64870651fed81ed1692e1e747a4 data/aether/recipes/golden_gloves.json 4ef3edc2124ece1f9489dfbb823480642d5303b3 data/aether/recipes/golden_gloves_repairing.json 69952a2ecd2208e4517148dae78a18339ba60bcd data/aether/recipes/golden_helmet_repairing.json 375e13040570bc4f422b60866ac935b1256fff0f data/aether/recipes/golden_hoe_repairing.json 3c4cbe97b8b11817eae7b3054981554939ab0167 data/aether/recipes/golden_leggings_repairing.json -d054f0e6f88e01a2c45720e80cc70ee7bf7f97bf data/aether/recipes/golden_log_to_planks.json -6c771ec70728b3df219a5e85e309c988949a0b68 data/aether/recipes/golden_oak_wood.json -ad0c59aaa87d90d4059e925a2762b34ac55866cc data/aether/recipes/golden_parachute.json -059ae93475e469970096254ae29c5bf6b4b5afe5 data/aether/recipes/golden_pendant.json +7e9c1773ec56af21377056de5fec82556c612a2d data/aether/recipes/golden_oak_wood.json +c6bb4290f1b4b2fd84ddc023ef20762e4b30c062 data/aether/recipes/golden_parachute.json +43abf94c81bab14dc6b51035a1d42d3f0228fe7f data/aether/recipes/golden_pendant.json 36d2533a8fe5f6c817c6d2451ec9b93a8afe2d9d data/aether/recipes/golden_pickaxe_repairing.json -a9c105bb789c9f49d7775d0c853aa45d9cf109f2 data/aether/recipes/golden_ring.json +cad1003d564ca1d197ba0caab59f8deb6d0d189b data/aether/recipes/golden_ring.json 7e2e9db1642a2872365b4f1b8e1db6953d680632 data/aether/recipes/golden_shovel_repairing.json 7a7ced6fc51e372b8284ccd45915b458452df723 data/aether/recipes/golden_sword_repairing.json -c5b841736b90de93b74d25f72877849aad64b627 data/aether/recipes/golden_wood_to_planks.json -919bdc6b7327d79b0830c2949f040fb2059a53f1 data/aether/recipes/gravitite_axe.json +6842916ec7c2ab5e94c29d6ce366b459368bb01e data/aether/recipes/gravitite_axe.json 6268c4350713537ba29c87696b8a42bf449304ab data/aether/recipes/gravitite_axe_repairing.json -53b6e9e6313da6aaed17739f77fcdb568c1e5455 data/aether/recipes/gravitite_boots.json +9d2f707f10fd1184e57898417566e1ae988b661e data/aether/recipes/gravitite_boots.json 2366e52b2ea584732373f77480c49e7fd3f03524 data/aether/recipes/gravitite_boots_repairing.json -af4e1fff9aa8b933d1dedecf2ad258967fa2a973 data/aether/recipes/gravitite_chestplate.json +506933a1d22f5b107a0601b9c4c9dda51ae566ed data/aether/recipes/gravitite_chestplate.json 52794387874569e201e6116789ee037f5e303341 data/aether/recipes/gravitite_chestplate_repairing.json -4a4f7b3106357034b1785eb21877cd62b7bec7cb data/aether/recipes/gravitite_gloves.json +332c1fd764d8ef91b98c220eafed959ab890a9c8 data/aether/recipes/gravitite_gloves.json 7ce8f14f6f8bcd832f0a7723937b08f4a7af36b4 data/aether/recipes/gravitite_gloves_repairing.json -3e7f71b361e27a49eeb857e674e4eda138b5ec0c data/aether/recipes/gravitite_helmet.json +11ede49b3ad3332fa0a8ef0b1e6d28009b12d0ff data/aether/recipes/gravitite_helmet.json 121d4bf62f25384c01f2508eedd3ddb3a528fe18 data/aether/recipes/gravitite_helmet_repairing.json -6f600ed542fe64771dbfc184b288136b0673f081 data/aether/recipes/gravitite_hoe.json +843b921b5c4bff496bc161ff102f4586a2350d8b data/aether/recipes/gravitite_hoe.json 07368f13ac5dc6a3c1efc99df462d048f2f5ec81 data/aether/recipes/gravitite_hoe_repairing.json -67a29773957dfc94231d99464b46f7b384f1bbfd data/aether/recipes/gravitite_jukebox.json -1a9fcc72841ac60803cdc5e4488571d53f469684 data/aether/recipes/gravitite_leggings.json +9a65ad6ca99db2b2c5407b5b940726e788c4e491 data/aether/recipes/gravitite_jukebox.json +1b14f8d0b6f7d1cd2b7685900f100be627d32e18 data/aether/recipes/gravitite_leggings.json cca4f6ac9c327ecb8164f9d81b37b005dba268dc data/aether/recipes/gravitite_leggings_repairing.json -619c5525d3cdf10c7ddbe579951529d76648f047 data/aether/recipes/gravitite_pickaxe.json +9995b5a10637339bc03f0cf0d2c7451f22be660f data/aether/recipes/gravitite_pickaxe.json 9ccbb5fc3641f9fec627b3222df5a042ad8e23f2 data/aether/recipes/gravitite_pickaxe_repairing.json -1fcbc85f39314f2b12338d1e4cde398d81386689 data/aether/recipes/gravitite_shovel.json +a3cc8ed664aaa4aea534378c991662c568fbf797 data/aether/recipes/gravitite_shovel.json 0a3887ac167901a9e44064680824f71d4c048d33 data/aether/recipes/gravitite_shovel_repairing.json -f9340c23a80a16b1469470524585ac3673842a48 data/aether/recipes/gravitite_sword.json +933685654d1202c221fb8c3bee3fd897194da3a3 data/aether/recipes/gravitite_sword.json 09766c3cd99ce4acbee0070e99ca76048dd81da4 data/aether/recipes/gravitite_sword_repairing.json -425331254893c649d3d43ee3a8af85526f4bc522 data/aether/recipes/healing_stone_enchanting.json -920d62a2b959d09128601d840d55523aad0612dd data/aether/recipes/hellfire_slab.json -1e44c049d61562200e83aeeee1070a38150cfa0b data/aether/recipes/hellfire_slab_stonecutting.json -0714ecd0681dad4a34eb999c1c86f3b7c875c5ac data/aether/recipes/hellfire_stairs.json -1bcf5610c4491c614f9a9d5a980f19f7feee87a3 data/aether/recipes/hellfire_stairs_stonecutting.json +b9dead23ee31207c99acd686d627f39ff67ed1f8 data/aether/recipes/healing_stone_enchanting.json +460542a434f66ea31b8414857bfdd33da4c5464f data/aether/recipes/hellfire_slab.json +1e44c049d61562200e83aeeee1070a38150cfa0b data/aether/recipes/hellfire_slab_from_hellfire_stone_stonecutting.json +52d632046ff347939a2840b05c290082cad3aee3 data/aether/recipes/hellfire_stairs.json +1bcf5610c4491c614f9a9d5a980f19f7feee87a3 data/aether/recipes/hellfire_stairs_from_hellfire_stone_stonecutting.json b19aaa7cf10bb931c3f18bc786614cfa6de07fec data/aether/recipes/hellfire_stone_from_light_hellfire_stone_stonecutting.json -6f307c4f92da320ef866597e49aed8f16be90301 data/aether/recipes/hellfire_wall.json -79217f450110adbc3e61ea5d6f8a8abe30bcc909 data/aether/recipes/hellfire_wall_stonecutting.json -b02a603b010d56e08e2506e00bf40c12abfd321a data/aether/recipes/holystone_axe.json +939f8a20279e051e908aa8b548c469444ce6a859 data/aether/recipes/hellfire_wall.json +79217f450110adbc3e61ea5d6f8a8abe30bcc909 data/aether/recipes/hellfire_wall_from_hellfire_stone_stonecutting.json +c16d0b3a7ab28d886d752b5bd3481e392939bc8e data/aether/recipes/holystone_axe.json 426ce55576d4759f7cf1dc43e99c9a58adfac867 data/aether/recipes/holystone_axe_repairing.json -2d3f422363f457c7222513cb40f8f1e5e9fd5485 data/aether/recipes/holystone_bricks.json -da6d34e6e0e4e324335a81ac53258fa8ffb28cd9 data/aether/recipes/holystone_brick_slab.json -d4cda9bbe424ee08e907928acd0ee6f6b307886b data/aether/recipes/holystone_brick_slab_stonecutting.json -92084fcea13d55bf686389cace380622da5ceee5 data/aether/recipes/holystone_brick_stairs.json -a64c5ccc0e6ebec1e47a73aaeb4d608188d08151 data/aether/recipes/holystone_brick_stairs_stonecutting.json -23b40d1301d56e60856b8d68745e5f5dbe168ded data/aether/recipes/holystone_brick_stonecutting.json -25bc078ff983c96205e4cec4a85b2aa9e5a37f77 data/aether/recipes/holystone_brick_wall.json -beffc7c35832f0fb05d70eb0b01e88f6b1b64a39 data/aether/recipes/holystone_brick_wall_stonecutting.json -60ada6fbd0e9b04327f4fea76ca8ab3e58c0f435 data/aether/recipes/holystone_button.json -030dfe62ab4ff651dbc3052167840a1c073ef7c9 data/aether/recipes/holystone_hoe.json +d7ce0a0d876081714a87ea173ef3e84df2b8de1e data/aether/recipes/holystone_bricks.json +23b40d1301d56e60856b8d68745e5f5dbe168ded data/aether/recipes/holystone_bricks_from_holystone_stonecutting.json +7f9087f93e11f865766f7bedf44edcba9a389d8a data/aether/recipes/holystone_brick_slab.json +d4cda9bbe424ee08e907928acd0ee6f6b307886b data/aether/recipes/holystone_brick_slab_from_holystone_bricks_stonecutting.json +d086982930ce909ef19f35b2600aaa0cbcb795f8 data/aether/recipes/holystone_brick_slab_from_holystone_stonecutting.json +de665a46f58748ec6fa3906dbbf061ad8b533192 data/aether/recipes/holystone_brick_stairs.json +a64c5ccc0e6ebec1e47a73aaeb4d608188d08151 data/aether/recipes/holystone_brick_stairs_from_holystone_bricks_stonecutting.json +19d45be0a92566997324ca0d3c530c3ab0c7adcd data/aether/recipes/holystone_brick_stairs_from_holystone_stonecutting.json +abe9709f0c289c3cffe3104f97a5d91bab11dadc data/aether/recipes/holystone_brick_wall.json +beffc7c35832f0fb05d70eb0b01e88f6b1b64a39 data/aether/recipes/holystone_brick_wall_from_holystone_bricks_stonecutting.json +93504d548804f8b0a96174c9fbf849f1a3ee29e1 data/aether/recipes/holystone_brick_wall_from_holystone_stonecutting.json +bb24437aae23d585a7c913d66581ff9ff1609cd9 data/aether/recipes/holystone_button.json +a6e2b00440e924049306c8d70bb7eb91379b9bbf data/aether/recipes/holystone_hoe.json a5e10fde1146d114460177617fbd64d8d5d7bcbb data/aether/recipes/holystone_hoe_repairing.json -bced72635e44339511c93cdeb09f3b46eb907ad1 data/aether/recipes/holystone_pickaxe.json +7f2927fc5a97f5e34bdd8f8b29e7cd28cad26596 data/aether/recipes/holystone_pickaxe.json 986608cf0a21920fe4375ce7539d685af118fe78 data/aether/recipes/holystone_pickaxe_repairing.json -76b13dbf34decc42ec20ad38b19cf73da91574dc data/aether/recipes/holystone_pressure_plate.json -f3e2649b61241eb1f1a4a05ce0ca9951eccebb17 data/aether/recipes/holystone_shovel.json +4d02d49b9d56386e7f38c2520b89ba5abb16104d data/aether/recipes/holystone_pressure_plate.json +0c9f0ca0f185a8ee0d2e258fac48da8bd6a3f9a6 data/aether/recipes/holystone_shovel.json 89ebf13483878645144fa620500abf49ab949702 data/aether/recipes/holystone_shovel_repairing.json -28d1b3bb488ec9011fd97a76cbfa0abf5ade031d data/aether/recipes/holystone_slab.json -c2385061ee179a80097901422fcbbf82077ed217 data/aether/recipes/holystone_slab_stonecutting.json -5b0492e3f0f2004fcc0f94d5ae39b05ad8cb69a0 data/aether/recipes/holystone_stairs.json -2139b52d0b6890e80be5307670ff01608fb23cc1 data/aether/recipes/holystone_stairs_stonecutting.json -84f28d6fa77ea490005a15ee29dfe249dac7f915 data/aether/recipes/holystone_sword.json +5e1a25a9ebd72ead6f70291e928de0e69bf14ec0 data/aether/recipes/holystone_slab.json +c2385061ee179a80097901422fcbbf82077ed217 data/aether/recipes/holystone_slab_from_holystone_stonecutting.json +b271c48617e682769445c8ecc3caedd0e897a46f data/aether/recipes/holystone_stairs.json +2139b52d0b6890e80be5307670ff01608fb23cc1 data/aether/recipes/holystone_stairs_from_holystone_stonecutting.json +e4055cf016d12e64f56474f459d5d7ea1956e0d6 data/aether/recipes/holystone_sword.json 9781c8fe97e5439f166252ac802e2f39ad15b54a data/aether/recipes/holystone_sword_repairing.json -d086982930ce909ef19f35b2600aaa0cbcb795f8 data/aether/recipes/holystone_to_holystone_brick_slab_stonecutting.json -19d45be0a92566997324ca0d3c530c3ab0c7adcd data/aether/recipes/holystone_to_holystone_brick_stairs_stonecutting.json -93504d548804f8b0a96174c9fbf849f1a3ee29e1 data/aether/recipes/holystone_to_holystone_brick_wall_stonecutting.json -9bd25810bd936729fcf6f3aa36419158af0c9e3f data/aether/recipes/holystone_wall.json -2545f30d635460e87542c68aa3949392ecb518a0 data/aether/recipes/holystone_wall_stonecutting.json +7d68b2e686bbed2dd475e490b822fc2222f1b9f3 data/aether/recipes/holystone_wall.json +2545f30d635460e87542c68aa3949392ecb518a0 data/aether/recipes/holystone_wall_from_holystone_stonecutting.json 2d7ce07192385edc3dc87aa3109fc21530f88fee data/aether/recipes/icestone_freeze_lava.json 22c9b8fb4b520d5cc554c98545bca995e56ac6b0 data/aether/recipes/icestone_freeze_water.json -f0ff5d084af51930a1608298336c16ee41260ea6 data/aether/recipes/icestone_slab.json -da77ad07a806886593fcf23729dedf571cf471fb data/aether/recipes/icestone_stairs.json -676cd531453891c6cf74fbd2a3ffbc6237dd0e35 data/aether/recipes/icestone_wall.json -86dafdc12ec390d676745347b3e7ff8eb553cb7b data/aether/recipes/ice_from_bucket_freezing.json -fb5639d55642dd0880c11b156a7c496dd11ef488 data/aether/recipes/ice_pendant_from_freezing.json -65aedec50a3a0299c85d647b2183550d7e3c2d9b data/aether/recipes/ice_ring_from_freezing.json -df9d59eaa445865ef5e38b98384e6ce24596efd2 data/aether/recipes/incubator.json +21fa2ddfabf52d8b65e17cda4b82e1362caef399 data/aether/recipes/icestone_slab.json +1592552ce1f7eb5f0653fae672f94869c526bc6e data/aether/recipes/icestone_stairs.json +c922eaec6ae43db0a18abdef31389bf2b81865ac data/aether/recipes/icestone_wall.json +2d584f67c5ecb6ed2b9de86bcc595d1ece89ebfb data/aether/recipes/ice_from_bucket_freezing.json +9a94316af6ae6b0b4f411630c972881dbfe856b8 data/aether/recipes/ice_pendant_from_freezing.json +94f53596454f9ca5d807acc9f85e3bf1f2921fc9 data/aether/recipes/ice_ring_from_freezing.json +f5a8fb728d6349b6eb37a7d359ca51f002957781 data/aether/recipes/incubator.json a7ef3e94451c1fd4c6f05492b322939845a1817c data/aether/recipes/iron_axe_repairing.json 4fbc3887a26c2a58beb3ae8e822ee812fc94075a data/aether/recipes/iron_boots_repairing.json 363bc67c85adbc575410529c2c8191e1824b8fd3 data/aether/recipes/iron_chestplate_repairing.json -ff1d2b563caf52ccad0f30354548263612318078 data/aether/recipes/iron_gloves.json +71adc8a0e9ecbb2df47aaa66191fdbd950d98d6d data/aether/recipes/iron_gloves.json 4d65232a378d6353ff53ecd2ced6aa67f9595d19 data/aether/recipes/iron_gloves_repairing.json 1bf2d5bbbc00a8524a95371d67286becbb364f9f data/aether/recipes/iron_helmet_repairing.json e1927fdc13d5921a55b76db6aacbfe067e1473fb data/aether/recipes/iron_hoe_repairing.json bc640d301f82679484723a2b6bfe7fcba43805b7 data/aether/recipes/iron_leggings_repairing.json -ac295f8a9d65791f615482fc9af4d6017f788b98 data/aether/recipes/iron_pendant.json +d431eec0b84f16f9906acd9c295968abd00f8591 data/aether/recipes/iron_pendant.json fba2065f917c848baef42668d9dc5f6e0b482eb1 data/aether/recipes/iron_pickaxe_repairing.json -20f89ca49c19810f48d42a6425e56b72f7b5ee08 data/aether/recipes/iron_ring.json +c744736f8063d5791aefc491388038a6d76761bd data/aether/recipes/iron_ring.json dc5ee472f4e24635ed0fd01d7ae825898adef010 data/aether/recipes/iron_shovel_repairing.json 5c9a46712519ce7c828317bd8b2cdd0f354cfc0e data/aether/recipes/iron_sword_repairing.json cb352b3eaf3f668b1c3bd081252c803ea92e7b5c data/aether/recipes/jack_o_lantern_conversion.json @@ -470,22 +463,22 @@ f611323404f573aa51e067755bc5f3bcd2f0f529 data/aether/recipes/lantern_block_ban.j 3fd5e1423752ac00420b0da48f6332bd777e8327 data/aether/recipes/lantern_item_ban.json 61f485f894b9338b3bad53c7475dcbd5bdbab2ca data/aether/recipes/leather_boots_repairing.json 914968cc8e411a7f71cb53ad67ee1b5345f3b93e data/aether/recipes/leather_chestplate_repairing.json -c099e534e6af57c9135afb1832bc72fe86ddd9f0 data/aether/recipes/leather_gloves.json +3c42e288912d655920b405f20e062b1e0f47afcd data/aether/recipes/leather_gloves.json e191b47291833e6cd89ef72f7ba42183f14014e4 data/aether/recipes/leather_gloves_repairing.json a62475231fc7783e49e43bd85f623549dc75287e data/aether/recipes/leather_helmet_repairing.json 8e6bb68afa729c401100e071e9559789f66c72c7 data/aether/recipes/leather_leggings_repairing.json -a19b1a01871e920aebbb68699e14934f506f6c06 data/aether/recipes/legacy_enchanting.json -5836b373b673bd2ce024c6ef405192744ec20b4f data/aether/recipes/light_angelic_stone_stonecutting.json -5f57b6da3d2fbd156f97a5dbd69651108ac003b3 data/aether/recipes/light_hellfire_stone_stonecutting.json -6cbe9e311455eabc27992217177b612cd10011e1 data/aether/recipes/mossy_holystone_slab.json -65b8896398d7cfe72b24233edff327779b6ea1ac data/aether/recipes/mossy_holystone_slab_stonecutting.json -1f612b986ecf7a3756d84414b30799d8a099a49e data/aether/recipes/mossy_holystone_stairs.json -6a0b51c5adb8246e90a9de724ffcf99c5993fab9 data/aether/recipes/mossy_holystone_stairs_stonecutting.json -ac2ae29181bd4b9be53f2efc12fbbda53494e7a2 data/aether/recipes/mossy_holystone_wall.json -1cd2c6ccce9b7578c5cd352353796cc294524fe7 data/aether/recipes/mossy_holystone_wall_stonecutting.json -5e7058d1d0d23027f015c81c1da5544a685ec3f4 data/aether/recipes/mossy_holystone_with_moss.json -2a14700ab42e21c866bbde938c0907b03f5bb64a data/aether/recipes/mossy_holystone_with_vine.json -b4f631c8ebeda7c4bd14793b999a862c25ca34c2 data/aether/recipes/nature_staff.json +9e74b5204cf20c30736b8b6b0ec4211f471576d6 data/aether/recipes/legacy_enchanting.json +5836b373b673bd2ce024c6ef405192744ec20b4f data/aether/recipes/light_angelic_stone_from_angelic_stone_stonecutting.json +5f57b6da3d2fbd156f97a5dbd69651108ac003b3 data/aether/recipes/light_hellfire_stone_from_hellfire_stone_stonecutting.json +b0bdfde7b41ea8b69f21a3021f506225500f38e2 data/aether/recipes/mossy_holystone_slab.json +65b8896398d7cfe72b24233edff327779b6ea1ac data/aether/recipes/mossy_holystone_slab_from_mossy_holystone_stonecutting.json +a094b072ac21948d8c59aa4ceacac8a13a08fa46 data/aether/recipes/mossy_holystone_stairs.json +6a0b51c5adb8246e90a9de724ffcf99c5993fab9 data/aether/recipes/mossy_holystone_stairs_from_mossy_holystone_stonecutting.json +7db0f93ce373184b0ddb8f67b7d403bee5c7bed2 data/aether/recipes/mossy_holystone_wall.json +1cd2c6ccce9b7578c5cd352353796cc294524fe7 data/aether/recipes/mossy_holystone_wall_from_mossy_holystone_stonecutting.json +3146e3ab3b54772a3a1e020c7276e070e65516f1 data/aether/recipes/mossy_holystone_with_moss.json +6dcd671a55264a04f3c5527fe0b2bd6c30a20d48 data/aether/recipes/mossy_holystone_with_vine.json +0059ca91ab390ed0bafd582ad93ea431e17354b3 data/aether/recipes/nature_staff.json a26d77014f25876af8d8007756091bb288ed3071 data/aether/recipes/netherite_axe_repairing.json f40be0a6141d53713f42cd978dbabddc5ee16280 data/aether/recipes/netherite_boots_repairing.json e0137de65d8d0f343cd65cb5c13448ac2351d0c7 data/aether/recipes/netherite_chestplate_repairing.json @@ -497,115 +490,112 @@ f490cf7b886a0ddd13c2e424efb1f5a7b58b8fc8 data/aether/recipes/netherite_gloves_sm aad5fc9bfc71de68ff8887edc4321ac5f8eb8898 data/aether/recipes/netherite_pickaxe_repairing.json 7e44ac9c039c60ef6152c5fd2d4ae809ef56a571 data/aether/recipes/netherite_shovel_repairing.json 56e542912ba7d7e7966482d812f60a7d902e5c97 data/aether/recipes/netherite_sword_repairing.json -62e7245e8a3f45a238570b6c0ed8d9aee0f4553d data/aether/recipes/obsidian_from_bucket_freezing.json +e7e43595f060ad13cda710c0d6fbbcf0f5e4e8f2 data/aether/recipes/obsidian_from_bucket_freezing.json 05ebdc27fa2b139430c85ef354e4cb319feba2b1 data/aether/recipes/orange_moa_incubation.json -0712a1bdcdab00c5dcceeb682f92cc1baa6fff40 data/aether/recipes/packed_ice_freezing.json +8bc288535d78896bdc28f418292036d6b761a2e7 data/aether/recipes/packed_ice_freezing.json +d565643053b07e699069678b47ed909970871acf data/aether/recipes/pillar_from_angelic_stone_stonecutting.json c57c3690f9fecadc6fc7417ab9457d780746e7ec data/aether/recipes/pillar_from_pillar_top_stonecutting.json -d565643053b07e699069678b47ed909970871acf data/aether/recipes/pillar_stonecutting.json +48956b3f5c42032f5d57a31df09e04189424e115 data/aether/recipes/pillar_top_from_angelic_stone_stonecutting.json db4cc5e6f6d04beba741fd93a76479e2cc3f7c52 data/aether/recipes/pillar_top_from_pillar_stonecutting.json -48956b3f5c42032f5d57a31df09e04189424e115 data/aether/recipes/pillar_top_stonecutting.json -4672fa6c70fa6820632d72f0e16fe72728c829c4 data/aether/recipes/poison_dart.json -83ff8b71768949682d296d53f471eb440e717308 data/aether/recipes/poison_dart_shooter.json -7432b49f190078de84f11ee9844804f8aa312bf2 data/aether/recipes/quicksoil_glass_enchanting.json -00d7331b70726eaf7adcdc28cdd3abbf7c11a5f2 data/aether/recipes/quicksoil_glass_pane.json -684875ac5ae61010b2deb52b27e1dd3f5066448b data/aether/recipes/red_cape.json -94be19fd3572a28daea59f7c939232af60bbc3e4 data/aether/recipes/remedy_bucket_enchanting.json -1ea7a72307a492f0fef92b5c546fd9975dccc737 data/aether/recipes/sentry_stone_stoncutting.json +9be357658b81d1a074ed3afa17b85c917243ec6c data/aether/recipes/poison_dart.json +9d7cfc0535fb432d9704e1a840ca76118a02c0fd data/aether/recipes/poison_dart_shooter.json +b176cb806dbbfc55dfbeb3bb6e88b13c0579d2e8 data/aether/recipes/quicksoil_glass_enchanting.json +94f8551c1b67e28b5ba811ce6495a4d1e70e7282 data/aether/recipes/quicksoil_glass_pane.json +e6dfc400873b357c4a1115da294032daf7673575 data/aether/recipes/red_cape.json +7778328f7bb124065e3d255685333103b1962bc2 data/aether/recipes/remedy_bucket_enchanting.json +1ea7a72307a492f0fef92b5c546fd9975dccc737 data/aether/recipes/sentry_stone_from_carved_stone_stonecutting.json eb763c8d8f5a907549b7c15c6c8de3527290c72c data/aether/recipes/shield_repairing.json -dcb0d82b2bf5d2189ca437ed6cc2e5847ea03456 data/aether/recipes/skyroot_axe.json +f9bc4c90be59b93f55db66fb92d439d2856bb464 data/aether/recipes/skyroot_axe.json bd30268f46c7e5d617916ccf5bb81ad2aa823b9d data/aether/recipes/skyroot_axe_repairing.json -dca1be8c4f09b29fbb4e9b46bc532c6e905a43b6 data/aether/recipes/skyroot_barrel.json -32fc6a587fcec1088d2b9d6b0a5aca4c92ca89fb data/aether/recipes/skyroot_bed.json -6b6a5b59524b4cba7b107e6e4bb644344ef0ce93 data/aether/recipes/skyroot_beehive.json -4add1756d2566707b46f3f1db10a005f3109dfb0 data/aether/recipes/skyroot_boat.json -cf62573ab8b6ffdf9fc78c00a145ebff48d2b830 data/aether/recipes/skyroot_bookshelf.json -d3dc6f296cfa4bf913a12b82377637fee4826876 data/aether/recipes/skyroot_bucket.json -24c8b28f3b35cda947dc3b08f994b07b3e1a3152 data/aether/recipes/skyroot_button.json -e8f26daba47a7828b0ad66517b153a72f946c284 data/aether/recipes/skyroot_cartography_table.json -4dea3852115dc0fd9aa8edfd461e9bc6c24f0b21 data/aether/recipes/skyroot_chest.json -95599dd6aae6034d04241674bd1c6cc6c967ef5b data/aether/recipes/skyroot_chest_boat.json -6066be9a15010be57d5d3dad213c72a0e9c51618 data/aether/recipes/skyroot_crafting_table.json -a103351f59ce1169421eb9971d181d356c60d8b0 data/aether/recipes/skyroot_door.json -02a3162e4c4f4fe137f19b7b2c21bbbd2083f195 data/aether/recipes/skyroot_fence.json -eb058883786ee5a02481f7257c036756b8b50487 data/aether/recipes/skyroot_fence_gate.json -e3f6acc58e7f705a61684cee5b02786343a4e5a6 data/aether/recipes/skyroot_fletching_table.json -05c6f1f44e50139bdde602bb74971d182dd65c5d data/aether/recipes/skyroot_gravitite_jukebox.json -64162687b5de6b198430733b13d679e41cdfe86d data/aether/recipes/skyroot_grindstone.json -705552b2dd761e58713597362c6e71a0cc27d61c data/aether/recipes/skyroot_hoe.json +9d04836e6daa7aaa225d6827abf39606d4f7648e data/aether/recipes/skyroot_barrel.json +538e16e1b347f57994507848fcc0928d1aa113ca data/aether/recipes/skyroot_bed.json +dab2fa441bdaaefd8f61705ac360d3e525a655bb data/aether/recipes/skyroot_beehive.json +4e0b3d5790c33070b4c7aeaab969d0684a024c10 data/aether/recipes/skyroot_boat.json +087948b745a2338635163321f3ef495a53bcd572 data/aether/recipes/skyroot_bookshelf.json +a965d780d1224e498e5e36020171e5bb3992a8fd data/aether/recipes/skyroot_bucket.json +9d8d2dad172dc5c482a126e78b7dfd873c9f0961 data/aether/recipes/skyroot_button.json +85d8d53bd4be3fc62c03fc05af62cffd49e862eb data/aether/recipes/skyroot_cartography_table.json +71601873f0cf3f8c40de95b0799df0feccb60901 data/aether/recipes/skyroot_chest.json +4f478e3bc0e50aa638bdd4fd697cb5ba1a193688 data/aether/recipes/skyroot_chest_boat.json +202dc90244079e96575c653bdf28d04012cc8678 data/aether/recipes/skyroot_crafting_table.json +40a9bb121a4602dbe7cd75c1fbf60527273a708d data/aether/recipes/skyroot_door.json +e5206c5baae835b424be24b3f42a76a33b088758 data/aether/recipes/skyroot_fence.json +43d64acb9aad274ef58804bf9cb4b70da519df97 data/aether/recipes/skyroot_fence_gate.json +7fbde7689696051bd56bfff06e725a4bc41aef71 data/aether/recipes/skyroot_fletching_table.json +1845b3b53bd767d6950ac7b9818488b7b9674e67 data/aether/recipes/skyroot_gravitite_jukebox.json +24d484669945ecfb6419db03eda5e9c7e2e635c2 data/aether/recipes/skyroot_grindstone.json +2b5f0f7d0b62204416e5e0c6ca7572d95c1a5991 data/aether/recipes/skyroot_hoe.json 4ced0aa66a10344aafefa4500b2fb9ff5c6dc7d5 data/aether/recipes/skyroot_hoe_repairing.json -f5fd2d2cd49859e55cf6648473118a57b9ec2d4b data/aether/recipes/skyroot_jukebox.json -17ac5c18ab4c78f3ecc0aef1edde33920ab0f7e4 data/aether/recipes/skyroot_loom.json -42e12f86665219062aa6978cdf3f7f3c230d912e data/aether/recipes/skyroot_note_block.json -9a54ad20efc2a982e774bc6624c3a72263ab0588 data/aether/recipes/skyroot_pickaxe.json +67a9e47169768aa15a6189edc3debb3fea3e53fa data/aether/recipes/skyroot_jukebox.json +11c45f8cc16d471a91aea8a5cef19823d1b61d82 data/aether/recipes/skyroot_loom.json +2abca44f2fe05c23f48194be7eb6816af86a0335 data/aether/recipes/skyroot_note_block.json +8d283cfb07b4301bcd1d3752db11aa09ae16d4b7 data/aether/recipes/skyroot_pickaxe.json 9894c732dca9adb56731c6e09819482a2a8e4a84 data/aether/recipes/skyroot_pickaxe_repairing.json -b42cb166c05c082f7ec86fb205c500a210bf4249 data/aether/recipes/skyroot_piston.json -cca94072895f63c1fc382ca61fc745699b369c21 data/aether/recipes/skyroot_planks.json -a8f37ae8c0283f3f31acc0854dc6b623fdd76839 data/aether/recipes/skyroot_pressure_plate.json -2319f00f1c86d1689bc7fabb4c808f2222a04314 data/aether/recipes/skyroot_shield.json -b9293b0dc8c55e3215e9093c6f035cc97f089b0b data/aether/recipes/skyroot_shovel.json +6dbdf82d412e040360ec7826f7cdfb3839f474a8 data/aether/recipes/skyroot_piston.json +dcf1162781924918731877fc68b11609eedc9be7 data/aether/recipes/skyroot_planks.json +7118d081ff3681777ea900df07d356853e106bf4 data/aether/recipes/skyroot_pressure_plate.json +5a8d9b54f23513736d80909ccf33fcdc2cd108ca data/aether/recipes/skyroot_shield.json +c5b4c7be5b65e89f49f241fcf65ccf6d27301612 data/aether/recipes/skyroot_shovel.json 2276b0c0871d23fe1f0b6e7ec5f34309e603b723 data/aether/recipes/skyroot_shovel_repairing.json -6ea59c6d967ea2e65190c6ae06cb29f7daa4da55 data/aether/recipes/skyroot_sign.json -e141d9c49a712fb626bf351483b99fcdf028ac48 data/aether/recipes/skyroot_slab.json -60b2af26178eafb39e062555c519b51b3a0a49c3 data/aether/recipes/skyroot_smithing_table.json -531c386bfb80b2b0552c998eb72631c77b18244e data/aether/recipes/skyroot_stairs.json -efa9930099ffdca8da2eadc93d769e3f0d0ea1a0 data/aether/recipes/skyroot_stick.json -7314d97eb626a8b1041b05848b32747d5cee94a1 data/aether/recipes/skyroot_sword.json +5507d219196ae90514adb9194856f0ee94f2bf52 data/aether/recipes/skyroot_sign.json +e0a9079c04478af8077768aaaff762e445b23646 data/aether/recipes/skyroot_slab.json +c47896e0cab9e53d0025cb115d5f3d224e7624ce data/aether/recipes/skyroot_smithing_table.json +620850e5e39196738d2dc983abe80e4018e7150c data/aether/recipes/skyroot_stairs.json +28b4b022a579c83b6d7a854608c4ef07584cb158 data/aether/recipes/skyroot_stick.json +6f35ce244b9dc9c7c1aa12584d3b9644eb58cb22 data/aether/recipes/skyroot_sword.json 937d6d32847366a5227ade39543e3c958a819129 data/aether/recipes/skyroot_sword_repairing.json -82de23c9d93011647583180e3593d69e609b55b4 data/aether/recipes/skyroot_trapdoor.json -7f0dd1a2e93df3c0d5241ceada2828ef176adc10 data/aether/recipes/skyroot_tripwire_hook.json -3a3ba4580932ffc655b3a4fb5ec41cead27344c3 data/aether/recipes/skyroot_wood.json -545d2f432058a6d57cbc1a47b9b2f073fc052756 data/aether/recipes/smelt_ambrosium.json -d01d72f1873b510d778aa230f0ce1e2e9c392e6f data/aether/recipes/smelt_zanite.json +bc188835c3ea5fa95fffa85dffd6482fdced08ec data/aether/recipes/skyroot_trapdoor.json +380e400022242a6063ad18707fdba8ebdfd2e8a4 data/aether/recipes/skyroot_tripwire_hook.json +f025ddee0a0e39e7751dcf82985a438d9e6ef75f data/aether/recipes/skyroot_wood.json 55956fed9ec6ca3e89dc5eaed5cb247be5807fcd data/aether/recipes/stone_axe_repairing.json a3c6171a719539f8d9cd90eb07aea303bb113e74 data/aether/recipes/stone_hoe_repairing.json 7aa08724b1c2b64344d5750bcdfe8d884059e73d data/aether/recipes/stone_pickaxe_repairing.json c75812b1605903b12ee74436405344b76393d5fd data/aether/recipes/stone_shovel_repairing.json 5b0cedfb392cb3f73b5dddf75b6740806e3b67e6 data/aether/recipes/stone_sword_repairing.json -7a7cd377119805aed38b18154065cec915104213 data/aether/recipes/stripped_log_to_planks.json -907a45aafa801bc851573926c59e5e733c6cb6df data/aether/recipes/stripped_skyroot_wood.json -609a40657106586aec27037719bbb05a7da49058 data/aether/recipes/stripped_wood_to_planks.json +f693c86b142ef0588380278317e902fe905ab050 data/aether/recipes/stripped_skyroot_wood.json 7d893983b26bb40a882b8ea3e74cf96280dee4f7 data/aether/recipes/swet_ball_aether_dirt_to_aether_grass.json 0eb104144fd0e173d6e8b6adf6aabce5153bbe9e data/aether/recipes/swet_ball_dirt_to_grass.json 89fa81b76ed314323d56ea63f4cc09b6ed36b2d5 data/aether/recipes/swet_ball_dirt_to_mycelium.json f85b4440cfc9da0098e1496560d3fc69da042e41 data/aether/recipes/swet_ball_grass_to_podzol.json 38427776a268076deb848b7648bf98ad2c1145d6 data/aether/recipes/swet_ball_netherrack_to_crimson_nylium.json b48f4dd76f79b4f9fa5e82f5dfeea1e533120939 data/aether/recipes/swet_ball_netherrack_to_warped_nylium.json -55d29c7bb7497a19492ee1bf24cccf78b57ebbff data/aether/recipes/swet_lead.json +69066d2d2ec74520d9344b8918fb5ac14d7deb09 data/aether/recipes/swet_lead.json cad43ab0d72e6aa2e6dce9348a9c9c2be4ae66a7 data/aether/recipes/torch_block_ban.json bf48f2ef0c13fd1030d06fee9f3a85594aa8eb13 data/aether/recipes/torch_item_ban.json -31e751d86fe6461891288a6d8e87b68209ea8ae9 data/aether/recipes/welcoming_skies_freezing.json -4eb5d37817dedc0358691da9d8f65d7220fe9ef7 data/aether/recipes/white_cape.json +afa4a3cdcc778e424b43c310b7174787692837ac data/aether/recipes/welcoming_skies_freezing.json +c7d4e412a0815c692f97c604f3114b0d848b3530 data/aether/recipes/white_cape.json 17b387db013b8f7c65609615a5d3802bb9113c1f data/aether/recipes/white_moa_incubation.json 728dc45206eb396b7da1beb98b79bd8b9e644188 data/aether/recipes/wooden_axe_repairing.json 7672c7b8872223ea0bf1deacc55df65dc5705e06 data/aether/recipes/wooden_hoe_repairing.json 8ed80c422397613fc99033e654f5602a76a83f07 data/aether/recipes/wooden_pickaxe_repairing.json ff91d82fdf3e95a17b43abeac1ed57ccfd1b6174 data/aether/recipes/wooden_shovel_repairing.json 8b3f2a3306e6787b204043797dec113c401f6c02 data/aether/recipes/wooden_sword_repairing.json -7d5bf00dec97cc411e9db9dd50133a1ac42f25f9 data/aether/recipes/wood_to_planks.json -43a7a93d9f3b7402c9ebcd86a556464c1281a3a1 data/aether/recipes/yellow_cape.json -cc6680fb2b7f2ed04e42476936d589ba91d9793e data/aether/recipes/zanite_axe.json +a44d469fe392768776ac921ba10c5a82c8845fce data/aether/recipes/yellow_cape.json +24c4d77cfd4caf1713b7e2388ca9870792c276ae data/aether/recipes/zanite_axe.json e2670bbbb30689f4b3760008e82596929eef323c data/aether/recipes/zanite_axe_repairing.json -d59083303b3224de7569a1e52629b0103521ef54 data/aether/recipes/zanite_block.json -163b341d3995d8d8db5ee65b49e520a9c2d99383 data/aether/recipes/zanite_boots.json +9fa9999707a4ab5283911baa3668a16bc16cd54d data/aether/recipes/zanite_block.json +e5654f1aca4514dcee5bd792f62cb44cec84983f data/aether/recipes/zanite_boots.json 7131cbeafb0c4439015d03200b563a3b9f528c4c data/aether/recipes/zanite_boots_repairing.json -67ba67d3075304d774ef6df2b8e14fca3d5b7dbf data/aether/recipes/zanite_chestplate.json +21d6a849aec498e2f6cfd98b2b04055ce0592edc data/aether/recipes/zanite_chestplate.json f21e1f32959cb0a479e0d6fa54c06173140ca2fa data/aether/recipes/zanite_chestplate_repairing.json -78bf5a2d3abc751399060b09730b037536d34b36 data/aether/recipes/zanite_gemstone.json -a71c7172d6725cb50146093b98830ccdd4d6404f data/aether/recipes/zanite_gloves.json +36f5ba1fdd11e2e0bb5d7c7556b5dfa96e1e0cd3 data/aether/recipes/zanite_gemstone_from_blasting.json +7994e242acfe3133d722afea5852aeaa264f378d data/aether/recipes/zanite_gemstone_from_smelting.json +0f5ddfbc8bdbc97938586d909ae07ed78a2fc507 data/aether/recipes/zanite_gemstone_from_zanite_block.json +136a66198e37294de7afaad4e36a1492ff347f54 data/aether/recipes/zanite_gloves.json aaa8a7bb8bdfd477fc723012edad28e7e21e2243 data/aether/recipes/zanite_gloves_repairing.json -255ec5e153530dc0a74a6700b3dc7edbc7de898b data/aether/recipes/zanite_helmet.json +8f05b0a5c44f459c5126196a2cf2b4778823b3fb data/aether/recipes/zanite_helmet.json 3e266d6281327706db0584bb9150b9ff2c4ff020 data/aether/recipes/zanite_helmet_repairing.json -b7632a1a890da90722dddad6b8a3f9c158f6efda data/aether/recipes/zanite_hoe.json +a8393bdfe055a64bcac23808fa05d8e892b969b0 data/aether/recipes/zanite_hoe.json 2835956c1113e5187034cc7f83266866bdc16007 data/aether/recipes/zanite_hoe_repairing.json -726a38e3031614fc9f07081f2a31fd9f4a0f61b7 data/aether/recipes/zanite_leggings.json +12f75de8506d96b62f373c9c930804dfd7da8e8a data/aether/recipes/zanite_leggings.json 422f37745359accf791b09a4bd0387ce9397d854 data/aether/recipes/zanite_leggings_repairing.json -3a9612cd941ca9287dd256861eda3c717fac1f78 data/aether/recipes/zanite_pendant.json +60ac1bdcd1fe608463d2732b026445022bf834e9 data/aether/recipes/zanite_pendant.json 893daafdf4656b583a70a9e0483a7cc52a815e35 data/aether/recipes/zanite_pendant_repairing.json -8f005a32105efea05755a6999dd23b48cc17c37b data/aether/recipes/zanite_pickaxe.json +cc09227f13c96116c468139fcd85cf5fb02a897d data/aether/recipes/zanite_pickaxe.json f288c96fc933d2a801666fe326e8b8d3ce3a754b data/aether/recipes/zanite_pickaxe_repairing.json -3e77b85ca1705f0448c536ed40a9f5c410372e22 data/aether/recipes/zanite_ring.json +65f24b22cfb9850da96ef0261894cdc05cfa8a57 data/aether/recipes/zanite_ring.json 012948176bc720d0fae5366b0c0b075609626636 data/aether/recipes/zanite_ring_repairing.json -f907ddffbe33c4d4261766725e84a7661f56f791 data/aether/recipes/zanite_shovel.json +be914f8c3179f0dc58c3b1696f50d0acfb3828b7 data/aether/recipes/zanite_shovel.json f772375407117eb533abd226dd5a4ec000b0477a data/aether/recipes/zanite_shovel_repairing.json -17805366c397cc67ea72445f9f2bbf5782297579 data/aether/recipes/zanite_sword.json +c559888f1adc6c022f4563d59c64d5f16d3e320f data/aether/recipes/zanite_sword.json b3d48d2640589055d05bbc11141e3794a690a575 data/aether/recipes/zanite_sword_repairing.json diff --git a/src/generated/resources/.cache/c622617f6fabf890a00b9275cd5f643584a8a2c8 b/src/generated/resources/.cache/c622617f6fabf890a00b9275cd5f643584a8a2c8 index ecb4b5a0f4..c5781ce5ad 100644 --- a/src/generated/resources/.cache/c622617f6fabf890a00b9275cd5f643584a8a2c8 +++ b/src/generated/resources/.cache/c622617f6fabf890a00b9275cd5f643584a8a2c8 @@ -1,2 +1,2 @@ -// 1.19.2 2022-12-03T12:27:21.6363292 Languages: en_us -6b7b1a5795652630ca13646404603a98494adcf4 assets/aether/lang/en_us.json +// 1.19.3 2022-12-20T17:32:37.7914185 Languages: en_us +9288428a6c9d730325529a76e3cac34db08d4769 assets/aether/lang/en_us.json diff --git a/src/generated/resources/.cache/e4d7f7b05c507d533af44beac9beab0a9fabc42f b/src/generated/resources/.cache/e4d7f7b05c507d533af44beac9beab0a9fabc42f deleted file mode 100644 index 96137d2e4b..0000000000 --- a/src/generated/resources/.cache/e4d7f7b05c507d533af44beac9beab0a9fabc42f +++ /dev/null @@ -1,2 +0,0 @@ -// 1.19.2 2022-09-17T11:43:14.6767082 worldgen/noise_settings generator for aether -074fd227247dd9813023f1443ce697b34337da96 data/aether/worldgen/noise_settings/skylands.json diff --git a/src/generated/resources/.cache/8d737e70c6a24665a953b569e247c243dce7a914 b/src/generated/resources/.cache/e5c5eb35b4ba40351ecb7d9f04c3527f2f5779b0 similarity index 63% rename from src/generated/resources/.cache/8d737e70c6a24665a953b569e247c243dce7a914 rename to src/generated/resources/.cache/e5c5eb35b4ba40351ecb7d9f04c3527f2f5779b0 index 4ad5612c7f..abb53745fa 100644 --- a/src/generated/resources/.cache/8d737e70c6a24665a953b569e247c243dce7a914 +++ b/src/generated/resources/.cache/e5c5eb35b4ba40351ecb7d9f04c3527f2f5779b0 @@ -1,12 +1,12 @@ -// 1.19.2 2022-08-26T11:43:15.1155186 Aether Advancements +// 1.19.3 2022-12-19T15:43:57.9754473 Advancements +a6a7ec78b783342af08b1021cf32a7f5cf76d6a7 data/aether/advancements/blue_aercloud.json 0ffa419eb9f5dda55e78c995d924240b48224359 data/aether/advancements/bronze_dungeon.json -fe1e6314a0041e401114d49d6f45ad3d05066994 data/aether/advancements/craft_altar.json -fef1b9650e24f845845cf589f686005da047acfe data/aether/advancements/craft_incubator.json +f6a6be4e57c569b5f2ec79502f88dc002a1f00a3 data/aether/advancements/craft_altar.json fc4733d6f2cc4d41ada90fa033747390a16acc33 data/aether/advancements/enter_aether.json c41c1d6881e4341910e07288ec92215e7af160d6 data/aether/advancements/gold_dungeon.json 50d29ae55dabef082a198baeb3d34d2fe56aaecc data/aether/advancements/gravitite_tools.json +81cfc0e2cbef00003795cf335007fa65eb5a6659 data/aether/advancements/incubate_moa.json 1955122ec904e00330255b333a4e0cd6affbd298 data/aether/advancements/loreception.json -67b89417187fecf6f86b1f9b7afe649b808ede1a data/aether/advancements/mount_phyg.json +f7555059c9b97f02d6a1340f93ecf1db1182792e data/aether/advancements/mount_phyg.json d33843f197963009639ff064068cf88b2a55df9b data/aether/advancements/read_lore.json f892614048e1d93bec2c8862fc488a9f92cee7b9 data/aether/advancements/silver_dungeon.json -bf2ad7b0f45af96fecd59d9bd053e471afb2d123 data/aether/advancements/to_infinity_and_beyond.json diff --git a/src/generated/resources/.cache/f9f349c9a38c23d71c2b92e2db2e508baf1c26de b/src/generated/resources/.cache/f9f349c9a38c23d71c2b92e2db2e508baf1c26de deleted file mode 100644 index e1ff509fee..0000000000 --- a/src/generated/resources/.cache/f9f349c9a38c23d71c2b92e2db2e508baf1c26de +++ /dev/null @@ -1,2 +0,0 @@ -// 1.19.2 2022-08-14T09:50:51.8530717 dimension_type generator for aether -5655d4cd818dbc73a0baa2590d80dd274f85927d data/aether/dimension_type/the_aether.json diff --git a/src/generated/resources/.cache/55f0273cb61243ff3d2fde23212f03e66541da02 b/src/generated/resources/.cache/feecd04c25d277e5de10185e187a010c8d7228ee similarity index 93% rename from src/generated/resources/.cache/55f0273cb61243ff3d2fde23212f03e66541da02 rename to src/generated/resources/.cache/feecd04c25d277e5de10185e187a010c8d7228ee index 478ff7a384..a4b5a22b37 100644 --- a/src/generated/resources/.cache/55f0273cb61243ff3d2fde23212f03e66541da02 +++ b/src/generated/resources/.cache/feecd04c25d277e5de10185e187a010c8d7228ee @@ -1,4 +1,4 @@ -// 1.19.2 2022-09-01T15:08:55.0703431 Tags for minecraft:worldgen/biome +// 1.19.3 2022-12-10T10:18:32.5306796 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/lang/en_us.json b/src/generated/resources/assets/aether/lang/en_us.json index 6970eaf6da..e2951d539b 100644 --- a/src/generated/resources/assets/aether/lang/en_us.json +++ b/src/generated/resources/assets/aether/lang/en_us.json @@ -1,18 +1,18 @@ { - "advancement.aether.altar": "Do You Believe in Magic?", - "advancement.aether.altar.desc": "Craft an Altar", "advancement.aether.blue_aercloud": "To Infinity and Beyond!", "advancement.aether.blue_aercloud.desc": "Bounce on a Blue Aercloud", "advancement.aether.bronze_dungeon": "Like a Bossaru!", "advancement.aether.bronze_dungeon.desc": "Defeat the bronze boss", + "advancement.aether.craft_altar": "Do You Believe in Magic?", + "advancement.aether.craft_altar.desc": "Craft an Altar", "advancement.aether.enter_aether": "Hostile Paradise", "advancement.aether.enter_aether.desc": "Enter the Aether", "advancement.aether.gold_dungeon": "Extinguished", "advancement.aether.gold_dungeon.desc": "Defeat the gold boss", "advancement.aether.gravitite_tools": "Pink is the New Blue", "advancement.aether.gravitite_tools.desc": "Craft a Gravitite tool", - "advancement.aether.incubator": "Now You're Family", - "advancement.aether.incubator.desc": "Incubate a Moa", + "advancement.aether.incubate_moa": "Now You're Family", + "advancement.aether.incubate_moa.desc": "Incubate a Moa", "advancement.aether.loreception": "Lore-Ception!", "advancement.aether.loreception.desc": "Put a Book of Lore inside a Book of Lore", "advancement.aether.mount_phyg": "When Phygs Fly", @@ -22,6 +22,9 @@ "advancement.aether.silver_dungeon": "Dethroned", "advancement.aether.silver_dungeon.desc": "Defeat the silver boss", "aether.bronze_treasure_chest_locked": "This Treasure Chest must be unlocked with a Bronze Key.", + "aether.dungeon.bronze_dungeon": "Bronze Dungeon", + "aether.dungeon.gold_dungeon": "Gold Dungeon", + "aether.dungeon.silver_dungeon": "Silver Dungeon", "aether.gold_treasure_chest_locked": "This Treasure Chest must be unlocked with a Gold Key.", "aether.hammer_of_notch_cooldown": "Cooldown", "aether.life_shard_limit": "You can only use a total of %s Life Shards.", @@ -77,7 +80,7 @@ "aether.pro_tips.line.aether.slimes": "Slimes do exist... I think.", "aether.pro_tips.line.aether.spare_stack": "Always keep a spare stack of blocks in your active inventory.", "aether.pro_tips.line.aether.the_game": "The game is only as fun as you make it.", - "aether.pro_tips.line.aether.victory_medal_drop": "When Valkyrie's are defeated they will drop a Victory Medal.", + "aether.pro_tips.line.aether.victory_medal_drop": "When Valkyries are defeated they will drop a Victory Medal.", "aether.pro_tips.line.aether.watch_your_step": "Watch where you step - deep shafts can be anywhere.", "aether.pro_tips.line.aether.white_aerclouds": "White Aerclouds prevent fall damage when landed upon.", "aether.pro_tips.line.aether.zanite_tool_ability": "Zanite Tools gain strength the more they are used.", @@ -270,13 +273,15 @@ "curios.identifier.aether_ring": "Ring", "curios.identifier.aether_shield": "Shield", "curios.modifiers.aether_gloves": "When on hands:", - "death.attack.crush": "%1$s was crushed by %2$s", - "death.attack.fire_crystal": "%1$s was incinerated by %2$s's Fire Crystal", - "death.attack.ice_crystal": "%1$s was chilled by %2$s's Ice Crystal", - "death.attack.incineration": "%1$s was incinerated by %2$s", - "death.attack.inebriation": "%1$s was inebriated", - "death.attack.inebriation.player": "%1$s was inebriated by %2$s", - "death.attack.thunder_crystal": "%1$s was zapped by %2$s's Thunder Crystal", + "death.attack.aether.crush": "%1$s was crushed by %2$s", + "death.attack.aether.fire_crystal": "%1$s was incinerated by %2$s's Fire Crystal", + "death.attack.aether.floating_block": "%1$s was squashed by a floating block", + "death.attack.aether.floating_block.player": "%1$s was squashed by a floating block whilst fighting %2$s", + "death.attack.aether.ice_crystal": "%1$s was chilled by %2$s's Ice Crystal", + "death.attack.aether.incineration": "%1$s was incinerated by %2$s", + "death.attack.aether.inebriation": "%1$s was inebriated", + "death.attack.aether.inebriation.player": "%1$s was inebriated by %2$s", + "death.attack.aether.thunder_crystal": "%1$s was zapped by %2$s's Thunder Crystal", "effect.aether.inebriation": "Inebriation", "entity.aether.aechor_plant": "Aechor Plant", "entity.aether.aerbunny": "Aerbunny", @@ -397,9 +402,9 @@ "gui.aether.valkyrie.dialog.medal.1": "Umm... that's a nice pile of medallions you have there...", "gui.aether.valkyrie.dialog.medal.2": "That's pretty impressive, but you won't defeat me.", "gui.aether.valkyrie.dialog.medal.3": "You think you're a tough guy, eh? Well, bring it on!", - "gui.aether.valkyrie.dialog.playerdead.1": "You want a medallion? Try being less pathetic.", - "gui.aether.valkyrie.dialog.playerdead.2": "Maybe some day, %s... maybe some day.", - "gui.aether.valkyrie.dialog.playerdead.3": "Humans aren't nearly as cute when they're dead.", + "gui.aether.valkyrie.dialog.playerdeath.1": "You want a medallion? Try being less pathetic.", + "gui.aether.valkyrie.dialog.playerdeath.2": "Maybe some day, %s... maybe some day.", + "gui.aether.valkyrie.dialog.playerdeath.3": "Humans aren't nearly as cute when they're dead.", "item.aether.aechor_petal": "Aechor Petal", "item.aether.aechor_plant_spawn_egg": "Aechor Plant Spawn Egg", "item.aether.aerbunny_spawn_egg": "Aerbunny Spawn Egg", @@ -570,14 +575,16 @@ "item.aether.zanite_shovel": "Zanite Shovel", "item.aether.zanite_sword": "Zanite Sword", "item.aether.zephyr_spawn_egg": "Zephyr Spawn Egg", - "itemGroup.aether_accessories": "Aether Accessories", - "itemGroup.aether_armor": "Aether Armor", - "itemGroup.aether_blocks": "Aether Blocks", - "itemGroup.aether_food": "Aether Foods", - "itemGroup.aether_materials": "Aether Materials", - "itemGroup.aether_misc": "Aether Miscellaneous", - "itemGroup.aether_tools": "Aether Tools", - "itemGroup.aether_weapons": "Aether Weapons", + "itemGroup.aether.armor_and_accessories": "Aether Armor & Accessories", + "itemGroup.aether.building_blocks": "Aether Building Blocks", + "itemGroup.aether.dungeon_blocks": "Aether Dungeon Blocks", + "itemGroup.aether.equipment_and_utilities": "Aether Equipment & Utilities", + "itemGroup.aether.food_and_drinks": "Aether Food & Drinks", + "itemGroup.aether.functional_blocks": "Aether Functional Blocks", + "itemGroup.aether.ingredients": "Aether Ingredients", + "itemGroup.aether.natural_blocks": "Aether Natural Blocks", + "itemGroup.aether.redstone_blocks": "Aether Redstone Blocks", + "itemGroup.aether.spawn_eggs": "Aether Spawn Eggs", "key.aether.category": "Aether", "key.aether.gravitite_jump_ability.desc": "Activate Gravitite Jump", "key.aether.open_accessories.desc": "Open/Close Accessories Inventory", diff --git a/src/generated/resources/assets/aether/models/item/boss_doorway_angelic_stone.json b/src/generated/resources/assets/aether/models/item/boss_doorway_angelic_stone.json index 4c28e1c952..8a4c3fd7c7 100644 --- a/src/generated/resources/assets/aether/models/item/boss_doorway_angelic_stone.json +++ b/src/generated/resources/assets/aether/models/item/boss_doorway_angelic_stone.json @@ -138,6 +138,7 @@ { "faces": { "north": { + "emissivity": 15, "texture": "#overlay" } }, diff --git a/src/generated/resources/assets/aether/models/item/boss_doorway_carved_stone.json b/src/generated/resources/assets/aether/models/item/boss_doorway_carved_stone.json index baf694d6ca..73e67400cc 100644 --- a/src/generated/resources/assets/aether/models/item/boss_doorway_carved_stone.json +++ b/src/generated/resources/assets/aether/models/item/boss_doorway_carved_stone.json @@ -138,6 +138,7 @@ { "faces": { "north": { + "emissivity": 15, "texture": "#overlay" } }, diff --git a/src/generated/resources/assets/aether/models/item/boss_doorway_hellfire_stone.json b/src/generated/resources/assets/aether/models/item/boss_doorway_hellfire_stone.json index bd1bdac887..3a76be0a1c 100644 --- a/src/generated/resources/assets/aether/models/item/boss_doorway_hellfire_stone.json +++ b/src/generated/resources/assets/aether/models/item/boss_doorway_hellfire_stone.json @@ -138,6 +138,7 @@ { "faces": { "north": { + "emissivity": 15, "texture": "#overlay" } }, diff --git a/src/generated/resources/assets/aether/models/item/boss_doorway_light_angelic_stone.json b/src/generated/resources/assets/aether/models/item/boss_doorway_light_angelic_stone.json index 3da4481ea6..dc08ec75f7 100644 --- a/src/generated/resources/assets/aether/models/item/boss_doorway_light_angelic_stone.json +++ b/src/generated/resources/assets/aether/models/item/boss_doorway_light_angelic_stone.json @@ -138,6 +138,7 @@ { "faces": { "north": { + "emissivity": 15, "texture": "#overlay" } }, diff --git a/src/generated/resources/assets/aether/models/item/boss_doorway_light_hellfire_stone.json b/src/generated/resources/assets/aether/models/item/boss_doorway_light_hellfire_stone.json index 51d237d71f..e814da2483 100644 --- a/src/generated/resources/assets/aether/models/item/boss_doorway_light_hellfire_stone.json +++ b/src/generated/resources/assets/aether/models/item/boss_doorway_light_hellfire_stone.json @@ -138,6 +138,7 @@ { "faces": { "north": { + "emissivity": 15, "texture": "#overlay" } }, diff --git a/src/generated/resources/assets/aether/models/item/boss_doorway_sentry_stone.json b/src/generated/resources/assets/aether/models/item/boss_doorway_sentry_stone.json index 638e9bb356..cc9e20ad97 100644 --- a/src/generated/resources/assets/aether/models/item/boss_doorway_sentry_stone.json +++ b/src/generated/resources/assets/aether/models/item/boss_doorway_sentry_stone.json @@ -138,6 +138,7 @@ { "faces": { "north": { + "emissivity": 15, "texture": "#overlay" } }, diff --git a/src/generated/resources/assets/aether/models/item/locked_angelic_stone.json b/src/generated/resources/assets/aether/models/item/locked_angelic_stone.json index a477d6bc7f..961e6a217c 100644 --- a/src/generated/resources/assets/aether/models/item/locked_angelic_stone.json +++ b/src/generated/resources/assets/aether/models/item/locked_angelic_stone.json @@ -138,6 +138,7 @@ { "faces": { "north": { + "emissivity": 15, "texture": "#overlay" } }, diff --git a/src/generated/resources/assets/aether/models/item/locked_carved_stone.json b/src/generated/resources/assets/aether/models/item/locked_carved_stone.json index 4b0adc5c09..ba3cb82fe9 100644 --- a/src/generated/resources/assets/aether/models/item/locked_carved_stone.json +++ b/src/generated/resources/assets/aether/models/item/locked_carved_stone.json @@ -138,6 +138,7 @@ { "faces": { "north": { + "emissivity": 15, "texture": "#overlay" } }, diff --git a/src/generated/resources/assets/aether/models/item/locked_hellfire_stone.json b/src/generated/resources/assets/aether/models/item/locked_hellfire_stone.json index 9d03a648ef..dfec13780d 100644 --- a/src/generated/resources/assets/aether/models/item/locked_hellfire_stone.json +++ b/src/generated/resources/assets/aether/models/item/locked_hellfire_stone.json @@ -138,6 +138,7 @@ { "faces": { "north": { + "emissivity": 15, "texture": "#overlay" } }, diff --git a/src/generated/resources/assets/aether/models/item/locked_light_angelic_stone.json b/src/generated/resources/assets/aether/models/item/locked_light_angelic_stone.json index 2f7bf86012..d3ee2e2ed1 100644 --- a/src/generated/resources/assets/aether/models/item/locked_light_angelic_stone.json +++ b/src/generated/resources/assets/aether/models/item/locked_light_angelic_stone.json @@ -138,6 +138,7 @@ { "faces": { "north": { + "emissivity": 15, "texture": "#overlay" } }, diff --git a/src/generated/resources/assets/aether/models/item/locked_light_hellfire_stone.json b/src/generated/resources/assets/aether/models/item/locked_light_hellfire_stone.json index 75e2fff2d8..1793d816a9 100644 --- a/src/generated/resources/assets/aether/models/item/locked_light_hellfire_stone.json +++ b/src/generated/resources/assets/aether/models/item/locked_light_hellfire_stone.json @@ -138,6 +138,7 @@ { "faces": { "north": { + "emissivity": 15, "texture": "#overlay" } }, diff --git a/src/generated/resources/assets/aether/models/item/locked_sentry_stone.json b/src/generated/resources/assets/aether/models/item/locked_sentry_stone.json index 0419089ead..0b9ffde186 100644 --- a/src/generated/resources/assets/aether/models/item/locked_sentry_stone.json +++ b/src/generated/resources/assets/aether/models/item/locked_sentry_stone.json @@ -138,6 +138,7 @@ { "faces": { "north": { + "emissivity": 15, "texture": "#overlay" } }, diff --git a/src/generated/resources/assets/aether/models/item/trapped_angelic_stone.json b/src/generated/resources/assets/aether/models/item/trapped_angelic_stone.json index d4f0a5c00c..d69e95af2c 100644 --- a/src/generated/resources/assets/aether/models/item/trapped_angelic_stone.json +++ b/src/generated/resources/assets/aether/models/item/trapped_angelic_stone.json @@ -138,6 +138,7 @@ { "faces": { "north": { + "emissivity": 15, "texture": "#overlay" } }, diff --git a/src/generated/resources/assets/aether/models/item/trapped_carved_stone.json b/src/generated/resources/assets/aether/models/item/trapped_carved_stone.json index 812e71b3fa..067ac7c9a7 100644 --- a/src/generated/resources/assets/aether/models/item/trapped_carved_stone.json +++ b/src/generated/resources/assets/aether/models/item/trapped_carved_stone.json @@ -138,6 +138,7 @@ { "faces": { "north": { + "emissivity": 15, "texture": "#overlay" } }, diff --git a/src/generated/resources/assets/aether/models/item/trapped_hellfire_stone.json b/src/generated/resources/assets/aether/models/item/trapped_hellfire_stone.json index b7861b256b..936a6e9766 100644 --- a/src/generated/resources/assets/aether/models/item/trapped_hellfire_stone.json +++ b/src/generated/resources/assets/aether/models/item/trapped_hellfire_stone.json @@ -138,6 +138,7 @@ { "faces": { "north": { + "emissivity": 15, "texture": "#overlay" } }, diff --git a/src/generated/resources/assets/aether/models/item/trapped_light_angelic_stone.json b/src/generated/resources/assets/aether/models/item/trapped_light_angelic_stone.json index 8668dfe04c..855e9e36a4 100644 --- a/src/generated/resources/assets/aether/models/item/trapped_light_angelic_stone.json +++ b/src/generated/resources/assets/aether/models/item/trapped_light_angelic_stone.json @@ -138,6 +138,7 @@ { "faces": { "north": { + "emissivity": 15, "texture": "#overlay" } }, diff --git a/src/generated/resources/assets/aether/models/item/trapped_light_hellfire_stone.json b/src/generated/resources/assets/aether/models/item/trapped_light_hellfire_stone.json index 22aa3a5a85..6c9a5b859b 100644 --- a/src/generated/resources/assets/aether/models/item/trapped_light_hellfire_stone.json +++ b/src/generated/resources/assets/aether/models/item/trapped_light_hellfire_stone.json @@ -138,6 +138,7 @@ { "faces": { "north": { + "emissivity": 15, "texture": "#overlay" } }, diff --git a/src/generated/resources/assets/aether/models/item/trapped_sentry_stone.json b/src/generated/resources/assets/aether/models/item/trapped_sentry_stone.json index 03ef178c2f..0700b3e323 100644 --- a/src/generated/resources/assets/aether/models/item/trapped_sentry_stone.json +++ b/src/generated/resources/assets/aether/models/item/trapped_sentry_stone.json @@ -138,6 +138,7 @@ { "faces": { "north": { + "emissivity": 15, "texture": "#overlay" } }, diff --git a/src/generated/resources/assets/aether/models/item/treasure_doorway_angelic_stone.json b/src/generated/resources/assets/aether/models/item/treasure_doorway_angelic_stone.json index 4f1829f0ae..bf25e0e7e0 100644 --- a/src/generated/resources/assets/aether/models/item/treasure_doorway_angelic_stone.json +++ b/src/generated/resources/assets/aether/models/item/treasure_doorway_angelic_stone.json @@ -138,6 +138,7 @@ { "faces": { "north": { + "emissivity": 15, "texture": "#overlay" } }, diff --git a/src/generated/resources/assets/aether/models/item/treasure_doorway_carved_stone.json b/src/generated/resources/assets/aether/models/item/treasure_doorway_carved_stone.json index 228f487499..e76e3ed75c 100644 --- a/src/generated/resources/assets/aether/models/item/treasure_doorway_carved_stone.json +++ b/src/generated/resources/assets/aether/models/item/treasure_doorway_carved_stone.json @@ -138,6 +138,7 @@ { "faces": { "north": { + "emissivity": 15, "texture": "#overlay" } }, diff --git a/src/generated/resources/assets/aether/models/item/treasure_doorway_hellfire_stone.json b/src/generated/resources/assets/aether/models/item/treasure_doorway_hellfire_stone.json index d729aeed57..1eab9cc3d5 100644 --- a/src/generated/resources/assets/aether/models/item/treasure_doorway_hellfire_stone.json +++ b/src/generated/resources/assets/aether/models/item/treasure_doorway_hellfire_stone.json @@ -138,6 +138,7 @@ { "faces": { "north": { + "emissivity": 15, "texture": "#overlay" } }, diff --git a/src/generated/resources/assets/aether/models/item/treasure_doorway_light_angelic_stone.json b/src/generated/resources/assets/aether/models/item/treasure_doorway_light_angelic_stone.json index 9eae93dee8..6b89b89906 100644 --- a/src/generated/resources/assets/aether/models/item/treasure_doorway_light_angelic_stone.json +++ b/src/generated/resources/assets/aether/models/item/treasure_doorway_light_angelic_stone.json @@ -138,6 +138,7 @@ { "faces": { "north": { + "emissivity": 15, "texture": "#overlay" } }, diff --git a/src/generated/resources/assets/aether/models/item/treasure_doorway_light_hellfire_stone.json b/src/generated/resources/assets/aether/models/item/treasure_doorway_light_hellfire_stone.json index e6531efeae..732705c002 100644 --- a/src/generated/resources/assets/aether/models/item/treasure_doorway_light_hellfire_stone.json +++ b/src/generated/resources/assets/aether/models/item/treasure_doorway_light_hellfire_stone.json @@ -138,6 +138,7 @@ { "faces": { "north": { + "emissivity": 15, "texture": "#overlay" } }, diff --git a/src/generated/resources/assets/aether/models/item/treasure_doorway_sentry_stone.json b/src/generated/resources/assets/aether/models/item/treasure_doorway_sentry_stone.json index 3a6560b275..57e2489910 100644 --- a/src/generated/resources/assets/aether/models/item/treasure_doorway_sentry_stone.json +++ b/src/generated/resources/assets/aether/models/item/treasure_doorway_sentry_stone.json @@ -138,6 +138,7 @@ { "faces": { "north": { + "emissivity": 15, "texture": "#overlay" } }, diff --git a/src/generated/resources/assets/aether/sounds.json b/src/generated/resources/assets/aether/sounds.json index f9e33e5a66..e7f40bb2e1 100644 --- a/src/generated/resources/assets/aether/sounds.json +++ b/src/generated/resources/assets/aether/sounds.json @@ -215,7 +215,7 @@ }, "entity.mimic.death": { "sounds": [ - "block/chest/close", + "block/chest/close1", "block/chest/close2", "block/chest/close3" ], diff --git a/src/generated/resources/data/aether/advancements/to_infinity_and_beyond.json b/src/generated/resources/data/aether/advancements/blue_aercloud.json similarity index 89% rename from src/generated/resources/data/aether/advancements/to_infinity_and_beyond.json rename to src/generated/resources/data/aether/advancements/blue_aercloud.json index fbf2a54905..9b049e6fb9 100644 --- a/src/generated/resources/data/aether/advancements/to_infinity_and_beyond.json +++ b/src/generated/resources/data/aether/advancements/blue_aercloud.json @@ -1,7 +1,7 @@ { "parent": "aether:enter_aether", "criteria": { - "to_infinity_and_beyond": { + "blue_aercloud": { "conditions": { "block": "aether:blue_aercloud" }, @@ -25,7 +25,7 @@ }, "requirements": [ [ - "to_infinity_and_beyond" + "blue_aercloud" ] ] } \ 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 dcef893abd..4df8f71d0b 100644 --- a/src/generated/resources/data/aether/advancements/craft_altar.json +++ b/src/generated/resources/data/aether/advancements/craft_altar.json @@ -17,7 +17,7 @@ "display": { "announce_to_chat": true, "description": { - "translate": "advancement.aether.altar.desc" + "translate": "advancement.aether.craft_altar.desc" }, "frame": "task", "hidden": false, @@ -26,7 +26,7 @@ }, "show_toast": true, "title": { - "translate": "advancement.aether.altar" + "translate": "advancement.aether.craft_altar" } }, "requirements": [ diff --git a/src/generated/resources/data/aether/advancements/craft_incubator.json b/src/generated/resources/data/aether/advancements/incubate_moa.json similarity index 52% rename from src/generated/resources/data/aether/advancements/craft_incubator.json rename to src/generated/resources/data/aether/advancements/incubate_moa.json index 0b17da2c54..7cf14d65c6 100644 --- a/src/generated/resources/data/aether/advancements/craft_incubator.json +++ b/src/generated/resources/data/aether/advancements/incubate_moa.json @@ -1,23 +1,19 @@ { "parent": "aether:enter_aether", "criteria": { - "craft_incubator": { + "incubate_moa": { "conditions": { - "items": [ - { - "items": [ - "aether:incubator" - ] - } - ] + "item": { + "tag": "aether:moa_eggs" + } }, - "trigger": "minecraft:inventory_changed" + "trigger": "aether:incubation_trigger" } }, "display": { "announce_to_chat": true, "description": { - "translate": "advancement.aether.incubator.desc" + "translate": "advancement.aether.incubate_moa.desc" }, "frame": "task", "hidden": false, @@ -26,12 +22,12 @@ }, "show_toast": true, "title": { - "translate": "advancement.aether.incubator" + "translate": "advancement.aether.incubate_moa" } }, "requirements": [ [ - "craft_incubator" + "incubate_moa" ] ] } \ 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 e9b965eb21..bd19f282b5 100644 --- a/src/generated/resources/data/aether/advancements/mount_phyg.json +++ b/src/generated/resources/data/aether/advancements/mount_phyg.json @@ -1,5 +1,5 @@ { - "parent": "aether:to_infinity_and_beyond", + "parent": "aether:blue_aercloud", "criteria": { "mount_phyg": { "conditions": { diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/golden_log_to_planks.json b/src/generated/resources/data/aether/advancements/recipes/aether_blocks/golden_log_to_planks.json deleted file mode 100644 index 8a105271bc..0000000000 --- a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/golden_log_to_planks.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_golden_oak_log": { - "conditions": { - "items": [ - { - "items": [ - "aether:golden_oak_log" - ] - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "aether:golden_log_to_planks" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_golden_oak_log", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "aether:golden_log_to_planks" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/golden_wood_to_planks.json b/src/generated/resources/data/aether/advancements/recipes/aether_blocks/golden_wood_to_planks.json deleted file mode 100644 index 690f116699..0000000000 --- a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/golden_wood_to_planks.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_golden_oak_wood": { - "conditions": { - "items": [ - { - "items": [ - "aether:golden_oak_wood" - ] - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "aether:golden_wood_to_planks" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_golden_oak_wood", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "aether:golden_wood_to_planks" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/holystone_to_holystone_brick_wall_stonecutting.json b/src/generated/resources/data/aether/advancements/recipes/aether_blocks/holystone_to_holystone_brick_wall_stonecutting.json deleted file mode 100644 index a175a0c587..0000000000 --- a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/holystone_to_holystone_brick_wall_stonecutting.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_holystone": { - "conditions": { - "items": [ - { - "items": [ - "aether:holystone" - ] - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "aether:holystone_to_holystone_brick_wall_stonecutting" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_holystone", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "aether:holystone_to_holystone_brick_wall_stonecutting" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/pillar_stonecutting.json b/src/generated/resources/data/aether/advancements/recipes/aether_blocks/pillar_stonecutting.json deleted file mode 100644 index 7e40152cff..0000000000 --- a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/pillar_stonecutting.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_angelic_stone": { - "conditions": { - "items": [ - { - "items": [ - "aether:angelic_stone" - ] - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "aether:pillar_stonecutting" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_angelic_stone", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "aether:pillar_stonecutting" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/pillar_top_stonecutting.json b/src/generated/resources/data/aether/advancements/recipes/aether_blocks/pillar_top_stonecutting.json deleted file mode 100644 index 1b24750fd5..0000000000 --- a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/pillar_top_stonecutting.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_angelic_stone": { - "conditions": { - "items": [ - { - "items": [ - "aether:angelic_stone" - ] - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "aether:pillar_top_stonecutting" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_angelic_stone", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "aether:pillar_top_stonecutting" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/stripped_log_to_planks.json b/src/generated/resources/data/aether/advancements/recipes/aether_blocks/stripped_log_to_planks.json deleted file mode 100644 index ee730d48df..0000000000 --- a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/stripped_log_to_planks.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_stripped_skyroot_log": { - "conditions": { - "items": [ - { - "items": [ - "aether:stripped_skyroot_log" - ] - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "aether:stripped_log_to_planks" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_stripped_skyroot_log", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "aether:stripped_log_to_planks" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/stripped_wood_to_planks.json b/src/generated/resources/data/aether/advancements/recipes/aether_blocks/stripped_wood_to_planks.json deleted file mode 100644 index 7903db9329..0000000000 --- a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/stripped_wood_to_planks.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_stripped_skyroot_wood": { - "conditions": { - "items": [ - { - "items": [ - "aether:stripped_skyroot_wood" - ] - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "aether:stripped_wood_to_planks" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_stripped_skyroot_wood", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "aether:stripped_wood_to_planks" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/wood_to_planks.json b/src/generated/resources/data/aether/advancements/recipes/aether_blocks/wood_to_planks.json deleted file mode 100644 index fbc64979a1..0000000000 --- a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/wood_to_planks.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_skyroot_wood": { - "conditions": { - "items": [ - { - "items": [ - "aether:skyroot_wood" - ] - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "aether:wood_to_planks" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_skyroot_wood", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "aether:wood_to_planks" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/aerogel_slab.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/aerogel_slab.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_blocks/aerogel_slab.json rename to src/generated/resources/data/aether/advancements/recipes/building_blocks/aerogel_slab.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/aerogel_slab_stonecutting.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/aerogel_slab_from_aerogel_stonecutting.json similarity index 81% rename from src/generated/resources/data/aether/advancements/recipes/aether_blocks/aerogel_slab_stonecutting.json rename to src/generated/resources/data/aether/advancements/recipes/building_blocks/aerogel_slab_from_aerogel_stonecutting.json index 8db1c059f8..a180af79fd 100644 --- a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/aerogel_slab_stonecutting.json +++ b/src/generated/resources/data/aether/advancements/recipes/building_blocks/aerogel_slab_from_aerogel_stonecutting.json @@ -15,7 +15,7 @@ }, "has_the_recipe": { "conditions": { - "recipe": "aether:aerogel_slab_stonecutting" + "recipe": "aether:aerogel_slab_from_aerogel_stonecutting" }, "trigger": "minecraft:recipe_unlocked" } @@ -28,7 +28,7 @@ ], "rewards": { "recipes": [ - "aether:aerogel_slab_stonecutting" + "aether:aerogel_slab_from_aerogel_stonecutting" ] } } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/aerogel_stairs.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/aerogel_stairs.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_blocks/aerogel_stairs.json rename to src/generated/resources/data/aether/advancements/recipes/building_blocks/aerogel_stairs.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/aerogel_wall_stonecutting.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/aerogel_stairs_from_aerogel_stonecutting.json similarity index 80% rename from src/generated/resources/data/aether/advancements/recipes/aether_blocks/aerogel_wall_stonecutting.json rename to src/generated/resources/data/aether/advancements/recipes/building_blocks/aerogel_stairs_from_aerogel_stonecutting.json index 0e56d33152..2cf1412615 100644 --- a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/aerogel_wall_stonecutting.json +++ b/src/generated/resources/data/aether/advancements/recipes/building_blocks/aerogel_stairs_from_aerogel_stonecutting.json @@ -15,7 +15,7 @@ }, "has_the_recipe": { "conditions": { - "recipe": "aether:aerogel_wall_stonecutting" + "recipe": "aether:aerogel_stairs_from_aerogel_stonecutting" }, "trigger": "minecraft:recipe_unlocked" } @@ -28,7 +28,7 @@ ], "rewards": { "recipes": [ - "aether:aerogel_wall_stonecutting" + "aether:aerogel_stairs_from_aerogel_stonecutting" ] } } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/ambrosium_block.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/ambrosium_block.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_blocks/ambrosium_block.json rename to src/generated/resources/data/aether/advancements/recipes/building_blocks/ambrosium_block.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/angelic_slab.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/angelic_slab.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_blocks/angelic_slab.json rename to src/generated/resources/data/aether/advancements/recipes/building_blocks/angelic_slab.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/angelic_wall_stonecutting.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/angelic_slab_from_angelic_stone_stonecutting.json similarity index 80% rename from src/generated/resources/data/aether/advancements/recipes/aether_blocks/angelic_wall_stonecutting.json rename to src/generated/resources/data/aether/advancements/recipes/building_blocks/angelic_slab_from_angelic_stone_stonecutting.json index fc6505a7af..a36232fc46 100644 --- a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/angelic_wall_stonecutting.json +++ b/src/generated/resources/data/aether/advancements/recipes/building_blocks/angelic_slab_from_angelic_stone_stonecutting.json @@ -15,7 +15,7 @@ }, "has_the_recipe": { "conditions": { - "recipe": "aether:angelic_wall_stonecutting" + "recipe": "aether:angelic_slab_from_angelic_stone_stonecutting" }, "trigger": "minecraft:recipe_unlocked" } @@ -28,7 +28,7 @@ ], "rewards": { "recipes": [ - "aether:angelic_wall_stonecutting" + "aether:angelic_slab_from_angelic_stone_stonecutting" ] } } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/angelic_stairs.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/angelic_stairs.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_blocks/angelic_stairs.json rename to src/generated/resources/data/aether/advancements/recipes/building_blocks/angelic_stairs.json 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 new file mode 100644 index 0000000000..5b449f53ff --- /dev/null +++ b/src/generated/resources/data/aether/advancements/recipes/building_blocks/angelic_stairs_from_angelic_stone_stonecutting.json @@ -0,0 +1,34 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_angelic_stone": { + "conditions": { + "items": [ + { + "items": [ + "aether:angelic_stone" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "aether:angelic_stairs_from_angelic_stone_stonecutting" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_angelic_stone", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "aether:angelic_stairs_from_angelic_stone_stonecutting" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_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 similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_blocks/angelic_stone_from_light_angelic_stone_stonecutting.json rename to src/generated/resources/data/aether/advancements/recipes/building_blocks/angelic_stone_from_light_angelic_stone_stonecutting.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/angelic_stone_from_pillar_stonecutting.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/angelic_stone_from_pillar_stonecutting.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_blocks/angelic_stone_from_pillar_stonecutting.json rename to src/generated/resources/data/aether/advancements/recipes/building_blocks/angelic_stone_from_pillar_stonecutting.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_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 similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_blocks/angelic_stone_from_pillar_top_stonecutting.json rename to src/generated/resources/data/aether/advancements/recipes/building_blocks/angelic_stone_from_pillar_top_stonecutting.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/blue_aercloud_freezing.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/blue_aercloud_freezing.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_blocks/blue_aercloud_freezing.json rename to src/generated/resources/data/aether/advancements/recipes/building_blocks/blue_aercloud_freezing.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/carved_slab.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/carved_slab.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_blocks/carved_slab.json rename to src/generated/resources/data/aether/advancements/recipes/building_blocks/carved_slab.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/carved_slab_stonecutting.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/carved_slab_from_carved_stone_stonecutting.json similarity index 80% rename from src/generated/resources/data/aether/advancements/recipes/aether_blocks/carved_slab_stonecutting.json rename to src/generated/resources/data/aether/advancements/recipes/building_blocks/carved_slab_from_carved_stone_stonecutting.json index 09c58b389c..3f1e035060 100644 --- a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/carved_slab_stonecutting.json +++ b/src/generated/resources/data/aether/advancements/recipes/building_blocks/carved_slab_from_carved_stone_stonecutting.json @@ -15,7 +15,7 @@ }, "has_the_recipe": { "conditions": { - "recipe": "aether:carved_slab_stonecutting" + "recipe": "aether:carved_slab_from_carved_stone_stonecutting" }, "trigger": "minecraft:recipe_unlocked" } @@ -28,7 +28,7 @@ ], "rewards": { "recipes": [ - "aether:carved_slab_stonecutting" + "aether:carved_slab_from_carved_stone_stonecutting" ] } } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/carved_stairs.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/carved_stairs.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_blocks/carved_stairs.json rename to src/generated/resources/data/aether/advancements/recipes/building_blocks/carved_stairs.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/sentry_stone_stoncutting.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/carved_stairs_from_carved_stone_stonecutting.json similarity index 80% rename from src/generated/resources/data/aether/advancements/recipes/aether_blocks/sentry_stone_stoncutting.json rename to src/generated/resources/data/aether/advancements/recipes/building_blocks/carved_stairs_from_carved_stone_stonecutting.json index 76acb2e8d2..73419a6983 100644 --- a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/sentry_stone_stoncutting.json +++ b/src/generated/resources/data/aether/advancements/recipes/building_blocks/carved_stairs_from_carved_stone_stonecutting.json @@ -15,7 +15,7 @@ }, "has_the_recipe": { "conditions": { - "recipe": "aether:sentry_stone_stoncutting" + "recipe": "aether:carved_stairs_from_carved_stone_stonecutting" }, "trigger": "minecraft:recipe_unlocked" } @@ -28,7 +28,7 @@ ], "rewards": { "recipes": [ - "aether:sentry_stone_stoncutting" + "aether:carved_stairs_from_carved_stone_stonecutting" ] } } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/carved_stone_from_sentry_stone_stoncutting.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/carved_stone_from_sentry_stone_stonecutting.json similarity index 80% rename from src/generated/resources/data/aether/advancements/recipes/aether_blocks/carved_stone_from_sentry_stone_stoncutting.json rename to src/generated/resources/data/aether/advancements/recipes/building_blocks/carved_stone_from_sentry_stone_stonecutting.json index ee7cbe8687..2b14d7c30c 100644 --- a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/carved_stone_from_sentry_stone_stoncutting.json +++ b/src/generated/resources/data/aether/advancements/recipes/building_blocks/carved_stone_from_sentry_stone_stonecutting.json @@ -15,7 +15,7 @@ }, "has_the_recipe": { "conditions": { - "recipe": "aether:carved_stone_from_sentry_stone_stoncutting" + "recipe": "aether:carved_stone_from_sentry_stone_stonecutting" }, "trigger": "minecraft:recipe_unlocked" } @@ -28,7 +28,7 @@ ], "rewards": { "recipes": [ - "aether:carved_stone_from_sentry_stone_stoncutting" + "aether:carved_stone_from_sentry_stone_stonecutting" ] } } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/crystal_leaves_freezing.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/crystal_leaves_freezing.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_blocks/crystal_leaves_freezing.json rename to src/generated/resources/data/aether/advancements/recipes/building_blocks/crystal_leaves_freezing.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/enchanted_gravitite_enchanting.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/enchanted_gravitite_enchanting.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_blocks/enchanted_gravitite_enchanting.json rename to src/generated/resources/data/aether/advancements/recipes/building_blocks/enchanted_gravitite_enchanting.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/golden_oak_wood.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/golden_oak_wood.json similarity index 90% rename from src/generated/resources/data/aether/advancements/recipes/aether_blocks/golden_oak_wood.json rename to src/generated/resources/data/aether/advancements/recipes/building_blocks/golden_oak_wood.json index a429f4eb72..13cebd56bf 100644 --- a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/golden_oak_wood.json +++ b/src/generated/resources/data/aether/advancements/recipes/building_blocks/golden_oak_wood.json @@ -1,7 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_golden_oak_log": { + "has_log": { "conditions": { "items": [ { @@ -22,7 +22,7 @@ }, "requirements": [ [ - "has_golden_oak_log", + "has_log", "has_the_recipe" ] ], diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/hellfire_slab.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/hellfire_slab.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_blocks/hellfire_slab.json rename to src/generated/resources/data/aether/advancements/recipes/building_blocks/hellfire_slab.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/hellfire_slab_stonecutting.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/hellfire_slab_from_hellfire_stone_stonecutting.json similarity index 79% rename from src/generated/resources/data/aether/advancements/recipes/aether_blocks/hellfire_slab_stonecutting.json rename to src/generated/resources/data/aether/advancements/recipes/building_blocks/hellfire_slab_from_hellfire_stone_stonecutting.json index c75e301929..edf5d44a2f 100644 --- a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/hellfire_slab_stonecutting.json +++ b/src/generated/resources/data/aether/advancements/recipes/building_blocks/hellfire_slab_from_hellfire_stone_stonecutting.json @@ -15,7 +15,7 @@ }, "has_the_recipe": { "conditions": { - "recipe": "aether:hellfire_slab_stonecutting" + "recipe": "aether:hellfire_slab_from_hellfire_stone_stonecutting" }, "trigger": "minecraft:recipe_unlocked" } @@ -28,7 +28,7 @@ ], "rewards": { "recipes": [ - "aether:hellfire_slab_stonecutting" + "aether:hellfire_slab_from_hellfire_stone_stonecutting" ] } } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/hellfire_stairs.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/hellfire_stairs.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_blocks/hellfire_stairs.json rename to src/generated/resources/data/aether/advancements/recipes/building_blocks/hellfire_stairs.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/hellfire_wall_stonecutting.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/hellfire_stairs_from_hellfire_stone_stonecutting.json similarity index 79% rename from src/generated/resources/data/aether/advancements/recipes/aether_blocks/hellfire_wall_stonecutting.json rename to src/generated/resources/data/aether/advancements/recipes/building_blocks/hellfire_stairs_from_hellfire_stone_stonecutting.json index e2f2128e25..bf8f3c4016 100644 --- a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/hellfire_wall_stonecutting.json +++ b/src/generated/resources/data/aether/advancements/recipes/building_blocks/hellfire_stairs_from_hellfire_stone_stonecutting.json @@ -15,7 +15,7 @@ }, "has_the_recipe": { "conditions": { - "recipe": "aether:hellfire_wall_stonecutting" + "recipe": "aether:hellfire_stairs_from_hellfire_stone_stonecutting" }, "trigger": "minecraft:recipe_unlocked" } @@ -28,7 +28,7 @@ ], "rewards": { "recipes": [ - "aether:hellfire_wall_stonecutting" + "aether:hellfire_stairs_from_hellfire_stone_stonecutting" ] } } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_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 similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_blocks/hellfire_stone_from_light_hellfire_stone_stonecutting.json rename to src/generated/resources/data/aether/advancements/recipes/building_blocks/hellfire_stone_from_light_hellfire_stone_stonecutting.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/holystone_brick_slab.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/holystone_brick_slab.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_blocks/holystone_brick_slab.json rename to src/generated/resources/data/aether/advancements/recipes/building_blocks/holystone_brick_slab.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/holystone_brick_slab_stonecutting.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/holystone_brick_slab_from_holystone_bricks_stonecutting.json similarity index 77% rename from src/generated/resources/data/aether/advancements/recipes/aether_blocks/holystone_brick_slab_stonecutting.json rename to src/generated/resources/data/aether/advancements/recipes/building_blocks/holystone_brick_slab_from_holystone_bricks_stonecutting.json index 1820719183..0a4fe5cb01 100644 --- a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/holystone_brick_slab_stonecutting.json +++ b/src/generated/resources/data/aether/advancements/recipes/building_blocks/holystone_brick_slab_from_holystone_bricks_stonecutting.json @@ -15,7 +15,7 @@ }, "has_the_recipe": { "conditions": { - "recipe": "aether:holystone_brick_slab_stonecutting" + "recipe": "aether:holystone_brick_slab_from_holystone_bricks_stonecutting" }, "trigger": "minecraft:recipe_unlocked" } @@ -28,7 +28,7 @@ ], "rewards": { "recipes": [ - "aether:holystone_brick_slab_stonecutting" + "aether:holystone_brick_slab_from_holystone_bricks_stonecutting" ] } } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/holystone_to_holystone_brick_stairs_stonecutting.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/holystone_brick_slab_from_holystone_stonecutting.json similarity index 80% rename from src/generated/resources/data/aether/advancements/recipes/aether_blocks/holystone_to_holystone_brick_stairs_stonecutting.json rename to src/generated/resources/data/aether/advancements/recipes/building_blocks/holystone_brick_slab_from_holystone_stonecutting.json index 122140a629..d697247178 100644 --- a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/holystone_to_holystone_brick_stairs_stonecutting.json +++ b/src/generated/resources/data/aether/advancements/recipes/building_blocks/holystone_brick_slab_from_holystone_stonecutting.json @@ -15,7 +15,7 @@ }, "has_the_recipe": { "conditions": { - "recipe": "aether:holystone_to_holystone_brick_stairs_stonecutting" + "recipe": "aether:holystone_brick_slab_from_holystone_stonecutting" }, "trigger": "minecraft:recipe_unlocked" } @@ -28,7 +28,7 @@ ], "rewards": { "recipes": [ - "aether:holystone_to_holystone_brick_stairs_stonecutting" + "aether:holystone_brick_slab_from_holystone_stonecutting" ] } } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/holystone_brick_stairs.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/holystone_brick_stairs.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_blocks/holystone_brick_stairs.json rename to src/generated/resources/data/aether/advancements/recipes/building_blocks/holystone_brick_stairs.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/holystone_brick_wall_stonecutting.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/holystone_brick_stairs_from_holystone_bricks_stonecutting.json similarity index 77% rename from src/generated/resources/data/aether/advancements/recipes/aether_blocks/holystone_brick_wall_stonecutting.json rename to src/generated/resources/data/aether/advancements/recipes/building_blocks/holystone_brick_stairs_from_holystone_bricks_stonecutting.json index f36ed61c8e..2b23c4acb1 100644 --- a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/holystone_brick_wall_stonecutting.json +++ b/src/generated/resources/data/aether/advancements/recipes/building_blocks/holystone_brick_stairs_from_holystone_bricks_stonecutting.json @@ -15,7 +15,7 @@ }, "has_the_recipe": { "conditions": { - "recipe": "aether:holystone_brick_wall_stonecutting" + "recipe": "aether:holystone_brick_stairs_from_holystone_bricks_stonecutting" }, "trigger": "minecraft:recipe_unlocked" } @@ -28,7 +28,7 @@ ], "rewards": { "recipes": [ - "aether:holystone_brick_wall_stonecutting" + "aether:holystone_brick_stairs_from_holystone_bricks_stonecutting" ] } } \ 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 new file mode 100644 index 0000000000..8336096060 --- /dev/null +++ b/src/generated/resources/data/aether/advancements/recipes/building_blocks/holystone_brick_stairs_from_holystone_stonecutting.json @@ -0,0 +1,34 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_holystone": { + "conditions": { + "items": [ + { + "items": [ + "aether:holystone" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "aether:holystone_brick_stairs_from_holystone_stonecutting" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_holystone", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "aether:holystone_brick_stairs_from_holystone_stonecutting" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/holystone_bricks.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/holystone_bricks.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_blocks/holystone_bricks.json rename to src/generated/resources/data/aether/advancements/recipes/building_blocks/holystone_bricks.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/holystone_stairs_stonecutting.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/holystone_bricks_from_holystone_stonecutting.json similarity index 79% rename from src/generated/resources/data/aether/advancements/recipes/aether_blocks/holystone_stairs_stonecutting.json rename to src/generated/resources/data/aether/advancements/recipes/building_blocks/holystone_bricks_from_holystone_stonecutting.json index 1f5f4277de..6ab9db9ee4 100644 --- a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/holystone_stairs_stonecutting.json +++ b/src/generated/resources/data/aether/advancements/recipes/building_blocks/holystone_bricks_from_holystone_stonecutting.json @@ -15,7 +15,7 @@ }, "has_the_recipe": { "conditions": { - "recipe": "aether:holystone_stairs_stonecutting" + "recipe": "aether:holystone_bricks_from_holystone_stonecutting" }, "trigger": "minecraft:recipe_unlocked" } @@ -28,7 +28,7 @@ ], "rewards": { "recipes": [ - "aether:holystone_stairs_stonecutting" + "aether:holystone_bricks_from_holystone_stonecutting" ] } } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/holystone_slab.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/holystone_slab.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_blocks/holystone_slab.json rename to src/generated/resources/data/aether/advancements/recipes/building_blocks/holystone_slab.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/holystone_brick_stonecutting.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/holystone_slab_from_holystone_stonecutting.json similarity index 80% rename from src/generated/resources/data/aether/advancements/recipes/aether_blocks/holystone_brick_stonecutting.json rename to src/generated/resources/data/aether/advancements/recipes/building_blocks/holystone_slab_from_holystone_stonecutting.json index 0a93f789c5..4223253609 100644 --- a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/holystone_brick_stonecutting.json +++ b/src/generated/resources/data/aether/advancements/recipes/building_blocks/holystone_slab_from_holystone_stonecutting.json @@ -15,7 +15,7 @@ }, "has_the_recipe": { "conditions": { - "recipe": "aether:holystone_brick_stonecutting" + "recipe": "aether:holystone_slab_from_holystone_stonecutting" }, "trigger": "minecraft:recipe_unlocked" } @@ -28,7 +28,7 @@ ], "rewards": { "recipes": [ - "aether:holystone_brick_stonecutting" + "aether:holystone_slab_from_holystone_stonecutting" ] } } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/holystone_stairs.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/holystone_stairs.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_blocks/holystone_stairs.json rename to src/generated/resources/data/aether/advancements/recipes/building_blocks/holystone_stairs.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/holystone_wall_stonecutting.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/holystone_stairs_from_holystone_stonecutting.json similarity index 79% rename from src/generated/resources/data/aether/advancements/recipes/aether_blocks/holystone_wall_stonecutting.json rename to src/generated/resources/data/aether/advancements/recipes/building_blocks/holystone_stairs_from_holystone_stonecutting.json index 72e5907af0..97d4825825 100644 --- a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/holystone_wall_stonecutting.json +++ b/src/generated/resources/data/aether/advancements/recipes/building_blocks/holystone_stairs_from_holystone_stonecutting.json @@ -15,7 +15,7 @@ }, "has_the_recipe": { "conditions": { - "recipe": "aether:holystone_wall_stonecutting" + "recipe": "aether:holystone_stairs_from_holystone_stonecutting" }, "trigger": "minecraft:recipe_unlocked" } @@ -28,7 +28,7 @@ ], "rewards": { "recipes": [ - "aether:holystone_wall_stonecutting" + "aether:holystone_stairs_from_holystone_stonecutting" ] } } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/icestone_slab.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/icestone_slab.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_blocks/icestone_slab.json rename to src/generated/resources/data/aether/advancements/recipes/building_blocks/icestone_slab.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/icestone_stairs.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/icestone_stairs.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_blocks/icestone_stairs.json rename to src/generated/resources/data/aether/advancements/recipes/building_blocks/icestone_stairs.json 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 new file mode 100644 index 0000000000..5dd2ebfa1e --- /dev/null +++ b/src/generated/resources/data/aether/advancements/recipes/building_blocks/light_angelic_stone_from_angelic_stone_stonecutting.json @@ -0,0 +1,34 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_angelic_stone": { + "conditions": { + "items": [ + { + "items": [ + "aether:angelic_stone" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "aether:light_angelic_stone_from_angelic_stone_stonecutting" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_angelic_stone", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "aether:light_angelic_stone_from_angelic_stone_stonecutting" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/light_hellfire_stone_stonecutting.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/light_hellfire_stone_from_hellfire_stone_stonecutting.json similarity index 78% rename from src/generated/resources/data/aether/advancements/recipes/aether_blocks/light_hellfire_stone_stonecutting.json rename to src/generated/resources/data/aether/advancements/recipes/building_blocks/light_hellfire_stone_from_hellfire_stone_stonecutting.json index 7336ba0886..bbeaaa9164 100644 --- a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/light_hellfire_stone_stonecutting.json +++ b/src/generated/resources/data/aether/advancements/recipes/building_blocks/light_hellfire_stone_from_hellfire_stone_stonecutting.json @@ -15,7 +15,7 @@ }, "has_the_recipe": { "conditions": { - "recipe": "aether:light_hellfire_stone_stonecutting" + "recipe": "aether:light_hellfire_stone_from_hellfire_stone_stonecutting" }, "trigger": "minecraft:recipe_unlocked" } @@ -28,7 +28,7 @@ ], "rewards": { "recipes": [ - "aether:light_hellfire_stone_stonecutting" + "aether:light_hellfire_stone_from_hellfire_stone_stonecutting" ] } } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/mossy_holystone_slab.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/mossy_holystone_slab.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_blocks/mossy_holystone_slab.json rename to src/generated/resources/data/aether/advancements/recipes/building_blocks/mossy_holystone_slab.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/mossy_holystone_slab_stonecutting.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/mossy_holystone_slab_from_mossy_holystone_stonecutting.json similarity index 78% rename from src/generated/resources/data/aether/advancements/recipes/aether_blocks/mossy_holystone_slab_stonecutting.json rename to src/generated/resources/data/aether/advancements/recipes/building_blocks/mossy_holystone_slab_from_mossy_holystone_stonecutting.json index 06dae02faa..9c991d9aed 100644 --- a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/mossy_holystone_slab_stonecutting.json +++ b/src/generated/resources/data/aether/advancements/recipes/building_blocks/mossy_holystone_slab_from_mossy_holystone_stonecutting.json @@ -15,7 +15,7 @@ }, "has_the_recipe": { "conditions": { - "recipe": "aether:mossy_holystone_slab_stonecutting" + "recipe": "aether:mossy_holystone_slab_from_mossy_holystone_stonecutting" }, "trigger": "minecraft:recipe_unlocked" } @@ -28,7 +28,7 @@ ], "rewards": { "recipes": [ - "aether:mossy_holystone_slab_stonecutting" + "aether:mossy_holystone_slab_from_mossy_holystone_stonecutting" ] } } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/mossy_holystone_stairs.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/mossy_holystone_stairs.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_blocks/mossy_holystone_stairs.json rename to src/generated/resources/data/aether/advancements/recipes/building_blocks/mossy_holystone_stairs.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/mossy_holystone_wall_stonecutting.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/mossy_holystone_stairs_from_mossy_holystone_stonecutting.json similarity index 77% rename from src/generated/resources/data/aether/advancements/recipes/aether_blocks/mossy_holystone_wall_stonecutting.json rename to src/generated/resources/data/aether/advancements/recipes/building_blocks/mossy_holystone_stairs_from_mossy_holystone_stonecutting.json index 27eb2d5ccf..c97f329af6 100644 --- a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/mossy_holystone_wall_stonecutting.json +++ b/src/generated/resources/data/aether/advancements/recipes/building_blocks/mossy_holystone_stairs_from_mossy_holystone_stonecutting.json @@ -15,7 +15,7 @@ }, "has_the_recipe": { "conditions": { - "recipe": "aether:mossy_holystone_wall_stonecutting" + "recipe": "aether:mossy_holystone_stairs_from_mossy_holystone_stonecutting" }, "trigger": "minecraft:recipe_unlocked" } @@ -28,7 +28,7 @@ ], "rewards": { "recipes": [ - "aether:mossy_holystone_wall_stonecutting" + "aether:mossy_holystone_stairs_from_mossy_holystone_stonecutting" ] } } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/mossy_holystone_with_moss.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/mossy_holystone_with_moss.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_blocks/mossy_holystone_with_moss.json rename to src/generated/resources/data/aether/advancements/recipes/building_blocks/mossy_holystone_with_moss.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/mossy_holystone_with_vine.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/mossy_holystone_with_vine.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_blocks/mossy_holystone_with_vine.json rename to src/generated/resources/data/aether/advancements/recipes/building_blocks/mossy_holystone_with_vine.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/angelic_slab_stonecutting.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/pillar_from_angelic_stone_stonecutting.json similarity index 81% rename from src/generated/resources/data/aether/advancements/recipes/aether_blocks/angelic_slab_stonecutting.json rename to src/generated/resources/data/aether/advancements/recipes/building_blocks/pillar_from_angelic_stone_stonecutting.json index 9c1fc00a87..76c13b00de 100644 --- a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/angelic_slab_stonecutting.json +++ b/src/generated/resources/data/aether/advancements/recipes/building_blocks/pillar_from_angelic_stone_stonecutting.json @@ -15,7 +15,7 @@ }, "has_the_recipe": { "conditions": { - "recipe": "aether:angelic_slab_stonecutting" + "recipe": "aether:pillar_from_angelic_stone_stonecutting" }, "trigger": "minecraft:recipe_unlocked" } @@ -28,7 +28,7 @@ ], "rewards": { "recipes": [ - "aether:angelic_slab_stonecutting" + "aether:pillar_from_angelic_stone_stonecutting" ] } } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/pillar_from_pillar_top_stonecutting.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/pillar_from_pillar_top_stonecutting.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_blocks/pillar_from_pillar_top_stonecutting.json rename to src/generated/resources/data/aether/advancements/recipes/building_blocks/pillar_from_pillar_top_stonecutting.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/angelic_stairs_stonecutting.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/pillar_top_from_angelic_stone_stonecutting.json similarity index 80% rename from src/generated/resources/data/aether/advancements/recipes/aether_blocks/angelic_stairs_stonecutting.json rename to src/generated/resources/data/aether/advancements/recipes/building_blocks/pillar_top_from_angelic_stone_stonecutting.json index e1f8a389e9..0b7b69d46a 100644 --- a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/angelic_stairs_stonecutting.json +++ b/src/generated/resources/data/aether/advancements/recipes/building_blocks/pillar_top_from_angelic_stone_stonecutting.json @@ -15,7 +15,7 @@ }, "has_the_recipe": { "conditions": { - "recipe": "aether:angelic_stairs_stonecutting" + "recipe": "aether:pillar_top_from_angelic_stone_stonecutting" }, "trigger": "minecraft:recipe_unlocked" } @@ -28,7 +28,7 @@ ], "rewards": { "recipes": [ - "aether:angelic_stairs_stonecutting" + "aether:pillar_top_from_angelic_stone_stonecutting" ] } } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/pillar_top_from_pillar_stonecutting.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/pillar_top_from_pillar_stonecutting.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_blocks/pillar_top_from_pillar_stonecutting.json rename to src/generated/resources/data/aether/advancements/recipes/building_blocks/pillar_top_from_pillar_stonecutting.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/quicksoil_glass_enchanting.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/quicksoil_glass_enchanting.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_blocks/quicksoil_glass_enchanting.json rename to src/generated/resources/data/aether/advancements/recipes/building_blocks/quicksoil_glass_enchanting.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/carved_wall_stonecutting.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/sentry_stone_from_carved_stone_stonecutting.json similarity index 80% rename from src/generated/resources/data/aether/advancements/recipes/aether_blocks/carved_wall_stonecutting.json rename to src/generated/resources/data/aether/advancements/recipes/building_blocks/sentry_stone_from_carved_stone_stonecutting.json index 4238e59fce..e833a7683d 100644 --- a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/carved_wall_stonecutting.json +++ b/src/generated/resources/data/aether/advancements/recipes/building_blocks/sentry_stone_from_carved_stone_stonecutting.json @@ -15,7 +15,7 @@ }, "has_the_recipe": { "conditions": { - "recipe": "aether:carved_wall_stonecutting" + "recipe": "aether:sentry_stone_from_carved_stone_stonecutting" }, "trigger": "minecraft:recipe_unlocked" } @@ -28,7 +28,7 @@ ], "rewards": { "recipes": [ - "aether:carved_wall_stonecutting" + "aether:sentry_stone_from_carved_stone_stonecutting" ] } } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/skyroot_bookshelf.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/skyroot_bookshelf.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_blocks/skyroot_bookshelf.json rename to src/generated/resources/data/aether/advancements/recipes/building_blocks/skyroot_bookshelf.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/skyroot_planks.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/skyroot_planks.json similarity index 79% rename from src/generated/resources/data/aether/advancements/recipes/aether_blocks/skyroot_planks.json rename to src/generated/resources/data/aether/advancements/recipes/building_blocks/skyroot_planks.json index da973eb308..6ea9fa33dc 100644 --- a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/skyroot_planks.json +++ b/src/generated/resources/data/aether/advancements/recipes/building_blocks/skyroot_planks.json @@ -1,13 +1,11 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_skyroot_log": { + "has_logs": { "conditions": { "items": [ { - "items": [ - "aether:skyroot_log" - ] + "tag": "aether:crafts_skyroot_planks" } ] }, @@ -22,7 +20,7 @@ }, "requirements": [ [ - "has_skyroot_log", + "has_logs", "has_the_recipe" ] ], diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/skyroot_slab.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/skyroot_slab.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_blocks/skyroot_slab.json rename to src/generated/resources/data/aether/advancements/recipes/building_blocks/skyroot_slab.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/skyroot_stairs.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/skyroot_stairs.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_blocks/skyroot_stairs.json rename to src/generated/resources/data/aether/advancements/recipes/building_blocks/skyroot_stairs.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/skyroot_wood.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/skyroot_wood.json similarity index 91% rename from src/generated/resources/data/aether/advancements/recipes/aether_blocks/skyroot_wood.json rename to src/generated/resources/data/aether/advancements/recipes/building_blocks/skyroot_wood.json index 7e187cc99c..1d5bfb9154 100644 --- a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/skyroot_wood.json +++ b/src/generated/resources/data/aether/advancements/recipes/building_blocks/skyroot_wood.json @@ -1,7 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_skyroot_log": { + "has_log": { "conditions": { "items": [ { @@ -22,7 +22,7 @@ }, "requirements": [ [ - "has_skyroot_log", + "has_log", "has_the_recipe" ] ], diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/stripped_skyroot_wood.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/stripped_skyroot_wood.json similarity index 89% rename from src/generated/resources/data/aether/advancements/recipes/aether_blocks/stripped_skyroot_wood.json rename to src/generated/resources/data/aether/advancements/recipes/building_blocks/stripped_skyroot_wood.json index 530a9e6248..e12f023668 100644 --- a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/stripped_skyroot_wood.json +++ b/src/generated/resources/data/aether/advancements/recipes/building_blocks/stripped_skyroot_wood.json @@ -1,7 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_stripped_skyroot_log": { + "has_log": { "conditions": { "items": [ { @@ -22,7 +22,7 @@ }, "requirements": [ [ - "has_stripped_skyroot_log", + "has_log", "has_the_recipe" ] ], diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/zanite_block.json b/src/generated/resources/data/aether/advancements/recipes/building_blocks/zanite_block.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_blocks/zanite_block.json rename to src/generated/resources/data/aether/advancements/recipes/building_blocks/zanite_block.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_accessories/blue_cape.json b/src/generated/resources/data/aether/advancements/recipes/combat/blue_cape.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_accessories/blue_cape.json rename to src/generated/resources/data/aether/advancements/recipes/combat/blue_cape.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_accessories/chainmail_gloves_repairing.json b/src/generated/resources/data/aether/advancements/recipes/combat/chainmail_gloves_repairing.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_accessories/chainmail_gloves_repairing.json rename to src/generated/resources/data/aether/advancements/recipes/combat/chainmail_gloves_repairing.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_accessories/diamond_gloves.json b/src/generated/resources/data/aether/advancements/recipes/combat/diamond_gloves.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_accessories/diamond_gloves.json rename to src/generated/resources/data/aether/advancements/recipes/combat/diamond_gloves.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_accessories/diamond_gloves_repairing.json b/src/generated/resources/data/aether/advancements/recipes/combat/diamond_gloves_repairing.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_accessories/diamond_gloves_repairing.json rename to src/generated/resources/data/aether/advancements/recipes/combat/diamond_gloves_repairing.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_weapons/golden_dart.json b/src/generated/resources/data/aether/advancements/recipes/combat/golden_dart.json similarity index 93% rename from src/generated/resources/data/aether/advancements/recipes/aether_weapons/golden_dart.json rename to src/generated/resources/data/aether/advancements/recipes/combat/golden_dart.json index 212cfe9dfe..94a0859f0f 100644 --- a/src/generated/resources/data/aether/advancements/recipes/aether_weapons/golden_dart.json +++ b/src/generated/resources/data/aether/advancements/recipes/combat/golden_dart.json @@ -1,23 +1,23 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_amber": { + "has_feather": { "conditions": { "items": [ { - "items": [ - "aether:golden_amber" - ] + "tag": "forge:feathers" } ] }, "trigger": "minecraft:inventory_changed" }, - "has_feather": { + "has_golden_amber": { "conditions": { "items": [ { - "tag": "forge:feathers" + "items": [ + "aether:golden_amber" + ] } ] }, @@ -33,7 +33,7 @@ "requirements": [ [ "has_feather", - "has_amber", + "has_golden_amber", "has_the_recipe" ] ], diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_weapons/golden_dart_shooter.json b/src/generated/resources/data/aether/advancements/recipes/combat/golden_dart_shooter.json similarity index 90% rename from src/generated/resources/data/aether/advancements/recipes/aether_weapons/golden_dart_shooter.json rename to src/generated/resources/data/aether/advancements/recipes/combat/golden_dart_shooter.json index 1426fdba5d..c200ac22e3 100644 --- a/src/generated/resources/data/aether/advancements/recipes/aether_weapons/golden_dart_shooter.json +++ b/src/generated/resources/data/aether/advancements/recipes/combat/golden_dart_shooter.json @@ -1,7 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_skyroot": { + "has_skyroot_planks": { "conditions": { "items": [ { @@ -22,7 +22,7 @@ }, "requirements": [ [ - "has_skyroot", + "has_skyroot_planks", "has_the_recipe" ] ], diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_accessories/golden_gloves.json b/src/generated/resources/data/aether/advancements/recipes/combat/golden_gloves.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_accessories/golden_gloves.json rename to src/generated/resources/data/aether/advancements/recipes/combat/golden_gloves.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_accessories/golden_gloves_repairing.json b/src/generated/resources/data/aether/advancements/recipes/combat/golden_gloves_repairing.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_accessories/golden_gloves_repairing.json rename to src/generated/resources/data/aether/advancements/recipes/combat/golden_gloves_repairing.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_accessories/golden_pendant.json b/src/generated/resources/data/aether/advancements/recipes/combat/golden_pendant.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_accessories/golden_pendant.json rename to src/generated/resources/data/aether/advancements/recipes/combat/golden_pendant.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_accessories/golden_ring.json b/src/generated/resources/data/aether/advancements/recipes/combat/golden_ring.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_accessories/golden_ring.json rename to src/generated/resources/data/aether/advancements/recipes/combat/golden_ring.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_armor/gravitite_boots.json b/src/generated/resources/data/aether/advancements/recipes/combat/gravitite_boots.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_armor/gravitite_boots.json rename to src/generated/resources/data/aether/advancements/recipes/combat/gravitite_boots.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_armor/gravitite_boots_repairing.json b/src/generated/resources/data/aether/advancements/recipes/combat/gravitite_boots_repairing.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_armor/gravitite_boots_repairing.json rename to src/generated/resources/data/aether/advancements/recipes/combat/gravitite_boots_repairing.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_armor/gravitite_chestplate.json b/src/generated/resources/data/aether/advancements/recipes/combat/gravitite_chestplate.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_armor/gravitite_chestplate.json rename to src/generated/resources/data/aether/advancements/recipes/combat/gravitite_chestplate.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_armor/gravitite_chestplate_repairing.json b/src/generated/resources/data/aether/advancements/recipes/combat/gravitite_chestplate_repairing.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_armor/gravitite_chestplate_repairing.json rename to src/generated/resources/data/aether/advancements/recipes/combat/gravitite_chestplate_repairing.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_accessories/gravitite_gloves.json b/src/generated/resources/data/aether/advancements/recipes/combat/gravitite_gloves.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_accessories/gravitite_gloves.json rename to src/generated/resources/data/aether/advancements/recipes/combat/gravitite_gloves.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_accessories/gravitite_gloves_repairing.json b/src/generated/resources/data/aether/advancements/recipes/combat/gravitite_gloves_repairing.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_accessories/gravitite_gloves_repairing.json rename to src/generated/resources/data/aether/advancements/recipes/combat/gravitite_gloves_repairing.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_armor/gravitite_helmet.json b/src/generated/resources/data/aether/advancements/recipes/combat/gravitite_helmet.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_armor/gravitite_helmet.json rename to src/generated/resources/data/aether/advancements/recipes/combat/gravitite_helmet.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_armor/gravitite_helmet_repairing.json b/src/generated/resources/data/aether/advancements/recipes/combat/gravitite_helmet_repairing.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_armor/gravitite_helmet_repairing.json rename to src/generated/resources/data/aether/advancements/recipes/combat/gravitite_helmet_repairing.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_armor/gravitite_leggings.json b/src/generated/resources/data/aether/advancements/recipes/combat/gravitite_leggings.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_armor/gravitite_leggings.json rename to src/generated/resources/data/aether/advancements/recipes/combat/gravitite_leggings.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_armor/gravitite_leggings_repairing.json b/src/generated/resources/data/aether/advancements/recipes/combat/gravitite_leggings_repairing.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_armor/gravitite_leggings_repairing.json rename to src/generated/resources/data/aether/advancements/recipes/combat/gravitite_leggings_repairing.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_weapons/gravitite_sword.json b/src/generated/resources/data/aether/advancements/recipes/combat/gravitite_sword.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_weapons/gravitite_sword.json rename to src/generated/resources/data/aether/advancements/recipes/combat/gravitite_sword.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_weapons/gravitite_sword_repairing.json b/src/generated/resources/data/aether/advancements/recipes/combat/gravitite_sword_repairing.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_weapons/gravitite_sword_repairing.json rename to src/generated/resources/data/aether/advancements/recipes/combat/gravitite_sword_repairing.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_weapons/holystone_sword.json b/src/generated/resources/data/aether/advancements/recipes/combat/holystone_sword.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_weapons/holystone_sword.json rename to src/generated/resources/data/aether/advancements/recipes/combat/holystone_sword.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_weapons/holystone_sword_repairing.json b/src/generated/resources/data/aether/advancements/recipes/combat/holystone_sword_repairing.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_weapons/holystone_sword_repairing.json rename to src/generated/resources/data/aether/advancements/recipes/combat/holystone_sword_repairing.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_accessories/iron_gloves.json b/src/generated/resources/data/aether/advancements/recipes/combat/iron_gloves.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_accessories/iron_gloves.json rename to src/generated/resources/data/aether/advancements/recipes/combat/iron_gloves.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_accessories/iron_gloves_repairing.json b/src/generated/resources/data/aether/advancements/recipes/combat/iron_gloves_repairing.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_accessories/iron_gloves_repairing.json rename to src/generated/resources/data/aether/advancements/recipes/combat/iron_gloves_repairing.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_accessories/iron_pendant.json b/src/generated/resources/data/aether/advancements/recipes/combat/iron_pendant.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_accessories/iron_pendant.json rename to src/generated/resources/data/aether/advancements/recipes/combat/iron_pendant.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_accessories/iron_ring.json b/src/generated/resources/data/aether/advancements/recipes/combat/iron_ring.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_accessories/iron_ring.json rename to src/generated/resources/data/aether/advancements/recipes/combat/iron_ring.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_accessories/leather_gloves.json b/src/generated/resources/data/aether/advancements/recipes/combat/leather_gloves.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_accessories/leather_gloves.json rename to src/generated/resources/data/aether/advancements/recipes/combat/leather_gloves.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_accessories/leather_gloves_repairing.json b/src/generated/resources/data/aether/advancements/recipes/combat/leather_gloves_repairing.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_accessories/leather_gloves_repairing.json rename to src/generated/resources/data/aether/advancements/recipes/combat/leather_gloves_repairing.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_accessories/netherite_gloves_repairing.json b/src/generated/resources/data/aether/advancements/recipes/combat/netherite_gloves_repairing.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_accessories/netherite_gloves_repairing.json rename to src/generated/resources/data/aether/advancements/recipes/combat/netherite_gloves_repairing.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_accessories/netherite_gloves_smithing.json b/src/generated/resources/data/aether/advancements/recipes/combat/netherite_gloves_smithing.json similarity index 90% rename from src/generated/resources/data/aether/advancements/recipes/aether_accessories/netherite_gloves_smithing.json rename to src/generated/resources/data/aether/advancements/recipes/combat/netherite_gloves_smithing.json index d8d9c773a6..00132c7e25 100644 --- a/src/generated/resources/data/aether/advancements/recipes/aether_accessories/netherite_gloves_smithing.json +++ b/src/generated/resources/data/aether/advancements/recipes/combat/netherite_gloves_smithing.json @@ -1,7 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_netherite": { + "has_netherite_ingot": { "conditions": { "items": [ { @@ -20,7 +20,7 @@ }, "requirements": [ [ - "has_netherite", + "has_netherite_ingot", "has_the_recipe" ] ], diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_weapons/poison_dart.json b/src/generated/resources/data/aether/advancements/recipes/combat/poison_dart.json similarity index 92% rename from src/generated/resources/data/aether/advancements/recipes/aether_weapons/poison_dart.json rename to src/generated/resources/data/aether/advancements/recipes/combat/poison_dart.json index ce2656eb47..0fd5273b62 100644 --- a/src/generated/resources/data/aether/advancements/recipes/aether_weapons/poison_dart.json +++ b/src/generated/resources/data/aether/advancements/recipes/combat/poison_dart.json @@ -13,7 +13,7 @@ }, "trigger": "minecraft:inventory_changed" }, - "has_poison_bucket": { + "has_skyroot_poison_bucket": { "conditions": { "items": [ { @@ -35,7 +35,7 @@ "requirements": [ [ "has_golden_dart", - "has_poison_bucket", + "has_skyroot_poison_bucket", "has_the_recipe" ] ], diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_weapons/poison_dart_shooter.json b/src/generated/resources/data/aether/advancements/recipes/combat/poison_dart_shooter.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_weapons/poison_dart_shooter.json rename to src/generated/resources/data/aether/advancements/recipes/combat/poison_dart_shooter.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_accessories/red_cape.json b/src/generated/resources/data/aether/advancements/recipes/combat/red_cape.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_accessories/red_cape.json rename to src/generated/resources/data/aether/advancements/recipes/combat/red_cape.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_weapons/skyroot_sword.json b/src/generated/resources/data/aether/advancements/recipes/combat/skyroot_sword.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_weapons/skyroot_sword.json rename to src/generated/resources/data/aether/advancements/recipes/combat/skyroot_sword.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_weapons/skyroot_sword_repairing.json b/src/generated/resources/data/aether/advancements/recipes/combat/skyroot_sword_repairing.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_weapons/skyroot_sword_repairing.json rename to src/generated/resources/data/aether/advancements/recipes/combat/skyroot_sword_repairing.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_accessories/white_cape.json b/src/generated/resources/data/aether/advancements/recipes/combat/white_cape.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_accessories/white_cape.json rename to src/generated/resources/data/aether/advancements/recipes/combat/white_cape.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_accessories/yellow_cape.json b/src/generated/resources/data/aether/advancements/recipes/combat/yellow_cape.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_accessories/yellow_cape.json rename to src/generated/resources/data/aether/advancements/recipes/combat/yellow_cape.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_armor/zanite_boots.json b/src/generated/resources/data/aether/advancements/recipes/combat/zanite_boots.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_armor/zanite_boots.json rename to src/generated/resources/data/aether/advancements/recipes/combat/zanite_boots.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_armor/zanite_boots_repairing.json b/src/generated/resources/data/aether/advancements/recipes/combat/zanite_boots_repairing.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_armor/zanite_boots_repairing.json rename to src/generated/resources/data/aether/advancements/recipes/combat/zanite_boots_repairing.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_armor/zanite_chestplate.json b/src/generated/resources/data/aether/advancements/recipes/combat/zanite_chestplate.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_armor/zanite_chestplate.json rename to src/generated/resources/data/aether/advancements/recipes/combat/zanite_chestplate.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_armor/zanite_chestplate_repairing.json b/src/generated/resources/data/aether/advancements/recipes/combat/zanite_chestplate_repairing.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_armor/zanite_chestplate_repairing.json rename to src/generated/resources/data/aether/advancements/recipes/combat/zanite_chestplate_repairing.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_accessories/zanite_gloves.json b/src/generated/resources/data/aether/advancements/recipes/combat/zanite_gloves.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_accessories/zanite_gloves.json rename to src/generated/resources/data/aether/advancements/recipes/combat/zanite_gloves.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_accessories/zanite_gloves_repairing.json b/src/generated/resources/data/aether/advancements/recipes/combat/zanite_gloves_repairing.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_accessories/zanite_gloves_repairing.json rename to src/generated/resources/data/aether/advancements/recipes/combat/zanite_gloves_repairing.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_armor/zanite_helmet.json b/src/generated/resources/data/aether/advancements/recipes/combat/zanite_helmet.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_armor/zanite_helmet.json rename to src/generated/resources/data/aether/advancements/recipes/combat/zanite_helmet.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_armor/zanite_helmet_repairing.json b/src/generated/resources/data/aether/advancements/recipes/combat/zanite_helmet_repairing.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_armor/zanite_helmet_repairing.json rename to src/generated/resources/data/aether/advancements/recipes/combat/zanite_helmet_repairing.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_armor/zanite_leggings.json b/src/generated/resources/data/aether/advancements/recipes/combat/zanite_leggings.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_armor/zanite_leggings.json rename to src/generated/resources/data/aether/advancements/recipes/combat/zanite_leggings.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_armor/zanite_leggings_repairing.json b/src/generated/resources/data/aether/advancements/recipes/combat/zanite_leggings_repairing.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_armor/zanite_leggings_repairing.json rename to src/generated/resources/data/aether/advancements/recipes/combat/zanite_leggings_repairing.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_accessories/zanite_pendant.json b/src/generated/resources/data/aether/advancements/recipes/combat/zanite_pendant.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_accessories/zanite_pendant.json rename to src/generated/resources/data/aether/advancements/recipes/combat/zanite_pendant.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_accessories/zanite_pendant_repairing.json b/src/generated/resources/data/aether/advancements/recipes/combat/zanite_pendant_repairing.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_accessories/zanite_pendant_repairing.json rename to src/generated/resources/data/aether/advancements/recipes/combat/zanite_pendant_repairing.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_accessories/zanite_ring.json b/src/generated/resources/data/aether/advancements/recipes/combat/zanite_ring.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_accessories/zanite_ring.json rename to src/generated/resources/data/aether/advancements/recipes/combat/zanite_ring.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_accessories/zanite_ring_repairing.json b/src/generated/resources/data/aether/advancements/recipes/combat/zanite_ring_repairing.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_accessories/zanite_ring_repairing.json rename to src/generated/resources/data/aether/advancements/recipes/combat/zanite_ring_repairing.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_weapons/zanite_sword.json b/src/generated/resources/data/aether/advancements/recipes/combat/zanite_sword.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_weapons/zanite_sword.json rename to src/generated/resources/data/aether/advancements/recipes/combat/zanite_sword.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_weapons/zanite_sword_repairing.json b/src/generated/resources/data/aether/advancements/recipes/combat/zanite_sword_repairing.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_weapons/zanite_sword_repairing.json rename to src/generated/resources/data/aether/advancements/recipes/combat/zanite_sword_repairing.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/aerogel_wall.json b/src/generated/resources/data/aether/advancements/recipes/decorations/aerogel_wall.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_blocks/aerogel_wall.json rename to src/generated/resources/data/aether/advancements/recipes/decorations/aerogel_wall.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/aerogel_stairs_stonecutting.json b/src/generated/resources/data/aether/advancements/recipes/decorations/aerogel_wall_from_aerogel_stonecutting.json similarity index 81% rename from src/generated/resources/data/aether/advancements/recipes/aether_blocks/aerogel_stairs_stonecutting.json rename to src/generated/resources/data/aether/advancements/recipes/decorations/aerogel_wall_from_aerogel_stonecutting.json index 0eb07ed32a..dfb5d5a9c1 100644 --- a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/aerogel_stairs_stonecutting.json +++ b/src/generated/resources/data/aether/advancements/recipes/decorations/aerogel_wall_from_aerogel_stonecutting.json @@ -15,7 +15,7 @@ }, "has_the_recipe": { "conditions": { - "recipe": "aether:aerogel_stairs_stonecutting" + "recipe": "aether:aerogel_wall_from_aerogel_stonecutting" }, "trigger": "minecraft:recipe_unlocked" } @@ -28,7 +28,7 @@ ], "rewards": { "recipes": [ - "aether:aerogel_stairs_stonecutting" + "aether:aerogel_wall_from_aerogel_stonecutting" ] } } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/altar.json b/src/generated/resources/data/aether/advancements/recipes/decorations/altar.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_blocks/altar.json rename to src/generated/resources/data/aether/advancements/recipes/decorations/altar.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/ambrosium_torch.json b/src/generated/resources/data/aether/advancements/recipes/decorations/ambrosium_torch.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_blocks/ambrosium_torch.json rename to src/generated/resources/data/aether/advancements/recipes/decorations/ambrosium_torch.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/angelic_wall.json b/src/generated/resources/data/aether/advancements/recipes/decorations/angelic_wall.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_blocks/angelic_wall.json rename to src/generated/resources/data/aether/advancements/recipes/decorations/angelic_wall.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/light_angelic_stone_stonecutting.json b/src/generated/resources/data/aether/advancements/recipes/decorations/angelic_wall_from_angelic_stone_stonecutting.json similarity index 80% rename from src/generated/resources/data/aether/advancements/recipes/aether_blocks/light_angelic_stone_stonecutting.json rename to src/generated/resources/data/aether/advancements/recipes/decorations/angelic_wall_from_angelic_stone_stonecutting.json index bde3a3707e..655fb79b4f 100644 --- a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/light_angelic_stone_stonecutting.json +++ b/src/generated/resources/data/aether/advancements/recipes/decorations/angelic_wall_from_angelic_stone_stonecutting.json @@ -15,7 +15,7 @@ }, "has_the_recipe": { "conditions": { - "recipe": "aether:light_angelic_stone_stonecutting" + "recipe": "aether:angelic_wall_from_angelic_stone_stonecutting" }, "trigger": "minecraft:recipe_unlocked" } @@ -28,7 +28,7 @@ ], "rewards": { "recipes": [ - "aether:light_angelic_stone_stonecutting" + "aether:angelic_wall_from_angelic_stone_stonecutting" ] } } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/carved_wall.json b/src/generated/resources/data/aether/advancements/recipes/decorations/carved_wall.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_blocks/carved_wall.json rename to src/generated/resources/data/aether/advancements/recipes/decorations/carved_wall.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/carved_stairs_stonecutting.json b/src/generated/resources/data/aether/advancements/recipes/decorations/carved_wall_from_carved_stone_stonecutting.json similarity index 80% rename from src/generated/resources/data/aether/advancements/recipes/aether_blocks/carved_stairs_stonecutting.json rename to src/generated/resources/data/aether/advancements/recipes/decorations/carved_wall_from_carved_stone_stonecutting.json index 3aaa3b50c1..4a85a0c225 100644 --- a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/carved_stairs_stonecutting.json +++ b/src/generated/resources/data/aether/advancements/recipes/decorations/carved_wall_from_carved_stone_stonecutting.json @@ -15,7 +15,7 @@ }, "has_the_recipe": { "conditions": { - "recipe": "aether:carved_stairs_stonecutting" + "recipe": "aether:carved_wall_from_carved_stone_stonecutting" }, "trigger": "minecraft:recipe_unlocked" } @@ -28,7 +28,7 @@ ], "rewards": { "recipes": [ - "aether:carved_stairs_stonecutting" + "aether:carved_wall_from_carved_stone_stonecutting" ] } } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/freezer.json b/src/generated/resources/data/aether/advancements/recipes/decorations/freezer.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_blocks/freezer.json rename to src/generated/resources/data/aether/advancements/recipes/decorations/freezer.json 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 89e24a91aa..f48bb5ab69 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 @@ -1,7 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_gravitite": { + "has_enchanted_gravitite": { "conditions": { "items": [ { @@ -22,7 +22,7 @@ }, "requirements": [ [ - "has_gravitite", + "has_enchanted_gravitite", "has_the_recipe" ] ], diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/hellfire_wall.json b/src/generated/resources/data/aether/advancements/recipes/decorations/hellfire_wall.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_blocks/hellfire_wall.json rename to src/generated/resources/data/aether/advancements/recipes/decorations/hellfire_wall.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/hellfire_stairs_stonecutting.json b/src/generated/resources/data/aether/advancements/recipes/decorations/hellfire_wall_from_hellfire_stone_stonecutting.json similarity index 79% rename from src/generated/resources/data/aether/advancements/recipes/aether_blocks/hellfire_stairs_stonecutting.json rename to src/generated/resources/data/aether/advancements/recipes/decorations/hellfire_wall_from_hellfire_stone_stonecutting.json index 8512e45992..6b5fcf34ed 100644 --- a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/hellfire_stairs_stonecutting.json +++ b/src/generated/resources/data/aether/advancements/recipes/decorations/hellfire_wall_from_hellfire_stone_stonecutting.json @@ -15,7 +15,7 @@ }, "has_the_recipe": { "conditions": { - "recipe": "aether:hellfire_stairs_stonecutting" + "recipe": "aether:hellfire_wall_from_hellfire_stone_stonecutting" }, "trigger": "minecraft:recipe_unlocked" } @@ -28,7 +28,7 @@ ], "rewards": { "recipes": [ - "aether:hellfire_stairs_stonecutting" + "aether:hellfire_wall_from_hellfire_stone_stonecutting" ] } } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/holystone_brick_wall.json b/src/generated/resources/data/aether/advancements/recipes/decorations/holystone_brick_wall.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_blocks/holystone_brick_wall.json rename to src/generated/resources/data/aether/advancements/recipes/decorations/holystone_brick_wall.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/holystone_brick_stairs_stonecutting.json b/src/generated/resources/data/aether/advancements/recipes/decorations/holystone_brick_wall_from_holystone_bricks_stonecutting.json similarity index 77% rename from src/generated/resources/data/aether/advancements/recipes/aether_blocks/holystone_brick_stairs_stonecutting.json rename to src/generated/resources/data/aether/advancements/recipes/decorations/holystone_brick_wall_from_holystone_bricks_stonecutting.json index b3baa0e838..e0e284ade5 100644 --- a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/holystone_brick_stairs_stonecutting.json +++ b/src/generated/resources/data/aether/advancements/recipes/decorations/holystone_brick_wall_from_holystone_bricks_stonecutting.json @@ -15,7 +15,7 @@ }, "has_the_recipe": { "conditions": { - "recipe": "aether:holystone_brick_stairs_stonecutting" + "recipe": "aether:holystone_brick_wall_from_holystone_bricks_stonecutting" }, "trigger": "minecraft:recipe_unlocked" } @@ -28,7 +28,7 @@ ], "rewards": { "recipes": [ - "aether:holystone_brick_stairs_stonecutting" + "aether:holystone_brick_wall_from_holystone_bricks_stonecutting" ] } } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/holystone_to_holystone_brick_slab_stonecutting.json b/src/generated/resources/data/aether/advancements/recipes/decorations/holystone_brick_wall_from_holystone_stonecutting.json similarity index 78% rename from src/generated/resources/data/aether/advancements/recipes/aether_blocks/holystone_to_holystone_brick_slab_stonecutting.json rename to src/generated/resources/data/aether/advancements/recipes/decorations/holystone_brick_wall_from_holystone_stonecutting.json index e737951540..a792a5016b 100644 --- a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/holystone_to_holystone_brick_slab_stonecutting.json +++ b/src/generated/resources/data/aether/advancements/recipes/decorations/holystone_brick_wall_from_holystone_stonecutting.json @@ -15,7 +15,7 @@ }, "has_the_recipe": { "conditions": { - "recipe": "aether:holystone_to_holystone_brick_slab_stonecutting" + "recipe": "aether:holystone_brick_wall_from_holystone_stonecutting" }, "trigger": "minecraft:recipe_unlocked" } @@ -28,7 +28,7 @@ ], "rewards": { "recipes": [ - "aether:holystone_to_holystone_brick_slab_stonecutting" + "aether:holystone_brick_wall_from_holystone_stonecutting" ] } } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/holystone_wall.json b/src/generated/resources/data/aether/advancements/recipes/decorations/holystone_wall.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_blocks/holystone_wall.json rename to src/generated/resources/data/aether/advancements/recipes/decorations/holystone_wall.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/holystone_slab_stonecutting.json b/src/generated/resources/data/aether/advancements/recipes/decorations/holystone_wall_from_holystone_stonecutting.json similarity index 80% rename from src/generated/resources/data/aether/advancements/recipes/aether_blocks/holystone_slab_stonecutting.json rename to src/generated/resources/data/aether/advancements/recipes/decorations/holystone_wall_from_holystone_stonecutting.json index d46aa4f22b..c2ed706e22 100644 --- a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/holystone_slab_stonecutting.json +++ b/src/generated/resources/data/aether/advancements/recipes/decorations/holystone_wall_from_holystone_stonecutting.json @@ -15,7 +15,7 @@ }, "has_the_recipe": { "conditions": { - "recipe": "aether:holystone_slab_stonecutting" + "recipe": "aether:holystone_wall_from_holystone_stonecutting" }, "trigger": "minecraft:recipe_unlocked" } @@ -28,7 +28,7 @@ ], "rewards": { "recipes": [ - "aether:holystone_slab_stonecutting" + "aether:holystone_wall_from_holystone_stonecutting" ] } } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/icestone_wall.json b/src/generated/resources/data/aether/advancements/recipes/decorations/icestone_wall.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_blocks/icestone_wall.json rename to src/generated/resources/data/aether/advancements/recipes/decorations/icestone_wall.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/incubator.json b/src/generated/resources/data/aether/advancements/recipes/decorations/incubator.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_blocks/incubator.json rename to src/generated/resources/data/aether/advancements/recipes/decorations/incubator.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/mossy_holystone_wall.json b/src/generated/resources/data/aether/advancements/recipes/decorations/mossy_holystone_wall.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_blocks/mossy_holystone_wall.json rename to src/generated/resources/data/aether/advancements/recipes/decorations/mossy_holystone_wall.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/mossy_holystone_stairs_stonecutting.json b/src/generated/resources/data/aether/advancements/recipes/decorations/mossy_holystone_wall_from_mossy_holystone_stonecutting.json similarity index 78% rename from src/generated/resources/data/aether/advancements/recipes/aether_blocks/mossy_holystone_stairs_stonecutting.json rename to src/generated/resources/data/aether/advancements/recipes/decorations/mossy_holystone_wall_from_mossy_holystone_stonecutting.json index d763542d86..f5f4441e8b 100644 --- a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/mossy_holystone_stairs_stonecutting.json +++ b/src/generated/resources/data/aether/advancements/recipes/decorations/mossy_holystone_wall_from_mossy_holystone_stonecutting.json @@ -15,7 +15,7 @@ }, "has_the_recipe": { "conditions": { - "recipe": "aether:mossy_holystone_stairs_stonecutting" + "recipe": "aether:mossy_holystone_wall_from_mossy_holystone_stonecutting" }, "trigger": "minecraft:recipe_unlocked" } @@ -28,7 +28,7 @@ ], "rewards": { "recipes": [ - "aether:mossy_holystone_stairs_stonecutting" + "aether:mossy_holystone_wall_from_mossy_holystone_stonecutting" ] } } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/quicksoil_glass_pane.json b/src/generated/resources/data/aether/advancements/recipes/decorations/quicksoil_glass_pane.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_blocks/quicksoil_glass_pane.json rename to src/generated/resources/data/aether/advancements/recipes/decorations/quicksoil_glass_pane.json 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 cc229a2290..701969d224 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 @@ -1,7 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_skyroot": { + "has_skyroot_planks": { "conditions": { "items": [ { @@ -34,7 +34,7 @@ }, "requirements": [ [ - "has_skyroot", + "has_skyroot_planks", "has_skyroot_slab", "has_the_recipe" ] diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/skyroot_bed.json b/src/generated/resources/data/aether/advancements/recipes/decorations/skyroot_bed.json similarity index 93% rename from src/generated/resources/data/aether/advancements/recipes/aether_blocks/skyroot_bed.json rename to src/generated/resources/data/aether/advancements/recipes/decorations/skyroot_bed.json index f84c008ab5..96acbeb8c9 100644 --- a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/skyroot_bed.json +++ b/src/generated/resources/data/aether/advancements/recipes/decorations/skyroot_bed.json @@ -1,7 +1,13 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_book": { + "has_the_recipe": { + "conditions": { + "recipe": "aether:skyroot_bed" + }, + "trigger": "minecraft:recipe_unlocked" + }, + "has_wool": { "conditions": { "items": [ { @@ -10,17 +16,11 @@ ] }, "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "aether:skyroot_bed" - }, - "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ - "has_book", + "has_wool", "has_the_recipe" ] ], 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 0dc91a68bc..d13b5a15c9 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 @@ -1,7 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_skyroot": { + "has_skyroot_planks": { "conditions": { "items": [ { @@ -22,7 +22,7 @@ }, "requirements": [ [ - "has_skyroot", + "has_skyroot_planks", "has_the_recipe" ] ], diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/skyroot_fence.json b/src/generated/resources/data/aether/advancements/recipes/decorations/skyroot_fence.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_blocks/skyroot_fence.json rename to src/generated/resources/data/aether/advancements/recipes/decorations/skyroot_fence.json 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 42569def34..72a639d40b 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 @@ -1,7 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_gravitite": { + "has_enchanted_gravitite": { "conditions": { "items": [ { @@ -22,7 +22,7 @@ }, "requirements": [ [ - "has_gravitite", + "has_enchanted_gravitite", "has_the_recipe" ] ], diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/skyroot_sign.json b/src/generated/resources/data/aether/advancements/recipes/decorations/skyroot_sign.json similarity index 90% rename from src/generated/resources/data/aether/advancements/recipes/aether_blocks/skyroot_sign.json rename to src/generated/resources/data/aether/advancements/recipes/decorations/skyroot_sign.json index a056b9afaf..417c8045ad 100644 --- a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/skyroot_sign.json +++ b/src/generated/resources/data/aether/advancements/recipes/decorations/skyroot_sign.json @@ -1,7 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_skyroot": { + "has_skyroot_planks": { "conditions": { "items": [ { @@ -22,7 +22,7 @@ }, "requirements": [ [ - "has_skyroot", + "has_skyroot_planks", "has_the_recipe" ] ], diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_food/enchanted_berry_enchanting.json b/src/generated/resources/data/aether/advancements/recipes/food/enchanted_berry_enchanting.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_food/enchanted_berry_enchanting.json rename to src/generated/resources/data/aether/advancements/recipes/food/enchanted_berry_enchanting.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_food/healing_stone_enchanting.json b/src/generated/resources/data/aether/advancements/recipes/food/healing_stone_enchanting.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_food/healing_stone_enchanting.json rename to src/generated/resources/data/aether/advancements/recipes/food/healing_stone_enchanting.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_misc/aether_tune_enchanting.json b/src/generated/resources/data/aether/advancements/recipes/misc/aether_tune_enchanting.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_misc/aether_tune_enchanting.json rename to src/generated/resources/data/aether/advancements/recipes/misc/aether_tune_enchanting.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_materials/ambrosium_shard.json b/src/generated/resources/data/aether/advancements/recipes/misc/ambrosium_shard_from_ambrosium_block.json similarity index 82% rename from src/generated/resources/data/aether/advancements/recipes/aether_materials/ambrosium_shard.json rename to src/generated/resources/data/aether/advancements/recipes/misc/ambrosium_shard_from_ambrosium_block.json index d3a1fc545f..ea1117c68a 100644 --- a/src/generated/resources/data/aether/advancements/recipes/aether_materials/ambrosium_shard.json +++ b/src/generated/resources/data/aether/advancements/recipes/misc/ambrosium_shard_from_ambrosium_block.json @@ -15,7 +15,7 @@ }, "has_the_recipe": { "conditions": { - "recipe": "aether:ambrosium_shard" + "recipe": "aether:ambrosium_shard_from_ambrosium_block" }, "trigger": "minecraft:recipe_unlocked" } @@ -28,7 +28,7 @@ ], "rewards": { "recipes": [ - "aether:ambrosium_shard" + "aether:ambrosium_shard_from_ambrosium_block" ] } } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_materials/blast_ambrosium.json b/src/generated/resources/data/aether/advancements/recipes/misc/ambrosium_shard_from_blasting.json similarity index 84% rename from src/generated/resources/data/aether/advancements/recipes/aether_materials/blast_ambrosium.json rename to src/generated/resources/data/aether/advancements/recipes/misc/ambrosium_shard_from_blasting.json index 1c3be2eb09..fbbdee4475 100644 --- a/src/generated/resources/data/aether/advancements/recipes/aether_materials/blast_ambrosium.json +++ b/src/generated/resources/data/aether/advancements/recipes/misc/ambrosium_shard_from_blasting.json @@ -15,7 +15,7 @@ }, "has_the_recipe": { "conditions": { - "recipe": "aether:blast_ambrosium" + "recipe": "aether:ambrosium_shard_from_blasting" }, "trigger": "minecraft:recipe_unlocked" } @@ -28,7 +28,7 @@ ], "rewards": { "recipes": [ - "aether:blast_ambrosium" + "aether:ambrosium_shard_from_blasting" ] } } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_materials/smelt_ambrosium.json b/src/generated/resources/data/aether/advancements/recipes/misc/ambrosium_shard_from_smelting.json similarity index 84% rename from src/generated/resources/data/aether/advancements/recipes/aether_materials/smelt_ambrosium.json rename to src/generated/resources/data/aether/advancements/recipes/misc/ambrosium_shard_from_smelting.json index 46d77e2216..b2f91b75ba 100644 --- a/src/generated/resources/data/aether/advancements/recipes/aether_materials/smelt_ambrosium.json +++ b/src/generated/resources/data/aether/advancements/recipes/misc/ambrosium_shard_from_smelting.json @@ -15,7 +15,7 @@ }, "has_the_recipe": { "conditions": { - "recipe": "aether:smelt_ambrosium" + "recipe": "aether:ambrosium_shard_from_smelting" }, "trigger": "minecraft:recipe_unlocked" } @@ -28,7 +28,7 @@ ], "rewards": { "recipes": [ - "aether:smelt_ambrosium" + "aether:ambrosium_shard_from_smelting" ] } } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_misc/book_of_lore.json b/src/generated/resources/data/aether/advancements/recipes/misc/book_of_lore.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_misc/book_of_lore.json rename to src/generated/resources/data/aether/advancements/recipes/misc/book_of_lore.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_misc/chinchilla_enchanting.json b/src/generated/resources/data/aether/advancements/recipes/misc/chinchilla_enchanting.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_misc/chinchilla_enchanting.json rename to src/generated/resources/data/aether/advancements/recipes/misc/chinchilla_enchanting.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_weapons/enchanted_dart_enchanting.json b/src/generated/resources/data/aether/advancements/recipes/misc/enchanted_dart_enchanting.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_weapons/enchanted_dart_enchanting.json rename to src/generated/resources/data/aether/advancements/recipes/misc/enchanted_dart_enchanting.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_weapons/enchanted_dart_shooter_enchanting.json b/src/generated/resources/data/aether/advancements/recipes/misc/enchanted_dart_shooter_enchanting.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_weapons/enchanted_dart_shooter_enchanting.json rename to src/generated/resources/data/aether/advancements/recipes/misc/enchanted_dart_shooter_enchanting.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_accessories/ice_pendant_from_freezing.json b/src/generated/resources/data/aether/advancements/recipes/misc/ice_pendant_from_freezing.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_accessories/ice_pendant_from_freezing.json rename to src/generated/resources/data/aether/advancements/recipes/misc/ice_pendant_from_freezing.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_accessories/ice_ring_from_freezing.json b/src/generated/resources/data/aether/advancements/recipes/misc/ice_ring_from_freezing.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_accessories/ice_ring_from_freezing.json rename to src/generated/resources/data/aether/advancements/recipes/misc/ice_ring_from_freezing.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_misc/legacy_enchanting.json b/src/generated/resources/data/aether/advancements/recipes/misc/legacy_enchanting.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_misc/legacy_enchanting.json rename to src/generated/resources/data/aether/advancements/recipes/misc/legacy_enchanting.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_misc/remedy_bucket_enchanting.json b/src/generated/resources/data/aether/advancements/recipes/misc/remedy_bucket_enchanting.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_misc/remedy_bucket_enchanting.json rename to src/generated/resources/data/aether/advancements/recipes/misc/remedy_bucket_enchanting.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_misc/skyroot_bucket.json b/src/generated/resources/data/aether/advancements/recipes/misc/skyroot_bucket.json similarity index 90% rename from src/generated/resources/data/aether/advancements/recipes/aether_misc/skyroot_bucket.json rename to src/generated/resources/data/aether/advancements/recipes/misc/skyroot_bucket.json index 85ec6d32ac..a749e4ff2f 100644 --- a/src/generated/resources/data/aether/advancements/recipes/aether_misc/skyroot_bucket.json +++ b/src/generated/resources/data/aether/advancements/recipes/misc/skyroot_bucket.json @@ -1,7 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_skyroot": { + "has_skyroot_planks": { "conditions": { "items": [ { @@ -22,7 +22,7 @@ }, "requirements": [ [ - "has_skyroot", + "has_skyroot_planks", "has_the_recipe" ] ], diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_materials/skyroot_stick.json b/src/generated/resources/data/aether/advancements/recipes/misc/skyroot_stick.json similarity index 90% rename from src/generated/resources/data/aether/advancements/recipes/aether_materials/skyroot_stick.json rename to src/generated/resources/data/aether/advancements/recipes/misc/skyroot_stick.json index 80e5978a27..95200e30d6 100644 --- a/src/generated/resources/data/aether/advancements/recipes/aether_materials/skyroot_stick.json +++ b/src/generated/resources/data/aether/advancements/recipes/misc/skyroot_stick.json @@ -1,7 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_skyroot": { + "has_skyroot_planks": { "conditions": { "items": [ { @@ -22,7 +22,7 @@ }, "requirements": [ [ - "has_skyroot", + "has_skyroot_planks", "has_the_recipe" ] ], diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_misc/welcoming_skies_freezing.json b/src/generated/resources/data/aether/advancements/recipes/misc/welcoming_skies_freezing.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_misc/welcoming_skies_freezing.json rename to src/generated/resources/data/aether/advancements/recipes/misc/welcoming_skies_freezing.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_materials/blast_zanite.json b/src/generated/resources/data/aether/advancements/recipes/misc/zanite_gemstone_from_blasting.json similarity index 83% rename from src/generated/resources/data/aether/advancements/recipes/aether_materials/blast_zanite.json rename to src/generated/resources/data/aether/advancements/recipes/misc/zanite_gemstone_from_blasting.json index bdc55a4239..57a45f9316 100644 --- a/src/generated/resources/data/aether/advancements/recipes/aether_materials/blast_zanite.json +++ b/src/generated/resources/data/aether/advancements/recipes/misc/zanite_gemstone_from_blasting.json @@ -3,7 +3,7 @@ "criteria": { "has_the_recipe": { "conditions": { - "recipe": "aether:blast_zanite" + "recipe": "aether:zanite_gemstone_from_blasting" }, "trigger": "minecraft:recipe_unlocked" }, @@ -28,7 +28,7 @@ ], "rewards": { "recipes": [ - "aether:blast_zanite" + "aether:zanite_gemstone_from_blasting" ] } } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_materials/smelt_zanite.json b/src/generated/resources/data/aether/advancements/recipes/misc/zanite_gemstone_from_smelting.json similarity index 83% rename from src/generated/resources/data/aether/advancements/recipes/aether_materials/smelt_zanite.json rename to src/generated/resources/data/aether/advancements/recipes/misc/zanite_gemstone_from_smelting.json index b0dcc03e10..144ec26033 100644 --- a/src/generated/resources/data/aether/advancements/recipes/aether_materials/smelt_zanite.json +++ b/src/generated/resources/data/aether/advancements/recipes/misc/zanite_gemstone_from_smelting.json @@ -3,7 +3,7 @@ "criteria": { "has_the_recipe": { "conditions": { - "recipe": "aether:smelt_zanite" + "recipe": "aether:zanite_gemstone_from_smelting" }, "trigger": "minecraft:recipe_unlocked" }, @@ -28,7 +28,7 @@ ], "rewards": { "recipes": [ - "aether:smelt_zanite" + "aether:zanite_gemstone_from_smelting" ] } } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_materials/zanite_gemstone.json b/src/generated/resources/data/aether/advancements/recipes/misc/zanite_gemstone_from_zanite_block.json similarity index 82% rename from src/generated/resources/data/aether/advancements/recipes/aether_materials/zanite_gemstone.json rename to src/generated/resources/data/aether/advancements/recipes/misc/zanite_gemstone_from_zanite_block.json index db88dd56c2..940371f98e 100644 --- a/src/generated/resources/data/aether/advancements/recipes/aether_materials/zanite_gemstone.json +++ b/src/generated/resources/data/aether/advancements/recipes/misc/zanite_gemstone_from_zanite_block.json @@ -3,7 +3,7 @@ "criteria": { "has_the_recipe": { "conditions": { - "recipe": "aether:zanite_gemstone" + "recipe": "aether:zanite_gemstone_from_zanite_block" }, "trigger": "minecraft:recipe_unlocked" }, @@ -28,7 +28,7 @@ ], "rewards": { "recipes": [ - "aether:zanite_gemstone" + "aether:zanite_gemstone_from_zanite_block" ] } } \ No newline at end of file diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/holystone_button.json b/src/generated/resources/data/aether/advancements/recipes/redstone/holystone_button.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_blocks/holystone_button.json rename to src/generated/resources/data/aether/advancements/recipes/redstone/holystone_button.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/holystone_pressure_plate.json b/src/generated/resources/data/aether/advancements/recipes/redstone/holystone_pressure_plate.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_blocks/holystone_pressure_plate.json rename to src/generated/resources/data/aether/advancements/recipes/redstone/holystone_pressure_plate.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/skyroot_button.json b/src/generated/resources/data/aether/advancements/recipes/redstone/skyroot_button.json similarity index 90% rename from src/generated/resources/data/aether/advancements/recipes/aether_blocks/skyroot_button.json rename to src/generated/resources/data/aether/advancements/recipes/redstone/skyroot_button.json index 33df59a5bf..c8893cf4e5 100644 --- a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/skyroot_button.json +++ b/src/generated/resources/data/aether/advancements/recipes/redstone/skyroot_button.json @@ -1,7 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_skyroot": { + "has_skyroot_planks": { "conditions": { "items": [ { @@ -22,7 +22,7 @@ }, "requirements": [ [ - "has_skyroot", + "has_skyroot_planks", "has_the_recipe" ] ], diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/skyroot_door.json b/src/generated/resources/data/aether/advancements/recipes/redstone/skyroot_door.json similarity index 90% rename from src/generated/resources/data/aether/advancements/recipes/aether_blocks/skyroot_door.json rename to src/generated/resources/data/aether/advancements/recipes/redstone/skyroot_door.json index e58cf4d507..7e4f92479b 100644 --- a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/skyroot_door.json +++ b/src/generated/resources/data/aether/advancements/recipes/redstone/skyroot_door.json @@ -1,7 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_skyroot": { + "has_skyroot_planks": { "conditions": { "items": [ { @@ -22,7 +22,7 @@ }, "requirements": [ [ - "has_skyroot", + "has_skyroot_planks", "has_the_recipe" ] ], diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/skyroot_fence_gate.json b/src/generated/resources/data/aether/advancements/recipes/redstone/skyroot_fence_gate.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_blocks/skyroot_fence_gate.json rename to src/generated/resources/data/aether/advancements/recipes/redstone/skyroot_fence_gate.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/skyroot_pressure_plate.json b/src/generated/resources/data/aether/advancements/recipes/redstone/skyroot_pressure_plate.json similarity index 91% rename from src/generated/resources/data/aether/advancements/recipes/aether_blocks/skyroot_pressure_plate.json rename to src/generated/resources/data/aether/advancements/recipes/redstone/skyroot_pressure_plate.json index b79bece465..359c112cb6 100644 --- a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/skyroot_pressure_plate.json +++ b/src/generated/resources/data/aether/advancements/recipes/redstone/skyroot_pressure_plate.json @@ -1,7 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_skyroot": { + "has_skyroot_planks": { "conditions": { "items": [ { @@ -22,7 +22,7 @@ }, "requirements": [ [ - "has_skyroot", + "has_skyroot_planks", "has_the_recipe" ] ], diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/skyroot_trapdoor.json b/src/generated/resources/data/aether/advancements/recipes/redstone/skyroot_trapdoor.json similarity index 90% rename from src/generated/resources/data/aether/advancements/recipes/aether_blocks/skyroot_trapdoor.json rename to src/generated/resources/data/aether/advancements/recipes/redstone/skyroot_trapdoor.json index 887215322a..502ec9acad 100644 --- a/src/generated/resources/data/aether/advancements/recipes/aether_blocks/skyroot_trapdoor.json +++ b/src/generated/resources/data/aether/advancements/recipes/redstone/skyroot_trapdoor.json @@ -1,7 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_skyroot": { + "has_skyroot_planks": { "conditions": { "items": [ { @@ -22,7 +22,7 @@ }, "requirements": [ [ - "has_skyroot", + "has_skyroot_planks", "has_the_recipe" ] ], diff --git a/src/generated/resources/data/aether/advancements/recipes/transportation/aether_saddle.json b/src/generated/resources/data/aether/advancements/recipes/tools/aether_saddle.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/transportation/aether_saddle.json rename to src/generated/resources/data/aether/advancements/recipes/tools/aether_saddle.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_misc/cold_parachute.json b/src/generated/resources/data/aether/advancements/recipes/tools/cold_parachute.json similarity index 91% rename from src/generated/resources/data/aether/advancements/recipes/aether_misc/cold_parachute.json rename to src/generated/resources/data/aether/advancements/recipes/tools/cold_parachute.json index b576bd9505..a529e7ac4d 100644 --- a/src/generated/resources/data/aether/advancements/recipes/aether_misc/cold_parachute.json +++ b/src/generated/resources/data/aether/advancements/recipes/tools/cold_parachute.json @@ -1,7 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_aercloud": { + "has_cold_aercloud": { "conditions": { "items": [ { @@ -22,7 +22,7 @@ }, "requirements": [ [ - "has_aercloud", + "has_cold_aercloud", "has_the_recipe" ] ], diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_misc/golden_parachute.json b/src/generated/resources/data/aether/advancements/recipes/tools/golden_parachute.json similarity index 90% rename from src/generated/resources/data/aether/advancements/recipes/aether_misc/golden_parachute.json rename to src/generated/resources/data/aether/advancements/recipes/tools/golden_parachute.json index 273e0770e6..f60451baed 100644 --- a/src/generated/resources/data/aether/advancements/recipes/aether_misc/golden_parachute.json +++ b/src/generated/resources/data/aether/advancements/recipes/tools/golden_parachute.json @@ -1,7 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_aercloud": { + "has_golden_aercloud": { "conditions": { "items": [ { @@ -22,7 +22,7 @@ }, "requirements": [ [ - "has_aercloud", + "has_golden_aercloud", "has_the_recipe" ] ], diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_tools/gravitite_axe.json b/src/generated/resources/data/aether/advancements/recipes/tools/gravitite_axe.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_tools/gravitite_axe.json rename to src/generated/resources/data/aether/advancements/recipes/tools/gravitite_axe.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_tools/gravitite_axe_repairing.json b/src/generated/resources/data/aether/advancements/recipes/tools/gravitite_axe_repairing.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_tools/gravitite_axe_repairing.json rename to src/generated/resources/data/aether/advancements/recipes/tools/gravitite_axe_repairing.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_tools/gravitite_hoe.json b/src/generated/resources/data/aether/advancements/recipes/tools/gravitite_hoe.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_tools/gravitite_hoe.json rename to src/generated/resources/data/aether/advancements/recipes/tools/gravitite_hoe.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_tools/gravitite_hoe_repairing.json b/src/generated/resources/data/aether/advancements/recipes/tools/gravitite_hoe_repairing.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_tools/gravitite_hoe_repairing.json rename to src/generated/resources/data/aether/advancements/recipes/tools/gravitite_hoe_repairing.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_tools/gravitite_pickaxe.json b/src/generated/resources/data/aether/advancements/recipes/tools/gravitite_pickaxe.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_tools/gravitite_pickaxe.json rename to src/generated/resources/data/aether/advancements/recipes/tools/gravitite_pickaxe.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_tools/gravitite_pickaxe_repairing.json b/src/generated/resources/data/aether/advancements/recipes/tools/gravitite_pickaxe_repairing.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_tools/gravitite_pickaxe_repairing.json rename to src/generated/resources/data/aether/advancements/recipes/tools/gravitite_pickaxe_repairing.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_tools/gravitite_shovel.json b/src/generated/resources/data/aether/advancements/recipes/tools/gravitite_shovel.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_tools/gravitite_shovel.json rename to src/generated/resources/data/aether/advancements/recipes/tools/gravitite_shovel.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_tools/gravitite_shovel_repairing.json b/src/generated/resources/data/aether/advancements/recipes/tools/gravitite_shovel_repairing.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_tools/gravitite_shovel_repairing.json rename to src/generated/resources/data/aether/advancements/recipes/tools/gravitite_shovel_repairing.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_tools/holystone_axe.json b/src/generated/resources/data/aether/advancements/recipes/tools/holystone_axe.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_tools/holystone_axe.json rename to src/generated/resources/data/aether/advancements/recipes/tools/holystone_axe.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_tools/holystone_axe_repairing.json b/src/generated/resources/data/aether/advancements/recipes/tools/holystone_axe_repairing.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_tools/holystone_axe_repairing.json rename to src/generated/resources/data/aether/advancements/recipes/tools/holystone_axe_repairing.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_tools/holystone_hoe.json b/src/generated/resources/data/aether/advancements/recipes/tools/holystone_hoe.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_tools/holystone_hoe.json rename to src/generated/resources/data/aether/advancements/recipes/tools/holystone_hoe.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_tools/holystone_hoe_repairing.json b/src/generated/resources/data/aether/advancements/recipes/tools/holystone_hoe_repairing.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_tools/holystone_hoe_repairing.json rename to src/generated/resources/data/aether/advancements/recipes/tools/holystone_hoe_repairing.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_tools/holystone_pickaxe.json b/src/generated/resources/data/aether/advancements/recipes/tools/holystone_pickaxe.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_tools/holystone_pickaxe.json rename to src/generated/resources/data/aether/advancements/recipes/tools/holystone_pickaxe.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_tools/holystone_pickaxe_repairing.json b/src/generated/resources/data/aether/advancements/recipes/tools/holystone_pickaxe_repairing.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_tools/holystone_pickaxe_repairing.json rename to src/generated/resources/data/aether/advancements/recipes/tools/holystone_pickaxe_repairing.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_tools/holystone_shovel.json b/src/generated/resources/data/aether/advancements/recipes/tools/holystone_shovel.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_tools/holystone_shovel.json rename to src/generated/resources/data/aether/advancements/recipes/tools/holystone_shovel.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_tools/holystone_shovel_repairing.json b/src/generated/resources/data/aether/advancements/recipes/tools/holystone_shovel_repairing.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_tools/holystone_shovel_repairing.json rename to src/generated/resources/data/aether/advancements/recipes/tools/holystone_shovel_repairing.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_misc/nature_staff.json b/src/generated/resources/data/aether/advancements/recipes/tools/nature_staff.json similarity index 90% rename from src/generated/resources/data/aether/advancements/recipes/aether_misc/nature_staff.json rename to src/generated/resources/data/aether/advancements/recipes/tools/nature_staff.json index 5709d6c9db..4b8e92d88f 100644 --- a/src/generated/resources/data/aether/advancements/recipes/aether_misc/nature_staff.json +++ b/src/generated/resources/data/aether/advancements/recipes/tools/nature_staff.json @@ -7,7 +7,7 @@ }, "trigger": "minecraft:recipe_unlocked" }, - "has_zanite": { + "has_zanite_gemstone": { "conditions": { "items": [ { @@ -22,7 +22,7 @@ }, "requirements": [ [ - "has_zanite", + "has_zanite_gemstone", "has_the_recipe" ] ], diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_tools/skyroot_axe.json b/src/generated/resources/data/aether/advancements/recipes/tools/skyroot_axe.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_tools/skyroot_axe.json rename to src/generated/resources/data/aether/advancements/recipes/tools/skyroot_axe.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_tools/skyroot_axe_repairing.json b/src/generated/resources/data/aether/advancements/recipes/tools/skyroot_axe_repairing.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_tools/skyroot_axe_repairing.json rename to src/generated/resources/data/aether/advancements/recipes/tools/skyroot_axe_repairing.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_tools/skyroot_hoe.json b/src/generated/resources/data/aether/advancements/recipes/tools/skyroot_hoe.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_tools/skyroot_hoe.json rename to src/generated/resources/data/aether/advancements/recipes/tools/skyroot_hoe.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_tools/skyroot_hoe_repairing.json b/src/generated/resources/data/aether/advancements/recipes/tools/skyroot_hoe_repairing.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_tools/skyroot_hoe_repairing.json rename to src/generated/resources/data/aether/advancements/recipes/tools/skyroot_hoe_repairing.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_tools/skyroot_pickaxe.json b/src/generated/resources/data/aether/advancements/recipes/tools/skyroot_pickaxe.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_tools/skyroot_pickaxe.json rename to src/generated/resources/data/aether/advancements/recipes/tools/skyroot_pickaxe.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_tools/skyroot_pickaxe_repairing.json b/src/generated/resources/data/aether/advancements/recipes/tools/skyroot_pickaxe_repairing.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_tools/skyroot_pickaxe_repairing.json rename to src/generated/resources/data/aether/advancements/recipes/tools/skyroot_pickaxe_repairing.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_tools/skyroot_shovel.json b/src/generated/resources/data/aether/advancements/recipes/tools/skyroot_shovel.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_tools/skyroot_shovel.json rename to src/generated/resources/data/aether/advancements/recipes/tools/skyroot_shovel.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_tools/skyroot_shovel_repairing.json b/src/generated/resources/data/aether/advancements/recipes/tools/skyroot_shovel_repairing.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_tools/skyroot_shovel_repairing.json rename to src/generated/resources/data/aether/advancements/recipes/tools/skyroot_shovel_repairing.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_tools/zanite_axe.json b/src/generated/resources/data/aether/advancements/recipes/tools/zanite_axe.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_tools/zanite_axe.json rename to src/generated/resources/data/aether/advancements/recipes/tools/zanite_axe.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_tools/zanite_axe_repairing.json b/src/generated/resources/data/aether/advancements/recipes/tools/zanite_axe_repairing.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_tools/zanite_axe_repairing.json rename to src/generated/resources/data/aether/advancements/recipes/tools/zanite_axe_repairing.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_tools/zanite_hoe.json b/src/generated/resources/data/aether/advancements/recipes/tools/zanite_hoe.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_tools/zanite_hoe.json rename to src/generated/resources/data/aether/advancements/recipes/tools/zanite_hoe.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_tools/zanite_hoe_repairing.json b/src/generated/resources/data/aether/advancements/recipes/tools/zanite_hoe_repairing.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_tools/zanite_hoe_repairing.json rename to src/generated/resources/data/aether/advancements/recipes/tools/zanite_hoe_repairing.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_tools/zanite_pickaxe.json b/src/generated/resources/data/aether/advancements/recipes/tools/zanite_pickaxe.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_tools/zanite_pickaxe.json rename to src/generated/resources/data/aether/advancements/recipes/tools/zanite_pickaxe.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_tools/zanite_pickaxe_repairing.json b/src/generated/resources/data/aether/advancements/recipes/tools/zanite_pickaxe_repairing.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_tools/zanite_pickaxe_repairing.json rename to src/generated/resources/data/aether/advancements/recipes/tools/zanite_pickaxe_repairing.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_tools/zanite_shovel.json b/src/generated/resources/data/aether/advancements/recipes/tools/zanite_shovel.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_tools/zanite_shovel.json rename to src/generated/resources/data/aether/advancements/recipes/tools/zanite_shovel.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_tools/zanite_shovel_repairing.json b/src/generated/resources/data/aether/advancements/recipes/tools/zanite_shovel_repairing.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_tools/zanite_shovel_repairing.json rename to src/generated/resources/data/aether/advancements/recipes/tools/zanite_shovel_repairing.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_misc/skyroot_boat.json b/src/generated/resources/data/aether/advancements/recipes/transportation/skyroot_boat.json similarity index 100% rename from src/generated/resources/data/aether/advancements/recipes/aether_misc/skyroot_boat.json rename to src/generated/resources/data/aether/advancements/recipes/transportation/skyroot_boat.json diff --git a/src/generated/resources/data/aether/advancements/recipes/aether_misc/skyroot_chest_boat.json b/src/generated/resources/data/aether/advancements/recipes/transportation/skyroot_chest_boat.json similarity index 87% rename from src/generated/resources/data/aether/advancements/recipes/aether_misc/skyroot_chest_boat.json rename to src/generated/resources/data/aether/advancements/recipes/transportation/skyroot_chest_boat.json index 47aaa26119..050ebd99a0 100644 --- a/src/generated/resources/data/aether/advancements/recipes/aether_misc/skyroot_chest_boat.json +++ b/src/generated/resources/data/aether/advancements/recipes/transportation/skyroot_chest_boat.json @@ -5,9 +5,7 @@ "conditions": { "items": [ { - "items": [ - "aether:skyroot_boat" - ] + "tag": "minecraft:boats" } ] }, 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 8d4605a917..3c033ed1f7 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 @@ -3,11 +3,6 @@ "pools": [ { "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], "entries": [ { "type": "minecraft:item", diff --git a/src/generated/resources/data/aether/recipes/aerogel_slab.json b/src/generated/resources/data/aether/recipes/aerogel_slab.json index 33a552fc0b..2b4885e4d3 100644 --- a/src/generated/resources/data/aether/recipes/aerogel_slab.json +++ b/src/generated/resources/data/aether/recipes/aerogel_slab.json @@ -1,12 +1,13 @@ { "type": "minecraft:crafting_shaped", + "category": "building", "key": { - "M": { + "#": { "item": "aether:aerogel" } }, "pattern": [ - "MMM" + "###" ], "result": { "count": 6, diff --git a/src/generated/resources/data/aether/recipes/aerogel_slab_stonecutting.json b/src/generated/resources/data/aether/recipes/aerogel_slab_from_aerogel_stonecutting.json similarity index 100% rename from src/generated/resources/data/aether/recipes/aerogel_slab_stonecutting.json rename to src/generated/resources/data/aether/recipes/aerogel_slab_from_aerogel_stonecutting.json diff --git a/src/generated/resources/data/aether/recipes/aerogel_stairs.json b/src/generated/resources/data/aether/recipes/aerogel_stairs.json index 040951ac91..7fec4b3ec4 100644 --- a/src/generated/resources/data/aether/recipes/aerogel_stairs.json +++ b/src/generated/resources/data/aether/recipes/aerogel_stairs.json @@ -1,14 +1,15 @@ { "type": "minecraft:crafting_shaped", + "category": "building", "key": { - "M": { + "#": { "item": "aether:aerogel" } }, "pattern": [ - "M ", - "MM ", - "MMM" + "# ", + "## ", + "###" ], "result": { "count": 4, diff --git a/src/generated/resources/data/aether/recipes/aerogel_stairs_stonecutting.json b/src/generated/resources/data/aether/recipes/aerogel_stairs_from_aerogel_stonecutting.json similarity index 100% rename from src/generated/resources/data/aether/recipes/aerogel_stairs_stonecutting.json rename to src/generated/resources/data/aether/recipes/aerogel_stairs_from_aerogel_stonecutting.json diff --git a/src/generated/resources/data/aether/recipes/aerogel_wall.json b/src/generated/resources/data/aether/recipes/aerogel_wall.json index 610e04aeab..ee4e17128a 100644 --- a/src/generated/resources/data/aether/recipes/aerogel_wall.json +++ b/src/generated/resources/data/aether/recipes/aerogel_wall.json @@ -1,13 +1,14 @@ { "type": "minecraft:crafting_shaped", + "category": "misc", "key": { - "M": { + "#": { "item": "aether:aerogel" } }, "pattern": [ - "MMM", - "MMM" + "###", + "###" ], "result": { "count": 6, diff --git a/src/generated/resources/data/aether/recipes/aerogel_wall_stonecutting.json b/src/generated/resources/data/aether/recipes/aerogel_wall_from_aerogel_stonecutting.json similarity index 100% rename from src/generated/resources/data/aether/recipes/aerogel_wall_stonecutting.json rename to src/generated/resources/data/aether/recipes/aerogel_wall_from_aerogel_stonecutting.json diff --git a/src/generated/resources/data/aether/recipes/aether_saddle.json b/src/generated/resources/data/aether/recipes/aether_saddle.json index ba37e4383a..814f808d6c 100644 --- a/src/generated/resources/data/aether/recipes/aether_saddle.json +++ b/src/generated/resources/data/aether/recipes/aether_saddle.json @@ -1,5 +1,6 @@ { "type": "minecraft:crafting_shaped", + "category": "equipment", "key": { "L": { "item": "minecraft:leather" diff --git a/src/generated/resources/data/aether/recipes/aether_tune_enchanting.json b/src/generated/resources/data/aether/recipes/aether_tune_enchanting.json index 23e55e9453..f5427019a5 100644 --- a/src/generated/resources/data/aether/recipes/aether_tune_enchanting.json +++ b/src/generated/resources/data/aether/recipes/aether_tune_enchanting.json @@ -1,5 +1,6 @@ { "type": "aether:enchanting", + "category": "enchanting_misc", "cookingtime": 2500, "experience": 1.0, "ingredient": { diff --git a/src/generated/resources/data/aether/recipes/altar.json b/src/generated/resources/data/aether/recipes/altar.json index 74e9aa3652..5443ec253b 100644 --- a/src/generated/resources/data/aether/recipes/altar.json +++ b/src/generated/resources/data/aether/recipes/altar.json @@ -1,5 +1,6 @@ { "type": "minecraft:crafting_shaped", + "category": "misc", "key": { "H": { "item": "aether:holystone" diff --git a/src/generated/resources/data/aether/recipes/ambrosium_block.json b/src/generated/resources/data/aether/recipes/ambrosium_block.json index 6810fb72b1..3411df9b5c 100644 --- a/src/generated/resources/data/aether/recipes/ambrosium_block.json +++ b/src/generated/resources/data/aether/recipes/ambrosium_block.json @@ -1,5 +1,6 @@ { "type": "minecraft:crafting_shaped", + "category": "building", "key": { "#": { "item": "aether:ambrosium_shard" diff --git a/src/generated/resources/data/aether/recipes/ambrosium_shard.json b/src/generated/resources/data/aether/recipes/ambrosium_shard_from_ambrosium_block.json similarity index 78% rename from src/generated/resources/data/aether/recipes/ambrosium_shard.json rename to src/generated/resources/data/aether/recipes/ambrosium_shard_from_ambrosium_block.json index c10da4ce0d..1f5d84939f 100644 --- a/src/generated/resources/data/aether/recipes/ambrosium_shard.json +++ b/src/generated/resources/data/aether/recipes/ambrosium_shard_from_ambrosium_block.json @@ -1,5 +1,7 @@ { "type": "minecraft:crafting_shapeless", + "category": "misc", + "group": "ambrosium_shard", "ingredients": [ { "item": "aether:ambrosium_block" diff --git a/src/generated/resources/data/aether/recipes/blast_ambrosium.json b/src/generated/resources/data/aether/recipes/ambrosium_shard_from_blasting.json similarity index 88% rename from src/generated/resources/data/aether/recipes/blast_ambrosium.json rename to src/generated/resources/data/aether/recipes/ambrosium_shard_from_blasting.json index 2883293e4e..31e8fc853a 100644 --- a/src/generated/resources/data/aether/recipes/blast_ambrosium.json +++ b/src/generated/resources/data/aether/recipes/ambrosium_shard_from_blasting.json @@ -1,5 +1,6 @@ { "type": "minecraft:blasting", + "category": "misc", "cookingtime": 100, "experience": 0.1, "ingredient": { diff --git a/src/generated/resources/data/aether/recipes/smelt_ambrosium.json b/src/generated/resources/data/aether/recipes/ambrosium_shard_from_smelting.json similarity index 88% rename from src/generated/resources/data/aether/recipes/smelt_ambrosium.json rename to src/generated/resources/data/aether/recipes/ambrosium_shard_from_smelting.json index 44f637692b..46463bde4a 100644 --- a/src/generated/resources/data/aether/recipes/smelt_ambrosium.json +++ b/src/generated/resources/data/aether/recipes/ambrosium_shard_from_smelting.json @@ -1,5 +1,6 @@ { "type": "minecraft:smelting", + "category": "misc", "cookingtime": 200, "experience": 0.1, "ingredient": { diff --git a/src/generated/resources/data/aether/recipes/ambrosium_torch.json b/src/generated/resources/data/aether/recipes/ambrosium_torch.json index 9ad5a9b4e0..8cde9474b5 100644 --- a/src/generated/resources/data/aether/recipes/ambrosium_torch.json +++ b/src/generated/resources/data/aether/recipes/ambrosium_torch.json @@ -1,16 +1,17 @@ { "type": "minecraft:crafting_shaped", + "category": "misc", "key": { + "/": { + "tag": "aether:skyroot_stick" + }, "A": { "item": "aether:ambrosium_shard" - }, - "S": { - "tag": "aether:skyroot_stick" } }, "pattern": [ "A", - "S" + "/" ], "result": { "count": 4, diff --git a/src/generated/resources/data/aether/recipes/angelic_slab.json b/src/generated/resources/data/aether/recipes/angelic_slab.json index be17af4610..16baba39eb 100644 --- a/src/generated/resources/data/aether/recipes/angelic_slab.json +++ b/src/generated/resources/data/aether/recipes/angelic_slab.json @@ -1,12 +1,13 @@ { "type": "minecraft:crafting_shaped", + "category": "building", "key": { - "M": { + "#": { "item": "aether:angelic_stone" } }, "pattern": [ - "MMM" + "###" ], "result": { "count": 6, diff --git a/src/generated/resources/data/aether/recipes/angelic_slab_stonecutting.json b/src/generated/resources/data/aether/recipes/angelic_slab_from_angelic_stone_stonecutting.json similarity index 100% rename from src/generated/resources/data/aether/recipes/angelic_slab_stonecutting.json rename to src/generated/resources/data/aether/recipes/angelic_slab_from_angelic_stone_stonecutting.json diff --git a/src/generated/resources/data/aether/recipes/angelic_stairs.json b/src/generated/resources/data/aether/recipes/angelic_stairs.json index da0b1cafaa..4ec75ae12c 100644 --- a/src/generated/resources/data/aether/recipes/angelic_stairs.json +++ b/src/generated/resources/data/aether/recipes/angelic_stairs.json @@ -1,14 +1,15 @@ { "type": "minecraft:crafting_shaped", + "category": "building", "key": { - "M": { + "#": { "item": "aether:angelic_stone" } }, "pattern": [ - "M ", - "MM ", - "MMM" + "# ", + "## ", + "###" ], "result": { "count": 4, diff --git a/src/generated/resources/data/aether/recipes/angelic_stairs_stonecutting.json b/src/generated/resources/data/aether/recipes/angelic_stairs_from_angelic_stone_stonecutting.json similarity index 100% rename from src/generated/resources/data/aether/recipes/angelic_stairs_stonecutting.json rename to src/generated/resources/data/aether/recipes/angelic_stairs_from_angelic_stone_stonecutting.json diff --git a/src/generated/resources/data/aether/recipes/angelic_wall.json b/src/generated/resources/data/aether/recipes/angelic_wall.json index 95a975ee97..e53ba9698b 100644 --- a/src/generated/resources/data/aether/recipes/angelic_wall.json +++ b/src/generated/resources/data/aether/recipes/angelic_wall.json @@ -1,13 +1,14 @@ { "type": "minecraft:crafting_shaped", + "category": "misc", "key": { - "M": { + "#": { "item": "aether:angelic_stone" } }, "pattern": [ - "MMM", - "MMM" + "###", + "###" ], "result": { "count": 6, diff --git a/src/generated/resources/data/aether/recipes/angelic_wall_stonecutting.json b/src/generated/resources/data/aether/recipes/angelic_wall_from_angelic_stone_stonecutting.json similarity index 100% rename from src/generated/resources/data/aether/recipes/angelic_wall_stonecutting.json rename to src/generated/resources/data/aether/recipes/angelic_wall_from_angelic_stone_stonecutting.json diff --git a/src/generated/resources/data/aether/recipes/blue_aercloud_freezing.json b/src/generated/resources/data/aether/recipes/blue_aercloud_freezing.json index 8994fcd8a8..9b90995486 100644 --- a/src/generated/resources/data/aether/recipes/blue_aercloud_freezing.json +++ b/src/generated/resources/data/aether/recipes/blue_aercloud_freezing.json @@ -1,5 +1,6 @@ { "type": "aether:freezing", + "category": "freezable_blocks", "cookingtime": 100, "experience": 0.1, "ingredient": { diff --git a/src/generated/resources/data/aether/recipes/blue_cape.json b/src/generated/resources/data/aether/recipes/blue_cape.json index 074a2f2799..99911f60c3 100644 --- a/src/generated/resources/data/aether/recipes/blue_cape.json +++ b/src/generated/resources/data/aether/recipes/blue_cape.json @@ -1,14 +1,15 @@ { "type": "minecraft:crafting_shaped", + "category": "equipment", "key": { - "M": { + "#": { "item": "minecraft:blue_wool" } }, "pattern": [ - "MM", - "MM", - "MM" + "##", + "##", + "##" ], "result": { "item": "aether:blue_cape" diff --git a/src/generated/resources/data/aether/recipes/blue_ice_freezing.json b/src/generated/resources/data/aether/recipes/blue_ice_freezing.json index 0bb5ed0460..14ee463079 100644 --- a/src/generated/resources/data/aether/recipes/blue_ice_freezing.json +++ b/src/generated/resources/data/aether/recipes/blue_ice_freezing.json @@ -1,5 +1,6 @@ { "type": "aether:freezing", + "category": "freezable_blocks", "cookingtime": 1000, "experience": 0.1, "ingredient": { diff --git a/src/generated/resources/data/aether/recipes/book_of_lore.json b/src/generated/resources/data/aether/recipes/book_of_lore.json index a3103612ce..0308bf9f89 100644 --- a/src/generated/resources/data/aether/recipes/book_of_lore.json +++ b/src/generated/resources/data/aether/recipes/book_of_lore.json @@ -1,5 +1,6 @@ { "type": "minecraft:crafting_shapeless", + "category": "misc", "group": "book_of_lore", "ingredients": [ { diff --git a/src/generated/resources/data/aether/recipes/carved_slab.json b/src/generated/resources/data/aether/recipes/carved_slab.json index 73a5ed7f71..5f35cca147 100644 --- a/src/generated/resources/data/aether/recipes/carved_slab.json +++ b/src/generated/resources/data/aether/recipes/carved_slab.json @@ -1,12 +1,13 @@ { "type": "minecraft:crafting_shaped", + "category": "building", "key": { - "M": { + "#": { "item": "aether:carved_stone" } }, "pattern": [ - "MMM" + "###" ], "result": { "count": 6, diff --git a/src/generated/resources/data/aether/recipes/carved_slab_stonecutting.json b/src/generated/resources/data/aether/recipes/carved_slab_from_carved_stone_stonecutting.json similarity index 100% rename from src/generated/resources/data/aether/recipes/carved_slab_stonecutting.json rename to src/generated/resources/data/aether/recipes/carved_slab_from_carved_stone_stonecutting.json diff --git a/src/generated/resources/data/aether/recipes/carved_stairs.json b/src/generated/resources/data/aether/recipes/carved_stairs.json index d859c350df..abfac4cb08 100644 --- a/src/generated/resources/data/aether/recipes/carved_stairs.json +++ b/src/generated/resources/data/aether/recipes/carved_stairs.json @@ -1,14 +1,15 @@ { "type": "minecraft:crafting_shaped", + "category": "building", "key": { - "M": { + "#": { "item": "aether:carved_stone" } }, "pattern": [ - "M ", - "MM ", - "MMM" + "# ", + "## ", + "###" ], "result": { "count": 4, diff --git a/src/generated/resources/data/aether/recipes/carved_stairs_stonecutting.json b/src/generated/resources/data/aether/recipes/carved_stairs_from_carved_stone_stonecutting.json similarity index 100% rename from src/generated/resources/data/aether/recipes/carved_stairs_stonecutting.json rename to src/generated/resources/data/aether/recipes/carved_stairs_from_carved_stone_stonecutting.json diff --git a/src/generated/resources/data/aether/recipes/carved_stone_from_sentry_stone_stoncutting.json b/src/generated/resources/data/aether/recipes/carved_stone_from_sentry_stone_stonecutting.json similarity index 100% rename from src/generated/resources/data/aether/recipes/carved_stone_from_sentry_stone_stoncutting.json rename to src/generated/resources/data/aether/recipes/carved_stone_from_sentry_stone_stonecutting.json diff --git a/src/generated/resources/data/aether/recipes/carved_wall.json b/src/generated/resources/data/aether/recipes/carved_wall.json index b63f8c1f40..5719071277 100644 --- a/src/generated/resources/data/aether/recipes/carved_wall.json +++ b/src/generated/resources/data/aether/recipes/carved_wall.json @@ -1,13 +1,14 @@ { "type": "minecraft:crafting_shaped", + "category": "misc", "key": { - "M": { + "#": { "item": "aether:carved_stone" } }, "pattern": [ - "MMM", - "MMM" + "###", + "###" ], "result": { "count": 6, diff --git a/src/generated/resources/data/aether/recipes/carved_wall_stonecutting.json b/src/generated/resources/data/aether/recipes/carved_wall_from_carved_stone_stonecutting.json similarity index 100% rename from src/generated/resources/data/aether/recipes/carved_wall_stonecutting.json rename to src/generated/resources/data/aether/recipes/carved_wall_from_carved_stone_stonecutting.json diff --git a/src/generated/resources/data/aether/recipes/chinchilla_enchanting.json b/src/generated/resources/data/aether/recipes/chinchilla_enchanting.json index 867c55f16a..f554bb527f 100644 --- a/src/generated/resources/data/aether/recipes/chinchilla_enchanting.json +++ b/src/generated/resources/data/aether/recipes/chinchilla_enchanting.json @@ -1,5 +1,6 @@ { "type": "aether:enchanting", + "category": "enchanting_misc", "cookingtime": 2500, "experience": 1.0, "ingredient": { diff --git a/src/generated/resources/data/aether/recipes/cold_parachute.json b/src/generated/resources/data/aether/recipes/cold_parachute.json index 4e1b7d54c8..aaa5c35133 100644 --- a/src/generated/resources/data/aether/recipes/cold_parachute.json +++ b/src/generated/resources/data/aether/recipes/cold_parachute.json @@ -1,13 +1,14 @@ { "type": "minecraft:crafting_shaped", + "category": "equipment", "key": { - "A": { + "#": { "item": "aether:cold_aercloud" } }, "pattern": [ - "AA", - "AA" + "##", + "##" ], "result": { "item": "aether:cold_parachute" diff --git a/src/generated/resources/data/aether/recipes/crystal_leaves_freezing.json b/src/generated/resources/data/aether/recipes/crystal_leaves_freezing.json index 9885410100..ae716d154a 100644 --- a/src/generated/resources/data/aether/recipes/crystal_leaves_freezing.json +++ b/src/generated/resources/data/aether/recipes/crystal_leaves_freezing.json @@ -1,5 +1,6 @@ { "type": "aether:freezing", + "category": "freezable_blocks", "cookingtime": 150, "experience": 0.1, "ingredient": { diff --git a/src/generated/resources/data/aether/recipes/diamond_gloves.json b/src/generated/resources/data/aether/recipes/diamond_gloves.json index a1f397a1c6..ac0d8cd571 100644 --- a/src/generated/resources/data/aether/recipes/diamond_gloves.json +++ b/src/generated/resources/data/aether/recipes/diamond_gloves.json @@ -1,12 +1,13 @@ { "type": "minecraft:crafting_shaped", + "category": "equipment", "key": { - "M": { + "#": { "tag": "forge:gems/diamond" } }, "pattern": [ - "M M" + "# #" ], "result": { "item": "aether:diamond_gloves" diff --git a/src/generated/resources/data/aether/recipes/enchanted_berry_enchanting.json b/src/generated/resources/data/aether/recipes/enchanted_berry_enchanting.json index 4cd5297a10..70251f53c9 100644 --- a/src/generated/resources/data/aether/recipes/enchanted_berry_enchanting.json +++ b/src/generated/resources/data/aether/recipes/enchanted_berry_enchanting.json @@ -1,5 +1,6 @@ { "type": "aether:enchanting", + "category": "enchanting_food", "cookingtime": 300, "experience": 0.35, "ingredient": { diff --git a/src/generated/resources/data/aether/recipes/enchanted_dart_enchanting.json b/src/generated/resources/data/aether/recipes/enchanted_dart_enchanting.json index 583a36b55e..f635fc3ca8 100644 --- a/src/generated/resources/data/aether/recipes/enchanted_dart_enchanting.json +++ b/src/generated/resources/data/aether/recipes/enchanted_dart_enchanting.json @@ -1,5 +1,6 @@ { "type": "aether:enchanting", + "category": "enchanting_misc", "cookingtime": 250, "experience": 0.15, "ingredient": { diff --git a/src/generated/resources/data/aether/recipes/enchanted_dart_shooter_enchanting.json b/src/generated/resources/data/aether/recipes/enchanted_dart_shooter_enchanting.json index 3654897cdb..54e528e966 100644 --- a/src/generated/resources/data/aether/recipes/enchanted_dart_shooter_enchanting.json +++ b/src/generated/resources/data/aether/recipes/enchanted_dart_shooter_enchanting.json @@ -1,5 +1,6 @@ { "type": "aether:enchanting", + "category": "enchanting_misc", "cookingtime": 500, "experience": 1.0, "ingredient": { diff --git a/src/generated/resources/data/aether/recipes/enchanted_gravitite_enchanting.json b/src/generated/resources/data/aether/recipes/enchanted_gravitite_enchanting.json index 9c13bc8f0c..9d71818ccb 100644 --- a/src/generated/resources/data/aether/recipes/enchanted_gravitite_enchanting.json +++ b/src/generated/resources/data/aether/recipes/enchanted_gravitite_enchanting.json @@ -1,5 +1,6 @@ { "type": "aether:enchanting", + "category": "enchanting_blocks", "cookingtime": 1000, "experience": 1.0, "ingredient": { diff --git a/src/generated/resources/data/aether/recipes/flower_to_purple_dye.json b/src/generated/resources/data/aether/recipes/flower_to_purple_dye.json index aa8a0f5a8d..007e6ac52d 100644 --- a/src/generated/resources/data/aether/recipes/flower_to_purple_dye.json +++ b/src/generated/resources/data/aether/recipes/flower_to_purple_dye.json @@ -1,5 +1,6 @@ { "type": "minecraft:crafting_shapeless", + "category": "misc", "group": "purple_dye", "ingredients": [ { diff --git a/src/generated/resources/data/aether/recipes/flower_to_white_dye.json b/src/generated/resources/data/aether/recipes/flower_to_white_dye.json index a7c3ee1c11..0373f2d091 100644 --- a/src/generated/resources/data/aether/recipes/flower_to_white_dye.json +++ b/src/generated/resources/data/aether/recipes/flower_to_white_dye.json @@ -1,5 +1,6 @@ { "type": "minecraft:crafting_shapeless", + "category": "misc", "group": "white_dye", "ingredients": [ { diff --git a/src/generated/resources/data/aether/recipes/freezer.json b/src/generated/resources/data/aether/recipes/freezer.json index bed06240e6..f332872f3d 100644 --- a/src/generated/resources/data/aether/recipes/freezer.json +++ b/src/generated/resources/data/aether/recipes/freezer.json @@ -1,5 +1,6 @@ { "type": "minecraft:crafting_shaped", + "category": "misc", "key": { "H": { "item": "aether:holystone" @@ -7,14 +8,14 @@ "I": { "item": "aether:icestone" }, - "S": { + "P": { "item": "aether:skyroot_planks" } }, "pattern": [ "HHH", "HIH", - "SSS" + "PPP" ], "result": { "item": "aether:freezer" diff --git a/src/generated/resources/data/aether/recipes/golden_dart.json b/src/generated/resources/data/aether/recipes/golden_dart.json index ce287284d1..714b55d923 100644 --- a/src/generated/resources/data/aether/recipes/golden_dart.json +++ b/src/generated/resources/data/aether/recipes/golden_dart.json @@ -1,19 +1,20 @@ { "type": "minecraft:crafting_shaped", + "category": "equipment", "key": { + "/": { + "tag": "aether:skyroot_stick" + }, "F": { "tag": "forge:feathers" }, "G": { "item": "aether:golden_amber" - }, - "S": { - "tag": "aether:skyroot_stick" } }, "pattern": [ "F", - "S", + "/", "G" ], "result": { diff --git a/src/generated/resources/data/aether/recipes/golden_dart_shooter.json b/src/generated/resources/data/aether/recipes/golden_dart_shooter.json index 5dd1ebf072..41c39160c9 100644 --- a/src/generated/resources/data/aether/recipes/golden_dart_shooter.json +++ b/src/generated/resources/data/aether/recipes/golden_dart_shooter.json @@ -1,16 +1,17 @@ { "type": "minecraft:crafting_shaped", + "category": "equipment", "key": { "G": { "item": "aether:golden_amber" }, - "S": { + "P": { "item": "aether:skyroot_planks" } }, "pattern": [ - "S", - "S", + "P", + "P", "G" ], "result": { diff --git a/src/generated/resources/data/aether/recipes/golden_gloves.json b/src/generated/resources/data/aether/recipes/golden_gloves.json index b9c792c539..7af2f3fa32 100644 --- a/src/generated/resources/data/aether/recipes/golden_gloves.json +++ b/src/generated/resources/data/aether/recipes/golden_gloves.json @@ -1,12 +1,13 @@ { "type": "minecraft:crafting_shaped", + "category": "equipment", "key": { - "M": { + "#": { "tag": "forge:ingots/gold" } }, "pattern": [ - "M M" + "# #" ], "result": { "item": "aether:golden_gloves" diff --git a/src/generated/resources/data/aether/recipes/golden_log_to_planks.json b/src/generated/resources/data/aether/recipes/golden_log_to_planks.json deleted file mode 100644 index c89c56558e..0000000000 --- a/src/generated/resources/data/aether/recipes/golden_log_to_planks.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "ingredients": [ - { - "item": "aether:golden_oak_log" - } - ], - "result": { - "count": 4, - "item": "aether:skyroot_planks" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/aether/recipes/golden_oak_wood.json b/src/generated/resources/data/aether/recipes/golden_oak_wood.json index 25e298828d..266ea36274 100644 --- a/src/generated/resources/data/aether/recipes/golden_oak_wood.json +++ b/src/generated/resources/data/aether/recipes/golden_oak_wood.json @@ -1,13 +1,15 @@ { "type": "minecraft:crafting_shaped", + "category": "building", + "group": "bark", "key": { - "M": { + "#": { "item": "aether:golden_oak_log" } }, "pattern": [ - "MM", - "MM" + "##", + "##" ], "result": { "count": 3, diff --git a/src/generated/resources/data/aether/recipes/golden_parachute.json b/src/generated/resources/data/aether/recipes/golden_parachute.json index 68ef2a9ad4..3c02bdf627 100644 --- a/src/generated/resources/data/aether/recipes/golden_parachute.json +++ b/src/generated/resources/data/aether/recipes/golden_parachute.json @@ -1,13 +1,14 @@ { "type": "minecraft:crafting_shaped", + "category": "equipment", "key": { - "A": { + "#": { "item": "aether:golden_aercloud" } }, "pattern": [ - "AA", - "AA" + "##", + "##" ], "result": { "item": "aether:golden_parachute" diff --git a/src/generated/resources/data/aether/recipes/golden_pendant.json b/src/generated/resources/data/aether/recipes/golden_pendant.json index b6e44c821b..8907a3c9c7 100644 --- a/src/generated/resources/data/aether/recipes/golden_pendant.json +++ b/src/generated/resources/data/aether/recipes/golden_pendant.json @@ -1,7 +1,8 @@ { "type": "minecraft:crafting_shaped", + "category": "equipment", "key": { - "M": { + "#": { "item": "minecraft:gold_ingot" }, "S": { @@ -11,7 +12,7 @@ "pattern": [ "SSS", "S S", - " M " + " # " ], "result": { "item": "aether:golden_pendant" diff --git a/src/generated/resources/data/aether/recipes/golden_ring.json b/src/generated/resources/data/aether/recipes/golden_ring.json index db9852bce2..56477e021a 100644 --- a/src/generated/resources/data/aether/recipes/golden_ring.json +++ b/src/generated/resources/data/aether/recipes/golden_ring.json @@ -1,14 +1,15 @@ { "type": "minecraft:crafting_shaped", + "category": "equipment", "key": { - "M": { + "#": { "item": "minecraft:gold_ingot" } }, "pattern": [ - " M ", - "M M", - " M " + " # ", + "# #", + " # " ], "result": { "item": "aether:golden_ring" diff --git a/src/generated/resources/data/aether/recipes/golden_wood_to_planks.json b/src/generated/resources/data/aether/recipes/golden_wood_to_planks.json deleted file mode 100644 index caee2ec257..0000000000 --- a/src/generated/resources/data/aether/recipes/golden_wood_to_planks.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "ingredients": [ - { - "item": "aether:golden_oak_wood" - } - ], - "result": { - "count": 4, - "item": "aether:skyroot_planks" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/aether/recipes/gravitite_axe.json b/src/generated/resources/data/aether/recipes/gravitite_axe.json index 9f53f4f4a0..6015e655c5 100644 --- a/src/generated/resources/data/aether/recipes/gravitite_axe.json +++ b/src/generated/resources/data/aether/recipes/gravitite_axe.json @@ -1,5 +1,6 @@ { "type": "minecraft:crafting_shaped", + "category": "equipment", "key": { "#": { "item": "aether:enchanted_gravitite" diff --git a/src/generated/resources/data/aether/recipes/gravitite_boots.json b/src/generated/resources/data/aether/recipes/gravitite_boots.json index e3c61c65ea..ce53f56c7a 100644 --- a/src/generated/resources/data/aether/recipes/gravitite_boots.json +++ b/src/generated/resources/data/aether/recipes/gravitite_boots.json @@ -1,13 +1,14 @@ { "type": "minecraft:crafting_shaped", + "category": "equipment", "key": { - "M": { + "#": { "item": "aether:enchanted_gravitite" } }, "pattern": [ - "M M", - "M M" + "# #", + "# #" ], "result": { "item": "aether:gravitite_boots" diff --git a/src/generated/resources/data/aether/recipes/gravitite_chestplate.json b/src/generated/resources/data/aether/recipes/gravitite_chestplate.json index 64b65506a2..26c9b84604 100644 --- a/src/generated/resources/data/aether/recipes/gravitite_chestplate.json +++ b/src/generated/resources/data/aether/recipes/gravitite_chestplate.json @@ -1,14 +1,15 @@ { "type": "minecraft:crafting_shaped", + "category": "equipment", "key": { - "M": { + "#": { "item": "aether:enchanted_gravitite" } }, "pattern": [ - "M M", - "MMM", - "MMM" + "# #", + "###", + "###" ], "result": { "item": "aether:gravitite_chestplate" diff --git a/src/generated/resources/data/aether/recipes/gravitite_gloves.json b/src/generated/resources/data/aether/recipes/gravitite_gloves.json index 6ae9645722..5c4ca4c03b 100644 --- a/src/generated/resources/data/aether/recipes/gravitite_gloves.json +++ b/src/generated/resources/data/aether/recipes/gravitite_gloves.json @@ -1,12 +1,13 @@ { "type": "minecraft:crafting_shaped", + "category": "equipment", "key": { - "M": { + "#": { "item": "aether:enchanted_gravitite" } }, "pattern": [ - "M M" + "# #" ], "result": { "item": "aether:gravitite_gloves" diff --git a/src/generated/resources/data/aether/recipes/gravitite_helmet.json b/src/generated/resources/data/aether/recipes/gravitite_helmet.json index cdd06d2274..c5a9ffd0d8 100644 --- a/src/generated/resources/data/aether/recipes/gravitite_helmet.json +++ b/src/generated/resources/data/aether/recipes/gravitite_helmet.json @@ -1,13 +1,14 @@ { "type": "minecraft:crafting_shaped", + "category": "equipment", "key": { - "M": { + "#": { "item": "aether:enchanted_gravitite" } }, "pattern": [ - "MMM", - "M M" + "###", + "# #" ], "result": { "item": "aether:gravitite_helmet" diff --git a/src/generated/resources/data/aether/recipes/gravitite_hoe.json b/src/generated/resources/data/aether/recipes/gravitite_hoe.json index 1888338a00..51745c2b1c 100644 --- a/src/generated/resources/data/aether/recipes/gravitite_hoe.json +++ b/src/generated/resources/data/aether/recipes/gravitite_hoe.json @@ -1,5 +1,6 @@ { "type": "minecraft:crafting_shaped", + "category": "equipment", "key": { "#": { "item": "aether:enchanted_gravitite" diff --git a/src/generated/resources/data/aether/recipes/gravitite_jukebox.json b/src/generated/resources/data/aether/recipes/gravitite_jukebox.json index 59ad6a0684..038d64c9eb 100644 --- a/src/generated/resources/data/aether/recipes/gravitite_jukebox.json +++ b/src/generated/resources/data/aether/recipes/gravitite_jukebox.json @@ -1,5 +1,6 @@ { "type": "minecraft:crafting_shaped", + "category": "misc", "group": "minecraft:jukebox", "key": { "G": { diff --git a/src/generated/resources/data/aether/recipes/gravitite_leggings.json b/src/generated/resources/data/aether/recipes/gravitite_leggings.json index 33ebca9f63..7ac37a79eb 100644 --- a/src/generated/resources/data/aether/recipes/gravitite_leggings.json +++ b/src/generated/resources/data/aether/recipes/gravitite_leggings.json @@ -1,14 +1,15 @@ { "type": "minecraft:crafting_shaped", + "category": "equipment", "key": { - "M": { + "#": { "item": "aether:enchanted_gravitite" } }, "pattern": [ - "MMM", - "M M", - "M M" + "###", + "# #", + "# #" ], "result": { "item": "aether:gravitite_leggings" diff --git a/src/generated/resources/data/aether/recipes/gravitite_pickaxe.json b/src/generated/resources/data/aether/recipes/gravitite_pickaxe.json index f066dae47f..0665e14ed2 100644 --- a/src/generated/resources/data/aether/recipes/gravitite_pickaxe.json +++ b/src/generated/resources/data/aether/recipes/gravitite_pickaxe.json @@ -1,5 +1,6 @@ { "type": "minecraft:crafting_shaped", + "category": "equipment", "key": { "#": { "item": "aether:enchanted_gravitite" diff --git a/src/generated/resources/data/aether/recipes/gravitite_shovel.json b/src/generated/resources/data/aether/recipes/gravitite_shovel.json index c0d39fee95..73e2173a2d 100644 --- a/src/generated/resources/data/aether/recipes/gravitite_shovel.json +++ b/src/generated/resources/data/aether/recipes/gravitite_shovel.json @@ -1,5 +1,6 @@ { "type": "minecraft:crafting_shaped", + "category": "equipment", "key": { "#": { "item": "aether:enchanted_gravitite" diff --git a/src/generated/resources/data/aether/recipes/gravitite_sword.json b/src/generated/resources/data/aether/recipes/gravitite_sword.json index 1f80c43ff0..f206c3bef6 100644 --- a/src/generated/resources/data/aether/recipes/gravitite_sword.json +++ b/src/generated/resources/data/aether/recipes/gravitite_sword.json @@ -1,5 +1,6 @@ { "type": "minecraft:crafting_shaped", + "category": "equipment", "key": { "#": { "item": "aether:enchanted_gravitite" diff --git a/src/generated/resources/data/aether/recipes/healing_stone_enchanting.json b/src/generated/resources/data/aether/recipes/healing_stone_enchanting.json index 2f1c5a8ffb..2ce33d271b 100644 --- a/src/generated/resources/data/aether/recipes/healing_stone_enchanting.json +++ b/src/generated/resources/data/aether/recipes/healing_stone_enchanting.json @@ -1,5 +1,6 @@ { "type": "aether:enchanting", + "category": "enchanting_food", "cookingtime": 750, "experience": 0.35, "ingredient": { diff --git a/src/generated/resources/data/aether/recipes/hellfire_slab.json b/src/generated/resources/data/aether/recipes/hellfire_slab.json index a8623ab502..7f6d36c66f 100644 --- a/src/generated/resources/data/aether/recipes/hellfire_slab.json +++ b/src/generated/resources/data/aether/recipes/hellfire_slab.json @@ -1,12 +1,13 @@ { "type": "minecraft:crafting_shaped", + "category": "building", "key": { - "M": { + "#": { "item": "aether:hellfire_stone" } }, "pattern": [ - "MMM" + "###" ], "result": { "count": 6, diff --git a/src/generated/resources/data/aether/recipes/hellfire_slab_stonecutting.json b/src/generated/resources/data/aether/recipes/hellfire_slab_from_hellfire_stone_stonecutting.json similarity index 100% rename from src/generated/resources/data/aether/recipes/hellfire_slab_stonecutting.json rename to src/generated/resources/data/aether/recipes/hellfire_slab_from_hellfire_stone_stonecutting.json diff --git a/src/generated/resources/data/aether/recipes/hellfire_stairs.json b/src/generated/resources/data/aether/recipes/hellfire_stairs.json index 11fd8eb060..4d32dd4b9e 100644 --- a/src/generated/resources/data/aether/recipes/hellfire_stairs.json +++ b/src/generated/resources/data/aether/recipes/hellfire_stairs.json @@ -1,14 +1,15 @@ { "type": "minecraft:crafting_shaped", + "category": "building", "key": { - "M": { + "#": { "item": "aether:hellfire_stone" } }, "pattern": [ - "M ", - "MM ", - "MMM" + "# ", + "## ", + "###" ], "result": { "count": 4, diff --git a/src/generated/resources/data/aether/recipes/hellfire_stairs_stonecutting.json b/src/generated/resources/data/aether/recipes/hellfire_stairs_from_hellfire_stone_stonecutting.json similarity index 100% rename from src/generated/resources/data/aether/recipes/hellfire_stairs_stonecutting.json rename to src/generated/resources/data/aether/recipes/hellfire_stairs_from_hellfire_stone_stonecutting.json diff --git a/src/generated/resources/data/aether/recipes/hellfire_wall.json b/src/generated/resources/data/aether/recipes/hellfire_wall.json index bdfe42d665..a8b932f3d4 100644 --- a/src/generated/resources/data/aether/recipes/hellfire_wall.json +++ b/src/generated/resources/data/aether/recipes/hellfire_wall.json @@ -1,13 +1,14 @@ { "type": "minecraft:crafting_shaped", + "category": "misc", "key": { - "M": { + "#": { "item": "aether:hellfire_stone" } }, "pattern": [ - "MMM", - "MMM" + "###", + "###" ], "result": { "count": 6, diff --git a/src/generated/resources/data/aether/recipes/hellfire_wall_stonecutting.json b/src/generated/resources/data/aether/recipes/hellfire_wall_from_hellfire_stone_stonecutting.json similarity index 100% rename from src/generated/resources/data/aether/recipes/hellfire_wall_stonecutting.json rename to src/generated/resources/data/aether/recipes/hellfire_wall_from_hellfire_stone_stonecutting.json diff --git a/src/generated/resources/data/aether/recipes/holystone_axe.json b/src/generated/resources/data/aether/recipes/holystone_axe.json index 85b7927d71..4a0afa53f1 100644 --- a/src/generated/resources/data/aether/recipes/holystone_axe.json +++ b/src/generated/resources/data/aether/recipes/holystone_axe.json @@ -1,5 +1,6 @@ { "type": "minecraft:crafting_shaped", + "category": "equipment", "key": { "#": { "item": "aether:holystone" diff --git a/src/generated/resources/data/aether/recipes/holystone_brick_slab.json b/src/generated/resources/data/aether/recipes/holystone_brick_slab.json index f283617652..e5bb14176c 100644 --- a/src/generated/resources/data/aether/recipes/holystone_brick_slab.json +++ b/src/generated/resources/data/aether/recipes/holystone_brick_slab.json @@ -1,12 +1,13 @@ { "type": "minecraft:crafting_shaped", + "category": "building", "key": { - "M": { + "#": { "item": "aether:holystone_bricks" } }, "pattern": [ - "MMM" + "###" ], "result": { "count": 6, diff --git a/src/generated/resources/data/aether/recipes/holystone_brick_slab_stonecutting.json b/src/generated/resources/data/aether/recipes/holystone_brick_slab_from_holystone_bricks_stonecutting.json similarity index 100% rename from src/generated/resources/data/aether/recipes/holystone_brick_slab_stonecutting.json rename to src/generated/resources/data/aether/recipes/holystone_brick_slab_from_holystone_bricks_stonecutting.json diff --git a/src/generated/resources/data/aether/recipes/holystone_to_holystone_brick_slab_stonecutting.json b/src/generated/resources/data/aether/recipes/holystone_brick_slab_from_holystone_stonecutting.json similarity index 100% rename from src/generated/resources/data/aether/recipes/holystone_to_holystone_brick_slab_stonecutting.json rename to src/generated/resources/data/aether/recipes/holystone_brick_slab_from_holystone_stonecutting.json diff --git a/src/generated/resources/data/aether/recipes/holystone_brick_stairs.json b/src/generated/resources/data/aether/recipes/holystone_brick_stairs.json index 3186d1154a..f0ea1b6fbc 100644 --- a/src/generated/resources/data/aether/recipes/holystone_brick_stairs.json +++ b/src/generated/resources/data/aether/recipes/holystone_brick_stairs.json @@ -1,14 +1,15 @@ { "type": "minecraft:crafting_shaped", + "category": "building", "key": { - "M": { + "#": { "item": "aether:holystone_bricks" } }, "pattern": [ - "M ", - "MM ", - "MMM" + "# ", + "## ", + "###" ], "result": { "count": 4, diff --git a/src/generated/resources/data/aether/recipes/holystone_brick_stairs_stonecutting.json b/src/generated/resources/data/aether/recipes/holystone_brick_stairs_from_holystone_bricks_stonecutting.json similarity index 100% rename from src/generated/resources/data/aether/recipes/holystone_brick_stairs_stonecutting.json rename to src/generated/resources/data/aether/recipes/holystone_brick_stairs_from_holystone_bricks_stonecutting.json diff --git a/src/generated/resources/data/aether/recipes/holystone_to_holystone_brick_stairs_stonecutting.json b/src/generated/resources/data/aether/recipes/holystone_brick_stairs_from_holystone_stonecutting.json similarity index 100% rename from src/generated/resources/data/aether/recipes/holystone_to_holystone_brick_stairs_stonecutting.json rename to src/generated/resources/data/aether/recipes/holystone_brick_stairs_from_holystone_stonecutting.json diff --git a/src/generated/resources/data/aether/recipes/holystone_brick_wall.json b/src/generated/resources/data/aether/recipes/holystone_brick_wall.json index 52c055729e..c7a5fccbbd 100644 --- a/src/generated/resources/data/aether/recipes/holystone_brick_wall.json +++ b/src/generated/resources/data/aether/recipes/holystone_brick_wall.json @@ -1,13 +1,14 @@ { "type": "minecraft:crafting_shaped", + "category": "misc", "key": { - "M": { + "#": { "item": "aether:holystone_bricks" } }, "pattern": [ - "MMM", - "MMM" + "###", + "###" ], "result": { "count": 6, diff --git a/src/generated/resources/data/aether/recipes/holystone_brick_wall_stonecutting.json b/src/generated/resources/data/aether/recipes/holystone_brick_wall_from_holystone_bricks_stonecutting.json similarity index 100% rename from src/generated/resources/data/aether/recipes/holystone_brick_wall_stonecutting.json rename to src/generated/resources/data/aether/recipes/holystone_brick_wall_from_holystone_bricks_stonecutting.json diff --git a/src/generated/resources/data/aether/recipes/holystone_to_holystone_brick_wall_stonecutting.json b/src/generated/resources/data/aether/recipes/holystone_brick_wall_from_holystone_stonecutting.json similarity index 100% rename from src/generated/resources/data/aether/recipes/holystone_to_holystone_brick_wall_stonecutting.json rename to src/generated/resources/data/aether/recipes/holystone_brick_wall_from_holystone_stonecutting.json diff --git a/src/generated/resources/data/aether/recipes/holystone_bricks.json b/src/generated/resources/data/aether/recipes/holystone_bricks.json index 06d02a4469..f9b973c310 100644 --- a/src/generated/resources/data/aether/recipes/holystone_bricks.json +++ b/src/generated/resources/data/aether/recipes/holystone_bricks.json @@ -1,13 +1,14 @@ { "type": "minecraft:crafting_shaped", + "category": "building", "key": { - "M": { + "#": { "item": "aether:holystone" } }, "pattern": [ - "MM", - "MM" + "##", + "##" ], "result": { "count": 4, diff --git a/src/generated/resources/data/aether/recipes/holystone_brick_stonecutting.json b/src/generated/resources/data/aether/recipes/holystone_bricks_from_holystone_stonecutting.json similarity index 100% rename from src/generated/resources/data/aether/recipes/holystone_brick_stonecutting.json rename to src/generated/resources/data/aether/recipes/holystone_bricks_from_holystone_stonecutting.json diff --git a/src/generated/resources/data/aether/recipes/holystone_button.json b/src/generated/resources/data/aether/recipes/holystone_button.json index 2060033ae1..65300e46d1 100644 --- a/src/generated/resources/data/aether/recipes/holystone_button.json +++ b/src/generated/resources/data/aether/recipes/holystone_button.json @@ -1,5 +1,6 @@ { "type": "minecraft:crafting_shapeless", + "category": "redstone", "ingredients": [ { "item": "aether:holystone" diff --git a/src/generated/resources/data/aether/recipes/holystone_hoe.json b/src/generated/resources/data/aether/recipes/holystone_hoe.json index 0459310fca..0f7843e556 100644 --- a/src/generated/resources/data/aether/recipes/holystone_hoe.json +++ b/src/generated/resources/data/aether/recipes/holystone_hoe.json @@ -1,5 +1,6 @@ { "type": "minecraft:crafting_shaped", + "category": "equipment", "key": { "#": { "item": "aether:holystone" diff --git a/src/generated/resources/data/aether/recipes/holystone_pickaxe.json b/src/generated/resources/data/aether/recipes/holystone_pickaxe.json index 4237dd6a5b..03ab8c9f89 100644 --- a/src/generated/resources/data/aether/recipes/holystone_pickaxe.json +++ b/src/generated/resources/data/aether/recipes/holystone_pickaxe.json @@ -1,5 +1,6 @@ { "type": "minecraft:crafting_shaped", + "category": "equipment", "key": { "#": { "item": "aether:holystone" diff --git a/src/generated/resources/data/aether/recipes/holystone_pressure_plate.json b/src/generated/resources/data/aether/recipes/holystone_pressure_plate.json index faea151856..73bff325d5 100644 --- a/src/generated/resources/data/aether/recipes/holystone_pressure_plate.json +++ b/src/generated/resources/data/aether/recipes/holystone_pressure_plate.json @@ -1,12 +1,13 @@ { "type": "minecraft:crafting_shaped", + "category": "redstone", "key": { - "H": { + "#": { "item": "aether:holystone" } }, "pattern": [ - "HH" + "##" ], "result": { "item": "aether:holystone_pressure_plate" diff --git a/src/generated/resources/data/aether/recipes/holystone_shovel.json b/src/generated/resources/data/aether/recipes/holystone_shovel.json index 8b7b8f564c..d94b82b260 100644 --- a/src/generated/resources/data/aether/recipes/holystone_shovel.json +++ b/src/generated/resources/data/aether/recipes/holystone_shovel.json @@ -1,5 +1,6 @@ { "type": "minecraft:crafting_shaped", + "category": "equipment", "key": { "#": { "item": "aether:holystone" diff --git a/src/generated/resources/data/aether/recipes/holystone_slab.json b/src/generated/resources/data/aether/recipes/holystone_slab.json index 86d7c98d6c..35270b0964 100644 --- a/src/generated/resources/data/aether/recipes/holystone_slab.json +++ b/src/generated/resources/data/aether/recipes/holystone_slab.json @@ -1,12 +1,13 @@ { "type": "minecraft:crafting_shaped", + "category": "building", "key": { - "M": { + "#": { "item": "aether:holystone" } }, "pattern": [ - "MMM" + "###" ], "result": { "count": 6, diff --git a/src/generated/resources/data/aether/recipes/holystone_slab_stonecutting.json b/src/generated/resources/data/aether/recipes/holystone_slab_from_holystone_stonecutting.json similarity index 100% rename from src/generated/resources/data/aether/recipes/holystone_slab_stonecutting.json rename to src/generated/resources/data/aether/recipes/holystone_slab_from_holystone_stonecutting.json diff --git a/src/generated/resources/data/aether/recipes/holystone_stairs.json b/src/generated/resources/data/aether/recipes/holystone_stairs.json index f5d5296320..359176a229 100644 --- a/src/generated/resources/data/aether/recipes/holystone_stairs.json +++ b/src/generated/resources/data/aether/recipes/holystone_stairs.json @@ -1,14 +1,15 @@ { "type": "minecraft:crafting_shaped", + "category": "building", "key": { - "M": { + "#": { "item": "aether:holystone" } }, "pattern": [ - "M ", - "MM ", - "MMM" + "# ", + "## ", + "###" ], "result": { "count": 4, diff --git a/src/generated/resources/data/aether/recipes/holystone_stairs_stonecutting.json b/src/generated/resources/data/aether/recipes/holystone_stairs_from_holystone_stonecutting.json similarity index 100% rename from src/generated/resources/data/aether/recipes/holystone_stairs_stonecutting.json rename to src/generated/resources/data/aether/recipes/holystone_stairs_from_holystone_stonecutting.json diff --git a/src/generated/resources/data/aether/recipes/holystone_sword.json b/src/generated/resources/data/aether/recipes/holystone_sword.json index d2c15358e7..fe1504e25d 100644 --- a/src/generated/resources/data/aether/recipes/holystone_sword.json +++ b/src/generated/resources/data/aether/recipes/holystone_sword.json @@ -1,5 +1,6 @@ { "type": "minecraft:crafting_shaped", + "category": "equipment", "key": { "#": { "item": "aether:holystone" diff --git a/src/generated/resources/data/aether/recipes/holystone_wall.json b/src/generated/resources/data/aether/recipes/holystone_wall.json index d2e9fb7df4..33b0960654 100644 --- a/src/generated/resources/data/aether/recipes/holystone_wall.json +++ b/src/generated/resources/data/aether/recipes/holystone_wall.json @@ -1,13 +1,14 @@ { "type": "minecraft:crafting_shaped", + "category": "misc", "key": { - "M": { + "#": { "item": "aether:holystone" } }, "pattern": [ - "MMM", - "MMM" + "###", + "###" ], "result": { "count": 6, diff --git a/src/generated/resources/data/aether/recipes/holystone_wall_stonecutting.json b/src/generated/resources/data/aether/recipes/holystone_wall_from_holystone_stonecutting.json similarity index 100% rename from src/generated/resources/data/aether/recipes/holystone_wall_stonecutting.json rename to src/generated/resources/data/aether/recipes/holystone_wall_from_holystone_stonecutting.json diff --git a/src/generated/resources/data/aether/recipes/ice_from_bucket_freezing.json b/src/generated/resources/data/aether/recipes/ice_from_bucket_freezing.json index ce89392ffe..1fdbe53c05 100644 --- a/src/generated/resources/data/aether/recipes/ice_from_bucket_freezing.json +++ b/src/generated/resources/data/aether/recipes/ice_from_bucket_freezing.json @@ -1,5 +1,6 @@ { "type": "aether:freezing", + "category": "freezable_blocks", "cookingtime": 500, "experience": 0.1, "ingredient": { diff --git a/src/generated/resources/data/aether/recipes/ice_pendant_from_freezing.json b/src/generated/resources/data/aether/recipes/ice_pendant_from_freezing.json index 0d19077d92..c7814cae5a 100644 --- a/src/generated/resources/data/aether/recipes/ice_pendant_from_freezing.json +++ b/src/generated/resources/data/aether/recipes/ice_pendant_from_freezing.json @@ -1,5 +1,6 @@ { "type": "aether:freezing", + "category": "freezable_misc", "cookingtime": 2500, "experience": 1.0, "ingredient": { diff --git a/src/generated/resources/data/aether/recipes/ice_ring_from_freezing.json b/src/generated/resources/data/aether/recipes/ice_ring_from_freezing.json index 72b8db1b6d..010570702d 100644 --- a/src/generated/resources/data/aether/recipes/ice_ring_from_freezing.json +++ b/src/generated/resources/data/aether/recipes/ice_ring_from_freezing.json @@ -1,5 +1,6 @@ { "type": "aether:freezing", + "category": "freezable_misc", "cookingtime": 2500, "experience": 1.0, "ingredient": { diff --git a/src/generated/resources/data/aether/recipes/icestone_slab.json b/src/generated/resources/data/aether/recipes/icestone_slab.json index a6d60c743b..b428dafd51 100644 --- a/src/generated/resources/data/aether/recipes/icestone_slab.json +++ b/src/generated/resources/data/aether/recipes/icestone_slab.json @@ -1,12 +1,13 @@ { "type": "minecraft:crafting_shaped", + "category": "building", "key": { - "M": { + "#": { "item": "aether:icestone" } }, "pattern": [ - "MMM" + "###" ], "result": { "count": 6, diff --git a/src/generated/resources/data/aether/recipes/icestone_stairs.json b/src/generated/resources/data/aether/recipes/icestone_stairs.json index 9aec06330b..8e7c6afafb 100644 --- a/src/generated/resources/data/aether/recipes/icestone_stairs.json +++ b/src/generated/resources/data/aether/recipes/icestone_stairs.json @@ -1,14 +1,15 @@ { "type": "minecraft:crafting_shaped", + "category": "building", "key": { - "M": { + "#": { "item": "aether:icestone" } }, "pattern": [ - "M ", - "MM ", - "MMM" + "# ", + "## ", + "###" ], "result": { "count": 4, diff --git a/src/generated/resources/data/aether/recipes/icestone_wall.json b/src/generated/resources/data/aether/recipes/icestone_wall.json index 0a605f5ab8..67fdc0adf1 100644 --- a/src/generated/resources/data/aether/recipes/icestone_wall.json +++ b/src/generated/resources/data/aether/recipes/icestone_wall.json @@ -1,13 +1,14 @@ { "type": "minecraft:crafting_shaped", + "category": "misc", "key": { - "M": { + "#": { "item": "aether:icestone" } }, "pattern": [ - "MMM", - "MMM" + "###", + "###" ], "result": { "count": 6, diff --git a/src/generated/resources/data/aether/recipes/incubator.json b/src/generated/resources/data/aether/recipes/incubator.json index f8fa50a176..b4e4543df4 100644 --- a/src/generated/resources/data/aether/recipes/incubator.json +++ b/src/generated/resources/data/aether/recipes/incubator.json @@ -1,16 +1,17 @@ { "type": "minecraft:crafting_shaped", + "category": "misc", "key": { - "A": { - "item": "aether:ambrosium_torch" - }, "H": { "item": "aether:holystone" + }, + "T": { + "item": "aether:ambrosium_torch" } }, "pattern": [ "HHH", - "HAH", + "HTH", "HHH" ], "result": { diff --git a/src/generated/resources/data/aether/recipes/iron_gloves.json b/src/generated/resources/data/aether/recipes/iron_gloves.json index c6f58c3c3a..8b57f08151 100644 --- a/src/generated/resources/data/aether/recipes/iron_gloves.json +++ b/src/generated/resources/data/aether/recipes/iron_gloves.json @@ -1,12 +1,13 @@ { "type": "minecraft:crafting_shaped", + "category": "equipment", "key": { - "M": { + "#": { "tag": "forge:ingots/iron" } }, "pattern": [ - "M M" + "# #" ], "result": { "item": "aether:iron_gloves" diff --git a/src/generated/resources/data/aether/recipes/iron_pendant.json b/src/generated/resources/data/aether/recipes/iron_pendant.json index e0ffd68d45..2b509ecae9 100644 --- a/src/generated/resources/data/aether/recipes/iron_pendant.json +++ b/src/generated/resources/data/aether/recipes/iron_pendant.json @@ -1,7 +1,8 @@ { "type": "minecraft:crafting_shaped", + "category": "equipment", "key": { - "M": { + "#": { "item": "minecraft:iron_ingot" }, "S": { @@ -11,7 +12,7 @@ "pattern": [ "SSS", "S S", - " M " + " # " ], "result": { "item": "aether:iron_pendant" diff --git a/src/generated/resources/data/aether/recipes/iron_ring.json b/src/generated/resources/data/aether/recipes/iron_ring.json index 1724fe53bd..18a1218d12 100644 --- a/src/generated/resources/data/aether/recipes/iron_ring.json +++ b/src/generated/resources/data/aether/recipes/iron_ring.json @@ -1,14 +1,15 @@ { "type": "minecraft:crafting_shaped", + "category": "equipment", "key": { - "M": { + "#": { "item": "minecraft:iron_ingot" } }, "pattern": [ - " M ", - "M M", - " M " + " # ", + "# #", + " # " ], "result": { "item": "aether:iron_ring" diff --git a/src/generated/resources/data/aether/recipes/leather_gloves.json b/src/generated/resources/data/aether/recipes/leather_gloves.json index f1690800e8..5c8ff15a75 100644 --- a/src/generated/resources/data/aether/recipes/leather_gloves.json +++ b/src/generated/resources/data/aether/recipes/leather_gloves.json @@ -1,12 +1,13 @@ { "type": "minecraft:crafting_shaped", + "category": "equipment", "key": { - "M": { + "#": { "tag": "forge:leather" } }, "pattern": [ - "M M" + "# #" ], "result": { "item": "aether:leather_gloves" diff --git a/src/generated/resources/data/aether/recipes/legacy_enchanting.json b/src/generated/resources/data/aether/recipes/legacy_enchanting.json index b86ecf1841..1d0f76952c 100644 --- a/src/generated/resources/data/aether/recipes/legacy_enchanting.json +++ b/src/generated/resources/data/aether/recipes/legacy_enchanting.json @@ -1,5 +1,6 @@ { "type": "aether:enchanting", + "category": "enchanting_misc", "cookingtime": 2500, "experience": 1.0, "ingredient": { diff --git a/src/generated/resources/data/aether/recipes/light_angelic_stone_stonecutting.json b/src/generated/resources/data/aether/recipes/light_angelic_stone_from_angelic_stone_stonecutting.json similarity index 100% rename from src/generated/resources/data/aether/recipes/light_angelic_stone_stonecutting.json rename to src/generated/resources/data/aether/recipes/light_angelic_stone_from_angelic_stone_stonecutting.json diff --git a/src/generated/resources/data/aether/recipes/light_hellfire_stone_stonecutting.json b/src/generated/resources/data/aether/recipes/light_hellfire_stone_from_hellfire_stone_stonecutting.json similarity index 100% rename from src/generated/resources/data/aether/recipes/light_hellfire_stone_stonecutting.json rename to src/generated/resources/data/aether/recipes/light_hellfire_stone_from_hellfire_stone_stonecutting.json diff --git a/src/generated/resources/data/aether/recipes/mossy_holystone_slab.json b/src/generated/resources/data/aether/recipes/mossy_holystone_slab.json index fbfa0159bd..eb65be9829 100644 --- a/src/generated/resources/data/aether/recipes/mossy_holystone_slab.json +++ b/src/generated/resources/data/aether/recipes/mossy_holystone_slab.json @@ -1,12 +1,13 @@ { "type": "minecraft:crafting_shaped", + "category": "building", "key": { - "M": { + "#": { "item": "aether:mossy_holystone" } }, "pattern": [ - "MMM" + "###" ], "result": { "count": 6, diff --git a/src/generated/resources/data/aether/recipes/mossy_holystone_slab_stonecutting.json b/src/generated/resources/data/aether/recipes/mossy_holystone_slab_from_mossy_holystone_stonecutting.json similarity index 100% rename from src/generated/resources/data/aether/recipes/mossy_holystone_slab_stonecutting.json rename to src/generated/resources/data/aether/recipes/mossy_holystone_slab_from_mossy_holystone_stonecutting.json diff --git a/src/generated/resources/data/aether/recipes/mossy_holystone_stairs.json b/src/generated/resources/data/aether/recipes/mossy_holystone_stairs.json index 1d1f7edfb3..c7eab61691 100644 --- a/src/generated/resources/data/aether/recipes/mossy_holystone_stairs.json +++ b/src/generated/resources/data/aether/recipes/mossy_holystone_stairs.json @@ -1,14 +1,15 @@ { "type": "minecraft:crafting_shaped", + "category": "building", "key": { - "M": { + "#": { "item": "aether:mossy_holystone" } }, "pattern": [ - "M ", - "MM ", - "MMM" + "# ", + "## ", + "###" ], "result": { "count": 4, diff --git a/src/generated/resources/data/aether/recipes/mossy_holystone_stairs_stonecutting.json b/src/generated/resources/data/aether/recipes/mossy_holystone_stairs_from_mossy_holystone_stonecutting.json similarity index 100% rename from src/generated/resources/data/aether/recipes/mossy_holystone_stairs_stonecutting.json rename to src/generated/resources/data/aether/recipes/mossy_holystone_stairs_from_mossy_holystone_stonecutting.json diff --git a/src/generated/resources/data/aether/recipes/mossy_holystone_wall.json b/src/generated/resources/data/aether/recipes/mossy_holystone_wall.json index 56f54c133f..447f0c92ac 100644 --- a/src/generated/resources/data/aether/recipes/mossy_holystone_wall.json +++ b/src/generated/resources/data/aether/recipes/mossy_holystone_wall.json @@ -1,13 +1,14 @@ { "type": "minecraft:crafting_shaped", + "category": "misc", "key": { - "M": { + "#": { "item": "aether:mossy_holystone" } }, "pattern": [ - "MMM", - "MMM" + "###", + "###" ], "result": { "count": 6, diff --git a/src/generated/resources/data/aether/recipes/mossy_holystone_wall_stonecutting.json b/src/generated/resources/data/aether/recipes/mossy_holystone_wall_from_mossy_holystone_stonecutting.json similarity index 100% rename from src/generated/resources/data/aether/recipes/mossy_holystone_wall_stonecutting.json rename to src/generated/resources/data/aether/recipes/mossy_holystone_wall_from_mossy_holystone_stonecutting.json diff --git a/src/generated/resources/data/aether/recipes/mossy_holystone_with_moss.json b/src/generated/resources/data/aether/recipes/mossy_holystone_with_moss.json index 141db7ebf1..dd9ba2ffe1 100644 --- a/src/generated/resources/data/aether/recipes/mossy_holystone_with_moss.json +++ b/src/generated/resources/data/aether/recipes/mossy_holystone_with_moss.json @@ -1,5 +1,6 @@ { "type": "minecraft:crafting_shapeless", + "category": "building", "group": "mossy_holystone", "ingredients": [ { diff --git a/src/generated/resources/data/aether/recipes/mossy_holystone_with_vine.json b/src/generated/resources/data/aether/recipes/mossy_holystone_with_vine.json index 57b50a4fad..64b9c5cfb1 100644 --- a/src/generated/resources/data/aether/recipes/mossy_holystone_with_vine.json +++ b/src/generated/resources/data/aether/recipes/mossy_holystone_with_vine.json @@ -1,5 +1,6 @@ { "type": "minecraft:crafting_shapeless", + "category": "building", "group": "mossy_holystone", "ingredients": [ { diff --git a/src/generated/resources/data/aether/recipes/nature_staff.json b/src/generated/resources/data/aether/recipes/nature_staff.json index 3e800fd937..fd4325cb0b 100644 --- a/src/generated/resources/data/aether/recipes/nature_staff.json +++ b/src/generated/resources/data/aether/recipes/nature_staff.json @@ -1,7 +1,8 @@ { "type": "minecraft:crafting_shaped", + "category": "equipment", "key": { - "S": { + "/": { "tag": "aether:skyroot_stick" }, "Z": { @@ -10,7 +11,7 @@ }, "pattern": [ "Z", - "S" + "/" ], "result": { "item": "aether:nature_staff" diff --git a/src/generated/resources/data/aether/recipes/obsidian_from_bucket_freezing.json b/src/generated/resources/data/aether/recipes/obsidian_from_bucket_freezing.json index a115966cb5..1de63ebaac 100644 --- a/src/generated/resources/data/aether/recipes/obsidian_from_bucket_freezing.json +++ b/src/generated/resources/data/aether/recipes/obsidian_from_bucket_freezing.json @@ -1,5 +1,6 @@ { "type": "aether:freezing", + "category": "freezable_blocks", "cookingtime": 500, "experience": 0.1, "ingredient": { diff --git a/src/generated/resources/data/aether/recipes/packed_ice_freezing.json b/src/generated/resources/data/aether/recipes/packed_ice_freezing.json index 462d55fa42..c0e281f24e 100644 --- a/src/generated/resources/data/aether/recipes/packed_ice_freezing.json +++ b/src/generated/resources/data/aether/recipes/packed_ice_freezing.json @@ -1,5 +1,6 @@ { "type": "aether:freezing", + "category": "freezable_blocks", "cookingtime": 750, "experience": 0.1, "ingredient": { diff --git a/src/generated/resources/data/aether/recipes/pillar_stonecutting.json b/src/generated/resources/data/aether/recipes/pillar_from_angelic_stone_stonecutting.json similarity index 100% rename from src/generated/resources/data/aether/recipes/pillar_stonecutting.json rename to src/generated/resources/data/aether/recipes/pillar_from_angelic_stone_stonecutting.json diff --git a/src/generated/resources/data/aether/recipes/pillar_top_stonecutting.json b/src/generated/resources/data/aether/recipes/pillar_top_from_angelic_stone_stonecutting.json similarity index 100% rename from src/generated/resources/data/aether/recipes/pillar_top_stonecutting.json rename to src/generated/resources/data/aether/recipes/pillar_top_from_angelic_stone_stonecutting.json diff --git a/src/generated/resources/data/aether/recipes/poison_dart.json b/src/generated/resources/data/aether/recipes/poison_dart.json index 91d7694119..31dda57a05 100644 --- a/src/generated/resources/data/aether/recipes/poison_dart.json +++ b/src/generated/resources/data/aether/recipes/poison_dart.json @@ -1,16 +1,17 @@ { "type": "minecraft:crafting_shaped", + "category": "equipment", "key": { + "B": { + "item": "aether:skyroot_poison_bucket" + }, "D": { "item": "aether:golden_dart" - }, - "P": { - "item": "aether:skyroot_poison_bucket" } }, "pattern": [ "DDD", - "DPD", + "DBD", "DDD" ], "result": { diff --git a/src/generated/resources/data/aether/recipes/poison_dart_shooter.json b/src/generated/resources/data/aether/recipes/poison_dart_shooter.json index 6ea4ab496e..bde794c8ea 100644 --- a/src/generated/resources/data/aether/recipes/poison_dart_shooter.json +++ b/src/generated/resources/data/aether/recipes/poison_dart_shooter.json @@ -1,5 +1,6 @@ { "type": "minecraft:crafting_shapeless", + "category": "equipment", "ingredients": [ { "item": "aether:golden_dart_shooter" diff --git a/src/generated/resources/data/aether/recipes/quicksoil_glass_enchanting.json b/src/generated/resources/data/aether/recipes/quicksoil_glass_enchanting.json index 5c70b6f88f..8960937e57 100644 --- a/src/generated/resources/data/aether/recipes/quicksoil_glass_enchanting.json +++ b/src/generated/resources/data/aether/recipes/quicksoil_glass_enchanting.json @@ -1,5 +1,6 @@ { "type": "aether:enchanting", + "category": "enchanting_blocks", "cookingtime": 250, "experience": 0.1, "ingredient": { diff --git a/src/generated/resources/data/aether/recipes/quicksoil_glass_pane.json b/src/generated/resources/data/aether/recipes/quicksoil_glass_pane.json index dbc3b863a0..9b125ad88c 100644 --- a/src/generated/resources/data/aether/recipes/quicksoil_glass_pane.json +++ b/src/generated/resources/data/aether/recipes/quicksoil_glass_pane.json @@ -1,13 +1,14 @@ { "type": "minecraft:crafting_shaped", + "category": "misc", "key": { - "G": { + "#": { "item": "aether:quicksoil_glass" } }, "pattern": [ - "GGG", - "GGG" + "###", + "###" ], "result": { "count": 16, diff --git a/src/generated/resources/data/aether/recipes/red_cape.json b/src/generated/resources/data/aether/recipes/red_cape.json index 32a7c09d3f..99d4d06187 100644 --- a/src/generated/resources/data/aether/recipes/red_cape.json +++ b/src/generated/resources/data/aether/recipes/red_cape.json @@ -1,14 +1,15 @@ { "type": "minecraft:crafting_shaped", + "category": "equipment", "key": { - "M": { + "#": { "item": "minecraft:red_wool" } }, "pattern": [ - "MM", - "MM", - "MM" + "##", + "##", + "##" ], "result": { "item": "aether:red_cape" diff --git a/src/generated/resources/data/aether/recipes/remedy_bucket_enchanting.json b/src/generated/resources/data/aether/recipes/remedy_bucket_enchanting.json index e46d0c7dbc..27d367badf 100644 --- a/src/generated/resources/data/aether/recipes/remedy_bucket_enchanting.json +++ b/src/generated/resources/data/aether/recipes/remedy_bucket_enchanting.json @@ -1,5 +1,6 @@ { "type": "aether:enchanting", + "category": "enchanting_misc", "cookingtime": 1000, "experience": 0.35, "ingredient": { diff --git a/src/generated/resources/data/aether/recipes/sentry_stone_stoncutting.json b/src/generated/resources/data/aether/recipes/sentry_stone_from_carved_stone_stonecutting.json similarity index 100% rename from src/generated/resources/data/aether/recipes/sentry_stone_stoncutting.json rename to src/generated/resources/data/aether/recipes/sentry_stone_from_carved_stone_stonecutting.json diff --git a/src/generated/resources/data/aether/recipes/skyroot_axe.json b/src/generated/resources/data/aether/recipes/skyroot_axe.json index ce5f9b9e15..6af57dd542 100644 --- a/src/generated/resources/data/aether/recipes/skyroot_axe.json +++ b/src/generated/resources/data/aether/recipes/skyroot_axe.json @@ -1,5 +1,6 @@ { "type": "minecraft:crafting_shaped", + "category": "equipment", "key": { "#": { "item": "aether:skyroot_planks" diff --git a/src/generated/resources/data/aether/recipes/skyroot_barrel.json b/src/generated/resources/data/aether/recipes/skyroot_barrel.json index 8cef09a8c4..56b080dd0a 100644 --- a/src/generated/resources/data/aether/recipes/skyroot_barrel.json +++ b/src/generated/resources/data/aether/recipes/skyroot_barrel.json @@ -1,18 +1,19 @@ { "type": "minecraft:crafting_shaped", + "category": "misc", "group": "minecraft:barrel", "key": { "H": { "tag": "minecraft:wooden_slabs" }, - "S": { + "P": { "tag": "aether:planks_crafting" } }, "pattern": [ - "SHS", - "S S", - "SHS" + "PHP", + "P P", + "PHP" ], "result": { "item": "minecraft:barrel" diff --git a/src/generated/resources/data/aether/recipes/skyroot_bed.json b/src/generated/resources/data/aether/recipes/skyroot_bed.json index 9e16880f27..386c4f9fd5 100644 --- a/src/generated/resources/data/aether/recipes/skyroot_bed.json +++ b/src/generated/resources/data/aether/recipes/skyroot_bed.json @@ -1,7 +1,8 @@ { "type": "minecraft:crafting_shaped", + "category": "misc", "key": { - "S": { + "P": { "item": "aether:skyroot_planks" }, "W": { @@ -10,7 +11,7 @@ }, "pattern": [ "WWW", - "SSS" + "PPP" ], "result": { "item": "aether:skyroot_bed" diff --git a/src/generated/resources/data/aether/recipes/skyroot_beehive.json b/src/generated/resources/data/aether/recipes/skyroot_beehive.json index 3bf163c33c..18841bfae7 100644 --- a/src/generated/resources/data/aether/recipes/skyroot_beehive.json +++ b/src/generated/resources/data/aether/recipes/skyroot_beehive.json @@ -1,18 +1,19 @@ { "type": "minecraft:crafting_shaped", + "category": "misc", "group": "minecraft:beehive", "key": { "C": { "item": "minecraft:honeycomb" }, - "S": { + "P": { "tag": "aether:planks_crafting" } }, "pattern": [ - "SSS", + "PPP", "CCC", - "SSS" + "PPP" ], "result": { "item": "minecraft:beehive" diff --git a/src/generated/resources/data/aether/recipes/skyroot_boat.json b/src/generated/resources/data/aether/recipes/skyroot_boat.json index 521e31e04a..cc4a1fb2ec 100644 --- a/src/generated/resources/data/aether/recipes/skyroot_boat.json +++ b/src/generated/resources/data/aether/recipes/skyroot_boat.json @@ -1,14 +1,15 @@ { "type": "minecraft:crafting_shaped", + "category": "misc", "group": "boat", "key": { - "P": { + "#": { "item": "aether:skyroot_planks" } }, "pattern": [ - "P P", - "PPP" + "# #", + "###" ], "result": { "item": "aether:skyroot_boat" diff --git a/src/generated/resources/data/aether/recipes/skyroot_bookshelf.json b/src/generated/resources/data/aether/recipes/skyroot_bookshelf.json index de4dc2a304..cbaef05e09 100644 --- a/src/generated/resources/data/aether/recipes/skyroot_bookshelf.json +++ b/src/generated/resources/data/aether/recipes/skyroot_bookshelf.json @@ -1,17 +1,18 @@ { "type": "minecraft:crafting_shaped", + "category": "building", "key": { "B": { "item": "minecraft:book" }, - "S": { + "P": { "item": "aether:skyroot_planks" } }, "pattern": [ - "SSS", + "PPP", "BBB", - "SSS" + "PPP" ], "result": { "item": "aether:skyroot_bookshelf" diff --git a/src/generated/resources/data/aether/recipes/skyroot_bucket.json b/src/generated/resources/data/aether/recipes/skyroot_bucket.json index 5daca5d4a6..8fe2def213 100644 --- a/src/generated/resources/data/aether/recipes/skyroot_bucket.json +++ b/src/generated/resources/data/aether/recipes/skyroot_bucket.json @@ -1,13 +1,14 @@ { "type": "minecraft:crafting_shaped", + "category": "misc", "key": { - "S": { + "#": { "item": "aether:skyroot_planks" } }, "pattern": [ - "S S", - " S " + "# #", + " # " ], "result": { "item": "aether:skyroot_bucket" diff --git a/src/generated/resources/data/aether/recipes/skyroot_button.json b/src/generated/resources/data/aether/recipes/skyroot_button.json index 44b54cb4ff..443f177e45 100644 --- a/src/generated/resources/data/aether/recipes/skyroot_button.json +++ b/src/generated/resources/data/aether/recipes/skyroot_button.json @@ -1,5 +1,6 @@ { "type": "minecraft:crafting_shapeless", + "category": "redstone", "group": "wooden_button", "ingredients": [ { diff --git a/src/generated/resources/data/aether/recipes/skyroot_cartography_table.json b/src/generated/resources/data/aether/recipes/skyroot_cartography_table.json index cfecf4eb64..b4008e5b4c 100644 --- a/src/generated/resources/data/aether/recipes/skyroot_cartography_table.json +++ b/src/generated/resources/data/aether/recipes/skyroot_cartography_table.json @@ -1,18 +1,19 @@ { "type": "minecraft:crafting_shaped", + "category": "misc", "group": "minecraft:cartography_table", "key": { - "P": { + "#": { "item": "minecraft:paper" }, - "S": { + "P": { "tag": "aether:planks_crafting" } }, "pattern": [ + "##", "PP", - "SS", - "SS" + "PP" ], "result": { "item": "minecraft:cartography_table" diff --git a/src/generated/resources/data/aether/recipes/skyroot_chest.json b/src/generated/resources/data/aether/recipes/skyroot_chest.json index bdc8cdd895..c410f5173d 100644 --- a/src/generated/resources/data/aether/recipes/skyroot_chest.json +++ b/src/generated/resources/data/aether/recipes/skyroot_chest.json @@ -1,15 +1,16 @@ { "type": "minecraft:crafting_shaped", + "category": "misc", "group": "minecraft:chest", "key": { - "S": { + "P": { "tag": "aether:planks_crafting" } }, "pattern": [ - "SSS", - "S S", - "SSS" + "PPP", + "P P", + "PPP" ], "result": { "item": "minecraft:chest" diff --git a/src/generated/resources/data/aether/recipes/skyroot_chest_boat.json b/src/generated/resources/data/aether/recipes/skyroot_chest_boat.json index 086441d387..1f14fc2eff 100644 --- a/src/generated/resources/data/aether/recipes/skyroot_chest_boat.json +++ b/src/generated/resources/data/aether/recipes/skyroot_chest_boat.json @@ -1,5 +1,6 @@ { "type": "minecraft:crafting_shapeless", + "category": "misc", "group": "chest_boat", "ingredients": [ { diff --git a/src/generated/resources/data/aether/recipes/skyroot_crafting_table.json b/src/generated/resources/data/aether/recipes/skyroot_crafting_table.json index ce3c6dcf8b..190e39148f 100644 --- a/src/generated/resources/data/aether/recipes/skyroot_crafting_table.json +++ b/src/generated/resources/data/aether/recipes/skyroot_crafting_table.json @@ -1,14 +1,15 @@ { "type": "minecraft:crafting_shaped", + "category": "misc", "group": "minecraft:crafting_table", "key": { - "S": { + "P": { "tag": "aether:planks_crafting" } }, "pattern": [ - "SS", - "SS" + "PP", + "PP" ], "result": { "item": "minecraft:crafting_table" diff --git a/src/generated/resources/data/aether/recipes/skyroot_door.json b/src/generated/resources/data/aether/recipes/skyroot_door.json index 333854d0cb..89e7c0bd14 100644 --- a/src/generated/resources/data/aether/recipes/skyroot_door.json +++ b/src/generated/resources/data/aether/recipes/skyroot_door.json @@ -1,15 +1,16 @@ { "type": "minecraft:crafting_shaped", + "category": "redstone", "group": "wooden_door", "key": { - "S": { + "#": { "item": "aether:skyroot_planks" } }, "pattern": [ - "SS", - "SS", - "SS" + "##", + "##", + "##" ], "result": { "count": 3, diff --git a/src/generated/resources/data/aether/recipes/skyroot_fence.json b/src/generated/resources/data/aether/recipes/skyroot_fence.json index d80f6f3b01..d11b780436 100644 --- a/src/generated/resources/data/aether/recipes/skyroot_fence.json +++ b/src/generated/resources/data/aether/recipes/skyroot_fence.json @@ -1,5 +1,7 @@ { "type": "minecraft:crafting_shaped", + "category": "misc", + "group": "wooden_fence", "key": { "/": { "tag": "aether:skyroot_stick" diff --git a/src/generated/resources/data/aether/recipes/skyroot_fence_gate.json b/src/generated/resources/data/aether/recipes/skyroot_fence_gate.json index 9c31c33692..4b54fa2e45 100644 --- a/src/generated/resources/data/aether/recipes/skyroot_fence_gate.json +++ b/src/generated/resources/data/aether/recipes/skyroot_fence_gate.json @@ -1,5 +1,7 @@ { "type": "minecraft:crafting_shaped", + "category": "redstone", + "group": "wooden_fence_gate", "key": { "/": { "tag": "aether:skyroot_stick" diff --git a/src/generated/resources/data/aether/recipes/skyroot_fletching_table.json b/src/generated/resources/data/aether/recipes/skyroot_fletching_table.json index a51a02bdb1..4c6ebb9ca0 100644 --- a/src/generated/resources/data/aether/recipes/skyroot_fletching_table.json +++ b/src/generated/resources/data/aether/recipes/skyroot_fletching_table.json @@ -1,18 +1,19 @@ { "type": "minecraft:crafting_shaped", + "category": "misc", "group": "minecraft:fletching_table", "key": { "F": { "item": "minecraft:flint" }, - "S": { + "P": { "tag": "aether:planks_crafting" } }, "pattern": [ "FF", - "SS", - "SS" + "PP", + "PP" ], "result": { "item": "minecraft:fletching_table" diff --git a/src/generated/resources/data/aether/recipes/skyroot_gravitite_jukebox.json b/src/generated/resources/data/aether/recipes/skyroot_gravitite_jukebox.json index 3710e3af4c..dbc504d083 100644 --- a/src/generated/resources/data/aether/recipes/skyroot_gravitite_jukebox.json +++ b/src/generated/resources/data/aether/recipes/skyroot_gravitite_jukebox.json @@ -1,18 +1,19 @@ { "type": "minecraft:crafting_shaped", + "category": "misc", "group": "minecraft:jukebox", "key": { "G": { "item": "aether:enchanted_gravitite" }, - "S": { + "P": { "tag": "aether:planks_crafting" } }, "pattern": [ - "SSS", - "SGS", - "SSS" + "PPP", + "PGP", + "PPP" ], "result": { "item": "minecraft:jukebox" diff --git a/src/generated/resources/data/aether/recipes/skyroot_grindstone.json b/src/generated/resources/data/aether/recipes/skyroot_grindstone.json index 426337f4a4..9af866b1e0 100644 --- a/src/generated/resources/data/aether/recipes/skyroot_grindstone.json +++ b/src/generated/resources/data/aether/recipes/skyroot_grindstone.json @@ -1,20 +1,21 @@ { "type": "minecraft:crafting_shaped", + "category": "misc", "group": "minecraft:grindstone", "key": { + "/": { + "tag": "forge:rods/wooden" + }, "H": { "item": "minecraft:stone_slab" }, - "S": { + "P": { "tag": "aether:planks_crafting" - }, - "T": { - "tag": "forge:rods/wooden" } }, "pattern": [ - "THT", - "S S" + "/H/", + "P P" ], "result": { "item": "minecraft:grindstone" diff --git a/src/generated/resources/data/aether/recipes/skyroot_hoe.json b/src/generated/resources/data/aether/recipes/skyroot_hoe.json index 87479d1482..c88d042db0 100644 --- a/src/generated/resources/data/aether/recipes/skyroot_hoe.json +++ b/src/generated/resources/data/aether/recipes/skyroot_hoe.json @@ -1,5 +1,6 @@ { "type": "minecraft:crafting_shaped", + "category": "equipment", "key": { "#": { "item": "aether:skyroot_planks" diff --git a/src/generated/resources/data/aether/recipes/skyroot_jukebox.json b/src/generated/resources/data/aether/recipes/skyroot_jukebox.json index 0259d95b8a..0a89965b06 100644 --- a/src/generated/resources/data/aether/recipes/skyroot_jukebox.json +++ b/src/generated/resources/data/aether/recipes/skyroot_jukebox.json @@ -1,18 +1,19 @@ { "type": "minecraft:crafting_shaped", + "category": "misc", "group": "minecraft:jukebox", "key": { "D": { "tag": "forge:gems/diamond" }, - "S": { + "P": { "tag": "aether:planks_crafting" } }, "pattern": [ - "SSS", - "SDS", - "SSS" + "PPP", + "PDP", + "PPP" ], "result": { "item": "minecraft:jukebox" diff --git a/src/generated/resources/data/aether/recipes/skyroot_loom.json b/src/generated/resources/data/aether/recipes/skyroot_loom.json index 7edfaaf6b3..50b7cff2c2 100644 --- a/src/generated/resources/data/aether/recipes/skyroot_loom.json +++ b/src/generated/resources/data/aether/recipes/skyroot_loom.json @@ -1,8 +1,9 @@ { "type": "minecraft:crafting_shaped", + "category": "misc", "group": "minecraft:loom", "key": { - "S": { + "P": { "tag": "aether:planks_crafting" }, "T": { @@ -11,7 +12,7 @@ }, "pattern": [ "TT", - "SS" + "PP" ], "result": { "item": "minecraft:loom" diff --git a/src/generated/resources/data/aether/recipes/skyroot_note_block.json b/src/generated/resources/data/aether/recipes/skyroot_note_block.json index ab6371e20a..79f9f99bfe 100644 --- a/src/generated/resources/data/aether/recipes/skyroot_note_block.json +++ b/src/generated/resources/data/aether/recipes/skyroot_note_block.json @@ -1,18 +1,19 @@ { "type": "minecraft:crafting_shaped", + "category": "redstone", "group": "minecraft:note_block", "key": { + "P": { + "tag": "aether:planks_crafting" + }, "R": { "tag": "forge:dusts/redstone" - }, - "S": { - "tag": "aether:planks_crafting" } }, "pattern": [ - "SSS", - "SRS", - "SSS" + "PPP", + "PRP", + "PPP" ], "result": { "item": "minecraft:note_block" diff --git a/src/generated/resources/data/aether/recipes/skyroot_pickaxe.json b/src/generated/resources/data/aether/recipes/skyroot_pickaxe.json index 667d5ea413..1d57ee32fb 100644 --- a/src/generated/resources/data/aether/recipes/skyroot_pickaxe.json +++ b/src/generated/resources/data/aether/recipes/skyroot_pickaxe.json @@ -1,5 +1,6 @@ { "type": "minecraft:crafting_shaped", + "category": "equipment", "key": { "#": { "item": "aether:skyroot_planks" diff --git a/src/generated/resources/data/aether/recipes/skyroot_piston.json b/src/generated/resources/data/aether/recipes/skyroot_piston.json index 11603da06c..5b8dddce34 100644 --- a/src/generated/resources/data/aether/recipes/skyroot_piston.json +++ b/src/generated/resources/data/aether/recipes/skyroot_piston.json @@ -1,5 +1,6 @@ { "type": "minecraft:crafting_shaped", + "category": "redstone", "group": "minecraft:piston", "key": { "C": { @@ -8,15 +9,15 @@ "I": { "tag": "forge:ingots/iron" }, + "P": { + "tag": "aether:planks_crafting" + }, "R": { "tag": "forge:dusts/redstone" - }, - "S": { - "tag": "aether:planks_crafting" } }, "pattern": [ - "SSS", + "PPP", "CIC", "CRC" ], diff --git a/src/generated/resources/data/aether/recipes/skyroot_planks.json b/src/generated/resources/data/aether/recipes/skyroot_planks.json index fb9b5ba922..e84f355536 100644 --- a/src/generated/resources/data/aether/recipes/skyroot_planks.json +++ b/src/generated/resources/data/aether/recipes/skyroot_planks.json @@ -1,8 +1,10 @@ { "type": "minecraft:crafting_shapeless", + "category": "building", + "group": "planks", "ingredients": [ { - "item": "aether:skyroot_log" + "tag": "aether:crafts_skyroot_planks" } ], "result": { diff --git a/src/generated/resources/data/aether/recipes/skyroot_pressure_plate.json b/src/generated/resources/data/aether/recipes/skyroot_pressure_plate.json index ea09610205..81b56f1b30 100644 --- a/src/generated/resources/data/aether/recipes/skyroot_pressure_plate.json +++ b/src/generated/resources/data/aether/recipes/skyroot_pressure_plate.json @@ -1,13 +1,14 @@ { "type": "minecraft:crafting_shaped", + "category": "redstone", "group": "wooden_pressure_plate", "key": { - "S": { + "#": { "item": "aether:skyroot_planks" } }, "pattern": [ - "SS" + "##" ], "result": { "item": "aether:skyroot_pressure_plate" diff --git a/src/generated/resources/data/aether/recipes/skyroot_shield.json b/src/generated/resources/data/aether/recipes/skyroot_shield.json index a1007bda62..664aab8293 100644 --- a/src/generated/resources/data/aether/recipes/skyroot_shield.json +++ b/src/generated/resources/data/aether/recipes/skyroot_shield.json @@ -1,18 +1,19 @@ { "type": "minecraft:crafting_shaped", + "category": "equipment", "group": "minecraft:shield", "key": { "I": { "tag": "forge:ingots/iron" }, - "S": { + "P": { "tag": "aether:planks_crafting" } }, "pattern": [ - "SIS", - "SSS", - " S " + "PIP", + "PPP", + " P " ], "result": { "item": "minecraft:shield" diff --git a/src/generated/resources/data/aether/recipes/skyroot_shovel.json b/src/generated/resources/data/aether/recipes/skyroot_shovel.json index 08125a614a..22f3846b32 100644 --- a/src/generated/resources/data/aether/recipes/skyroot_shovel.json +++ b/src/generated/resources/data/aether/recipes/skyroot_shovel.json @@ -1,5 +1,6 @@ { "type": "minecraft:crafting_shaped", + "category": "equipment", "key": { "#": { "item": "aether:skyroot_planks" diff --git a/src/generated/resources/data/aether/recipes/skyroot_sign.json b/src/generated/resources/data/aether/recipes/skyroot_sign.json index 341cfe900f..729195d709 100644 --- a/src/generated/resources/data/aether/recipes/skyroot_sign.json +++ b/src/generated/resources/data/aether/recipes/skyroot_sign.json @@ -1,17 +1,19 @@ { "type": "minecraft:crafting_shaped", + "category": "misc", + "group": "wooden_sign", "key": { + "/": { + "tag": "forge:rods/wooden" + }, "P": { "item": "aether:skyroot_planks" - }, - "S": { - "tag": "aether:skyroot_stick" } }, "pattern": [ "PPP", "PPP", - " S " + " / " ], "result": { "count": 3, diff --git a/src/generated/resources/data/aether/recipes/skyroot_slab.json b/src/generated/resources/data/aether/recipes/skyroot_slab.json index 1462e54fe0..00a1109da2 100644 --- a/src/generated/resources/data/aether/recipes/skyroot_slab.json +++ b/src/generated/resources/data/aether/recipes/skyroot_slab.json @@ -1,12 +1,14 @@ { "type": "minecraft:crafting_shaped", + "category": "building", + "group": "wooden_slab", "key": { - "M": { + "#": { "item": "aether:skyroot_planks" } }, "pattern": [ - "MMM" + "###" ], "result": { "count": 6, diff --git a/src/generated/resources/data/aether/recipes/skyroot_smithing_table.json b/src/generated/resources/data/aether/recipes/skyroot_smithing_table.json index 14c0ca0b82..2147ae0639 100644 --- a/src/generated/resources/data/aether/recipes/skyroot_smithing_table.json +++ b/src/generated/resources/data/aether/recipes/skyroot_smithing_table.json @@ -1,18 +1,19 @@ { "type": "minecraft:crafting_shaped", + "category": "misc", "group": "minecraft:smithing_table", "key": { "I": { "tag": "forge:ingots/iron" }, - "S": { + "P": { "tag": "aether:planks_crafting" } }, "pattern": [ "II", - "SS", - "SS" + "PP", + "PP" ], "result": { "item": "minecraft:smithing_table" diff --git a/src/generated/resources/data/aether/recipes/skyroot_stairs.json b/src/generated/resources/data/aether/recipes/skyroot_stairs.json index 5368b4277d..2fe9545cdb 100644 --- a/src/generated/resources/data/aether/recipes/skyroot_stairs.json +++ b/src/generated/resources/data/aether/recipes/skyroot_stairs.json @@ -1,14 +1,16 @@ { "type": "minecraft:crafting_shaped", + "category": "building", + "group": "wooden_stairs", "key": { - "M": { + "#": { "item": "aether:skyroot_planks" } }, "pattern": [ - "M ", - "MM ", - "MMM" + "# ", + "## ", + "###" ], "result": { "count": 4, diff --git a/src/generated/resources/data/aether/recipes/skyroot_stick.json b/src/generated/resources/data/aether/recipes/skyroot_stick.json index 7300c09a5a..c9ee29e3bd 100644 --- a/src/generated/resources/data/aether/recipes/skyroot_stick.json +++ b/src/generated/resources/data/aether/recipes/skyroot_stick.json @@ -1,13 +1,15 @@ { "type": "minecraft:crafting_shaped", + "category": "misc", + "group": "sticks", "key": { - "S": { + "#": { "item": "aether:skyroot_planks" } }, "pattern": [ - "S", - "S" + "#", + "#" ], "result": { "count": 4, diff --git a/src/generated/resources/data/aether/recipes/skyroot_sword.json b/src/generated/resources/data/aether/recipes/skyroot_sword.json index de60136a84..2faf195796 100644 --- a/src/generated/resources/data/aether/recipes/skyroot_sword.json +++ b/src/generated/resources/data/aether/recipes/skyroot_sword.json @@ -1,5 +1,6 @@ { "type": "minecraft:crafting_shaped", + "category": "equipment", "key": { "#": { "item": "aether:skyroot_planks" diff --git a/src/generated/resources/data/aether/recipes/skyroot_trapdoor.json b/src/generated/resources/data/aether/recipes/skyroot_trapdoor.json index 56fe2812dc..9f7514fdd1 100644 --- a/src/generated/resources/data/aether/recipes/skyroot_trapdoor.json +++ b/src/generated/resources/data/aether/recipes/skyroot_trapdoor.json @@ -1,14 +1,15 @@ { "type": "minecraft:crafting_shaped", + "category": "redstone", "group": "wooden_trapdoor", "key": { - "S": { + "#": { "item": "aether:skyroot_planks" } }, "pattern": [ - "SSS", - "SSS" + "###", + "###" ], "result": { "count": 2, diff --git a/src/generated/resources/data/aether/recipes/skyroot_tripwire_hook.json b/src/generated/resources/data/aether/recipes/skyroot_tripwire_hook.json index e92ec3510d..0418c73970 100644 --- a/src/generated/resources/data/aether/recipes/skyroot_tripwire_hook.json +++ b/src/generated/resources/data/aether/recipes/skyroot_tripwire_hook.json @@ -1,21 +1,22 @@ { "type": "minecraft:crafting_shaped", + "category": "redstone", "group": "minecraft:tripwire_hook", "key": { + "/": { + "tag": "forge:rods/wooden" + }, "I": { "tag": "forge:ingots/iron" }, - "S": { + "P": { "tag": "aether:planks_crafting" - }, - "T": { - "tag": "forge:rods/wooden" } }, "pattern": [ "I", - "T", - "S" + "/", + "P" ], "result": { "count": 2, diff --git a/src/generated/resources/data/aether/recipes/skyroot_wood.json b/src/generated/resources/data/aether/recipes/skyroot_wood.json index 5836e35f84..884c0dfc57 100644 --- a/src/generated/resources/data/aether/recipes/skyroot_wood.json +++ b/src/generated/resources/data/aether/recipes/skyroot_wood.json @@ -1,13 +1,15 @@ { "type": "minecraft:crafting_shaped", + "category": "building", + "group": "bark", "key": { - "M": { + "#": { "item": "aether:skyroot_log" } }, "pattern": [ - "MM", - "MM" + "##", + "##" ], "result": { "count": 3, diff --git a/src/generated/resources/data/aether/recipes/stripped_log_to_planks.json b/src/generated/resources/data/aether/recipes/stripped_log_to_planks.json deleted file mode 100644 index 2dddca8324..0000000000 --- a/src/generated/resources/data/aether/recipes/stripped_log_to_planks.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "ingredients": [ - { - "item": "aether:stripped_skyroot_log" - } - ], - "result": { - "count": 4, - "item": "aether:skyroot_planks" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/aether/recipes/stripped_skyroot_wood.json b/src/generated/resources/data/aether/recipes/stripped_skyroot_wood.json index 266b75f27a..732250b514 100644 --- a/src/generated/resources/data/aether/recipes/stripped_skyroot_wood.json +++ b/src/generated/resources/data/aether/recipes/stripped_skyroot_wood.json @@ -1,13 +1,15 @@ { "type": "minecraft:crafting_shaped", + "category": "building", + "group": "bark", "key": { - "M": { + "#": { "item": "aether:stripped_skyroot_log" } }, "pattern": [ - "MM", - "MM" + "##", + "##" ], "result": { "count": 3, diff --git a/src/generated/resources/data/aether/recipes/stripped_wood_to_planks.json b/src/generated/resources/data/aether/recipes/stripped_wood_to_planks.json deleted file mode 100644 index b7daa14bf9..0000000000 --- a/src/generated/resources/data/aether/recipes/stripped_wood_to_planks.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "ingredients": [ - { - "item": "aether:stripped_skyroot_wood" - } - ], - "result": { - "count": 4, - "item": "aether:skyroot_planks" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/aether/recipes/swet_lead.json b/src/generated/resources/data/aether/recipes/swet_lead.json index e965cefb70..fcbb0da3ce 100644 --- a/src/generated/resources/data/aether/recipes/swet_lead.json +++ b/src/generated/resources/data/aether/recipes/swet_lead.json @@ -1,5 +1,6 @@ { "type": "minecraft:crafting_shaped", + "category": "equipment", "group": "minecraft:lead", "key": { "B": { diff --git a/src/generated/resources/data/aether/recipes/welcoming_skies_freezing.json b/src/generated/resources/data/aether/recipes/welcoming_skies_freezing.json index d140ccd8fc..3c6db75b9e 100644 --- a/src/generated/resources/data/aether/recipes/welcoming_skies_freezing.json +++ b/src/generated/resources/data/aether/recipes/welcoming_skies_freezing.json @@ -1,5 +1,6 @@ { "type": "aether:freezing", + "category": "freezable_misc", "cookingtime": 800, "experience": 1.0, "ingredient": { diff --git a/src/generated/resources/data/aether/recipes/white_cape.json b/src/generated/resources/data/aether/recipes/white_cape.json index 0b5811d2ba..dcb2b2ac58 100644 --- a/src/generated/resources/data/aether/recipes/white_cape.json +++ b/src/generated/resources/data/aether/recipes/white_cape.json @@ -1,14 +1,15 @@ { "type": "minecraft:crafting_shaped", + "category": "equipment", "key": { - "M": { + "#": { "item": "minecraft:white_wool" } }, "pattern": [ - "MM", - "MM", - "MM" + "##", + "##", + "##" ], "result": { "item": "aether:white_cape" diff --git a/src/generated/resources/data/aether/recipes/wood_to_planks.json b/src/generated/resources/data/aether/recipes/wood_to_planks.json deleted file mode 100644 index 26841fedd7..0000000000 --- a/src/generated/resources/data/aether/recipes/wood_to_planks.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "ingredients": [ - { - "item": "aether:skyroot_wood" - } - ], - "result": { - "count": 4, - "item": "aether:skyroot_planks" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/aether/recipes/yellow_cape.json b/src/generated/resources/data/aether/recipes/yellow_cape.json index 628a19728c..dea044c28c 100644 --- a/src/generated/resources/data/aether/recipes/yellow_cape.json +++ b/src/generated/resources/data/aether/recipes/yellow_cape.json @@ -1,14 +1,15 @@ { "type": "minecraft:crafting_shaped", + "category": "equipment", "key": { - "M": { + "#": { "item": "minecraft:yellow_wool" } }, "pattern": [ - "MM", - "MM", - "MM" + "##", + "##", + "##" ], "result": { "item": "aether:yellow_cape" diff --git a/src/generated/resources/data/aether/recipes/zanite_axe.json b/src/generated/resources/data/aether/recipes/zanite_axe.json index c481cb5c86..914bd5e9e6 100644 --- a/src/generated/resources/data/aether/recipes/zanite_axe.json +++ b/src/generated/resources/data/aether/recipes/zanite_axe.json @@ -1,5 +1,6 @@ { "type": "minecraft:crafting_shaped", + "category": "equipment", "key": { "#": { "item": "aether:zanite_gemstone" diff --git a/src/generated/resources/data/aether/recipes/zanite_block.json b/src/generated/resources/data/aether/recipes/zanite_block.json index 9371173f5a..4a2baac25c 100644 --- a/src/generated/resources/data/aether/recipes/zanite_block.json +++ b/src/generated/resources/data/aether/recipes/zanite_block.json @@ -1,5 +1,6 @@ { "type": "minecraft:crafting_shaped", + "category": "building", "key": { "#": { "item": "aether:zanite_gemstone" diff --git a/src/generated/resources/data/aether/recipes/zanite_boots.json b/src/generated/resources/data/aether/recipes/zanite_boots.json index 5da72c12d7..0514cc8793 100644 --- a/src/generated/resources/data/aether/recipes/zanite_boots.json +++ b/src/generated/resources/data/aether/recipes/zanite_boots.json @@ -1,13 +1,14 @@ { "type": "minecraft:crafting_shaped", + "category": "equipment", "key": { - "M": { + "#": { "item": "aether:zanite_gemstone" } }, "pattern": [ - "M M", - "M M" + "# #", + "# #" ], "result": { "item": "aether:zanite_boots" diff --git a/src/generated/resources/data/aether/recipes/zanite_chestplate.json b/src/generated/resources/data/aether/recipes/zanite_chestplate.json index 3592d27f74..979f6c8054 100644 --- a/src/generated/resources/data/aether/recipes/zanite_chestplate.json +++ b/src/generated/resources/data/aether/recipes/zanite_chestplate.json @@ -1,14 +1,15 @@ { "type": "minecraft:crafting_shaped", + "category": "equipment", "key": { - "M": { + "#": { "item": "aether:zanite_gemstone" } }, "pattern": [ - "M M", - "MMM", - "MMM" + "# #", + "###", + "###" ], "result": { "item": "aether:zanite_chestplate" diff --git a/src/generated/resources/data/aether/recipes/blast_zanite.json b/src/generated/resources/data/aether/recipes/zanite_gemstone_from_blasting.json similarity index 88% rename from src/generated/resources/data/aether/recipes/blast_zanite.json rename to src/generated/resources/data/aether/recipes/zanite_gemstone_from_blasting.json index 5cf548613f..6488cc74ec 100644 --- a/src/generated/resources/data/aether/recipes/blast_zanite.json +++ b/src/generated/resources/data/aether/recipes/zanite_gemstone_from_blasting.json @@ -1,5 +1,6 @@ { "type": "minecraft:blasting", + "category": "misc", "cookingtime": 100, "experience": 0.7, "ingredient": { diff --git a/src/generated/resources/data/aether/recipes/smelt_zanite.json b/src/generated/resources/data/aether/recipes/zanite_gemstone_from_smelting.json similarity index 88% rename from src/generated/resources/data/aether/recipes/smelt_zanite.json rename to src/generated/resources/data/aether/recipes/zanite_gemstone_from_smelting.json index c431fa253f..26021f6cea 100644 --- a/src/generated/resources/data/aether/recipes/smelt_zanite.json +++ b/src/generated/resources/data/aether/recipes/zanite_gemstone_from_smelting.json @@ -1,5 +1,6 @@ { "type": "minecraft:smelting", + "category": "misc", "cookingtime": 200, "experience": 0.7, "ingredient": { diff --git a/src/generated/resources/data/aether/recipes/zanite_gemstone.json b/src/generated/resources/data/aether/recipes/zanite_gemstone_from_zanite_block.json similarity index 78% rename from src/generated/resources/data/aether/recipes/zanite_gemstone.json rename to src/generated/resources/data/aether/recipes/zanite_gemstone_from_zanite_block.json index dbfdaf3649..dea785031d 100644 --- a/src/generated/resources/data/aether/recipes/zanite_gemstone.json +++ b/src/generated/resources/data/aether/recipes/zanite_gemstone_from_zanite_block.json @@ -1,5 +1,7 @@ { "type": "minecraft:crafting_shapeless", + "category": "misc", + "group": "zanite_gemstone", "ingredients": [ { "item": "aether:zanite_block" diff --git a/src/generated/resources/data/aether/recipes/zanite_gloves.json b/src/generated/resources/data/aether/recipes/zanite_gloves.json index da5967262c..d9b9ffb5eb 100644 --- a/src/generated/resources/data/aether/recipes/zanite_gloves.json +++ b/src/generated/resources/data/aether/recipes/zanite_gloves.json @@ -1,12 +1,13 @@ { "type": "minecraft:crafting_shaped", + "category": "equipment", "key": { - "M": { + "#": { "item": "aether:zanite_gemstone" } }, "pattern": [ - "M M" + "# #" ], "result": { "item": "aether:zanite_gloves" diff --git a/src/generated/resources/data/aether/recipes/zanite_helmet.json b/src/generated/resources/data/aether/recipes/zanite_helmet.json index e4ca9945f2..214d9bad14 100644 --- a/src/generated/resources/data/aether/recipes/zanite_helmet.json +++ b/src/generated/resources/data/aether/recipes/zanite_helmet.json @@ -1,13 +1,14 @@ { "type": "minecraft:crafting_shaped", + "category": "equipment", "key": { - "M": { + "#": { "item": "aether:zanite_gemstone" } }, "pattern": [ - "MMM", - "M M" + "###", + "# #" ], "result": { "item": "aether:zanite_helmet" diff --git a/src/generated/resources/data/aether/recipes/zanite_hoe.json b/src/generated/resources/data/aether/recipes/zanite_hoe.json index 2b149b7014..6851937038 100644 --- a/src/generated/resources/data/aether/recipes/zanite_hoe.json +++ b/src/generated/resources/data/aether/recipes/zanite_hoe.json @@ -1,5 +1,6 @@ { "type": "minecraft:crafting_shaped", + "category": "equipment", "key": { "#": { "item": "aether:zanite_gemstone" diff --git a/src/generated/resources/data/aether/recipes/zanite_leggings.json b/src/generated/resources/data/aether/recipes/zanite_leggings.json index 0af80f69cc..e4a70e930f 100644 --- a/src/generated/resources/data/aether/recipes/zanite_leggings.json +++ b/src/generated/resources/data/aether/recipes/zanite_leggings.json @@ -1,14 +1,15 @@ { "type": "minecraft:crafting_shaped", + "category": "equipment", "key": { - "M": { + "#": { "item": "aether:zanite_gemstone" } }, "pattern": [ - "MMM", - "M M", - "M M" + "###", + "# #", + "# #" ], "result": { "item": "aether:zanite_leggings" diff --git a/src/generated/resources/data/aether/recipes/zanite_pendant.json b/src/generated/resources/data/aether/recipes/zanite_pendant.json index 4d0d80069a..9816e34d7d 100644 --- a/src/generated/resources/data/aether/recipes/zanite_pendant.json +++ b/src/generated/resources/data/aether/recipes/zanite_pendant.json @@ -1,7 +1,8 @@ { "type": "minecraft:crafting_shaped", + "category": "equipment", "key": { - "M": { + "#": { "item": "aether:zanite_gemstone" }, "S": { @@ -11,7 +12,7 @@ "pattern": [ "SSS", "S S", - " M " + " # " ], "result": { "item": "aether:zanite_pendant" diff --git a/src/generated/resources/data/aether/recipes/zanite_pickaxe.json b/src/generated/resources/data/aether/recipes/zanite_pickaxe.json index 36ccc28df4..a0aab64d3d 100644 --- a/src/generated/resources/data/aether/recipes/zanite_pickaxe.json +++ b/src/generated/resources/data/aether/recipes/zanite_pickaxe.json @@ -1,5 +1,6 @@ { "type": "minecraft:crafting_shaped", + "category": "equipment", "key": { "#": { "item": "aether:zanite_gemstone" diff --git a/src/generated/resources/data/aether/recipes/zanite_ring.json b/src/generated/resources/data/aether/recipes/zanite_ring.json index 8760ef1c99..7685664acb 100644 --- a/src/generated/resources/data/aether/recipes/zanite_ring.json +++ b/src/generated/resources/data/aether/recipes/zanite_ring.json @@ -1,14 +1,15 @@ { "type": "minecraft:crafting_shaped", + "category": "equipment", "key": { - "M": { + "#": { "item": "aether:zanite_gemstone" } }, "pattern": [ - " M ", - "M M", - " M " + " # ", + "# #", + " # " ], "result": { "item": "aether:zanite_ring" diff --git a/src/generated/resources/data/aether/recipes/zanite_shovel.json b/src/generated/resources/data/aether/recipes/zanite_shovel.json index 14293a8006..5cc756ea2d 100644 --- a/src/generated/resources/data/aether/recipes/zanite_shovel.json +++ b/src/generated/resources/data/aether/recipes/zanite_shovel.json @@ -1,5 +1,6 @@ { "type": "minecraft:crafting_shaped", + "category": "equipment", "key": { "#": { "item": "aether:zanite_gemstone" diff --git a/src/generated/resources/data/aether/recipes/zanite_sword.json b/src/generated/resources/data/aether/recipes/zanite_sword.json index c2ec7c88e7..c60a6a7f28 100644 --- a/src/generated/resources/data/aether/recipes/zanite_sword.json +++ b/src/generated/resources/data/aether/recipes/zanite_sword.json @@ -1,5 +1,6 @@ { "type": "minecraft:crafting_shaped", + "category": "equipment", "key": { "#": { "item": "aether:zanite_gemstone" diff --git a/src/generated/resources/data/aether/tags/items/crafts_skyroot_planks.json b/src/generated/resources/data/aether/tags/items/crafts_skyroot_planks.json new file mode 100644 index 0000000000..39926b7809 --- /dev/null +++ b/src/generated/resources/data/aether/tags/items/crafts_skyroot_planks.json @@ -0,0 +1,6 @@ +{ + "values": [ + "#aether:skyroot_logs", + "#aether:golden_oak_logs" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/aether/worldgen/placed_feature/blue_aercloud.json b/src/generated/resources/data/aether/worldgen/placed_feature/blue_aercloud.json index 166dfcbef9..1074ed5569 100644 --- a/src/generated/resources/data/aether/worldgen/placed_feature/blue_aercloud.json +++ b/src/generated/resources/data/aether/worldgen/placed_feature/blue_aercloud.json @@ -20,6 +20,9 @@ "type": "minecraft:rarity_filter", "chance": 5 }, + { + "type": "minecraft:biome" + }, { "type": "aether:dungeon_blacklist_filter" } diff --git a/src/generated/resources/data/aether/worldgen/placed_feature/cold_aercloud.json b/src/generated/resources/data/aether/worldgen/placed_feature/cold_aercloud.json index e7e81528d0..5ebaaaf03d 100644 --- a/src/generated/resources/data/aether/worldgen/placed_feature/cold_aercloud.json +++ b/src/generated/resources/data/aether/worldgen/placed_feature/cold_aercloud.json @@ -20,6 +20,9 @@ "type": "minecraft:rarity_filter", "chance": 5 }, + { + "type": "minecraft:biome" + }, { "type": "aether:dungeon_blacklist_filter" } diff --git a/src/generated/resources/data/aether/worldgen/placed_feature/crystal_island.json b/src/generated/resources/data/aether/worldgen/placed_feature/crystal_island.json index 1457bd4c6b..6053c8f6e1 100644 --- a/src/generated/resources/data/aether/worldgen/placed_feature/crystal_island.json +++ b/src/generated/resources/data/aether/worldgen/placed_feature/crystal_island.json @@ -16,12 +16,15 @@ } } }, - { - "type": "aether:dungeon_blacklist_filter" - }, { "type": "minecraft:rarity_filter", "chance": 16 + }, + { + "type": "minecraft:biome" + }, + { + "type": "aether:dungeon_blacklist_filter" } ] } \ No newline at end of file diff --git a/src/generated/resources/data/aether/worldgen/placed_feature/golden_aercloud.json b/src/generated/resources/data/aether/worldgen/placed_feature/golden_aercloud.json index 1275af4bfe..487f372fc3 100644 --- a/src/generated/resources/data/aether/worldgen/placed_feature/golden_aercloud.json +++ b/src/generated/resources/data/aether/worldgen/placed_feature/golden_aercloud.json @@ -20,6 +20,9 @@ "type": "minecraft:rarity_filter", "chance": 5 }, + { + "type": "minecraft:biome" + }, { "type": "aether:dungeon_blacklist_filter" } diff --git a/src/generated/resources/data/aether/worldgen/placed_feature/grass_patch.json b/src/generated/resources/data/aether/worldgen/placed_feature/grass_patch.json index 748b2c133c..c1f50fb9ce 100644 --- a/src/generated/resources/data/aether/worldgen/placed_feature/grass_patch.json +++ b/src/generated/resources/data/aether/worldgen/placed_feature/grass_patch.json @@ -1,14 +1,6 @@ { "feature": "aether:grass_patch", "placement": [ - { - "type": "aether:config_filter", - "value": "[World Generation, Generate Tall Grass in the Aether]" - }, - { - "type": "minecraft:count", - "count": 2 - }, { "type": "minecraft:in_square" }, @@ -16,8 +8,16 @@ "type": "minecraft:heightmap", "heightmap": "WORLD_SURFACE_WG" }, + { + "type": "minecraft:count", + "count": 2 + }, { "type": "minecraft:biome" + }, + { + "type": "aether:config_filter", + "value": "[World Generation, Generate Tall Grass in the Aether]" } ] } \ No newline at end of file diff --git a/src/generated/resources/data/aether/worldgen/placed_feature/holiday_tree.json b/src/generated/resources/data/aether/worldgen/placed_feature/holiday_tree.json index b2689d457a..fd1e9ec400 100644 --- a/src/generated/resources/data/aether/worldgen/placed_feature/holiday_tree.json +++ b/src/generated/resources/data/aether/worldgen/placed_feature/holiday_tree.json @@ -1,9 +1,6 @@ { "feature": "aether:holiday_tree", "placement": [ - { - "type": "aether:holiday_filter" - }, { "type": "aether:improved_layer_placement", "count": { @@ -16,10 +13,6 @@ "heightmap": "OCEAN_FLOOR", "verticalBounds": 4 }, - { - "type": "minecraft:rarity_filter", - "chance": 48 - }, { "type": "minecraft:block_predicate_filter", "predicate": { @@ -31,6 +24,16 @@ } } } + }, + { + "type": "minecraft:rarity_filter", + "chance": 48 + }, + { + "type": "minecraft:biome" + }, + { + "type": "aether:holiday_filter" } ] } \ No newline at end of file diff --git a/src/generated/resources/data/aether/worldgen/placed_feature/pink_aercloud.json b/src/generated/resources/data/aether/worldgen/placed_feature/pink_aercloud.json index 76e6cc8d61..cc6ae2af70 100644 --- a/src/generated/resources/data/aether/worldgen/placed_feature/pink_aercloud.json +++ b/src/generated/resources/data/aether/worldgen/placed_feature/pink_aercloud.json @@ -20,6 +20,9 @@ "type": "minecraft:rarity_filter", "chance": 7 }, + { + "type": "minecraft:biome" + }, { "type": "aether:dungeon_blacklist_filter" }, diff --git a/src/generated/resources/data/aether/worldgen/placed_feature/quicksoil_shelf.json b/src/generated/resources/data/aether/worldgen/placed_feature/quicksoil_shelf.json index f95b2d8e5d..9683708fa6 100644 --- a/src/generated/resources/data/aether/worldgen/placed_feature/quicksoil_shelf.json +++ b/src/generated/resources/data/aether/worldgen/placed_feature/quicksoil_shelf.json @@ -8,6 +8,13 @@ "type": "minecraft:heightmap", "heightmap": "WORLD_SURFACE_WG" }, + { + "type": "minecraft:block_predicate_filter", + "predicate": { + "type": "minecraft:matching_block_tag", + "tag": "aether:quicksoil_can_generate" + } + }, { "type": "aether:elevation_adjustment", "value": { @@ -21,17 +28,13 @@ { "type": "aether:elevation_filter", "maximum": 70, - "minimum": 47 + "minimum": 63 }, { - "type": "aether:dungeon_blacklist_filter" + "type": "minecraft:biome" }, { - "type": "minecraft:block_predicate_filter", - "predicate": { - "type": "minecraft:matching_block_tag", - "tag": "aether:quicksoil_can_generate" - } + "type": "aether:dungeon_blacklist_filter" } ] } \ No newline at end of file diff --git a/src/generated/resources/data/aether/worldgen/placed_feature/tall_grass_patch.json b/src/generated/resources/data/aether/worldgen/placed_feature/tall_grass_patch.json index 03f31e4a0b..41199f7e15 100644 --- a/src/generated/resources/data/aether/worldgen/placed_feature/tall_grass_patch.json +++ b/src/generated/resources/data/aether/worldgen/placed_feature/tall_grass_patch.json @@ -2,8 +2,11 @@ "feature": "aether:tall_grass_patch", "placement": [ { - "type": "aether:config_filter", - "value": "[World Generation, Generate Tall Grass in the Aether]" + "type": "minecraft:in_square" + }, + { + "type": "minecraft:heightmap", + "heightmap": "MOTION_BLOCKING" }, { "type": "minecraft:noise_threshold_count", @@ -16,14 +19,11 @@ "chance": 32 }, { - "type": "minecraft:in_square" - }, - { - "type": "minecraft:heightmap", - "heightmap": "MOTION_BLOCKING" + "type": "minecraft:biome" }, { - "type": "minecraft:biome" + "type": "aether:config_filter", + "value": "[World Generation, Generate Tall Grass in the Aether]" } ] } \ No newline at end of file diff --git a/src/generated/resources/data/aether/worldgen/placed_feature/water_lake.json b/src/generated/resources/data/aether/worldgen/placed_feature/water_lake.json index 42b42963bb..1f65c0403e 100644 --- a/src/generated/resources/data/aether/worldgen/placed_feature/water_lake.json +++ b/src/generated/resources/data/aether/worldgen/placed_feature/water_lake.json @@ -1,10 +1,6 @@ { "feature": "aether:water_lake", "placement": [ - { - "type": "minecraft:rarity_filter", - "chance": 40 - }, { "type": "minecraft:in_square" }, @@ -12,6 +8,10 @@ "type": "minecraft:heightmap", "heightmap": "WORLD_SURFACE_WG" }, + { + "type": "minecraft:rarity_filter", + "chance": 40 + }, { "type": "minecraft:biome" } diff --git a/src/generated/resources/data/aether/worldgen/placed_feature/water_spring.json b/src/generated/resources/data/aether/worldgen/placed_feature/water_spring.json index 0bdeb39bae..6c79d87ea6 100644 --- a/src/generated/resources/data/aether/worldgen/placed_feature/water_spring.json +++ b/src/generated/resources/data/aether/worldgen/placed_feature/water_spring.json @@ -1,16 +1,9 @@ { "feature": "aether:water_spring", "placement": [ - { - "type": "minecraft:count", - "count": 25 - }, { "type": "minecraft:in_square" }, - { - "type": "aether:dungeon_blacklist_filter" - }, { "type": "minecraft:height_range", "height": { @@ -23,8 +16,15 @@ } } }, + { + "type": "minecraft:count", + "count": 25 + }, { "type": "minecraft:biome" + }, + { + "type": "aether:dungeon_blacklist_filter" } ] } \ No newline at end of file diff --git a/src/main/java/com/gildedgames/aether/Aether.java b/src/main/java/com/gildedgames/aether/Aether.java index 92b2d8f60c..6cc6fa6679 100644 --- a/src/main/java/com/gildedgames/aether/Aether.java +++ b/src/main/java/com/gildedgames/aether/Aether.java @@ -15,7 +15,6 @@ import com.gildedgames.aether.blockentity.FreezerBlockEntity; import com.gildedgames.aether.data.generators.*; import com.gildedgames.aether.data.generators.tags.*; -import com.gildedgames.aether.data.resources.*; import com.gildedgames.aether.effect.AetherEffects; import com.gildedgames.aether.entity.AetherEntityTypes; import com.gildedgames.aether.event.AetherGameEvents; @@ -41,16 +40,17 @@ import com.gildedgames.aether.world.treedecorator.AetherTreeDecoratorTypes; import com.mojang.logging.LogUtils; import net.minecraft.SharedConstants; -import net.minecraft.core.Registry; +import net.minecraft.core.HolderLookup; import net.minecraft.core.cauldron.CauldronInteraction; -import net.minecraft.data.BuiltinRegistries; import net.minecraft.data.DataGenerator; +import net.minecraft.data.PackOutput; 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; import net.minecraft.server.packs.repository.PackSource; +import net.minecraft.world.flag.FeatureFlagSet; import net.minecraft.world.level.ItemLike; import net.minecraft.world.level.block.*; import net.minecraftforge.common.data.ExistingFileHelper; @@ -65,13 +65,13 @@ import net.minecraftforge.fml.loading.FMLPaths; import net.minecraftforge.data.event.GatherDataEvent; import net.minecraftforge.registries.DeferredRegister; -import net.minecraftforge.registries.ForgeRegistries; import net.minecraftforge.resource.PathPackResources; import org.slf4j.Logger; import top.theillusivec4.curios.api.SlotTypeMessage; import java.nio.file.Path; import java.util.List; +import java.util.concurrent.CompletableFuture; @Mod(Aether.MODID) @Mod.EventBusSubscriber(modid = Aether.MODID, bus = Mod.EventBusSubscriber.Bus.MOD) @@ -161,34 +161,30 @@ public void curiosSetup(InterModEnqueueEvent event) { public void dataSetup(GatherDataEvent event) { DataGenerator generator = event.getGenerator(); - ExistingFileHelper helper = event.getExistingFileHelper(); + ExistingFileHelper fileHelper = event.getExistingFileHelper(); + CompletableFuture lookupProvider = event.getLookupProvider(); + PackOutput packOutput = generator.getPackOutput(); // Client Data - generator.addProvider(event.includeClient(), new AetherBlockStateData(generator, helper)); - generator.addProvider(event.includeClient(), new AetherItemModelData(generator, helper)); - generator.addProvider(event.includeClient(), new AetherLanguageData(generator)); - generator.addProvider(event.includeClient(), new AetherSoundData(generator, helper)); + generator.addProvider(event.includeClient(), new AetherBlockStateData(packOutput, fileHelper)); + generator.addProvider(event.includeClient(), new AetherItemModelData(packOutput, fileHelper)); + generator.addProvider(event.includeClient(), new AetherLanguageData(packOutput)); + generator.addProvider(event.includeClient(), new AetherSoundData(packOutput, fileHelper)); // Server Data - generator.addProvider(event.includeServer(), new AetherRecipeData(generator)); - generator.addProvider(event.includeServer(), new AetherLootTableData(generator)); - generator.addProvider(event.includeServer(), new AetherLootModifierData(generator)); - generator.addProvider(event.includeServer(), new AetherAdvancementData(generator, helper)); - AetherBlockTagData blockTags = new AetherBlockTagData(generator, helper); + generator.addProvider(event.includeServer(), new AetherWorldGenData(packOutput, lookupProvider)); + generator.addProvider(event.includeServer(), AetherLevelStemData.create(packOutput, fileHelper)); + generator.addProvider(event.includeServer(), new AetherRecipeData(packOutput)); + generator.addProvider(event.includeServer(), AetherLootTableData.create(packOutput)); + generator.addProvider(event.includeServer(), new AetherLootModifierData(packOutput)); + generator.addProvider(event.includeServer(), new AetherAdvancementData(packOutput, lookupProvider, fileHelper)); + AetherBlockTagData blockTags = new AetherBlockTagData(packOutput, lookupProvider, fileHelper); generator.addProvider(event.includeServer(), blockTags); - generator.addProvider(event.includeServer(), new AetherItemTagData(generator, blockTags, helper)); - generator.addProvider(event.includeServer(), new AetherEntityTagData(generator, helper)); - generator.addProvider(event.includeServer(), new AetherFluidTagData(generator, helper)); - generator.addProvider(event.includeServer(), new AetherBiomeTagData(generator, helper)); - generator.addProvider(event.includeServer(), new AetherStructureTagData(generator, helper)); - generator.addProvider(event.includeServer(), AetherDataGenerators.create(generator, helper, AetherConfiguredFeatures.CONFIGURED_FEATURES, Registry.CONFIGURED_FEATURE_REGISTRY)); - generator.addProvider(event.includeServer(), AetherDataGenerators.create(generator, helper, AetherPlacedFeatures.PLACED_FEATURES, Registry.PLACED_FEATURE_REGISTRY)); - generator.addProvider(event.includeServer(), AetherDataGenerators.create(generator, helper, AetherStructures.STRUCTURES, Registry.STRUCTURE_REGISTRY)); - generator.addProvider(event.includeServer(), AetherDataGenerators.create(generator, helper, AetherStructureSets.STRUCTURE_SETS, Registry.STRUCTURE_SET_REGISTRY)); - generator.addProvider(event.includeServer(), AetherDataGenerators.create(generator, helper, AetherBiomes.BIOMES, ForgeRegistries.Keys.BIOMES)); - generator.addProvider(event.includeServer(), AetherDataGenerators.create(generator, helper, AetherDimensions.DIMENSION_TYPES, Registry.DIMENSION_TYPE_REGISTRY)); - generator.addProvider(event.includeServer(), AetherDataGenerators.create(BuiltinRegistries.ACCESS, generator, helper, AetherNoiseGeneratorSettings.NOISE_GENERATOR_SETTINGS, Registry.NOISE_GENERATOR_SETTINGS_REGISTRY)); - generator.addProvider(event.includeServer(), AetherDataGenerators.levelStem(generator, helper)); + generator.addProvider(event.includeServer(), new AetherItemTagData(packOutput, lookupProvider, blockTags, fileHelper)); + generator.addProvider(event.includeServer(), new AetherEntityTagData(packOutput, lookupProvider, fileHelper)); + generator.addProvider(event.includeServer(), new AetherFluidTagData(packOutput, lookupProvider, fileHelper)); + generator.addProvider(event.includeServer(), new AetherBiomeTagData(packOutput, lookupProvider, fileHelper)); + generator.addProvider(event.includeServer(), new AetherStructureTagData(packOutput, lookupProvider, fileHelper)); } public void packSetup(AddPackFindersEvent event) { @@ -203,7 +199,7 @@ public void packSetup(AddPackFindersEvent event) { private void setupReleasePack(AddPackFindersEvent event) { if (event.getPackType() == PackType.CLIENT_RESOURCES) { Path resourcePath = ModList.get().getModFileById(Aether.MODID).getFile().findResource("packs/classic_125"); - PathPackResources pack = new PathPackResources(ModList.get().getModFileById(Aether.MODID).getFile().getFileName() + ":" + resourcePath, resourcePath); + PathPackResources pack = new PathPackResources(ModList.get().getModFileById(Aether.MODID).getFile().getFileName() + ":" + resourcePath, false, resourcePath); this.createCombinedPack(event, resourcePath, pack, "builtin/aether_125_art", "Aether 1.2.5 Textures", "The classic look of the Aether from 1.2.5"); } } @@ -214,7 +210,7 @@ private void setupReleasePack(AddPackFindersEvent event) { private void setupBetaPack(AddPackFindersEvent event) { if (event.getPackType() == PackType.CLIENT_RESOURCES) { Path resourcePath = ModList.get().getModFileById(Aether.MODID).getFile().findResource("packs/classic_b173"); - PathPackResources pack = new PathPackResources(ModList.get().getModFileById(Aether.MODID).getFile().getFileName() + ":" + resourcePath, resourcePath); + PathPackResources pack = new PathPackResources(ModList.get().getModFileById(Aether.MODID).getFile().getFileName() + ":" + resourcePath, false, resourcePath); this.createCombinedPack(event, resourcePath, pack, "builtin/aether_b173_art", "Aether b1.7.3 Textures", "The original look of the Aether from b1.7.3"); } } @@ -229,14 +225,24 @@ private void setupBetaPack(AddPackFindersEvent event) { */ private void createCombinedPack(AddPackFindersEvent event, Path sourcePath, PathPackResources pack, String name, String title, String description) { Path baseResourcePath = ModList.get().getModFileById(Aether.MODID).getFile().findResource("packs/classic_base"); - PathPackResources basePack = new PathPackResources(ModList.get().getModFileById(Aether.MODID).getFile().getFileName() + ":" + baseResourcePath, baseResourcePath); + PathPackResources basePack = new PathPackResources(ModList.get().getModFileById(Aether.MODID).getFile().getFileName() + ":" + baseResourcePath, false, baseResourcePath); List mergedPacks = List.of(pack, basePack); - event.addRepositorySource((packConsumer, packConstructor) -> - packConsumer.accept(Pack.create( - name, false, - () -> new CombinedResourcePack(name, title, new PackMetadataSection(Component.literal(description), PackType.CLIENT_RESOURCES.getVersion(SharedConstants.getCurrentVersion())), mergedPacks, sourcePath), - packConstructor, Pack.Position.TOP, PackSource.BUILT_IN) - )); + Pack.ResourcesSupplier resourcesSupplier = (string) -> new CombinedResourcePack(name, new PackMetadataSection(Component.literal(description), PackType.CLIENT_RESOURCES.getVersion(SharedConstants.getCurrentVersion())), mergedPacks, sourcePath); + Pack.Info info = Pack.readPackInfo(name, resourcesSupplier); + if (info != null) { + event.addRepositorySource((source) -> + source.accept(Pack.create( + name, + Component.literal(title), + false, + resourcesSupplier, + info, + PackType.CLIENT_RESOURCES, + Pack.Position.TOP, + false, + PackSource.BUILT_IN) + )); + } } /** @@ -246,12 +252,19 @@ private void createCombinedPack(AddPackFindersEvent event, Path sourcePath, Path private void setupCTMFixPack(AddPackFindersEvent event) { if (event.getPackType() == PackType.CLIENT_RESOURCES && ModList.get().isLoaded("ctm")) { Path resourcePath = ModList.get().getModFileById(Aether.MODID).getFile().findResource("packs/ctm_fix"); - PathPackResources pack = new PathPackResources(ModList.get().getModFileById(Aether.MODID).getFile().getFileName() + ":" + resourcePath, resourcePath); - event.addRepositorySource((packConsumer, packConstructor) -> - packConsumer.accept(packConstructor.create( - "builtin/aether_ctm_fix", Component.literal("Aether CTM Fix"), true, () -> pack, - new PackMetadataSection(Component.literal("Fixes Quicksoil Glass Panes when using CTM"), PackType.CLIENT_RESOURCES.getVersion(SharedConstants.getCurrentVersion())), - Pack.Position.TOP, PackSource.BUILT_IN, false) + PathPackResources pack = new PathPackResources(ModList.get().getModFileById(Aether.MODID).getFile().getFileName() + ":" + resourcePath, true, resourcePath); + PackMetadataSection metadata = new PackMetadataSection(Component.literal("Fixes Quicksoil Glass Panes when using CTM"), PackType.CLIENT_RESOURCES.getVersion(SharedConstants.getCurrentVersion())); + event.addRepositorySource((source) -> + source.accept(Pack.create( + "builtin/aether_ctm_fix", + Component.literal("Aether CTM Fix"), + true, + (string) -> pack, + new Pack.Info(metadata.getDescription(), metadata.getPackFormat(PackType.SERVER_DATA), metadata.getPackFormat(PackType.CLIENT_RESOURCES), FeatureFlagSet.of(), pack.isHidden()), + PackType.CLIENT_RESOURCES, + Pack.Position.TOP, + false, + PackSource.BUILT_IN) )); } } diff --git a/src/main/java/com/gildedgames/aether/AetherConfig.java b/src/main/java/com/gildedgames/aether/AetherConfig.java index ca7123803d..828825c8a1 100644 --- a/src/main/java/com/gildedgames/aether/AetherConfig.java +++ b/src/main/java/com/gildedgames/aether/AetherConfig.java @@ -1,6 +1,6 @@ package com.gildedgames.aether; -import com.gildedgames.aether.data.resources.AetherDimensions; +import com.gildedgames.aether.data.resources.registries.AetherDimensions; import net.minecraft.world.level.Level; import net.minecraftforge.common.ForgeConfigSpec; import net.minecraftforge.common.ForgeConfigSpec.ConfigValue; diff --git a/src/main/java/com/gildedgames/aether/AetherTags.java b/src/main/java/com/gildedgames/aether/AetherTags.java index f92d746058..c10613930d 100644 --- a/src/main/java/com/gildedgames/aether/AetherTags.java +++ b/src/main/java/com/gildedgames/aether/AetherTags.java @@ -1,6 +1,6 @@ package com.gildedgames.aether; -import net.minecraft.core.Registry; +import net.minecraft.core.registries.Registries; import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.block.Block; import net.minecraft.world.entity.EntityType; @@ -46,7 +46,7 @@ public static class Blocks { public static final TagKey TREATED_AS_AETHER_BLOCK = tag("treated_as_aether_block"); private static TagKey tag(String name) { - return TagKey.create(Registry.BLOCK_REGISTRY, new ResourceLocation(Aether.MODID, name)); + return TagKey.create(Registries.BLOCK, new ResourceLocation(Aether.MODID, name)); } } @@ -66,6 +66,7 @@ public static class Items { public static final TagKey ANGELIC_BLOCKS = tag("angelic_blocks"); public static final TagKey HELLFIRE_BLOCKS = tag("hellfire_blocks"); + public static final TagKey CRAFTS_SKYROOT_PLANKS = tag("crafts_skyroot_planks"); public static final TagKey PLANKS_CRAFTING = tag("planks_crafting"); public static final TagKey AETHER_PORTAL_ACTIVATION_ITEMS = tag("aether_portal_activation_items"); @@ -132,11 +133,11 @@ public static class Items { public static final TagKey ACCESSORIES = tag("accessories"); private static TagKey tag(String name) { - return TagKey.create(Registry.ITEM_REGISTRY, new ResourceLocation(Aether.MODID, name)); + return TagKey.create(Registries.ITEM, new ResourceLocation(Aether.MODID, name)); } private static TagKey curio(String name) { - return TagKey.create(Registry.ITEM_REGISTRY, new ResourceLocation(CuriosApi.MODID, name)); + return TagKey.create(Registries.ITEM, new ResourceLocation(CuriosApi.MODID, name)); } } @@ -152,7 +153,7 @@ public static class Entities { public static final TagKey> AERCLOUD_SPAWNABLE = tag("aercloud_spawnable"); private static TagKey> tag(String name) { - return TagKey.create(Registry.ENTITY_TYPE_REGISTRY, new ResourceLocation(Aether.MODID, name)); + return TagKey.create(Registries.ENTITY_TYPE, new ResourceLocation(Aether.MODID, name)); } } @@ -160,7 +161,7 @@ public static class Fluids { public static final TagKey ALLOWED_BUCKET_PICKUP = tag("allowed_bucket_pickup"); private static TagKey tag(String name) { - return TagKey.create(Registry.FLUID_REGISTRY, new ResourceLocation(Aether.MODID, name)); + return TagKey.create(Registries.FLUID, new ResourceLocation(Aether.MODID, name)); } } @@ -183,7 +184,7 @@ public static class Biomes { public static final TagKey AETHER_MUSIC = tag("aether_music"); private static TagKey tag(String name) { - return TagKey.create(Registry.BIOME_REGISTRY, new ResourceLocation(Aether.MODID, name)); + return TagKey.create(Registries.BIOME, new ResourceLocation(Aether.MODID, name)); } } @@ -191,7 +192,7 @@ public static class Structures { public static final TagKey DUNGEONS = tag("dungeons"); private static TagKey tag(String name) { - return TagKey.create(Registry.STRUCTURE_REGISTRY, new ResourceLocation(Aether.MODID, name)); + return TagKey.create(Registries.STRUCTURE, new ResourceLocation(Aether.MODID, name)); } } } \ No newline at end of file diff --git a/src/main/java/com/gildedgames/aether/advancement/AetherAdvancementTriggers.java b/src/main/java/com/gildedgames/aether/advancement/AetherAdvancementTriggers.java index 9a536eb8d0..2f535868bc 100644 --- a/src/main/java/com/gildedgames/aether/advancement/AetherAdvancementTriggers.java +++ b/src/main/java/com/gildedgames/aether/advancement/AetherAdvancementTriggers.java @@ -4,6 +4,7 @@ public class AetherAdvancementTriggers { public static void init() { + CriteriaTriggers.register(IncubationTrigger.INSTANCE); CriteriaTriggers.register(LoreTrigger.INSTANCE); } } diff --git a/src/main/java/com/gildedgames/aether/advancement/IncubationTrigger.java b/src/main/java/com/gildedgames/aether/advancement/IncubationTrigger.java new file mode 100644 index 0000000000..eed50e7a18 --- /dev/null +++ b/src/main/java/com/gildedgames/aether/advancement/IncubationTrigger.java @@ -0,0 +1,55 @@ +package com.gildedgames.aether.advancement; + +import com.gildedgames.aether.Aether; +import com.google.gson.JsonObject; +import net.minecraft.advancements.critereon.*; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.item.ItemStack; + +/** + * Criterion trigger used for checking when an item has finished incubating. + */ +public class IncubationTrigger extends SimpleCriterionTrigger { + private static final ResourceLocation ID = new ResourceLocation(Aether.MODID, "incubation_trigger"); + public static final IncubationTrigger INSTANCE = new IncubationTrigger(); + + @Override + public ResourceLocation getId() { + return ID; + } + + @Override + public IncubationTrigger.Instance createInstance(JsonObject json, EntityPredicate.Composite entity, DeserializationContext context) { + ItemPredicate itemPredicate = ItemPredicate.fromJson(json.get("item")); + return new IncubationTrigger.Instance(entity, itemPredicate); + } + + public void trigger(ServerPlayer player, ItemStack stack) { + this.trigger(player, (instance) -> instance.test(stack)); + } + + public static class Instance extends AbstractCriterionTriggerInstance { + private final ItemPredicate item; + + public Instance(EntityPredicate.Composite entity, ItemPredicate item) { + super(IncubationTrigger.ID, entity); + this.item = item; + } + + public static IncubationTrigger.Instance forItem(ItemPredicate item) { + return new IncubationTrigger.Instance(EntityPredicate.Composite.ANY, item); + } + + public boolean test(ItemStack stack) { + return this.item.matches(stack); + } + + @Override + public JsonObject serializeToJson(SerializationContext context) { + JsonObject jsonObject = super.serializeToJson(context); + jsonObject.add("item", this.item.serializeToJson()); + return jsonObject; + } + } +} diff --git a/src/main/java/com/gildedgames/aether/advancement/LoreTrigger.java b/src/main/java/com/gildedgames/aether/advancement/LoreTrigger.java index e5ca41814d..e2a4066d8c 100644 --- a/src/main/java/com/gildedgames/aether/advancement/LoreTrigger.java +++ b/src/main/java/com/gildedgames/aether/advancement/LoreTrigger.java @@ -1,7 +1,6 @@ package com.gildedgames.aether.advancement; import com.gildedgames.aether.Aether; -import com.google.common.collect.ImmutableSet; import com.google.gson.JsonObject; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.item.ItemStack; @@ -11,11 +10,8 @@ import net.minecraft.resources.ResourceLocation; import net.minecraft.advancements.critereon.AbstractCriterionTriggerInstance; -import net.minecraft.advancements.critereon.EnchantmentPredicate; import net.minecraft.advancements.critereon.EntityPredicate; import net.minecraft.advancements.critereon.ItemPredicate; -import net.minecraft.advancements.critereon.MinMaxBounds; -import net.minecraft.advancements.critereon.NbtPredicate; import net.minecraft.advancements.critereon.SimpleCriterionTrigger; /** @@ -53,8 +49,7 @@ public static LoreTrigger.Instance forItem(ItemPredicate item) { } public static LoreTrigger.Instance forItem(ItemLike item) { - ItemPredicate itemPredicate = new ItemPredicate(null, ImmutableSet.of(item.asItem()), MinMaxBounds.Ints.ANY, MinMaxBounds.Ints.ANY, EnchantmentPredicate.NONE, EnchantmentPredicate.NONE, null, NbtPredicate.ANY); - return forItem(itemPredicate); + return forItem(ItemPredicate.Builder.item().of(item).build()); } public static LoreTrigger.Instance forAny() { diff --git a/src/main/java/com/gildedgames/aether/block/AetherBlocks.java b/src/main/java/com/gildedgames/aether/block/AetherBlocks.java index a7900471e5..78f4d73397 100644 --- a/src/main/java/com/gildedgames/aether/block/AetherBlocks.java +++ b/src/main/java/com/gildedgames/aether/block/AetherBlocks.java @@ -12,7 +12,6 @@ import com.gildedgames.aether.block.utility.*; import com.gildedgames.aether.client.particle.AetherParticleTypes; import com.gildedgames.aether.block.portal.AetherPortalBlock; -import com.gildedgames.aether.item.AetherItemGroups; import com.gildedgames.aether.item.AetherItems; import com.gildedgames.aether.item.block.BurnableBlockItem; import com.gildedgames.aether.item.block.EntityBlockItem; @@ -23,7 +22,9 @@ import com.gildedgames.aether.world.treegrower.GoldenOakTree; import com.gildedgames.aether.world.treegrower.SkyrootTree; import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; import net.minecraft.core.particles.ParticleTypes; +import net.minecraft.sounds.SoundEvents; import net.minecraft.util.valueproviders.UniformInt; import net.minecraft.world.effect.MobEffects; import net.minecraft.world.entity.EntityType; @@ -163,14 +164,14 @@ public class AetherBlocks { () -> new Block(Block.Properties.of(Material.GRASS, MaterialColor.COLOR_GREEN).strength(0.6F).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))); - public static final RegistryObject SKYROOT_DOOR = register("skyroot_door", () -> new DoorBlock(Block.Properties.copy(Blocks.OAK_DOOR))); - public static final RegistryObject SKYROOT_TRAPDOOR = register("skyroot_trapdoor", () -> new TrapDoorBlock(Block.Properties.copy(Blocks.OAK_TRAPDOOR))); - public static final RegistryObject SKYROOT_BUTTON = register("skyroot_button", () -> new WoodButtonBlock(Block.Properties.copy(Blocks.OAK_BUTTON))); - public static final RegistryObject SKYROOT_PRESSURE_PLATE = register("skyroot_pressure_plate", () -> new PressurePlateBlock(PressurePlateBlock.Sensitivity.EVERYTHING, Block.Properties.copy(Blocks.OAK_PRESSURE_PLATE))); + public static final RegistryObject SKYROOT_FENCE_GATE = register("skyroot_fence_gate", () -> new FenceGateBlock(Block.Properties.copy(Blocks.OAK_FENCE_GATE), SoundEvents.FENCE_GATE_CLOSE, SoundEvents.FENCE_GATE_OPEN)); + public static final RegistryObject SKYROOT_DOOR = register("skyroot_door", () -> new DoorBlock(Block.Properties.copy(Blocks.OAK_DOOR), SoundEvents.WOODEN_DOOR_CLOSE, SoundEvents.WOODEN_DOOR_OPEN)); + public static final RegistryObject SKYROOT_TRAPDOOR = register("skyroot_trapdoor", () -> new TrapDoorBlock(Block.Properties.copy(Blocks.OAK_TRAPDOOR), SoundEvents.BAMBOO_WOOD_TRAPDOOR_CLOSE, SoundEvents.BAMBOO_WOOD_TRAPDOOR_OPEN)); + public static final RegistryObject SKYROOT_BUTTON = register("skyroot_button", () -> new ButtonBlock(Block.Properties.copy(Blocks.OAK_BUTTON), 30, true, SoundEvents.WOODEN_BUTTON_CLICK_OFF, SoundEvents.WOODEN_BUTTON_CLICK_ON)); + public static final RegistryObject SKYROOT_PRESSURE_PLATE = register("skyroot_pressure_plate", () -> new PressurePlateBlock(PressurePlateBlock.Sensitivity.EVERYTHING, Block.Properties.copy(Blocks.OAK_PRESSURE_PLATE), SoundEvents.WOODEN_PRESSURE_PLATE_CLICK_OFF, SoundEvents.WOODEN_PRESSURE_PLATE_CLICK_ON)); - public static final RegistryObject HOLYSTONE_BUTTON = register("holystone_button", () -> new StoneButtonBlock(Block.Properties.copy(Blocks.STONE_BUTTON))); - 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))); + public static final RegistryObject HOLYSTONE_BUTTON = register("holystone_button", () -> new ButtonBlock(Block.Properties.copy(Blocks.STONE_BUTTON), 20, false, SoundEvents.STONE_BUTTON_CLICK_OFF, SoundEvents.STONE_BUTTON_CLICK_ON)); + 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), SoundEvents.STONE_PRESSURE_PLATE_CLICK_OFF, SoundEvents.STONE_PRESSURE_PLATE_CLICK_ON)); 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()))); @@ -284,32 +285,33 @@ private static Supplier registerBlockItem(final Reg B block = Objects.requireNonNull(blockRegistryObject.get()); if (block == ENCHANTED_AETHER_GRASS_BLOCK.get() || block == QUICKSOIL_GLASS.get() + || block == QUICKSOIL_GLASS_PANE.get() || block == ENCHANTED_GRAVITITE.get()) { - return new BlockItem(block, new Item.Properties().rarity(Rarity.RARE).tab(AetherItemGroups.AETHER_BLOCKS)); + return new BlockItem(block, new Item.Properties().rarity(Rarity.RARE)); } else if (block == AEROGEL.get() || block == AEROGEL_WALL.get() || block == AEROGEL_STAIRS.get() || block == AEROGEL_SLAB.get()) { - return new BlockItem(block, new Item.Properties().rarity(AetherItems.AETHER_LOOT).tab(AetherItemGroups.AETHER_BLOCKS)); + return new BlockItem(block, new Item.Properties().rarity(AetherItems.AETHER_LOOT)); } else if (block == AMBROSIUM_TORCH.get()) { - return new StandingAndWallBlockItem(AMBROSIUM_TORCH.get(), AMBROSIUM_WALL_TORCH.get(), new Item.Properties().tab(AetherItemGroups.AETHER_BLOCKS)); + 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).tab(AetherItemGroups.AETHER_BLOCKS), 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 == CHEST_MIMIC.get()) { - return new EntityBlockItem(block, ChestMimicBlockEntity::new, new Item.Properties().tab(AetherItemGroups.AETHER_BLOCKS)); + return new EntityBlockItem(block, ChestMimicBlockEntity::new, new Item.Properties()); } else if (block == TREASURE_CHEST.get()) { - return new EntityBlockItem(block, TreasureChestBlockEntity::new, new Item.Properties().tab(AetherItemGroups.AETHER_BLOCKS)); + return new EntityBlockItem(block, TreasureChestBlockEntity::new, new Item.Properties()); } else if (block == SKYROOT_PLANKS.get() || block == SKYROOT_FENCE_GATE.get() || block == SKYROOT_FENCE.get() || block == SKYROOT_BOOKSHELF.get()) { - return new BurnableBlockItem(block, new Item.Properties().tab(AetherItemGroups.AETHER_BLOCKS)); + return new BurnableBlockItem(block, new Item.Properties()); } else if (block == SUN_ALTAR.get()) { - return new BlockItem(block, new Item.Properties().fireResistant().tab(AetherItemGroups.AETHER_BLOCKS)); + return new BlockItem(block, new Item.Properties().fireResistant()); } else if (block == SKYROOT_BED.get()) { - return new EntityBlockItem(block, SkyrootBedBlockEntity::new, new Item.Properties().stacksTo(1).tab(AetherItemGroups.AETHER_BLOCKS)); + return new EntityBlockItem(block, SkyrootBedBlockEntity::new, new Item.Properties().stacksTo(1)); } else { - return new BlockItem(block, new Item.Properties().tab(AetherItemGroups.AETHER_BLOCKS)); + return new BlockItem(block, new Item.Properties()); } }; } diff --git a/src/main/java/com/gildedgames/aether/block/Floatable.java b/src/main/java/com/gildedgames/aether/block/Floatable.java index 2f1ed4e44e..959e95eb44 100644 --- a/src/main/java/com/gildedgames/aether/block/Floatable.java +++ b/src/main/java/com/gildedgames/aether/block/Floatable.java @@ -3,6 +3,7 @@ import com.gildedgames.aether.entity.block.FloatingBlockEntity; import net.minecraft.core.BlockPos; import net.minecraft.world.damagesource.DamageSource; +import net.minecraft.world.damagesource.EntityDamageSource; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntitySelector; import net.minecraft.world.level.Level; @@ -18,8 +19,8 @@ default void onCollide(Level level, BlockPos pos, BlockState state, BlockState o default void onBrokenAfterCollide(Level level, BlockPos pos, FloatingBlockEntity floatingBlock) { } - default DamageSource getFallDamageSource() { - return DamageSource.FALLING_BLOCK; + default DamageSource getFallDamageSource(Entity entity) { + return new EntityDamageSource("aether.floating_block", entity).damageHelmet(); } default Predicate getHurtsEntitySelector() { diff --git a/src/main/java/com/gildedgames/aether/block/construction/SkyrootSignBlock.java b/src/main/java/com/gildedgames/aether/block/construction/SkyrootSignBlock.java index a4d20f7777..5bf81034b7 100644 --- a/src/main/java/com/gildedgames/aether/block/construction/SkyrootSignBlock.java +++ b/src/main/java/com/gildedgames/aether/block/construction/SkyrootSignBlock.java @@ -7,11 +7,8 @@ import net.minecraft.world.level.block.state.properties.WoodType; import net.minecraft.world.level.block.entity.BlockEntity; -import javax.annotation.Nonnull; - public class SkyrootSignBlock extends StandingSignBlock { - public SkyrootSignBlock(Properties properties, WoodType woodType) - { + public SkyrootSignBlock(Properties properties, WoodType woodType) { super(properties, woodType); } diff --git a/src/main/java/com/gildedgames/aether/block/construction/SkyrootWallSignBlock.java b/src/main/java/com/gildedgames/aether/block/construction/SkyrootWallSignBlock.java index 6d7428cd35..012482345a 100644 --- a/src/main/java/com/gildedgames/aether/block/construction/SkyrootWallSignBlock.java +++ b/src/main/java/com/gildedgames/aether/block/construction/SkyrootWallSignBlock.java @@ -7,8 +7,6 @@ import net.minecraft.world.level.block.state.properties.WoodType; import net.minecraft.world.level.block.entity.BlockEntity; -import javax.annotation.Nonnull; - public class SkyrootWallSignBlock extends WallSignBlock { public SkyrootWallSignBlock(Properties properties, WoodType woodType) { super(properties, woodType); diff --git a/src/main/java/com/gildedgames/aether/block/natural/BerryBushStemBlock.java b/src/main/java/com/gildedgames/aether/block/natural/BerryBushStemBlock.java index e1e3ca11d1..4dc6abd632 100644 --- a/src/main/java/com/gildedgames/aether/block/natural/BerryBushStemBlock.java +++ b/src/main/java/com/gildedgames/aether/block/natural/BerryBushStemBlock.java @@ -3,6 +3,7 @@ import com.gildedgames.aether.block.AetherBlockStateProperties; import com.gildedgames.aether.block.AetherBlocks; import net.minecraft.util.RandomSource; +import net.minecraft.world.level.LevelReader; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.BonemealableBlock; @@ -77,7 +78,7 @@ public boolean isBonemealSuccess(Level level, RandomSource random, BlockPos pos, } @Override - public boolean isValidBonemealTarget(BlockGetter level, BlockPos pos, BlockState state, boolean isClient) { + public boolean isValidBonemealTarget(LevelReader level, BlockPos pos, BlockState state, boolean isClient) { return true; } diff --git a/src/main/java/com/gildedgames/aether/block/portal/AetherPortalForcer.java b/src/main/java/com/gildedgames/aether/block/portal/AetherPortalForcer.java index 275ceeddf9..a006c4de22 100644 --- a/src/main/java/com/gildedgames/aether/block/portal/AetherPortalForcer.java +++ b/src/main/java/com/gildedgames/aether/block/portal/AetherPortalForcer.java @@ -80,7 +80,7 @@ public PortalInfo getPortalInfo(Entity entity, ServerLevel destinationLevel, Fun axis = Direction.Axis.X; vec3 = new Vec3(0.5, 0.0, 0.0); } - return PortalShape.createPortalInfo(destinationLevel, rectangle, axis, vec3, entity.getDimensions(entity.getPose()), entity.getDeltaMovement(), entity.getYRot(), entity.getXRot()); + return PortalShape.createPortalInfo(destinationLevel, rectangle, axis, vec3, entity, entity.getDeltaMovement(), entity.getYRot(), entity.getXRot()); }).orElse(null); } } @@ -178,7 +178,7 @@ public Optional createPortal(BlockPos pos, Direction.A } if (d0 == -1.0) { - int k1 = Math.max(this.level.getMinBuildHeight() - -1, 70); + int k1 = Math.max(this.level.getMinBuildHeight() + 1, 70); int i2 = i - 9; if (i2 < k1) { return Optional.empty(); diff --git a/src/main/java/com/gildedgames/aether/blockentity/IcestoneBlockEntity.java b/src/main/java/com/gildedgames/aether/blockentity/IcestoneBlockEntity.java index 836b4d0c93..3e1c1e1979 100644 --- a/src/main/java/com/gildedgames/aether/blockentity/IcestoneBlockEntity.java +++ b/src/main/java/com/gildedgames/aether/blockentity/IcestoneBlockEntity.java @@ -7,6 +7,7 @@ import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.gameevent.*; +import net.minecraft.world.phys.Vec3; public class IcestoneBlockEntity extends BlockEntity implements FreezingBlock { private final FreezingListener listener; @@ -45,8 +46,8 @@ public int getListenerRadius() { } @Override - public boolean handleGameEvent(ServerLevel level, GameEvent.Message event) { - if (event.gameEvent() == AetherGameEvents.ICESTONE_FREEZABLE_UPDATE.get() || event.gameEvent() == GameEvent.BLOCK_PLACE || event.gameEvent() == GameEvent.FLUID_PLACE || event.gameEvent() == GameEvent.ENTITY_PLACE) { + public boolean handleGameEvent(ServerLevel level, GameEvent event, GameEvent.Context context, Vec3 pos) { + if (event == AetherGameEvents.ICESTONE_FREEZABLE_UPDATE.get() || event == GameEvent.BLOCK_PLACE || event == GameEvent.FLUID_PLACE || event == GameEvent.ENTITY_PLACE) { IcestoneBlockEntity.this.freezeBlocks(level, IcestoneBlockEntity.this.getBlockPos(), IcestoneBlockEntity.this.getBlockState(), FreezingBlock.SQRT_8); return true; } else { diff --git a/src/main/java/com/gildedgames/aether/blockentity/IncubatorBlockEntity.java b/src/main/java/com/gildedgames/aether/blockentity/IncubatorBlockEntity.java index 254c37c3ed..f4e183ab28 100644 --- a/src/main/java/com/gildedgames/aether/blockentity/IncubatorBlockEntity.java +++ b/src/main/java/com/gildedgames/aether/blockentity/IncubatorBlockEntity.java @@ -3,6 +3,7 @@ import javax.annotation.Nullable; import com.gildedgames.aether.Aether; +import com.gildedgames.aether.advancement.IncubationTrigger; import com.gildedgames.aether.inventory.menu.IncubatorMenu; import com.gildedgames.aether.recipe.AetherRecipeTypes; @@ -11,9 +12,11 @@ import net.minecraft.core.*; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerLevel; +import net.minecraft.server.level.ServerPlayer; import net.minecraft.tags.TagKey; import net.minecraft.util.Mth; import net.minecraft.world.Container; +import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.MobSpawnType; import net.minecraft.world.entity.player.StackedContents; @@ -56,10 +59,14 @@ public class IncubatorBlockEntity extends BaseContainerBlockEntity implements Wo private static final int[] SLOTS_NS = {0}; private static final int[] SLOTS_EW = {1}; protected NonNullList items = NonNullList.withSize(2, ItemStack.EMPTY); + private ServerPlayer player; // The last player to put an item in the egg slot. private int litTime; // The current fuel burning progress time. private int litDuration; // Total time it takes a fuel item to burn. private int incubationProgress; // The current incubation progress time. private int incubationTotalTime; // Total time a recipe takes to incubate. + private int x; // The x position of the block entity. + private int y; // The y position of the block entity. + private int z; // The z position of the block entity. protected final ContainerData dataAccess = new ContainerData() { @Override public int get(int index) { @@ -68,6 +75,9 @@ public int get(int index) { case 1 -> IncubatorBlockEntity.this.litDuration; case 2 -> IncubatorBlockEntity.this.incubationProgress; case 3 -> IncubatorBlockEntity.this.incubationTotalTime; + case 4 -> IncubatorBlockEntity.this.x; + case 5 -> IncubatorBlockEntity.this.y; + case 6 -> IncubatorBlockEntity.this.z; default -> 0; }; } @@ -79,12 +89,15 @@ public void set(int index, int value) { case 1 -> IncubatorBlockEntity.this.litDuration = value; case 2 -> IncubatorBlockEntity.this.incubationProgress = value; case 3 -> IncubatorBlockEntity.this.incubationTotalTime = value; + case 4 -> IncubatorBlockEntity.this.x = value; + case 5 -> IncubatorBlockEntity.this.y = value; + case 6 -> IncubatorBlockEntity.this.z = value; } } @Override public int getCount() { - return 4; + return 7; } }; private static final Map incubatingMap = new LinkedHashMap<>(); @@ -99,6 +112,9 @@ public IncubatorBlockEntity(BlockPos pos, BlockState state) { public IncubatorBlockEntity(BlockPos pos, BlockState state, RecipeType recipeType) { super(AetherBlockEntityTypes.INCUBATOR.get(), pos, state); this.quickCheck = RecipeManager.createCheck(recipeType); + this.x = pos.getX(); + this.y = pos.getY(); + this.z = pos.getZ(); } @Override @@ -197,6 +213,16 @@ public static void serverTick(Level level, BlockPos pos, BlockState state, Incub if (flag1) { setChanged(level, pos, state); } + + if (blockEntity.x != pos.getX()) { + blockEntity.x = pos.getX(); + } + if (blockEntity.y != pos.getY()) { + blockEntity.y = pos.getY(); + } + if (blockEntity.z != pos.getZ()) { + blockEntity.z = pos.getZ(); + } } /** @@ -213,7 +239,13 @@ private boolean incubate(@Nullable IncubationRecipe recipe, NonNullList INCUBATION_SEARCH = Suppliers.memoize(() -> RecipeBookCategories.create("INCUBATION_SEARCH", new ItemStack(Items.COMPASS))); public static final Supplier INCUBATION_MISC = Suppliers.memoize(() -> RecipeBookCategories.create("INCUBATION_MISC", new ItemStack(AetherItems.BLUE_MOA_EGG.get()))); - /** * Registers the mod's categories to be used in-game, along with functions to sort items. * To add sub-categories to be used by the search, use addAggregateCategories with the @@ -44,20 +45,27 @@ public static void registerRecipeCategories(RegisterRecipeBookCategoriesEvent ev event.registerBookCategories(AetherRecipeBookTypes.ALTAR, ImmutableList.of(ENCHANTING_SEARCH.get(), ENCHANTING_FOOD.get(), ENCHANTING_BLOCKS.get(), ENCHANTING_MISC.get(), ENCHANTING_REPAIR.get())); event.registerAggregateCategory(ENCHANTING_SEARCH.get(), ImmutableList.of(ENCHANTING_FOOD.get(), ENCHANTING_BLOCKS.get(), ENCHANTING_MISC.get(), ENCHANTING_REPAIR.get())); event.registerRecipeCategoryFinder(AetherRecipeTypes.ENCHANTING.get(), recipe -> { - if (recipe.getIngredients().get(0).getItems()[0].is(recipe.getResultItem().getItem())) { + if (recipe instanceof AltarRepairRecipe || (recipe instanceof AbstractAetherCookingRecipe abstractAetherCookingRecipe && abstractAetherCookingRecipe.aetherCategory() == AetherBookCategory.ENCHANTING_REPAIR)) { return ENCHANTING_REPAIR.get(); - } - if (recipe.getResultItem().isEdible()) { - return ENCHANTING_FOOD.get(); - } - if (recipe.getResultItem().getItem() instanceof BlockItem) { - return ENCHANTING_BLOCKS.get(); + } else if (recipe instanceof AbstractAetherCookingRecipe abstractAetherCookingRecipe) { + if (abstractAetherCookingRecipe.aetherCategory() == AetherBookCategory.ENCHANTING_FOOD) { + return ENCHANTING_FOOD.get(); + } else if (abstractAetherCookingRecipe.aetherCategory() == AetherBookCategory.ENCHANTING_BLOCKS) { + return ENCHANTING_BLOCKS.get(); + } } return ENCHANTING_MISC.get(); }); event.registerBookCategories(AetherRecipeBookTypes.FREEZER, ImmutableList.of(FREEZABLE_SEARCH.get(), FREEZABLE_BLOCKS.get(), FREEZABLE_MISC.get())); event.registerAggregateCategory(FREEZABLE_SEARCH.get(), ImmutableList.of(FREEZABLE_BLOCKS.get(), FREEZABLE_MISC.get())); - event.registerRecipeCategoryFinder(AetherRecipeTypes.FREEZING.get(), recipe -> recipe.getResultItem().getItem() instanceof BlockItem ? FREEZABLE_BLOCKS.get() : FREEZABLE_MISC.get()); + event.registerRecipeCategoryFinder(AetherRecipeTypes.FREEZING.get(), recipe -> { + if (recipe instanceof AbstractAetherCookingRecipe abstractAetherCookingRecipe) { + if (abstractAetherCookingRecipe.aetherCategory() == AetherBookCategory.FREEZABLE_BLOCKS) { + return FREEZABLE_BLOCKS.get(); + } + } + return FREEZABLE_MISC.get(); + }); event.registerBookCategories(AetherRecipeBookTypes.INCUBATOR, ImmutableList.of(INCUBATION_SEARCH.get(), INCUBATION_MISC.get())); event.registerAggregateCategory(INCUBATION_SEARCH.get(), ImmutableList.of(INCUBATION_MISC.get())); diff --git a/src/main/java/com/gildedgames/aether/client/AetherSoundEvents.java b/src/main/java/com/gildedgames/aether/client/AetherSoundEvents.java index e3d3892316..bd0344ee31 100644 --- a/src/main/java/com/gildedgames/aether/client/AetherSoundEvents.java +++ b/src/main/java/com/gildedgames/aether/client/AetherSoundEvents.java @@ -150,6 +150,6 @@ public class AetherSoundEvents { public static final RegistryObject MUSIC_AETHER = register("music.aether"); private static RegistryObject register(String name) { - return SOUNDS.register(name, () -> new SoundEvent(new ResourceLocation(Aether.MODID, name))); + return SOUNDS.register(name, () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(Aether.MODID, name))); } } diff --git a/src/main/java/com/gildedgames/aether/client/CombinedResourcePack.java b/src/main/java/com/gildedgames/aether/client/CombinedResourcePack.java index 4866fed04b..78f2849d50 100644 --- a/src/main/java/com/gildedgames/aether/client/CombinedResourcePack.java +++ b/src/main/java/com/gildedgames/aether/client/CombinedResourcePack.java @@ -1,24 +1,24 @@ package com.gildedgames.aether.client; +import net.minecraft.resources.ResourceLocation; import net.minecraft.server.packs.PackResources; +import net.minecraft.server.packs.PackType; import net.minecraft.server.packs.metadata.pack.PackMetadataSection; +import net.minecraft.server.packs.resources.IoSupplier; import net.minecraftforge.resource.DelegatingPackResources; +import org.jetbrains.annotations.Nullable; -import javax.annotation.Nonnull; -import java.io.FileNotFoundException; -import java.io.IOException; import java.io.InputStream; import java.nio.file.Files; import java.nio.file.Path; -import java.nio.file.StandardOpenOption; import java.util.List; +import java.util.Locale; -public class CombinedResourcePack extends DelegatingPackResources -{ +public class CombinedResourcePack extends DelegatingPackResources { private final Path source; - public CombinedResourcePack(String id, String name, PackMetadataSection packInfo, List packs, Path sourcePack) { - super(id, name, packInfo, packs); + public CombinedResourcePack(String id, PackMetadataSection packInfo, List packs, Path sourcePack) { + super(id, false, packInfo, packs); this.source = sourcePack; } @@ -28,36 +28,31 @@ public Path getSource() { protected Path resolve(String... paths) { Path path = getSource(); - for (String name : paths) + for (String name : paths) { path = path.resolve(name); + } return path; } @Override - public InputStream getRootResource(String pFileName) throws IOException { - if (!pFileName.contains("/") && !pFileName.contains("\\")) { - return this.getResource(pFileName); - } else { - throw new IllegalArgumentException("Root resources can only be filenames, not paths (no / allowed!)"); + public IoSupplier getRootResource(String... paths) { + final Path path = resolve(paths); + if (!Files.exists(path)) { + return null; } + return IoSupplier.create(path); } + @Nullable @Override - protected boolean hasResource(@Nonnull String name) { - final Path path = resolve(name); - return Files.exists(path); + public IoSupplier getResource(PackType type, ResourceLocation location) { + return this.getRootResource(getPathFromLocation(location.getPath().startsWith("lang/") ? PackType.CLIENT_RESOURCES : type, location)); } - @Nonnull - @Override - protected InputStream getResource(@Nonnull String name) throws IOException { - final Path path = resolve(name); - if(!Files.exists(path)) - throw new FileNotFoundException("Can't find resource " + name + " at " + getSource()); - return Files.newInputStream(path, StandardOpenOption.READ); + private static String getPathFromLocation(PackType pType, ResourceLocation pLocation) { + return String.format(Locale.ROOT, "%s/%s/%s", pType.getDirectory(), pLocation.getNamespace(), pLocation.getPath()); } - @Nonnull @Override public String toString() { return String.format("%s: %s", getClass().getName(), getSource()); diff --git a/src/main/java/com/gildedgames/aether/client/event/hooks/AudioHooks.java b/src/main/java/com/gildedgames/aether/client/event/hooks/AudioHooks.java index 7d8edbe0cc..22c4a8fba9 100644 --- a/src/main/java/com/gildedgames/aether/client/event/hooks/AudioHooks.java +++ b/src/main/java/com/gildedgames/aether/client/event/hooks/AudioHooks.java @@ -11,7 +11,7 @@ public class AudioHooks { public static boolean shouldCancelSound(SoundInstance sound) { if (!AetherConfig.CLIENT.disable_music_manager.get()) { if (sound.getSource() == SoundSource.MUSIC) { - return AetherMusicManager.getSituationalMusic() != null && !sound.getLocation().equals(SimpleSoundInstance.forMusic(AetherMusicManager.getSituationalMusic().getEvent()).getLocation()) + return AetherMusicManager.getSituationalMusic() != null && !sound.getLocation().equals(SimpleSoundInstance.forMusic(AetherMusicManager.getSituationalMusic().getEvent().get()).getLocation()) || (AetherMusicManager.getCurrentMusic() != null && !sound.getLocation().equals(AetherMusicManager.getCurrentMusic().getLocation())); } } diff --git a/src/main/java/com/gildedgames/aether/client/event/hooks/DimensionClientHooks.java b/src/main/java/com/gildedgames/aether/client/event/hooks/DimensionClientHooks.java index 9f4bc46fb1..dbb2c2019f 100644 --- a/src/main/java/com/gildedgames/aether/client/event/hooks/DimensionClientHooks.java +++ b/src/main/java/com/gildedgames/aether/client/event/hooks/DimensionClientHooks.java @@ -1,7 +1,7 @@ package com.gildedgames.aether.client.event.hooks; import com.gildedgames.aether.client.renderer.level.AetherSkyRenderEffects; -import com.gildedgames.aether.data.resources.AetherDimensions; +import com.gildedgames.aether.data.resources.registries.AetherDimensions; import com.gildedgames.aether.capability.time.AetherTime; import com.gildedgames.aether.mixin.mixins.common.accessor.LevelAccessor; import net.minecraft.client.Camera; diff --git a/src/main/java/com/gildedgames/aether/client/event/hooks/GuiHooks.java b/src/main/java/com/gildedgames/aether/client/event/hooks/GuiHooks.java index dd6e936e7a..d8d42ca615 100644 --- a/src/main/java/com/gildedgames/aether/client/event/hooks/GuiHooks.java +++ b/src/main/java/com/gildedgames/aether/client/event/hooks/GuiHooks.java @@ -23,6 +23,7 @@ import net.minecraft.client.gui.GuiComponent; import net.minecraft.client.gui.components.Button; import net.minecraft.client.gui.components.LerpingBossEvent; +import net.minecraft.client.gui.components.Tooltip; import net.minecraft.client.gui.screens.*; import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; import net.minecraft.client.gui.screens.inventory.CreativeModeInventoryScreen; @@ -122,7 +123,7 @@ public static void openAccessoryMenu() { Player entity = minecraft.player; if (entity != null) { if (AetherKeys.OPEN_ACCESSORY_INVENTORY.consumeClick() && minecraft.isWindowActive()) { - AetherPacketHandler.sendToServer(new OpenAccessoriesPacket(entity.getId(), ItemStack.EMPTY)); + AetherPacketHandler.sendToServer(new OpenAccessoriesPacket(ItemStack.EMPTY)); shouldAddButton = false; } } @@ -135,9 +136,8 @@ public static Button setupToggleWorldButton(Screen screen) { AetherConfig.CLIENT.enable_world_preview.set(!AetherConfig.CLIENT.enable_world_preview.get()); AetherConfig.CLIENT.enable_world_preview.save(); WorldDisplayHelper.toggleWorldPreview(AetherConfig.CLIENT.enable_world_preview.get()); - }, - (button, matrixStack, x, y) -> - screen.renderTooltip(matrixStack, Component.translatable("gui.aether.menu.preview"), x + 4, y + 12)); + }); + dynamicMenuButton.setTooltip(Tooltip.create(Component.translatable("gui.aether.menu.preview"))); dynamicMenuButton.setDisplayConfigs(AetherConfig.CLIENT.enable_world_preview_button); return dynamicMenuButton; } @@ -153,9 +153,8 @@ public static Button setupMenuSwitchButton(Screen screen) { Minecraft.getInstance().setScreen(getMenu()); Minecraft.getInstance().getMusicManager().stopPlaying(); AetherMusicManager.stopPlaying(); - }, - (button, matrixStack, x, y) -> - screen.renderTooltip(matrixStack, Component.translatable(AetherConfig.CLIENT.enable_aether_menu.get() ? "gui.aether.menu.minecraft" : "gui.aether.menu.aether"), x + 4, y + 12)); + }); + dynamicMenuButton.setTooltip(Tooltip.create(Component.translatable(AetherConfig.CLIENT.enable_aether_menu.get() ? "gui.aether.menu.minecraft" : "gui.aether.menu.aether"))); dynamicMenuButton.setOffsetConfigs(AetherConfig.CLIENT.enable_world_preview_button); dynamicMenuButton.setDisplayConfigs(AetherConfig.CLIENT.enable_aether_menu_button); return dynamicMenuButton; @@ -170,9 +169,8 @@ public static Button setupQuickLoadButton(Screen screen) { WorldDisplayHelper.quickLoad(); Minecraft.getInstance().getMusicManager().stopPlaying(); AetherMusicManager.stopPlaying(); //todo doesn't quite work. might need to stop it through the sound manager - }, - (button, matrixStack, x, y) -> - screen.renderTooltip(matrixStack, Component.translatable("gui.aether.menu.load"), x + 4, y + 12)); + }); + dynamicMenuButton.setTooltip(Tooltip.create(Component.translatable("gui.aether.menu.load"))); dynamicMenuButton.setOffsetConfigs(AetherConfig.CLIENT.enable_world_preview_button, AetherConfig.CLIENT.enable_aether_menu_button); dynamicMenuButton.setDisplayConfigs(AetherConfig.CLIENT.enable_world_preview, AetherConfig.CLIENT.enable_quick_load_button); return dynamicMenuButton; diff --git a/src/main/java/com/gildedgames/aether/client/event/hooks/LevelClientHooks.java b/src/main/java/com/gildedgames/aether/client/event/hooks/LevelClientHooks.java index 9c7c7a82a9..5279a71919 100644 --- a/src/main/java/com/gildedgames/aether/client/event/hooks/LevelClientHooks.java +++ b/src/main/java/com/gildedgames/aether/client/event/hooks/LevelClientHooks.java @@ -5,8 +5,8 @@ import com.gildedgames.aether.api.WorldDisplayHelper; import com.gildedgames.aether.AetherConfig; import com.mojang.blaze3d.vertex.*; -import com.mojang.math.Matrix3f; -import com.mojang.math.Matrix4f; +import org.joml.Matrix3f; +import org.joml.Matrix4f; import net.minecraft.client.Camera; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.screens.PauseScreen; diff --git a/src/main/java/com/gildedgames/aether/client/gui/component/AccessoryButton.java b/src/main/java/com/gildedgames/aether/client/gui/component/AccessoryButton.java index a53d8a5c93..b3fd85bfa0 100644 --- a/src/main/java/com/gildedgames/aether/client/gui/component/AccessoryButton.java +++ b/src/main/java/com/gildedgames/aether/client/gui/component/AccessoryButton.java @@ -12,7 +12,6 @@ import net.minecraft.client.gui.components.ImageButton; import net.minecraft.util.Tuple; import net.minecraft.world.entity.player.Player; -import net.minecraft.world.item.CreativeModeTab; import net.minecraft.world.item.ItemStack; import net.minecraft.resources.ResourceLocation; @@ -35,9 +34,9 @@ public AccessoryButton(AbstractContainerScreen parentGui, int xIn, int yIn, R InventoryScreen inventory = new InventoryScreen(player); minecraft.setScreen(inventory); player.inventoryMenu.setCarried(stack); - AetherPacketHandler.sendToServer(new OpenInventoryPacket(player.getId(), stack)); + AetherPacketHandler.sendToServer(new OpenInventoryPacket(stack)); } else { - AetherPacketHandler.sendToServer(new OpenAccessoriesPacket(player.getId(), stack)); + AetherPacketHandler.sendToServer(new OpenAccessoriesPacket(stack)); } } }); @@ -47,10 +46,10 @@ public AccessoryButton(AbstractContainerScreen parentGui, int xIn, int yIn, R @Override public void render(@Nonnull PoseStack pPoseStack, int pMouseX, int pMouseY, float pPartialTick) { Tuple offsets = AccessoriesScreen.getButtonOffset(this.parentGui); - this.x = this.parentGui.getGuiLeft() + offsets.getA(); - this.y = this.parentGui.getGuiTop() + offsets.getB(); + this.setX(this.parentGui.getGuiLeft() + offsets.getA()); + this.setY(this.parentGui.getGuiTop() + offsets.getB()); if (this.parentGui instanceof CreativeModeInventoryScreen screen) { - boolean isInventoryTab = screen.getSelectedTab() == CreativeModeTab.TAB_INVENTORY.getId(); + boolean isInventoryTab = screen.isInventoryOpen(); this.active = isInventoryTab; if (isInventoryTab) { super.render(pPoseStack, pMouseX, pMouseY, pPartialTick); diff --git a/src/main/java/com/gildedgames/aether/client/gui/component/AetherMenuButton.java b/src/main/java/com/gildedgames/aether/client/gui/component/AetherMenuButton.java index 69d363260f..6fb282a744 100644 --- a/src/main/java/com/gildedgames/aether/client/gui/component/AetherMenuButton.java +++ b/src/main/java/com/gildedgames/aether/client/gui/component/AetherMenuButton.java @@ -1,5 +1,6 @@ package com.gildedgames.aether.client.gui.component; +import com.gildedgames.aether.mixin.mixins.client.accessor.ButtonAccessor; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.systems.RenderSystem; @@ -20,15 +21,15 @@ public class AetherMenuButton extends Button public int initialWidth; public int renderOffset; - public AetherMenuButton(int xPos, int yPos, int width, int height, Component message, OnPress callback) { - super(xPos, yPos, width, height, message, callback); + public AetherMenuButton(int xPos, int yPos, int width, int height, Component message, OnPress callback, CreateNarration narration) { + super(xPos, yPos, width, height, message, callback, narration); this.initialX = xPos; this.initialY = yPos; this.initialWidth = width; } public AetherMenuButton(Button oldButton) { - this(oldButton.x, oldButton.y, oldButton.getWidth(), oldButton.getHeight(), oldButton.getMessage(), (button) -> oldButton.onPress()); + this(oldButton.getX(), oldButton.getY(), oldButton.getWidth(), oldButton.getHeight(), oldButton.getMessage(), (button) -> oldButton.onPress(), (button) -> ((ButtonAccessor) oldButton).callCreateNarrationMessage()); oldButton.visible = false; oldButton.active = false; this.renderOffset = 0; @@ -45,10 +46,10 @@ public void renderButton(PoseStack matrixStack, int mouseX, int mouseY, float p_ RenderSystem.enableBlend(); RenderSystem.defaultBlendFunc(); RenderSystem.enableDepthTest(); - this.blit(matrixStack, this.x + this.renderOffset, this.y, 0, 46 + i * 20, this.width / 2, this.height); - this.blit(matrixStack, (this.x + this.width / 2) + this.renderOffset, this.y, 200 - this.width / 2, 46 + i * 20, this.width / 2, this.height); + this.blit(matrixStack, this.getX() + this.renderOffset, this.getY(), 0, 46 + i * 20, this.width / 2, this.height); + this.blit(matrixStack, (this.getX() + this.width / 2) + this.renderOffset, this.getY(), 200 - this.width / 2, 46 + i * 20, this.width / 2, this.height); this.renderBg(matrixStack, minecraft, mouseX, mouseY); - drawString(matrixStack, fontrenderer, this.getMessage(), this.x + 35 + this.renderOffset, this.y + (this.height - 8) / 2, this.getColor(mouseX, mouseY) | Mth.ceil(this.alpha * 255.0F) << 24); + drawString(matrixStack, fontrenderer, this.getMessage(), this.getX() + 35 + this.renderOffset, this.getY() + (this.height - 8) / 2, this.getColor(mouseX, mouseY) | Mth.ceil(this.alpha * 255.0F) << 24); } public int getColor(int mouseX, int mouseY) { diff --git a/src/main/java/com/gildedgames/aether/client/gui/component/CustomizationSaveButton.java b/src/main/java/com/gildedgames/aether/client/gui/component/CustomizationSaveButton.java index 0507e69677..45616dd3a5 100644 --- a/src/main/java/com/gildedgames/aether/client/gui/component/CustomizationSaveButton.java +++ b/src/main/java/com/gildedgames/aether/client/gui/component/CustomizationSaveButton.java @@ -6,8 +6,8 @@ public class CustomizationSaveButton extends InactiveImageButton { private final ColorBox colorBox; - public CustomizationSaveButton(ColorBox colorBox, int x, int y, int width, int height, int xTexStart, int yTexStart, int yDiffTex, ResourceLocation resourceLocation, int textureWidth, int textureHeight, OnPress onPress, OnTooltip onTooltip, Component message) { - super(x, y, width, height, xTexStart, yTexStart, yDiffTex, resourceLocation, textureWidth, textureHeight, onPress, onTooltip, message); + public CustomizationSaveButton(ColorBox colorBox, int x, int y, int width, int height, int xTexStart, int yTexStart, int yDiffTex, ResourceLocation resourceLocation, int textureWidth, int textureHeight, OnPress onPress, Component message) { + super(x, y, width, height, xTexStart, yTexStart, yDiffTex, resourceLocation, textureWidth, textureHeight, onPress, message); this.colorBox = colorBox; } diff --git a/src/main/java/com/gildedgames/aether/client/gui/component/CustomizationUndoButton.java b/src/main/java/com/gildedgames/aether/client/gui/component/CustomizationUndoButton.java index c0e233d5c2..5792163c46 100644 --- a/src/main/java/com/gildedgames/aether/client/gui/component/CustomizationUndoButton.java +++ b/src/main/java/com/gildedgames/aether/client/gui/component/CustomizationUndoButton.java @@ -6,8 +6,8 @@ public class CustomizationUndoButton extends InactiveImageButton { private final ColorBox colorBox; - public CustomizationUndoButton(ColorBox colorBox, int x, int y, int width, int height, int xTexStart, int yTexStart, int yDiffTex, ResourceLocation resourceLocation, int textureWidth, int textureHeight, OnPress onPress, OnTooltip onTooltip, Component message) { - super(x, y, width, height, xTexStart, yTexStart, yDiffTex, resourceLocation, textureWidth, textureHeight, onPress, onTooltip, message); + public CustomizationUndoButton(ColorBox colorBox, int x, int y, int width, int height, int xTexStart, int yTexStart, int yDiffTex, ResourceLocation resourceLocation, int textureWidth, int textureHeight, OnPress onPress, Component message) { + super(x, y, width, height, xTexStart, yTexStart, yDiffTex, resourceLocation, textureWidth, textureHeight, onPress, message); this.colorBox = colorBox; } diff --git a/src/main/java/com/gildedgames/aether/client/gui/component/DynamicMenuButton.java b/src/main/java/com/gildedgames/aether/client/gui/component/DynamicMenuButton.java index 4610150264..0b160bc1d1 100644 --- a/src/main/java/com/gildedgames/aether/client/gui/component/DynamicMenuButton.java +++ b/src/main/java/com/gildedgames/aether/client/gui/component/DynamicMenuButton.java @@ -14,8 +14,8 @@ public class DynamicMenuButton extends Button { private List> offsetConfigs; public boolean enabled = true; - public DynamicMenuButton(int x, int y, int width, int height, Component message, OnPress onPress, OnTooltip onTooltip) { - super(x, y, width, height, message, onPress, onTooltip); + public DynamicMenuButton(int x, int y, int width, int height, Component message, OnPress onPress) { + super(x, y, width, height, message, onPress, DEFAULT_NARRATION); this.originX = x; } @@ -30,7 +30,7 @@ public void onPress() { public void render(@Nonnull PoseStack poseStack, int mouseX, int mouseY, float partialTicks) { if (this.shouldRender()) { this.enabled = true; - this.x = this.getOriginX() + gatherOffsets(this.offsetConfigs); + this.setX(this.getOriginX() + gatherOffsets(this.offsetConfigs)); super.render(poseStack, mouseX, mouseY, partialTicks); } else { this.enabled = false; diff --git a/src/main/java/com/gildedgames/aether/client/gui/component/InactiveImageButton.java b/src/main/java/com/gildedgames/aether/client/gui/component/InactiveImageButton.java index 045cb35788..766dd615c0 100644 --- a/src/main/java/com/gildedgames/aether/client/gui/component/InactiveImageButton.java +++ b/src/main/java/com/gildedgames/aether/client/gui/component/InactiveImageButton.java @@ -18,8 +18,8 @@ public class InactiveImageButton extends ImageButton { public final int textureWidth; public final int textureHeight; - public InactiveImageButton(int x, int y, int width, int height, int xTexStart, int yTexStart, int yDiffTex, ResourceLocation resourceLocation, int textureWidth, int textureHeight, Button.OnPress onPress, Button.OnTooltip onTooltip, Component message) { - super(x, y, width, height, xTexStart, yTexStart, yDiffTex, resourceLocation, textureWidth, textureHeight, onPress, onTooltip, message); + public InactiveImageButton(int x, int y, int width, int height, int xTexStart, int yTexStart, int yDiffTex, ResourceLocation resourceLocation, int textureWidth, int textureHeight, Button.OnPress onPress, Component message) { + super(x, y, width, height, xTexStart, yTexStart, yDiffTex, resourceLocation, textureWidth, textureHeight, onPress, message); this.textureWidth = textureWidth; this.textureHeight = textureHeight; this.xTexStart = xTexStart; @@ -39,9 +39,6 @@ public void renderButton(@Nonnull PoseStack poseStack, int mouseX, int mouseY, f i += this.yDiffTex; } RenderSystem.enableDepthTest(); - blit(poseStack, this.x, this.y, (float)this.xTexStart, (float)i, this.width, this.height, this.textureWidth, this.textureHeight); - if (this.isHovered) { - this.renderToolTip(poseStack, mouseX, mouseY); - } + blit(poseStack, this.getX(), this.getY(), (float)this.xTexStart, (float)i, this.width, this.height, this.textureWidth, this.textureHeight); } } \ No newline at end of file diff --git a/src/main/java/com/gildedgames/aether/client/gui/component/LorePageButton.java b/src/main/java/com/gildedgames/aether/client/gui/component/LorePageButton.java index c74ffc6264..ec9222cdad 100644 --- a/src/main/java/com/gildedgames/aether/client/gui/component/LorePageButton.java +++ b/src/main/java/com/gildedgames/aether/client/gui/component/LorePageButton.java @@ -11,8 +11,6 @@ import net.minecraft.util.Mth; import net.minecraft.network.chat.Component; -import net.minecraft.client.gui.components.Button.OnPress; - public class LorePageButton extends Button { private static final ResourceLocation BUTTON_TEXTURES = new ResourceLocation(Aether.MODID, "textures/gui/menu/lore_widgets.png"); @@ -20,7 +18,7 @@ public class LorePageButton extends Button private boolean isActive; public LorePageButton(int x, int y, int width, int height, Component title, OnPress pressedAction) { - super(x, y, width, height, title, pressedAction); + super(x, y, width, height, title, pressedAction, DEFAULT_NARRATION); this.isActive = false; } @@ -43,11 +41,11 @@ public void renderButton(PoseStack matrixStack, int mouseX, int mouseY, float pa RenderSystem.enableBlend(); RenderSystem.defaultBlendFunc(); RenderSystem.enableDepthTest(); - this.blit(matrixStack, this.x, this.y, 0, 46 + i * 20, this.width / 2, this.height); - this.blit(matrixStack, this.x + this.width / 2, this.y, 200 - this.width / 2, 46 + i * 20, this.width / 2, this.height); + this.blit(matrixStack, this.getX(), this.getY(), 0, 46 + i * 20, this.width / 2, this.height); + this.blit(matrixStack, this.getX() + this.width / 2, this.getY(), 200 - this.width / 2, 46 + i * 20, this.width / 2, this.height); this.renderBg(matrixStack, minecraft, mouseX, mouseY); int j = getFGColor(); - drawCenteredString(matrixStack, fontrenderer, this.getMessage(), this.x + this.width / 2, this.y + (this.height - 8) / 2, j | Mth.ceil(this.alpha * 255.0F) << 24); + drawCenteredString(matrixStack, fontrenderer, this.getMessage(), this.getX() + this.width / 2, this.getY() + (this.height - 8) / 2, j | Mth.ceil(this.alpha * 255.0F) << 24); } public void setIsActive(boolean active) { diff --git a/src/main/java/com/gildedgames/aether/client/gui/component/PlayerDialogueButton.java b/src/main/java/com/gildedgames/aether/client/gui/component/PlayerDialogueButton.java index 608a2afeb6..5c7a7c04b0 100644 --- a/src/main/java/com/gildedgames/aether/client/gui/component/PlayerDialogueButton.java +++ b/src/main/java/com/gildedgames/aether/client/gui/component/PlayerDialogueButton.java @@ -4,6 +4,7 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.gui.components.Button; import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.MutableComponent; import javax.annotation.Nonnull; @@ -11,19 +12,18 @@ * This is a widget that allows the player to select a line of dialogue to say to an NPC. */ public class PlayerDialogueButton extends Button { - - public PlayerDialogueButton(Component pMessage, Button.OnPress onPress) { - super(0, 0, 0, 12, appendBrackets(pMessage), onPress); + public PlayerDialogueButton(MutableComponent pMessage, Button.OnPress onPress) { + super(0, 0, 0, 12, appendBrackets(pMessage), onPress, DEFAULT_NARRATION); this.width = Minecraft.getInstance().font.width(this.getMessage()) + 2; } @Override public void renderButton(@Nonnull PoseStack pPoseStack, int pMouseX, int pMouseY, float pPartialTick) { - this.fillGradient(pPoseStack, this.x, this.y, this.x + this.width, this.y + this.height, 0x66000000, 0x66000000); - drawString(pPoseStack, Minecraft.getInstance().font, this.getMessage(), this.x + 1, this.y + 1, this.isHovered ? 0xFFFF55: 0xFFFFFF); + this.fillGradient(pPoseStack, this.getX(), this.getY(), this.getX() + this.width, this.getY() + this.height, 0x66000000, 0x66000000); + drawString(pPoseStack, Minecraft.getInstance().font, this.getMessage(), this.getX() + 1, this.getY() + 1, this.isHovered ? 0xFFFF55: 0xFFFFFF); } - public static Component appendBrackets(Component component) { + public static MutableComponent appendBrackets(MutableComponent component) { return Component.literal("[").append(component).append("]"); } } diff --git a/src/main/java/com/gildedgames/aether/client/gui/screen/ValkyrieQueenDialogueScreen.java b/src/main/java/com/gildedgames/aether/client/gui/screen/ValkyrieQueenDialogueScreen.java index 6b21ae20a1..81405cc474 100644 --- a/src/main/java/com/gildedgames/aether/client/gui/screen/ValkyrieQueenDialogueScreen.java +++ b/src/main/java/com/gildedgames/aether/client/gui/screen/ValkyrieQueenDialogueScreen.java @@ -9,7 +9,7 @@ import com.mojang.blaze3d.vertex.PoseStack; import net.minecraft.ChatFormatting; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.components.Widget; +import net.minecraft.client.gui.components.Renderable; import net.minecraft.client.gui.screens.Screen; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.MutableComponent; @@ -101,10 +101,10 @@ public void addDialogueOptions(PlayerDialogueButton... options) { private void positionDialogueOptions() { this.dialogue.reposition(this.width, this.height); int lineNumber = this.dialogue.height / 12 + 1; - for (Widget widget : this.renderables) { - if (widget instanceof PlayerDialogueButton option) { - option.x = this.width / 2 - option.getWidth() / 2; - option.y = this.height / 2 + 12 * lineNumber; + for (Renderable renderable : this.renderables) { + if (renderable instanceof PlayerDialogueButton option) { + option.setX(this.width / 2 - option.getWidth() / 2); + option.setY(this.height / 2 + 12 * lineNumber); lineNumber++; } } diff --git a/src/main/java/com/gildedgames/aether/client/gui/screen/inventory/AbstractAetherFurnaceScreen.java b/src/main/java/com/gildedgames/aether/client/gui/screen/inventory/AbstractAetherFurnaceScreen.java index 4f370fefc0..9e892931cf 100644 --- a/src/main/java/com/gildedgames/aether/client/gui/screen/inventory/AbstractAetherFurnaceScreen.java +++ b/src/main/java/com/gildedgames/aether/client/gui/screen/inventory/AbstractAetherFurnaceScreen.java @@ -121,10 +121,4 @@ public void recipesUpdated() { public RecipeBookComponent getRecipeBookComponent() { return this.recipeBookComponent; } - - @Override - public void removed() { - this.recipeBookComponent.removed(); - super.removed(); - } } \ No newline at end of file diff --git a/src/main/java/com/gildedgames/aether/client/gui/screen/inventory/AccessoriesScreen.java b/src/main/java/com/gildedgames/aether/client/gui/screen/inventory/AccessoriesScreen.java index ab6d438e79..cb233cf08e 100644 --- a/src/main/java/com/gildedgames/aether/client/gui/screen/inventory/AccessoriesScreen.java +++ b/src/main/java/com/gildedgames/aether/client/gui/screen/inventory/AccessoriesScreen.java @@ -11,7 +11,8 @@ import com.mojang.blaze3d.systems.RenderSystem; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.components.ImageButton; -import net.minecraft.client.gui.components.Widget; +import net.minecraft.client.gui.components.Renderable; +import net.minecraft.client.gui.components.Tooltip; import net.minecraft.client.gui.screens.Screen; import net.minecraft.client.gui.screens.inventory.CreativeModeInventoryScreen; import net.minecraft.client.gui.screens.inventory.EffectRenderingInventoryScreen; @@ -53,7 +54,6 @@ public class AccessoriesScreen extends EffectRenderingInventoryScreen { this.recipeBookComponent.toggleVisibility(); this.leftPos = this.recipeBookComponent.updateScreenPosition(this.width, this.imageWidth); - ((ImageButton) pressed).setPosition(this.leftPos + 142, this.height / 2 - 22); + pressed.setPosition(this.leftPos + 142, this.height / 2 - 22); this.buttonClicked = true; })); this.addWidget(this.recipeBookComponent); @@ -111,40 +110,41 @@ public void init() { this.updateRenderButtons(); - this.addRenderableWidget(new ImageButton(this.leftPos - 22, this.topPos + 2, 20, 20, 0, 0, 20, SKINS_BUTTON, 20, 40, - (pressed) -> Aether.LOGGER.info("WIP"), //todo - (button, poseStack, x, y) -> this.renderTooltip(poseStack, Component.translatable("gui.aether.accessories.skins_button"), x, y), - Component.translatable("gui.aether.accessories.skins_button")) - { - @Override - public void render(@Nonnull PoseStack poseStack, int mouseX, int mouseY, float partialTick) { - super.render(poseStack, mouseX, mouseY, partialTick); - if (!AccessoriesScreen.this.recipeBookComponent.isVisible()) { - this.x = AccessoriesScreen.this.leftPos - 22; - this.y = AccessoriesScreen.this.topPos + 2; - } else { - this.x = AccessoriesScreen.this.leftPos + 2; - this.y = AccessoriesScreen.this.topPos - 22; - } - } - }); - this.addRenderableWidget(new ImageButton(this.leftPos - 22, this.topPos + 24, 20, 20, 0, 0, 20, CUSTOMIZATION_BUTTON, 20, 40, + ImageButton skinsButton = new ImageButton(this.leftPos - 22, this.topPos + 2, 20, 20, 0, 0, 20, SKINS_BUTTON, 20, 40, + (pressed) -> Aether.LOGGER.info("WIP"), //todo, + Component.translatable("gui.aether.accessories.skins_button")) { + @Override + public void render(@Nonnull PoseStack poseStack, int mouseX, int mouseY, float partialTick) { + super.render(poseStack, mouseX, mouseY, partialTick); + if (!AccessoriesScreen.this.recipeBookComponent.isVisible()) { + this.setX(AccessoriesScreen.this.leftPos - 22); + this.setY(AccessoriesScreen.this.topPos + 2); + } else { + this.setX(AccessoriesScreen.this.leftPos + 2); + this.setY(AccessoriesScreen.this.topPos - 22); + } + } + }; + skinsButton.setTooltip(Tooltip.create(Component.translatable("gui.aether.accessories.skins_button"))); + this.addRenderableWidget(skinsButton); + + ImageButton customizationButton = new ImageButton(this.leftPos - 22, this.topPos + 24, 20, 20, 0, 0, 20, CUSTOMIZATION_BUTTON, 20, 40, (pressed) -> this.minecraft.setScreen(new AetherCustomizationsScreen(this)), - (button, poseStack, x, y) -> this.renderTooltip(poseStack, Component.translatable("gui.aether.accessories.customization_button"), x, y), - Component.translatable("gui.aether.accessories.customization_button")) - { + Component.translatable("gui.aether.accessories.customization_button")) { @Override public void render(@Nonnull PoseStack poseStack, int mouseX, int mouseY, float partialTick) { super.render(poseStack, mouseX, mouseY, partialTick); if (!AccessoriesScreen.this.recipeBookComponent.isVisible()) { - this.x = AccessoriesScreen.this.leftPos - 22; - this.y = AccessoriesScreen.this.topPos + 24; + this.setX(AccessoriesScreen.this.leftPos - 22); + this.setY(AccessoriesScreen.this.topPos + 24); } else { - this.x = AccessoriesScreen.this.leftPos + 24; - this.y = AccessoriesScreen.this.topPos - 22; + this.setX(AccessoriesScreen.this.leftPos + 24); + this.setY(AccessoriesScreen.this.topPos - 22); } } - }); + }; + customizationButton.setTooltip(Tooltip.create(Component.translatable("gui.aether.accessories.customization_button"))); + this.addRenderableWidget(customizationButton); } } @@ -160,8 +160,8 @@ public void updateRenderButtons() { { @Override public void render(@Nonnull PoseStack poseStack, int mouseX, int mouseY, float partialTick) { - this.x = AccessoriesScreen.this.leftPos + inventorySlot.x + 11; - this.y = AccessoriesScreen.this.topPos + inventorySlot.y - 3; + this.setX(AccessoriesScreen.this.leftPos + inventorySlot.x + 11); + this.setY(AccessoriesScreen.this.topPos + inventorySlot.y - 3); } }); } @@ -187,8 +187,8 @@ public void render(@Nonnull PoseStack poseStack, int mouseX, int mouseY, float p this.recipeBookComponent.renderGhostRecipe(poseStack, this.leftPos, this.topPos, false, partialTicks); boolean isButtonHovered = false; - for (Widget button : this.renderables) { - if (button instanceof RenderButton renderButton) { + for (Renderable renderable : this.renderables) { + if (renderable instanceof RenderButton renderButton) { renderButton.renderButtonOverlay(poseStack, mouseX, mouseY, partialTicks); if (renderButton.isHoveredOrFocused()) { isButtonHovered = true; @@ -342,14 +342,6 @@ public void recipesUpdated() { this.recipeBookComponent.recipesUpdated(); } - @Override - public void removed() { - if (this.recipeBookComponentInitialized) { - this.recipeBookComponent.removed(); - } - super.removed(); - } - @Nonnull @Override public RecipeBookComponent getRecipeBookComponent() { diff --git a/src/main/java/com/gildedgames/aether/client/gui/screen/inventory/IncubatorScreen.java b/src/main/java/com/gildedgames/aether/client/gui/screen/inventory/IncubatorScreen.java index fd51495f17..58fa57c9f6 100644 --- a/src/main/java/com/gildedgames/aether/client/gui/screen/inventory/IncubatorScreen.java +++ b/src/main/java/com/gildedgames/aether/client/gui/screen/inventory/IncubatorScreen.java @@ -124,10 +124,4 @@ public void recipesUpdated() { public RecipeBookComponent getRecipeBookComponent() { return this.recipeBookComponent; } - - @Override - public void removed() { - this.recipeBookComponent.removed(); - super.removed(); - } } diff --git a/src/main/java/com/gildedgames/aether/client/gui/screen/menu/AetherTitleScreen.java b/src/main/java/com/gildedgames/aether/client/gui/screen/menu/AetherTitleScreen.java index 246c3d7277..adaf1e033a 100644 --- a/src/main/java/com/gildedgames/aether/client/gui/screen/menu/AetherTitleScreen.java +++ b/src/main/java/com/gildedgames/aether/client/gui/screen/menu/AetherTitleScreen.java @@ -10,9 +10,9 @@ import com.mojang.blaze3d.platform.GlStateManager; import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.math.Vector3f; +import com.mojang.math.Axis; import net.minecraft.client.gui.components.AbstractWidget; -import net.minecraft.client.gui.components.Widget; +import net.minecraft.client.gui.components.Renderable; import net.minecraft.client.gui.components.events.GuiEventListener; import net.minecraft.client.gui.narration.NarratableEntry; import net.minecraft.client.renderer.GameRenderer; @@ -30,7 +30,7 @@ import javax.annotation.Nonnull; public class AetherTitleScreen extends TitleScreen { - public static final Music MENU = new Music(AetherSoundEvents.MUSIC_MENU.get(), 20, 600, true); + public static final Music MENU = new Music(AetherSoundEvents.MUSIC_MENU.getHolder().orElseThrow(), 20, 600, true); private final PanoramaRenderer panorama = new PanoramaRenderer(new CubeMap(new ResourceLocation(Aether.MODID, "textures/gui/title/panorama/panorama"))); private static final ResourceLocation PANORAMA_OVERLAY = new ResourceLocation("textures/gui/title/background/panorama_overlay.png"); @@ -57,15 +57,15 @@ protected void init() { public void setupButtons() { int buttonCount = 0; - for (Widget widget : this.renderables) { - if (widget instanceof AetherMenuButton aetherMenuButton) { + for (Renderable renderable : this.renderables) { + if (renderable instanceof AetherMenuButton aetherMenuButton) { if (this.alignElementsLeft()) { - aetherMenuButton.x = 30; - aetherMenuButton.y = 80 + buttonCount * 25; + aetherMenuButton.setX(30); + aetherMenuButton.setY(80 + buttonCount * 25); aetherMenuButton.setWidth(200); } else { - aetherMenuButton.x = aetherMenuButton.initialX; - aetherMenuButton.y = aetherMenuButton.initialY - 10; + aetherMenuButton.setX(aetherMenuButton.initialX); + aetherMenuButton.setY(aetherMenuButton.initialY - 10); aetherMenuButton.setWidth(aetherMenuButton.initialWidth); } buttonCount++; @@ -110,7 +110,7 @@ public void render(@Nonnull PoseStack poseStack, int mouseX, int mouseY, float p float splashY = this.alignElementsLeft() ? 50.0F : 70.0F; poseStack.pushPose(); poseStack.translate(splashX, splashY, 0.0F); - poseStack.mulPose(Vector3f.ZP.rotationDegrees(-20.0F)); + poseStack.mulPose(Axis.ZP.rotationDegrees(-20.0F)); float f2 = 1.8F - Mth.abs(Mth.sin((float) (Util.getMillis() % 1000L) / 1000.0F * ((float) Math.PI * 2F)) * 0.1F); f2 = f2 * 100.0F / (float) (this.font.width(titleScreenAccessor.getSplash()) + 32); poseStack.scale(f2, f2, f2); drawCenteredString(poseStack, this.font, titleScreenAccessor.getSplash(), 0, -8, 16776960 | l); @@ -146,9 +146,9 @@ public void render(@Nonnull PoseStack poseStack, int mouseX, int mouseY, float p } int offset = 0; - for (Widget widget : this.renderables) { - widget.render(poseStack, mouseX, mouseY, partialTicks); - if (widget instanceof AetherMenuButton aetherButton) { + for (Renderable renderable : this.renderables) { + renderable.render(poseStack, mouseX, mouseY, partialTicks); + if (renderable instanceof AetherMenuButton aetherButton) { if (aetherButton.isMouseOver(mouseX, mouseY)) { if (aetherButton.renderOffset < 15) { aetherButton.renderOffset += 4; @@ -159,21 +159,21 @@ public void render(@Nonnull PoseStack poseStack, int mouseX, int mouseY, float p } } } - if (widget instanceof DynamicMenuButton dynamicMenuButton) { + if (renderable instanceof DynamicMenuButton dynamicMenuButton) { if (dynamicMenuButton.enabled) { offset -= 24; } } } - for (Widget widget : this.renderables) { - if (widget instanceof Button button) { + for (Renderable renderable : this.renderables) { + if (renderable instanceof Button button) { Component buttonText = button.getMessage(); if (buttonText.equals(Component.translatable("narrator.button.accessibility"))) { - button.x = this.width - 48 + offset; - button.y = 4; + button.setX(this.width - 48 + offset); + button.setY(4); } else if (buttonText.equals(Component.translatable("narrator.button.language"))) { - button.x = this.width - 24 + offset; - button.y = 4; + button.setX(this.width - 24 + offset); + button.setY(4); } } } @@ -187,14 +187,14 @@ public void render(@Nonnull PoseStack poseStack, int mouseX, int mouseY, float p @SuppressWarnings("unchecked") @Nonnull @Override - protected T addRenderableWidget(@Nonnull T widget) { - if (widget instanceof Button button) { + protected T addRenderableWidget(@Nonnull T renderable) { + if (renderable instanceof Button button) { if (this.isButtonAether(button.getMessage())) { AetherMenuButton aetherButton = new AetherMenuButton(button); return (T) super.addRenderableWidget(aetherButton); } } - return super.addRenderableWidget(widget); + return super.addRenderableWidget(renderable); } public boolean isButtonAether(Component buttonText) { diff --git a/src/main/java/com/gildedgames/aether/client/gui/screen/menu/VanillaLeftTitleScreen.java b/src/main/java/com/gildedgames/aether/client/gui/screen/menu/VanillaLeftTitleScreen.java index 4f8285218f..b4383f2d96 100644 --- a/src/main/java/com/gildedgames/aether/client/gui/screen/menu/VanillaLeftTitleScreen.java +++ b/src/main/java/com/gildedgames/aether/client/gui/screen/menu/VanillaLeftTitleScreen.java @@ -5,11 +5,11 @@ import com.mojang.blaze3d.platform.GlStateManager; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.PoseStack; -import com.mojang.math.Vector3f; +import com.mojang.math.Axis; import net.minecraft.Util; import net.minecraft.client.gui.components.AbstractWidget; import net.minecraft.client.gui.components.Button; -import net.minecraft.client.gui.components.Widget; +import net.minecraft.client.gui.components.Renderable; import net.minecraft.client.gui.components.events.GuiEventListener; import net.minecraft.client.gui.screens.TitleScreen; import net.minecraft.client.renderer.GameRenderer; @@ -45,12 +45,12 @@ protected void init() { public void setupButtons() { int buttonCount = 0; - for (Widget widget : this.renderables) { - if (widget instanceof Button button) { + for (Renderable renderable : this.renderables) { + if (renderable instanceof Button button) { Component buttonText = button.getMessage(); if (isButtonLeft(buttonText)) { - button.x = 47; - button.y = 80 + buttonCount * 25; + button.setX(47); + button.setY(80 + buttonCount * 25); button.setWidth(200); buttonCount++; if (button.getMessage().equals(Component.translatable("fml.menu.mods"))) { @@ -106,7 +106,7 @@ public void render(@Nonnull PoseStack poseStack, int mouseX, int mouseY, float p if (titleScreenAccessor.getSplash() != null) { poseStack.pushPose(); poseStack.translate(250.0F, 50.0F, 0.0F); - poseStack.mulPose(Vector3f.ZP.rotationDegrees(-20.0F)); + poseStack.mulPose(Axis.ZP.rotationDegrees(-20.0F)); float f2 = 1.8F - Mth.abs(Mth.sin((float) (Util.getMillis() % 1000L) / 1000.0F * ((float) Math.PI * 2F)) * 0.1F); f2 = f2 * 100.0F / (float) (this.font.width(titleScreenAccessor.getSplash()) + 32); poseStack.scale(f2, f2, f2); drawCenteredString(poseStack, this.font, titleScreenAccessor.getSplash(), 0, -8, 16776960 | l); @@ -133,23 +133,23 @@ public void render(@Nonnull PoseStack poseStack, int mouseX, int mouseY, float p } int offset = 0; - for (Widget widget : this.renderables) { - widget.render(poseStack, mouseX, mouseY, partialTicks); - if (widget instanceof DynamicMenuButton dynamicMenuButton) { + for (Renderable renderable : this.renderables) { + renderable.render(poseStack, mouseX, mouseY, partialTicks); + if (renderable instanceof DynamicMenuButton dynamicMenuButton) { if (dynamicMenuButton.enabled) { offset -= 24; } } } - for (Widget widget : this.renderables) { - if (widget instanceof Button button) { + for (Renderable renderable : this.renderables) { + if (renderable instanceof Button button) { Component buttonText = button.getMessage(); if (buttonText.equals(Component.translatable("narrator.button.accessibility"))) { - button.x = this.width - 48 + offset; - button.y = 4; + button.setX(this.width - 48 + offset); + button.setY(4); } else if (buttonText.equals(Component.translatable("narrator.button.language"))) { - button.x = this.width - 24 + offset; - button.y = 4; + button.setX(this.width - 24 + offset); + button.setY(4); } } } diff --git a/src/main/java/com/gildedgames/aether/client/gui/screen/perks/AetherCustomizationsScreen.java b/src/main/java/com/gildedgames/aether/client/gui/screen/perks/AetherCustomizationsScreen.java index 4facc6faab..33b9292ad5 100644 --- a/src/main/java/com/gildedgames/aether/client/gui/screen/perks/AetherCustomizationsScreen.java +++ b/src/main/java/com/gildedgames/aether/client/gui/screen/perks/AetherCustomizationsScreen.java @@ -11,6 +11,7 @@ import com.mojang.blaze3d.vertex.PoseStack; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.components.Button; +import net.minecraft.client.gui.components.Tooltip; import net.minecraft.client.gui.screens.Screen; import net.minecraft.client.gui.screens.inventory.InventoryScreen; import net.minecraft.network.chat.CommonComponents; @@ -47,31 +48,27 @@ protected void init() { int xPos = this.width / 2 - 65; int yPos = this.height / 2 - 10 - (int) (buttonCount * 12.5); int i = 0; - this.addRenderableWidget(new Button(xPos, yPos + (25 * i), 150, 20, - Component.translatable(this.customizations.areSleeveGloves() ? "gui.aether.customization.gloves.sleeve" : "gui.aether.customization.gloves.arm"), + this.addRenderableWidget(Button.builder(Component.translatable(this.customizations.areSleeveGloves() ? "gui.aether.customization.gloves.sleeve" : "gui.aether.customization.gloves.arm"), (pressed) -> { this.customizations.setAreSleeveGloves(!this.customizations.areSleeveGloves()); this.updateValues(); - }, - (button, poseStack, x, y) -> button.setMessage(Component.translatable(this.customizations.areSleeveGloves() ? "gui.aether.customization.gloves.sleeve" : "gui.aether.customization.gloves.arm")) - )); + pressed.setMessage(Component.translatable(this.customizations.areSleeveGloves() ? "gui.aether.customization.gloves.sleeve" : "gui.aether.customization.gloves.arm")); + }).pos(xPos, yPos + (25 * i)).build()); if (AetherPlayerRankings.hasHalo(playerUUID)) { i++; - this.addRenderableWidget(new Button(xPos, yPos + (25 * i), 150, 20, - Component.translatable(this.customizations.isHaloEnabled() ? "gui.aether.customization.halo.on" : "gui.aether.customization.halo.off"), + this.addRenderableWidget(Button.builder(Component.translatable(this.customizations.isHaloEnabled() ? "gui.aether.customization.halo.on" : "gui.aether.customization.halo.off"), (pressed) -> { this.customizations.setIsHaloEnabled(!this.customizations.isHaloEnabled()); this.updateValues(); - }, - (button, poseStack, x, y) -> button.setMessage(Component.translatable(this.customizations.isHaloEnabled() ? "gui.aether.customization.halo.on" : "gui.aether.customization.halo.off")) - )); + pressed.setMessage(Component.translatable(this.customizations.isHaloEnabled() ? "gui.aether.customization.halo.on" : "gui.aether.customization.halo.off")); + }).pos(xPos, yPos + (25 * i)).build()); ColorBox colorBox = new ColorBox("haloEnabled", "haloColor", Minecraft.getInstance().font, xPos + 155, yPos + (25 * i), 60, 20, Component.translatable("gui.aether.customization.halo.color")); if (this.customizations.getHaloHex() != null && !this.customizations.getHaloHex().isEmpty() && !this.customizations.getHaloHex().equals("null")) { colorBox.setSavedValue(this.customizations.getHaloHex()); colorBox.setValue(colorBox.getSavedValue()); } this.addRenderableWidget(colorBox); - this.addRenderableWidget(new CustomizationUndoButton(colorBox, xPos + 220, yPos + (25 * i), 20, 20, 0, 20, 20, UNDO_BUTTON, 20, 60, + CustomizationUndoButton undoButton = new CustomizationUndoButton(colorBox, xPos + 220, yPos + (25 * i), 20, 20, 0, 20, 20, UNDO_BUTTON, 20, 60, (pressed) -> { if (pressed.isActive()) { if (!colorBox.getSavedValue().isEmpty()) { @@ -81,10 +78,10 @@ protected void init() { } } }, - (button, poseStack, x, y) -> this.renderTooltip(poseStack, Component.translatable("gui.aether.customization.undo"), x, y), - Component.translatable("gui.aether.customization.undo")) - ); - this.addRenderableWidget(new CustomizationSaveButton(colorBox, xPos + 245, yPos + (25 * i), 20, 20, 0, 20, 20, SAVE_BUTTON, 20, 60, + Component.translatable("gui.aether.customization.undo")); + undoButton.setTooltip(Tooltip.create(Component.translatable("gui.aether.customization.undo"))); + this.addRenderableWidget(undoButton); + CustomizationSaveButton saveButton = new CustomizationSaveButton(colorBox, xPos + 245, yPos + (25 * i), 20, 20, 0, 20, 20, SAVE_BUTTON, 20, 60, (pressed) -> { if (pressed.isActive()) { colorBox.setSavedValue(colorBox.getValue()); @@ -92,27 +89,25 @@ protected void init() { this.updateValues(); } }, - (button, poseStack, x, y) -> this.renderTooltip(poseStack, Component.translatable("gui.aether.customization.save"), x, y), - Component.translatable("gui.aether.customization.save")) - ); + Component.translatable("gui.aether.customization.save")); + saveButton.setTooltip(Tooltip.create(Component.translatable("gui.aether.customization.save"))); + this.addRenderableWidget(saveButton); } if (AetherPlayerRankings.hasDevGlow(playerUUID)) { i++; - this.addRenderableWidget(new Button(xPos, yPos + (25 * i), 150, 20, - Component.translatable(this.customizations.isDeveloperGlowEnabled() ? "gui.aether.customization.developer_glow.on" : "gui.aether.customization.developer_glow.off"), + this.addRenderableWidget(Button.builder(Component.translatable(this.customizations.isDeveloperGlowEnabled() ? "gui.aether.customization.developer_glow.on" : "gui.aether.customization.developer_glow.off"), (pressed) -> { this.customizations.setIsDeveloperGlowEnabled(!this.customizations.isDeveloperGlowEnabled()); this.updateValues(); - }, - (button, poseStack, x, y) -> button.setMessage(Component.translatable(this.customizations.isDeveloperGlowEnabled() ? "gui.aether.customization.developer_glow.on" : "gui.aether.customization.developer_glow.off")) - )); + pressed.setMessage(Component.translatable(this.customizations.isDeveloperGlowEnabled() ? "gui.aether.customization.developer_glow.on" : "gui.aether.customization.developer_glow.off")); + }).pos(xPos, yPos + (25 * i)).build()); ColorBox colorBox = new ColorBox("developerGlowEnabled", "developerGlowColor", Minecraft.getInstance().font, xPos + 155, yPos + (25 * i), 60, 20, Component.translatable("gui.aether.customization.developer_glow.color")); if (this.customizations.getDeveloperGlowHex() != null && !this.customizations.getDeveloperGlowHex().isEmpty() && !this.customizations.getDeveloperGlowHex().equals("null")) { colorBox.setSavedValue(this.customizations.getDeveloperGlowHex()); colorBox.setValue(colorBox.getSavedValue()); } this.addRenderableWidget(colorBox); - this.addRenderableWidget(new CustomizationUndoButton(colorBox, xPos + 220, yPos + (25 * i), 20, 20, 0, 20, 20, UNDO_BUTTON, 20, 60, + CustomizationUndoButton undoButton = new CustomizationUndoButton(colorBox, xPos + 220, yPos + (25 * i), 20, 20, 0, 20, 20, UNDO_BUTTON, 20, 60, (pressed) -> { if (pressed.isActive()) { if (!colorBox.getSavedValue().isEmpty()) { @@ -121,12 +116,11 @@ protected void init() { colorBox.setValue(this.customizations.getDeveloperGlowHex()); } } - }, - (button, poseStack, x, y) -> this.renderTooltip(poseStack, Component.translatable("gui.aether.customization.undo"), x, y), - Component.translatable("gui.aether.customization.undo")) - ); - this.addRenderableWidget(new CustomizationSaveButton(colorBox, xPos + 245, yPos + (25 * i), 20, 20, 0, 20, 20, SAVE_BUTTON, 20, 60, + Component.translatable("gui.aether.customization.undo")); + undoButton.setTooltip(Tooltip.create(Component.translatable("gui.aether.customization.undo"))); + this.addRenderableWidget(undoButton); + CustomizationSaveButton saveButton = new CustomizationSaveButton(colorBox, xPos + 245, yPos + (25 * i), 20, 20, 0, 20, 20, SAVE_BUTTON, 20, 60, (pressed) -> { if (pressed.isActive()) { colorBox.setSavedValue(colorBox.getValue()); @@ -134,12 +128,12 @@ protected void init() { this.updateValues(); } }, - (button, poseStack, x, y) -> this.renderTooltip(poseStack, Component.translatable("gui.aether.customization.save"), x, y), - Component.translatable("gui.aether.customization.save")) - ); + Component.translatable("gui.aether.customization.save")); + saveButton.setTooltip(Tooltip.create(Component.translatable("gui.aether.customization.save"))); + this.addRenderableWidget(saveButton); } } - this.addRenderableWidget(new Button(this.width / 2 - 100, this.height - 30, 200, 20, CommonComponents.GUI_DONE, (pressed) -> this.onClose())); + this.addRenderableWidget(Button.builder(CommonComponents.GUI_DONE, (pressed) -> this.onClose()).pos(this.width / 2 - 100, this.height - 30).size(200, 20).build()); } @Override diff --git a/src/main/java/com/gildedgames/aether/client/renderer/AetherRenderers.java b/src/main/java/com/gildedgames/aether/client/renderer/AetherRenderers.java index d53559b258..337549f508 100644 --- a/src/main/java/com/gildedgames/aether/client/renderer/AetherRenderers.java +++ b/src/main/java/com/gildedgames/aether/client/renderer/AetherRenderers.java @@ -144,8 +144,8 @@ public static void registerLayerDefinitions(EntityRenderersEvent.RegisterLayerDe event.registerLayerDefinition(AetherModelLayers.VALKYRIE_QUEEN_WINGS, () -> ValkyrieWingsModel.createMainLayer(4.5F, 2.5F)); event.registerLayerDefinition(AetherModelLayers.SUN_SPIRIT, SunSpiritModel::createBodyLayer); - event.registerLayerDefinition(AetherModelLayers.SKYROOT_BOAT, () -> BoatModel.createBodyModel(false)); - event.registerLayerDefinition(AetherModelLayers.SKYROOT_CHEST_BOAT, () -> BoatModel.createBodyModel(true)); + event.registerLayerDefinition(AetherModelLayers.SKYROOT_BOAT, BoatModel::createBodyModel); + event.registerLayerDefinition(AetherModelLayers.SKYROOT_CHEST_BOAT, ChestBoatModel::createBodyModel); event.registerLayerDefinition(AetherModelLayers.CLOUD_MINION, CloudMinionModel::createBodyLayer); diff --git a/src/main/java/com/gildedgames/aether/client/renderer/accessory/CapeRenderer.java b/src/main/java/com/gildedgames/aether/client/renderer/accessory/CapeRenderer.java index 6e3e0ab66d..5cf4177377 100644 --- a/src/main/java/com/gildedgames/aether/client/renderer/accessory/CapeRenderer.java +++ b/src/main/java/com/gildedgames/aether/client/renderer/accessory/CapeRenderer.java @@ -6,7 +6,7 @@ import com.gildedgames.aether.item.accessories.cape.CapeItem; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; -import com.mojang.math.Vector3f; +import com.mojang.math.Axis; import net.minecraft.client.Minecraft; import net.minecraft.client.model.EntityModel; import net.minecraft.client.player.AbstractClientPlayer; @@ -72,9 +72,9 @@ public > void render(ItemStack f1 += 25.0F; } - poseStack.mulPose(Vector3f.XP.rotationDegrees(6.0F + f2 / 2.0F + f1)); - poseStack.mulPose(Vector3f.ZP.rotationDegrees(f3 / 2.0F)); - poseStack.mulPose(Vector3f.YP.rotationDegrees(180.0F - f3 / 2.0F)); + poseStack.mulPose(Axis.XP.rotationDegrees(6.0F + f2 / 2.0F + f1)); + poseStack.mulPose(Axis.ZP.rotationDegrees(f3 / 2.0F)); + poseStack.mulPose(Axis.YP.rotationDegrees(180.0F - f3 / 2.0F)); this.renderCape(poseStack, buffer, stack, capeItem, light); poseStack.popPose(); } @@ -82,7 +82,7 @@ public > void render(ItemStack this.cape.setupAnim(livingEntity, limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch); poseStack.pushPose(); poseStack.translate(0.0D, 0.0D, 0.125D); - poseStack.mulPose(Vector3f.YP.rotationDegrees(180.0F)); + poseStack.mulPose(Axis.YP.rotationDegrees(180.0F)); this.renderCape(poseStack, buffer, stack, capeItem, light); poseStack.popPose(); } diff --git a/src/main/java/com/gildedgames/aether/client/renderer/blockentity/ChestMimicRenderer.java b/src/main/java/com/gildedgames/aether/client/renderer/blockentity/ChestMimicRenderer.java index 6198182cd0..1760362006 100644 --- a/src/main/java/com/gildedgames/aether/client/renderer/blockentity/ChestMimicRenderer.java +++ b/src/main/java/com/gildedgames/aether/client/renderer/blockentity/ChestMimicRenderer.java @@ -5,6 +5,7 @@ import com.gildedgames.aether.block.dungeon.ChestMimicBlock; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; +import com.mojang.math.Axis; import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.state.BlockState; @@ -17,7 +18,6 @@ import net.minecraft.world.level.block.state.properties.ChestType; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.core.Direction; -import com.mojang.math.Vector3f; import javax.annotation.Nonnull; import java.util.Calendar; @@ -47,7 +47,7 @@ public void render(T blockEntity, float partialTicks, @Nonnull PoseStack poseSta poseStack.pushPose(); float f = blockState.getValue(ChestBlock.FACING).toYRot(); poseStack.translate(0.5D, 0.5D, 0.5D); - poseStack.mulPose(Vector3f.YP.rotationDegrees(-f)); + poseStack.mulPose(Axis.YP.rotationDegrees(-f)); poseStack.translate(-0.5D, -0.5D, -0.5D); Material material = this.getMaterial(blockEntity); VertexConsumer vertexconsumer = material.buffer(buffer, RenderType::entityCutout); diff --git a/src/main/java/com/gildedgames/aether/client/renderer/blockentity/SkyrootBedRenderer.java b/src/main/java/com/gildedgames/aether/client/renderer/blockentity/SkyrootBedRenderer.java index f6be100719..e3d0ff10c9 100644 --- a/src/main/java/com/gildedgames/aether/client/renderer/blockentity/SkyrootBedRenderer.java +++ b/src/main/java/com/gildedgames/aether/client/renderer/blockentity/SkyrootBedRenderer.java @@ -7,6 +7,7 @@ import com.gildedgames.aether.blockentity.AetherBlockEntityTypes; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; +import com.mojang.math.Axis; import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.ChestBlock; @@ -19,7 +20,6 @@ import net.minecraft.world.level.block.DoubleBlockCombiner; import net.minecraft.core.Direction; import net.minecraft.resources.ResourceLocation; -import com.mojang.math.Vector3f; import net.minecraft.world.level.Level; import javax.annotation.Nonnull; @@ -50,9 +50,9 @@ public void render(SkyrootBedBlockEntity bed, float partialTicks, @Nonnull PoseS private void renderPiece(PoseStack poseStack, MultiBufferSource buffer, ModelPart model, Direction direction, int packedLight, int packedOverlay, boolean foot) { poseStack.pushPose(); poseStack.translate(0.0D, 0.5625D, foot ? -1.0D : 0.0D); - poseStack.mulPose(Vector3f.XP.rotationDegrees(90.0F)); + poseStack.mulPose(Axis.XP.rotationDegrees(90.0F)); poseStack.translate(0.5D, 0.5D, 0.5D); - poseStack.mulPose(Vector3f.ZP.rotationDegrees(180.0F + direction.toYRot())); + poseStack.mulPose(Axis.ZP.rotationDegrees(180.0F + direction.toYRot())); poseStack.translate(-0.5D, -0.5D, -0.5D); VertexConsumer vertexconsumer = buffer.getBuffer(RenderType.entitySolid(new ResourceLocation(Aether.MODID, "textures/entity/tiles/bed/skyroot_bed.png"))); model.render(poseStack, vertexconsumer, packedLight, packedOverlay); diff --git a/src/main/java/com/gildedgames/aether/client/renderer/entity/AbstractCrystalRenderer.java b/src/main/java/com/gildedgames/aether/client/renderer/entity/AbstractCrystalRenderer.java index ed786643d4..edd03479a6 100644 --- a/src/main/java/com/gildedgames/aether/client/renderer/entity/AbstractCrystalRenderer.java +++ b/src/main/java/com/gildedgames/aether/client/renderer/entity/AbstractCrystalRenderer.java @@ -5,12 +5,12 @@ import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; +import com.mojang.math.Axis; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.entity.EntityRenderer; import net.minecraft.client.renderer.entity.EntityRendererProvider; import net.minecraft.client.renderer.texture.OverlayTexture; -import com.mojang.math.Vector3f; import javax.annotation.Nonnull; @@ -28,11 +28,11 @@ public void render(@Nonnull T crystal, float entityYaw, float partialTicks, @Non poseStack.translate(0.0, 0.25, 0.0); VertexConsumer iVertexBuilder = buffer.getBuffer(RenderType.entityTranslucent(this.getTextureLocation(crystal))); float f = (float) crystal.tickCount + partialTicks; - poseStack.mulPose(Vector3f.XP.rotationDegrees(f * 0.1F * 360.0F)); + poseStack.mulPose(Axis.XP.rotationDegrees(f * 0.1F * 360.0F)); this.crystal.crystal1.render(poseStack, iVertexBuilder, packedLight, OverlayTexture.NO_OVERLAY, 1.0F, 1.0F, 1.0F, 1.0F); - poseStack.mulPose(Vector3f.YP.rotationDegrees(f * 0.1F * 360.0F)); + poseStack.mulPose(Axis.YP.rotationDegrees(f * 0.1F * 360.0F)); this.crystal.crystal2.render(poseStack, iVertexBuilder, packedLight, OverlayTexture.NO_OVERLAY, 1.0F, 1.0F, 1.0F, 1.0F); - poseStack.mulPose(Vector3f.ZP.rotationDegrees(f * 0.1F * 360.0F)); + poseStack.mulPose(Axis.ZP.rotationDegrees(f * 0.1F * 360.0F)); this.crystal.crystal3.render(poseStack, iVertexBuilder, packedLight, OverlayTexture.NO_OVERLAY, 1.0F, 1.0F, 1.0F, 1.0F); poseStack.popPose(); super.render(crystal, entityYaw, partialTicks, poseStack, buffer, packedLight); diff --git a/src/main/java/com/gildedgames/aether/client/renderer/entity/AerbunnyRenderer.java b/src/main/java/com/gildedgames/aether/client/renderer/entity/AerbunnyRenderer.java index f0324ee5ce..19b4df7ece 100644 --- a/src/main/java/com/gildedgames/aether/client/renderer/entity/AerbunnyRenderer.java +++ b/src/main/java/com/gildedgames/aether/client/renderer/entity/AerbunnyRenderer.java @@ -6,10 +6,10 @@ import com.gildedgames.aether.entity.passive.Aerbunny; import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.math.Axis; import net.minecraft.client.renderer.entity.EntityRendererProvider; import net.minecraft.client.renderer.entity.MobRenderer; import net.minecraft.resources.ResourceLocation; -import com.mojang.math.Vector3f; import net.minecraft.util.Mth; import javax.annotation.Nonnull; @@ -34,13 +34,13 @@ protected void setupRotations(@Nonnull Aerbunny aerbunny, @Nonnull PoseStack pos super.setupRotations(aerbunny, poseStack, ageInTicks, rotationYaw, partialTicks); if (!aerbunny.isOnGround()) { if (aerbunny.getDeltaMovement().y > 0.5) { - poseStack.mulPose(Vector3f.XN.rotationDegrees(Mth.rotLerp(partialTicks, 0.0F, 15.0F))); + poseStack.mulPose(Axis.XN.rotationDegrees(Mth.rotLerp(partialTicks, 0.0F, 15.0F))); } else if (aerbunny.getDeltaMovement().y < -0.5) { - poseStack.mulPose(Vector3f.XN.rotationDegrees(Mth.rotLerp(partialTicks, 0.0F, -15.0F))); + poseStack.mulPose(Axis.XN.rotationDegrees(Mth.rotLerp(partialTicks, 0.0F, -15.0F))); } else { - poseStack.mulPose(Vector3f.XN.rotationDegrees((float)(aerbunny.getDeltaMovement().y * 30.0))); + poseStack.mulPose(Axis.XN.rotationDegrees((float)(aerbunny.getDeltaMovement().y * 30.0))); } } } diff --git a/src/main/java/com/gildedgames/aether/client/renderer/entity/AerwhaleRenderer.java b/src/main/java/com/gildedgames/aether/client/renderer/entity/AerwhaleRenderer.java index e4e0aa4549..7426391456 100644 --- a/src/main/java/com/gildedgames/aether/client/renderer/entity/AerwhaleRenderer.java +++ b/src/main/java/com/gildedgames/aether/client/renderer/entity/AerwhaleRenderer.java @@ -7,10 +7,10 @@ import com.gildedgames.aether.entity.passive.Aerwhale; import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.math.Axis; import net.minecraft.client.model.EntityModel; import net.minecraft.client.renderer.entity.EntityRendererProvider; import net.minecraft.resources.ResourceLocation; -import com.mojang.math.Vector3f; import javax.annotation.Nonnull; @@ -35,7 +35,7 @@ protected void scale(@Nonnull Aerwhale aerwhale, PoseStack poseStack, float part @Override protected void setupRotations(@Nonnull Aerwhale aerwhale, @Nonnull PoseStack poseStack, float ageInTicks, float pRotationYaw, float partialTicks) { super.setupRotations(aerwhale, poseStack, ageInTicks, pRotationYaw, partialTicks); - poseStack.mulPose(Vector3f.XP.rotationDegrees(aerwhale.getXRot())); + poseStack.mulPose(Axis.XP.rotationDegrees(aerwhale.getXRot())); } @Override diff --git a/src/main/java/com/gildedgames/aether/client/renderer/entity/HammerProjectileRenderer.java b/src/main/java/com/gildedgames/aether/client/renderer/entity/HammerProjectileRenderer.java index 4b13615da6..dff45f113a 100644 --- a/src/main/java/com/gildedgames/aether/client/renderer/entity/HammerProjectileRenderer.java +++ b/src/main/java/com/gildedgames/aether/client/renderer/entity/HammerProjectileRenderer.java @@ -5,15 +5,15 @@ import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; +import com.mojang.math.Axis; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.entity.EntityRenderer; import net.minecraft.client.renderer.entity.EntityRendererProvider; import net.minecraft.client.renderer.texture.OverlayTexture; import net.minecraft.resources.ResourceLocation; -import com.mojang.math.Matrix3f; -import com.mojang.math.Matrix4f; -import com.mojang.math.Vector3f; +import org.joml.Matrix3f; +import org.joml.Matrix4f; import javax.annotation.Nonnull; @@ -30,7 +30,7 @@ public HammerProjectileRenderer(EntityRendererProvider.Context context) { public void render(@Nonnull HammerProjectile hammer, float entityYaw, float partialTicks, PoseStack poseStack, MultiBufferSource buffer, int packedLight) { poseStack.pushPose(); poseStack.mulPose(this.entityRenderDispatcher.cameraOrientation()); - poseStack.mulPose(Vector3f.YP.rotationDegrees(180.0F)); + poseStack.mulPose(Axis.YP.rotationDegrees(180.0F)); VertexConsumer consumer = buffer.getBuffer(RenderType.entityCutout(this.getTextureLocation(hammer))); PoseStack.Pose pose = poseStack.last(); Matrix4f matrix4f = pose.pose(); diff --git a/src/main/java/com/gildedgames/aether/client/renderer/entity/LightningKnifeRenderer.java b/src/main/java/com/gildedgames/aether/client/renderer/entity/LightningKnifeRenderer.java index 79fb1cddef..31f4bdc665 100644 --- a/src/main/java/com/gildedgames/aether/client/renderer/entity/LightningKnifeRenderer.java +++ b/src/main/java/com/gildedgames/aether/client/renderer/entity/LightningKnifeRenderer.java @@ -3,6 +3,7 @@ import com.gildedgames.aether.entity.projectile.weapon.ThrownLightningKnife; import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.math.Axis; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.entity.EntityRenderer; @@ -10,8 +11,7 @@ import net.minecraft.client.renderer.entity.EntityRendererProvider; import net.minecraft.client.renderer.texture.OverlayTexture; import net.minecraft.resources.ResourceLocation; -import com.mojang.math.Quaternion; -import com.mojang.math.Vector3f; +import org.joml.Quaternionf; import net.minecraft.world.inventory.InventoryMenu; import javax.annotation.Nonnull; @@ -25,9 +25,9 @@ public LightningKnifeRenderer(EntityRendererProvider.Context context) { @Override public void render(ThrownLightningKnife lightningKnife, float entityYaw, float partialTicks, PoseStack poseStack, @Nonnull MultiBufferSource buffer, int packedLight) { poseStack.pushPose(); - Quaternion quaternion = Vector3f.YP.rotationDegrees(lightningKnife.getYRot()); - quaternion.mul(Vector3f.XP.rotationDegrees((-(lightningKnife.xRotO + (lightningKnife.getXRot() - lightningKnife.xRotO) * partialTicks)) - 90.0F)); - quaternion.mul(Vector3f.ZP.rotationDegrees(-135.0F)); + Quaternionf quaternion = Axis.YP.rotationDegrees(lightningKnife.getYRot()); + 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(), ItemTransforms.TransformType.GUI, packedLight, OverlayTexture.NO_OVERLAY, poseStack, buffer, lightningKnife.getId()); poseStack.popPose(); diff --git a/src/main/java/com/gildedgames/aether/client/renderer/entity/ParachuteRenderer.java b/src/main/java/com/gildedgames/aether/client/renderer/entity/ParachuteRenderer.java index f49a4a4bdd..b78956b529 100644 --- a/src/main/java/com/gildedgames/aether/client/renderer/entity/ParachuteRenderer.java +++ b/src/main/java/com/gildedgames/aether/client/renderer/entity/ParachuteRenderer.java @@ -2,7 +2,7 @@ import com.gildedgames.aether.entity.miscellaneous.Parachute; import com.mojang.blaze3d.vertex.PoseStack; -import com.mojang.math.Vector3f; +import com.mojang.math.Axis; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderType; @@ -35,9 +35,9 @@ public void render(@Nonnull Parachute parachute, float entityYaw, float partialT Entity passenger = parachute.getControllingPassenger(); if (passenger != null) { if (passenger instanceof Player player) { - poseStack.mulPose(Vector3f.YP.rotationDegrees(-Mth.lerp(partialTicks, player.yHeadRotO, player.yHeadRot))); + poseStack.mulPose(Axis.YP.rotationDegrees(-Mth.lerp(partialTicks, player.yHeadRotO, player.yHeadRot))); } else { - poseStack.mulPose(Vector3f.YP.rotationDegrees(-Mth.lerp(partialTicks, passenger.yRotO, passenger.getYRot()))); + poseStack.mulPose(Axis.YP.rotationDegrees(-Mth.lerp(partialTicks, passenger.yRotO, passenger.getYRot()))); } } poseStack.translate(-0.5, 0.0, -0.5); diff --git a/src/main/java/com/gildedgames/aether/client/renderer/entity/SkyrootBoatRenderer.java b/src/main/java/com/gildedgames/aether/client/renderer/entity/SkyrootBoatRenderer.java index f45e51766a..32da4c3ba7 100644 --- a/src/main/java/com/gildedgames/aether/client/renderer/entity/SkyrootBoatRenderer.java +++ b/src/main/java/com/gildedgames/aether/client/renderer/entity/SkyrootBoatRenderer.java @@ -4,6 +4,8 @@ import com.gildedgames.aether.client.renderer.AetherModelLayers; import com.mojang.datafixers.util.Pair; import net.minecraft.client.model.BoatModel; +import net.minecraft.client.model.ChestBoatModel; +import net.minecraft.client.model.ListModel; import net.minecraft.client.renderer.entity.BoatRenderer; import net.minecraft.client.renderer.entity.EntityRendererProvider; import net.minecraft.resources.ResourceLocation; @@ -17,17 +19,16 @@ public class SkyrootBoatRenderer extends BoatRenderer { private static final ResourceLocation SKYROOT_BOAT = new ResourceLocation(Aether.MODID, "textures/entity/miscellaneous/boat/skyroot.png"); private static final ResourceLocation SKYROOT_CHEST_BOAT = new ResourceLocation(Aether.MODID, "textures/entity/miscellaneous/chest_boat/skyroot.png"); - private final Pair skyrootBoatResource; + private final Pair> skyrootBoatResource; public SkyrootBoatRenderer(EntityRendererProvider.Context context, boolean chest) { super(context, chest); - this.skyrootBoatResource = Pair.of(chest ? SKYROOT_CHEST_BOAT : SKYROOT_BOAT, - new BoatModel(context.bakeLayer(chest ? AetherModelLayers.SKYROOT_CHEST_BOAT : AetherModelLayers.SKYROOT_BOAT), chest)); + this.skyrootBoatResource = Pair.of(chest ? SKYROOT_CHEST_BOAT : SKYROOT_BOAT, chest ? new ChestBoatModel(context.bakeLayer(AetherModelLayers.SKYROOT_CHEST_BOAT)) : new BoatModel(context.bakeLayer(AetherModelLayers.SKYROOT_BOAT))); } @Nonnull @Override - public Pair getModelWithLocation(@Nonnull Boat boat) { + public Pair> getModelWithLocation(@Nonnull Boat boat) { return this.skyrootBoatResource; } } diff --git a/src/main/java/com/gildedgames/aether/client/renderer/entity/SliderRenderer.java b/src/main/java/com/gildedgames/aether/client/renderer/entity/SliderRenderer.java index 8642ba0efd..0d1e3b9baf 100644 --- a/src/main/java/com/gildedgames/aether/client/renderer/entity/SliderRenderer.java +++ b/src/main/java/com/gildedgames/aether/client/renderer/entity/SliderRenderer.java @@ -6,7 +6,8 @@ import com.gildedgames.aether.client.renderer.entity.model.SliderModel; import com.gildedgames.aether.entity.monster.dungeon.boss.Slider; import com.mojang.blaze3d.vertex.PoseStack; -import com.mojang.math.Vector3f; +import com.mojang.math.Axis; +import org.joml.Vector3f; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.entity.EntityRendererProvider; import net.minecraft.client.renderer.entity.MobRenderer; @@ -34,13 +35,15 @@ public void render(@Nonnull Slider slider, float entityYaw, float partialTicks, @Override protected void setupRotations(@Nonnull Slider slider, @Nonnull PoseStack poseStack, float ageInTicks, float rotationYaw, float partialTicks) { - poseStack.mulPose(new Vector3f(slider.getHurtAngleX(), 0.0F, -slider.getHurtAngleZ()).rotationDegrees(slider.getHurtAngle() * -15.0F)); + if (slider.getHurtAngle() != 0) { + poseStack.mulPose(Axis.of(new Vector3f(slider.getHurtAngleX(), 0.0F, -slider.getHurtAngleZ())).rotationDegrees(slider.getHurtAngle() * -15.0F)); + } if (slider.getHurtAngle() > 0.0) { slider.setHurtAngle(slider.getHurtAngle() * 0.94F); } if (isEntityUpsideDown(slider)) { poseStack.translate(0.0D, slider.getBbHeight() + 0.1F, 0.0D); - poseStack.mulPose(Vector3f.ZP.rotationDegrees(180.0F)); + poseStack.mulPose(Axis.ZP.rotationDegrees(180.0F)); } } diff --git a/src/main/java/com/gildedgames/aether/client/renderer/level/AetherRenderEffects.java b/src/main/java/com/gildedgames/aether/client/renderer/level/AetherRenderEffects.java index 1f9b0bb25d..953a040844 100644 --- a/src/main/java/com/gildedgames/aether/client/renderer/level/AetherRenderEffects.java +++ b/src/main/java/com/gildedgames/aether/client/renderer/level/AetherRenderEffects.java @@ -1,7 +1,7 @@ package com.gildedgames.aether.client.renderer.level; import com.gildedgames.aether.Aether; -import com.gildedgames.aether.data.resources.AetherDimensions; +import com.gildedgames.aether.data.resources.registries.AetherDimensions; import net.minecraft.client.renderer.DimensionSpecialEffects; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.client.event.RegisterDimensionSpecialEffectsEvent; diff --git a/src/main/java/com/gildedgames/aether/client/renderer/level/AetherSkyRenderEffects.java b/src/main/java/com/gildedgames/aether/client/renderer/level/AetherSkyRenderEffects.java index 96a4ead730..c1ef0d91f9 100644 --- a/src/main/java/com/gildedgames/aether/client/renderer/level/AetherSkyRenderEffects.java +++ b/src/main/java/com/gildedgames/aether/client/renderer/level/AetherSkyRenderEffects.java @@ -3,8 +3,9 @@ import com.mojang.blaze3d.platform.GlStateManager; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.*; -import com.mojang.math.Matrix4f; -import com.mojang.math.Vector3f; +import com.mojang.math.Axis; +import org.joml.Matrix4f; +import org.joml.Vector3f; import net.minecraft.client.Camera; import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.client.renderer.DimensionSpecialEffects; @@ -66,10 +67,10 @@ public void render(ClientLevel world, float pPartialTick, PoseStack pPoseStack, RenderSystem.disableTexture(); RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); pPoseStack.pushPose(); - pPoseStack.mulPose(Vector3f.XP.rotationDegrees(90.0F)); + pPoseStack.mulPose(Axis.XP.rotationDegrees(90.0F)); float f3 = Mth.sin(world.getSunAngle(pPartialTick)) < 0.0F ? 180.0F : 0.0F; - pPoseStack.mulPose(Vector3f.ZP.rotationDegrees(f3)); - pPoseStack.mulPose(Vector3f.ZP.rotationDegrees(90.0F)); + pPoseStack.mulPose(Axis.ZP.rotationDegrees(f3)); + pPoseStack.mulPose(Axis.ZP.rotationDegrees(90.0F)); float f4 = sunRiseRGBA[0]; float f5 = sunRiseRGBA[1]; float f6 = sunRiseRGBA[2]; @@ -145,8 +146,8 @@ private void drawCelestialBodies(float pPartialTick, PoseStack pPoseStack, Clien moonOpacity -= world.getRainLevel(pPartialTick); //Render celestial bodies - pPoseStack.mulPose(Vector3f.YP.rotationDegrees(-90.0F)); - pPoseStack.mulPose(Vector3f.XP.rotationDegrees(world.getTimeOfDay(pPartialTick) * 360.0F)); + pPoseStack.mulPose(Axis.YP.rotationDegrees(-90.0F)); + pPoseStack.mulPose(Axis.XP.rotationDegrees(world.getTimeOfDay(pPartialTick) * 360.0F)); Matrix4f matrix4f1 = pPoseStack.last().pose(); float celestialOffset = 30.0F; diff --git a/src/main/java/com/gildedgames/aether/data/generators/AetherAdvancementData.java b/src/main/java/com/gildedgames/aether/data/generators/AetherAdvancementData.java index 4a831699a5..7a928dacc9 100644 --- a/src/main/java/com/gildedgames/aether/data/generators/AetherAdvancementData.java +++ b/src/main/java/com/gildedgames/aether/data/generators/AetherAdvancementData.java @@ -1,56 +1,41 @@ package com.gildedgames.aether.data.generators; import com.gildedgames.aether.Aether; +import com.gildedgames.aether.AetherTags; +import com.gildedgames.aether.advancement.IncubationTrigger; import com.gildedgames.aether.advancement.LoreTrigger; import com.gildedgames.aether.block.AetherBlocks; import com.gildedgames.aether.entity.AetherEntityTypes; import com.gildedgames.aether.item.AetherItems; import com.gildedgames.aether.loot.AetherLoot; -import com.gildedgames.aether.data.resources.AetherDimensions; -import com.google.common.collect.ImmutableList; +import com.gildedgames.aether.data.resources.registries.AetherDimensions; import net.minecraft.advancements.Advancement; import net.minecraft.advancements.AdvancementRewards; import net.minecraft.advancements.FrameType; import net.minecraft.advancements.RequirementsStrategy; import net.minecraft.advancements.critereon.*; +import net.minecraft.core.HolderLookup; +import net.minecraft.data.PackOutput; import net.minecraft.network.chat.Component; import net.minecraft.world.level.block.Blocks; import net.minecraft.commands.CommandFunction; -import net.minecraft.data.advancements.AdvancementProvider; -import net.minecraft.data.DataGenerator; import net.minecraft.world.item.Items; import net.minecraft.resources.ResourceLocation; import net.minecraftforge.common.data.ExistingFileHelper; +import net.minecraftforge.common.data.ForgeAdvancementProvider; -import javax.annotation.Nonnull; import java.util.List; +import java.util.concurrent.CompletableFuture; import java.util.function.Consumer; -public class AetherAdvancementData extends AdvancementProvider -{ - public final List>> advancements = ImmutableList.of(new AetherAdvancements()); - - public AetherAdvancementData(DataGenerator generatorIn, ExistingFileHelper existingFileHelper) { - super(generatorIn, existingFileHelper); - } - - @Nonnull - @Override - public String getName() { - return "Aether Advancements"; - } - - @Override - protected void registerAdvancements(Consumer consumer, ExistingFileHelper fileHelper) { - for (Consumer> consumer1 : this.advancements) { - consumer1.accept(consumer); - } +public class AetherAdvancementData extends ForgeAdvancementProvider { + public AetherAdvancementData(PackOutput output, CompletableFuture registries, ExistingFileHelper helper) { + super(output, registries, helper, List.of(new AetherAdvancements())); } - public static class AetherAdvancements implements Consumer> - { + public static class AetherAdvancements implements AdvancementGenerator { @Override - public void accept(Consumer consumer) { + public void generate(HolderLookup.Provider provider, Consumer consumer, ExistingFileHelper existingFileHelper) { Advancement enterAether = Advancement.Builder.advancement() .display(Blocks.GLOWSTONE, Component.translatable("advancement.aether.enter_aether"), @@ -59,9 +44,9 @@ public void accept(Consumer consumer) { FrameType.TASK, true, true, false) .addCriterion("enter_aether", ChangeDimensionTrigger.TriggerInstance.changedDimensionTo(AetherDimensions.AETHER_LEVEL)) .rewards(new AdvancementRewards(0, new ResourceLocation[]{AetherLoot.ENTER_AETHER}, new ResourceLocation[0], CommandFunction.CacheableFunction.NONE)) - .save(consumer, "aether:enter_aether"); + .save(consumer, new ResourceLocation(Aether.MODID, "enter_aether"), existingFileHelper); - Advancement moreYouKnow = Advancement.Builder.advancement() + Advancement readLore = Advancement.Builder.advancement() .parent(enterAether) .display(AetherItems.BOOK_OF_LORE.get(), Component.translatable("advancement.aether.read_lore"), @@ -69,55 +54,55 @@ public void accept(Consumer consumer) { null, FrameType.TASK, true, true, false) .addCriterion("lore_book_entry", LoreTrigger.Instance.forAny()) - .save(consumer, "aether:read_lore"); + .save(consumer, new ResourceLocation(Aether.MODID, "read_lore"), existingFileHelper); Advancement loreception = Advancement.Builder.advancement() - .parent(moreYouKnow) + .parent(readLore) .display(AetherItems.BOOK_OF_LORE.get(), Component.translatable("advancement.aether.loreception"), Component.translatable("advancement.aether.loreception.desc"), null, FrameType.TASK, true, true, true) .addCriterion("lore_book_entry", LoreTrigger.Instance.forItem(AetherItems.BOOK_OF_LORE.get())) - .save(consumer, "aether:loreception"); + .save(consumer, new ResourceLocation(Aether.MODID, "loreception"), existingFileHelper); - Advancement toInfinityAndBeyond = Advancement.Builder.advancement() + Advancement blueAercloud = Advancement.Builder.advancement() .parent(enterAether) .display(AetherBlocks.BLUE_AERCLOUD.get(), Component.translatable("advancement.aether.blue_aercloud"), Component.translatable("advancement.aether.blue_aercloud.desc"), null, FrameType.TASK, true, true, false) - .addCriterion("to_infinity_and_beyond", EnterBlockTrigger.TriggerInstance.entersBlock(AetherBlocks.BLUE_AERCLOUD.get())) - .save(consumer, "aether:to_infinity_and_beyond"); + .addCriterion("blue_aercloud", EnterBlockTrigger.TriggerInstance.entersBlock(AetherBlocks.BLUE_AERCLOUD.get())) + .save(consumer, new ResourceLocation(Aether.MODID, "blue_aercloud"), existingFileHelper); Advancement mountPhyg = Advancement.Builder.advancement() - .parent(toInfinityAndBeyond) + .parent(blueAercloud) .display(Items.SADDLE, Component.translatable("advancement.aether.mount_phyg"), Component.translatable("advancement.aether.mount_phyg.desc"), null, FrameType.TASK, true, true, false) .addCriterion("mount_phyg", StartRidingTrigger.TriggerInstance.playerStartsRiding(EntityPredicate.Builder.entity().vehicle(EntityPredicate.Builder.entity().of(AetherEntityTypes.PHYG.get()).build()))) - .save(consumer, "aether:mount_phyg"); + .save(consumer, new ResourceLocation(Aether.MODID, "mount_phyg"), existingFileHelper); - Advancement craftIncubator = Advancement.Builder.advancement() + Advancement incubateMoa = Advancement.Builder.advancement() .parent(enterAether) .display(AetherBlocks.INCUBATOR.get(), - Component.translatable("advancement.aether.incubator"), - Component.translatable("advancement.aether.incubator.desc"), + Component.translatable("advancement.aether.incubate_moa"), + Component.translatable("advancement.aether.incubate_moa.desc"), null, FrameType.TASK, true, true, false) - .addCriterion("craft_incubator", InventoryChangeTrigger.TriggerInstance.hasItems(AetherBlocks.INCUBATOR.get())) - .save(consumer, "aether:craft_incubator"); + .addCriterion("incubate_moa", IncubationTrigger.Instance.forItem(ItemPredicate.Builder.item().of(AetherTags.Items.MOA_EGGS).build())) + .save(consumer, new ResourceLocation(Aether.MODID, "incubate_moa"), existingFileHelper); Advancement craftAltar = Advancement.Builder.advancement() .parent(enterAether) .display(AetherBlocks.ALTAR.get(), - Component.translatable("advancement.aether.altar"), - Component.translatable("advancement.aether.altar.desc"), + Component.translatable("advancement.aether.craft_altar"), + Component.translatable("advancement.aether.craft_altar.desc"), null, FrameType.TASK, true, true, false) .addCriterion("craft_altar", InventoryChangeTrigger.TriggerInstance.hasItems(AetherBlocks.ALTAR.get())) - .save(consumer, "aether:craft_altar"); + .save(consumer, new ResourceLocation(Aether.MODID, "craft_altar"), existingFileHelper); Advancement gravititeTools = Advancement.Builder.advancement() .parent(craftAltar) .display(AetherItems.GRAVITITE_PICKAXE.get(), @@ -130,7 +115,7 @@ public void accept(Consumer consumer) { .addCriterion("gravitite_sword", InventoryChangeTrigger.TriggerInstance.hasItems(AetherItems.GRAVITITE_SWORD.get())) .addCriterion("gravitite_axe", InventoryChangeTrigger.TriggerInstance.hasItems(AetherItems.GRAVITITE_AXE.get())) .addCriterion("gravitite_shovel", InventoryChangeTrigger.TriggerInstance.hasItems(AetherItems.GRAVITITE_SHOVEL.get())) - .save(consumer, "aether:gravitite_tools"); + .save(consumer, new ResourceLocation(Aether.MODID, "gravitite_tools"), existingFileHelper); Advancement bronzeDungeon = Advancement.Builder.advancement() .parent(enterAether) @@ -140,7 +125,7 @@ public void accept(Consumer consumer) { null, FrameType.GOAL, true, true, false) .addCriterion("kill_slider", KilledTrigger.TriggerInstance.playerKilledEntity(EntityPredicate.Builder.entity().of(AetherEntityTypes.SLIDER.get()))) - .save(consumer, "aether:bronze_dungeon"); + .save(consumer, new ResourceLocation(Aether.MODID, "bronze_dungeon"), existingFileHelper); Advancement silverDungeon = Advancement.Builder.advancement() .parent(bronzeDungeon) .display(AetherItems.SILVER_DUNGEON_KEY.get(), @@ -149,7 +134,7 @@ public void accept(Consumer consumer) { null, FrameType.GOAL, true, true, false) .addCriterion("kill_valkyrie_queen", KilledTrigger.TriggerInstance.playerKilledEntity(EntityPredicate.Builder.entity().of(AetherEntityTypes.VALKYRIE_QUEEN.get()))) - .save(consumer, "aether:silver_dungeon"); + .save(consumer, new ResourceLocation(Aether.MODID, "silver_dungeon"), existingFileHelper); Advancement goldDungeon = Advancement.Builder.advancement() .parent(silverDungeon) .display(AetherItems.GOLD_DUNGEON_KEY.get(), @@ -158,7 +143,7 @@ public void accept(Consumer consumer) { null, FrameType.GOAL, true, true, false) .addCriterion("kill_sun_spirit", KilledTrigger.TriggerInstance.playerKilledEntity(EntityPredicate.Builder.entity().of(AetherEntityTypes.SUN_SPIRIT.get()))) - .save(consumer, "aether:gold_dungeon"); + .save(consumer, new ResourceLocation(Aether.MODID, "gold_dungeon"), existingFileHelper); } } } diff --git a/src/main/java/com/gildedgames/aether/data/generators/AetherBlockStateData.java b/src/main/java/com/gildedgames/aether/data/generators/AetherBlockStateData.java index a95645292b..036abf80f9 100644 --- a/src/main/java/com/gildedgames/aether/data/generators/AetherBlockStateData.java +++ b/src/main/java/com/gildedgames/aether/data/generators/AetherBlockStateData.java @@ -1,181 +1,171 @@ package com.gildedgames.aether.data.generators; +import com.gildedgames.aether.Aether; import com.gildedgames.aether.data.providers.AetherBlockStateProvider; import com.gildedgames.aether.block.AetherBlocks; -import net.minecraft.data.DataGenerator; +import net.minecraft.data.PackOutput; import net.minecraft.world.level.block.Blocks; import net.minecraftforge.common.data.ExistingFileHelper; -import javax.annotation.Nonnull; - -public class AetherBlockStateData extends AetherBlockStateProvider -{ - public AetherBlockStateData(DataGenerator generator, ExistingFileHelper fileHelper) { - super(generator, fileHelper); - } - - @Nonnull - @Override - public String getName() { - return "Aether Block States"; +public class AetherBlockStateData extends AetherBlockStateProvider { + public AetherBlockStateData(PackOutput output, ExistingFileHelper helper) { + super(output, Aether.MODID, helper); } @Override - protected void registerStatesAndModels() { - portal(AetherBlocks.AETHER_PORTAL); - - grass(AetherBlocks.AETHER_GRASS_BLOCK, AetherBlocks.AETHER_DIRT); - enchantedGrass(AetherBlocks.ENCHANTED_AETHER_GRASS_BLOCK, AetherBlocks.AETHER_GRASS_BLOCK, AetherBlocks.AETHER_DIRT); - randomBlockDoubleDrops(AetherBlocks.AETHER_DIRT, "natural/"); - randomBlockDoubleDrops(AetherBlocks.QUICKSOIL, "natural/"); - blockDoubleDrops(AetherBlocks.HOLYSTONE, "natural/"); - blockDoubleDrops(AetherBlocks.MOSSY_HOLYSTONE, "natural/"); - farmland(AetherBlocks.AETHER_FARMLAND, AetherBlocks.AETHER_DIRT); - dirtPath(AetherBlocks.AETHER_DIRT_PATH, AetherBlocks.AETHER_DIRT); - - translucentBlock(AetherBlocks.COLD_AERCLOUD, "natural/"); - translucentBlock(AetherBlocks.BLUE_AERCLOUD, "natural/"); - translucentBlock(AetherBlocks.GOLDEN_AERCLOUD, "natural/"); - translucentBlock(AetherBlocks.PINK_AERCLOUD, "natural/"); - - block(AetherBlocks.ICESTONE, "natural/"); - block(AetherBlocks.AMBROSIUM_ORE, "natural/"); - block(AetherBlocks.ZANITE_ORE, "natural/"); - block(AetherBlocks.GRAVITITE_ORE, "natural/"); - - block(AetherBlocks.SKYROOT_LEAVES, "natural/"); - block(AetherBlocks.GOLDEN_OAK_LEAVES, "natural/"); - block(AetherBlocks.CRYSTAL_LEAVES, "natural/"); - block(AetherBlocks.CRYSTAL_FRUIT_LEAVES, "natural/"); - block(AetherBlocks.HOLIDAY_LEAVES, "natural/"); - block(AetherBlocks.DECORATED_HOLIDAY_LEAVES, "natural/"); - - log(AetherBlocks.SKYROOT_LOG); - enchantedLog(AetherBlocks.GOLDEN_OAK_LOG, AetherBlocks.SKYROOT_LOG); - log(AetherBlocks.STRIPPED_SKYROOT_LOG); - wood(AetherBlocks.SKYROOT_WOOD, AetherBlocks.SKYROOT_LOG); - wood(AetherBlocks.GOLDEN_OAK_WOOD, AetherBlocks.GOLDEN_OAK_LOG); - wood(AetherBlocks.STRIPPED_SKYROOT_WOOD, AetherBlocks.STRIPPED_SKYROOT_LOG); - - block(AetherBlocks.SKYROOT_PLANKS, "construction/"); - block(AetherBlocks.HOLYSTONE_BRICKS, "construction/"); - translucentBlock(AetherBlocks.QUICKSOIL_GLASS, "construction/"); - pane(AetherBlocks.QUICKSOIL_GLASS_PANE, AetherBlocks.QUICKSOIL_GLASS, "construction/"); - translucentBlock(AetherBlocks.AEROGEL, "construction/"); - - block(AetherBlocks.AMBROSIUM_BLOCK, "construction/"); - block(AetherBlocks.ZANITE_BLOCK, "construction/"); - block(AetherBlocks.ENCHANTED_GRAVITITE, "construction/"); - - altar(AetherBlocks.ALTAR); - freezer(AetherBlocks.FREEZER); - incubator(AetherBlocks.INCUBATOR); - - torchBlock(AetherBlocks.AMBROSIUM_TORCH, AetherBlocks.AMBROSIUM_WALL_TORCH); - - signBlock(AetherBlocks.SKYROOT_SIGN, AetherBlocks.SKYROOT_WALL_SIGN, texture(name(AetherBlocks.SKYROOT_PLANKS), "construction/")); - - crossBlock(AetherBlocks.BERRY_BUSH_STEM, "natural/"); - berryBush(AetherBlocks.BERRY_BUSH, AetherBlocks.BERRY_BUSH_STEM); - pottedStem(AetherBlocks.POTTED_BERRY_BUSH_STEM, "natural/"); - pottedBush(AetherBlocks.POTTED_BERRY_BUSH, AetherBlocks.POTTED_BERRY_BUSH_STEM, "natural/"); - - crossBlock(AetherBlocks.PURPLE_FLOWER, "natural/"); - crossBlock(AetherBlocks.WHITE_FLOWER, "natural/"); - pottedPlant(AetherBlocks.POTTED_PURPLE_FLOWER, AetherBlocks.PURPLE_FLOWER, "natural/"); - pottedPlant(AetherBlocks.POTTED_WHITE_FLOWER, AetherBlocks.WHITE_FLOWER, "natural/"); - - saplingBlock(AetherBlocks.SKYROOT_SAPLING, "natural/"); - saplingBlock(AetherBlocks.GOLDEN_OAK_SAPLING, "natural/"); - pottedPlant(AetherBlocks.POTTED_SKYROOT_SAPLING, AetherBlocks.SKYROOT_SAPLING, "natural/"); - pottedPlant(AetherBlocks.POTTED_GOLDEN_OAK_SAPLING, AetherBlocks.GOLDEN_OAK_SAPLING, "natural/"); - - block(AetherBlocks.CARVED_STONE, "dungeon/"); - block(AetherBlocks.SENTRY_STONE, "dungeon/"); - block(AetherBlocks.ANGELIC_STONE, "dungeon/"); - block(AetherBlocks.LIGHT_ANGELIC_STONE, "dungeon/"); - block(AetherBlocks.HELLFIRE_STONE, "dungeon/"); - block(AetherBlocks.LIGHT_HELLFIRE_STONE, "dungeon/"); - - dungeonBlock(AetherBlocks.LOCKED_CARVED_STONE, AetherBlocks.CARVED_STONE); - dungeonBlock(AetherBlocks.LOCKED_SENTRY_STONE, AetherBlocks.SENTRY_STONE); - dungeonBlock(AetherBlocks.LOCKED_ANGELIC_STONE, AetherBlocks.ANGELIC_STONE); - dungeonBlock(AetherBlocks.LOCKED_LIGHT_ANGELIC_STONE, AetherBlocks.LIGHT_ANGELIC_STONE); - dungeonBlock(AetherBlocks.LOCKED_HELLFIRE_STONE, AetherBlocks.HELLFIRE_STONE); - dungeonBlock(AetherBlocks.LOCKED_LIGHT_HELLFIRE_STONE, AetherBlocks.LIGHT_HELLFIRE_STONE); - - dungeonBlock(AetherBlocks.TRAPPED_CARVED_STONE, AetherBlocks.CARVED_STONE); - dungeonBlock(AetherBlocks.TRAPPED_SENTRY_STONE, AetherBlocks.SENTRY_STONE); - dungeonBlock(AetherBlocks.TRAPPED_ANGELIC_STONE, AetherBlocks.ANGELIC_STONE); - dungeonBlock(AetherBlocks.TRAPPED_LIGHT_ANGELIC_STONE, AetherBlocks.LIGHT_ANGELIC_STONE); - dungeonBlock(AetherBlocks.TRAPPED_HELLFIRE_STONE, AetherBlocks.HELLFIRE_STONE); - dungeonBlock(AetherBlocks.TRAPPED_LIGHT_HELLFIRE_STONE, AetherBlocks.LIGHT_HELLFIRE_STONE); - - invisibleBlock(AetherBlocks.BOSS_DOORWAY_CARVED_STONE, AetherBlocks.CARVED_STONE); - invisibleBlock(AetherBlocks.BOSS_DOORWAY_SENTRY_STONE, AetherBlocks.SENTRY_STONE); - invisibleBlock(AetherBlocks.BOSS_DOORWAY_ANGELIC_STONE, AetherBlocks.ANGELIC_STONE); - invisibleBlock(AetherBlocks.BOSS_DOORWAY_LIGHT_ANGELIC_STONE, AetherBlocks.LIGHT_ANGELIC_STONE); - invisibleBlock(AetherBlocks.BOSS_DOORWAY_HELLFIRE_STONE, AetherBlocks.HELLFIRE_STONE); - invisibleBlock(AetherBlocks.BOSS_DOORWAY_LIGHT_HELLFIRE_STONE, AetherBlocks.LIGHT_HELLFIRE_STONE); - - dungeonBlock(AetherBlocks.TREASURE_DOORWAY_CARVED_STONE, AetherBlocks.CARVED_STONE); - dungeonBlock(AetherBlocks.TREASURE_DOORWAY_SENTRY_STONE, AetherBlocks.SENTRY_STONE); - dungeonBlock(AetherBlocks.TREASURE_DOORWAY_ANGELIC_STONE, AetherBlocks.ANGELIC_STONE); - dungeonBlock(AetherBlocks.TREASURE_DOORWAY_LIGHT_ANGELIC_STONE, AetherBlocks.LIGHT_ANGELIC_STONE); - dungeonBlock(AetherBlocks.TREASURE_DOORWAY_HELLFIRE_STONE, AetherBlocks.HELLFIRE_STONE); - dungeonBlock(AetherBlocks.TREASURE_DOORWAY_LIGHT_HELLFIRE_STONE, AetherBlocks.LIGHT_HELLFIRE_STONE); - - chestMimic(AetherBlocks.CHEST_MIMIC, () -> Blocks.OAK_PLANKS); - treasureChest(AetherBlocks.TREASURE_CHEST, AetherBlocks.CARVED_STONE); - - pillar(AetherBlocks.PILLAR); - pillarTop(AetherBlocks.PILLAR_TOP); - - present(AetherBlocks.PRESENT); - - fence(AetherBlocks.SKYROOT_FENCE, AetherBlocks.SKYROOT_PLANKS, "construction/"); - fenceGateBlock(AetherBlocks.SKYROOT_FENCE_GATE, AetherBlocks.SKYROOT_PLANKS, "construction/"); - doorBlock(AetherBlocks.SKYROOT_DOOR, texture(name(AetherBlocks.SKYROOT_DOOR), "construction/", "_bottom"), texture(name(AetherBlocks.SKYROOT_DOOR), "construction/", "_top")); - trapdoorBlock(AetherBlocks.SKYROOT_TRAPDOOR, texture(name(AetherBlocks.SKYROOT_TRAPDOOR), "construction/"), false); - buttonBlock(AetherBlocks.SKYROOT_BUTTON, texture(name(AetherBlocks.SKYROOT_PLANKS), "construction/")); - pressurePlateBlock(AetherBlocks.SKYROOT_PRESSURE_PLATE, texture(name(AetherBlocks.SKYROOT_PLANKS), "construction/")); - - buttonBlock(AetherBlocks.HOLYSTONE_BUTTON, texture(name(AetherBlocks.HOLYSTONE), "natural/")); - pressurePlateBlock(AetherBlocks.HOLYSTONE_PRESSURE_PLATE, texture(name(AetherBlocks.HOLYSTONE), "natural/")); - - wallBlock(AetherBlocks.CARVED_WALL, AetherBlocks.CARVED_STONE, "dungeon/"); - wallBlock(AetherBlocks.ANGELIC_WALL, AetherBlocks.ANGELIC_STONE, "dungeon/"); - wallBlock(AetherBlocks.HELLFIRE_WALL, AetherBlocks.HELLFIRE_STONE, "dungeon/"); - wallBlock(AetherBlocks.HOLYSTONE_WALL, AetherBlocks.HOLYSTONE, "natural/"); - wallBlock(AetherBlocks.MOSSY_HOLYSTONE_WALL, AetherBlocks.MOSSY_HOLYSTONE, "natural/"); - wallBlock(AetherBlocks.ICESTONE_WALL, AetherBlocks.ICESTONE, "natural/"); - wallBlock(AetherBlocks.HOLYSTONE_BRICK_WALL, AetherBlocks.HOLYSTONE_BRICKS, "construction/"); - - stairs(AetherBlocks.SKYROOT_STAIRS, AetherBlocks.SKYROOT_PLANKS, "construction/"); - stairs(AetherBlocks.CARVED_STAIRS, AetherBlocks.CARVED_STONE, "dungeon/"); - stairs(AetherBlocks.ANGELIC_STAIRS, AetherBlocks.ANGELIC_STONE, "dungeon/"); - stairs(AetherBlocks.HELLFIRE_STAIRS, AetherBlocks.HELLFIRE_STONE, "dungeon/"); - stairs(AetherBlocks.HOLYSTONE_STAIRS, AetherBlocks.HOLYSTONE, "natural/"); - stairs(AetherBlocks.MOSSY_HOLYSTONE_STAIRS, AetherBlocks.MOSSY_HOLYSTONE, "natural/"); - stairs(AetherBlocks.ICESTONE_STAIRS, AetherBlocks.ICESTONE, "natural/"); - stairs(AetherBlocks.HOLYSTONE_BRICK_STAIRS, AetherBlocks.HOLYSTONE_BRICKS, "construction/"); - - slab(AetherBlocks.SKYROOT_SLAB, AetherBlocks.SKYROOT_PLANKS, "construction/"); - slab(AetherBlocks.CARVED_SLAB, AetherBlocks.CARVED_STONE, "dungeon/"); - slab(AetherBlocks.ANGELIC_SLAB, AetherBlocks.ANGELIC_STONE, "dungeon/"); - slab(AetherBlocks.HELLFIRE_SLAB, AetherBlocks.HELLFIRE_STONE, "dungeon/"); - slab(AetherBlocks.HOLYSTONE_SLAB, AetherBlocks.HOLYSTONE, "natural/"); - slab(AetherBlocks.MOSSY_HOLYSTONE_SLAB, AetherBlocks.MOSSY_HOLYSTONE, "natural/"); - slab(AetherBlocks.ICESTONE_SLAB, AetherBlocks.ICESTONE, "natural/"); - slab(AetherBlocks.HOLYSTONE_BRICK_SLAB, AetherBlocks.HOLYSTONE_BRICKS, "construction/"); - translucentSlab(AetherBlocks.AEROGEL_SLAB, AetherBlocks.AEROGEL, "construction/"); - - sunAltar(AetherBlocks.SUN_ALTAR); - - bookshelf(AetherBlocks.SKYROOT_BOOKSHELF, AetherBlocks.SKYROOT_PLANKS); - - bed(AetherBlocks.SKYROOT_BED, AetherBlocks.SKYROOT_PLANKS); - - unstableObsidian(AetherBlocks.UNSTABLE_OBSIDIAN); + public void registerStatesAndModels() { + this.portal(AetherBlocks.AETHER_PORTAL.get()); + + this.grass(AetherBlocks.AETHER_GRASS_BLOCK.get(), AetherBlocks.AETHER_DIRT.get()); + this.enchantedGrass(AetherBlocks.ENCHANTED_AETHER_GRASS_BLOCK.get(), AetherBlocks.AETHER_GRASS_BLOCK.get(), AetherBlocks.AETHER_DIRT.get()); + this.randomBlockDoubleDrops(AetherBlocks.AETHER_DIRT.get(), "natural/"); + this.randomBlockDoubleDrops(AetherBlocks.QUICKSOIL.get(), "natural/"); + this.blockDoubleDrops(AetherBlocks.HOLYSTONE.get(), "natural/"); + this.blockDoubleDrops(AetherBlocks.MOSSY_HOLYSTONE.get(), "natural/"); + this.farmland(AetherBlocks.AETHER_FARMLAND.get(), AetherBlocks.AETHER_DIRT.get()); + this.dirtPath(AetherBlocks.AETHER_DIRT_PATH.get(), AetherBlocks.AETHER_DIRT.get()); + + this.translucentBlock(AetherBlocks.COLD_AERCLOUD.get(), "natural/"); + this.translucentBlock(AetherBlocks.BLUE_AERCLOUD.get(), "natural/"); + this.translucentBlock(AetherBlocks.GOLDEN_AERCLOUD.get(), "natural/"); + this.translucentBlock(AetherBlocks.PINK_AERCLOUD.get(), "natural/"); + + this.block(AetherBlocks.ICESTONE.get(), "natural/"); + this.block(AetherBlocks.AMBROSIUM_ORE.get(), "natural/"); + this.block(AetherBlocks.ZANITE_ORE.get(), "natural/"); + this.block(AetherBlocks.GRAVITITE_ORE.get(), "natural/"); + + this.block(AetherBlocks.SKYROOT_LEAVES.get(), "natural/"); + this.block(AetherBlocks.GOLDEN_OAK_LEAVES.get(), "natural/"); + this.block(AetherBlocks.CRYSTAL_LEAVES.get(), "natural/"); + this.block(AetherBlocks.CRYSTAL_FRUIT_LEAVES.get(), "natural/"); + this.block(AetherBlocks.HOLIDAY_LEAVES.get(), "natural/"); + this.block(AetherBlocks.DECORATED_HOLIDAY_LEAVES.get(), "natural/"); + + this.log(AetherBlocks.SKYROOT_LOG.get()); + this.enchantedLog(AetherBlocks.GOLDEN_OAK_LOG.get(), AetherBlocks.SKYROOT_LOG.get()); + this.log(AetherBlocks.STRIPPED_SKYROOT_LOG.get()); + this.wood(AetherBlocks.SKYROOT_WOOD.get(), AetherBlocks.SKYROOT_LOG.get()); + this.wood(AetherBlocks.GOLDEN_OAK_WOOD.get(), AetherBlocks.GOLDEN_OAK_LOG.get()); + this.wood(AetherBlocks.STRIPPED_SKYROOT_WOOD.get(), AetherBlocks.STRIPPED_SKYROOT_LOG.get()); + + this.block(AetherBlocks.SKYROOT_PLANKS.get(), "construction/"); + this.block(AetherBlocks.HOLYSTONE_BRICKS.get(), "construction/"); + this.translucentBlock(AetherBlocks.QUICKSOIL_GLASS.get(), "construction/"); + this.pane(AetherBlocks.QUICKSOIL_GLASS_PANE.get(), AetherBlocks.QUICKSOIL_GLASS.get(), "construction/"); + this.translucentBlock(AetherBlocks.AEROGEL.get(), "construction/"); + + this.block(AetherBlocks.AMBROSIUM_BLOCK.get(), "construction/"); + this.block(AetherBlocks.ZANITE_BLOCK.get(), "construction/"); + this.block(AetherBlocks.ENCHANTED_GRAVITITE.get(), "construction/"); + + this.altar(AetherBlocks.ALTAR.get()); + this.freezer(AetherBlocks.FREEZER.get()); + this.incubator(AetherBlocks.INCUBATOR.get()); + + 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.crossBlock(AetherBlocks.BERRY_BUSH_STEM.get(), "natural/"); + this.berryBush(AetherBlocks.BERRY_BUSH.get(), AetherBlocks.BERRY_BUSH_STEM.get()); + this.pottedStem(AetherBlocks.POTTED_BERRY_BUSH_STEM.get(), "natural/"); + this.pottedBush(AetherBlocks.POTTED_BERRY_BUSH.get(), AetherBlocks.POTTED_BERRY_BUSH_STEM.get(), "natural/"); + + this.crossBlock(AetherBlocks.PURPLE_FLOWER.get(), "natural/"); + this.crossBlock(AetherBlocks.WHITE_FLOWER.get(), "natural/"); + this.pottedPlant(AetherBlocks.POTTED_PURPLE_FLOWER.get(), AetherBlocks.PURPLE_FLOWER.get(), "natural/"); + this.pottedPlant(AetherBlocks.POTTED_WHITE_FLOWER.get(), AetherBlocks.WHITE_FLOWER.get(), "natural/"); + + this.saplingBlock(AetherBlocks.SKYROOT_SAPLING.get(), "natural/"); + this.saplingBlock(AetherBlocks.GOLDEN_OAK_SAPLING.get(), "natural/"); + this.pottedPlant(AetherBlocks.POTTED_SKYROOT_SAPLING.get(), AetherBlocks.SKYROOT_SAPLING.get(), "natural/"); + this.pottedPlant(AetherBlocks.POTTED_GOLDEN_OAK_SAPLING.get(), AetherBlocks.GOLDEN_OAK_SAPLING.get(), "natural/"); + + this.block(AetherBlocks.CARVED_STONE.get(), "dungeon/"); + this.block(AetherBlocks.SENTRY_STONE.get(), "dungeon/"); + this.block(AetherBlocks.ANGELIC_STONE.get(), "dungeon/"); + this.block(AetherBlocks.LIGHT_ANGELIC_STONE.get(), "dungeon/"); + this.block(AetherBlocks.HELLFIRE_STONE.get(), "dungeon/"); + this.block(AetherBlocks.LIGHT_HELLFIRE_STONE.get(), "dungeon/"); + + this.dungeonBlock(AetherBlocks.LOCKED_CARVED_STONE.get(), AetherBlocks.CARVED_STONE.get()); + this.dungeonBlock(AetherBlocks.LOCKED_SENTRY_STONE.get(), AetherBlocks.SENTRY_STONE.get()); + this.dungeonBlock(AetherBlocks.LOCKED_ANGELIC_STONE.get(), AetherBlocks.ANGELIC_STONE.get()); + this.dungeonBlock(AetherBlocks.LOCKED_LIGHT_ANGELIC_STONE.get(), AetherBlocks.LIGHT_ANGELIC_STONE.get()); + this.dungeonBlock(AetherBlocks.LOCKED_HELLFIRE_STONE.get(), AetherBlocks.HELLFIRE_STONE.get()); + this.dungeonBlock(AetherBlocks.LOCKED_LIGHT_HELLFIRE_STONE.get(), AetherBlocks.LIGHT_HELLFIRE_STONE.get()); + + this.dungeonBlock(AetherBlocks.TRAPPED_CARVED_STONE.get(), AetherBlocks.CARVED_STONE.get()); + this.dungeonBlock(AetherBlocks.TRAPPED_SENTRY_STONE.get(), AetherBlocks.SENTRY_STONE.get()); + this.dungeonBlock(AetherBlocks.TRAPPED_ANGELIC_STONE.get(), AetherBlocks.ANGELIC_STONE.get()); + this.dungeonBlock(AetherBlocks.TRAPPED_LIGHT_ANGELIC_STONE.get(), AetherBlocks.LIGHT_ANGELIC_STONE.get()); + this.dungeonBlock(AetherBlocks.TRAPPED_HELLFIRE_STONE.get(), AetherBlocks.HELLFIRE_STONE.get()); + this.dungeonBlock(AetherBlocks.TRAPPED_LIGHT_HELLFIRE_STONE.get(), AetherBlocks.LIGHT_HELLFIRE_STONE.get()); + + this.invisibleBlock(AetherBlocks.BOSS_DOORWAY_CARVED_STONE.get(), AetherBlocks.CARVED_STONE.get()); + this.invisibleBlock(AetherBlocks.BOSS_DOORWAY_SENTRY_STONE.get(), AetherBlocks.SENTRY_STONE.get()); + this.invisibleBlock(AetherBlocks.BOSS_DOORWAY_ANGELIC_STONE.get(), AetherBlocks.ANGELIC_STONE.get()); + this.invisibleBlock(AetherBlocks.BOSS_DOORWAY_LIGHT_ANGELIC_STONE.get(), AetherBlocks.LIGHT_ANGELIC_STONE.get()); + this.invisibleBlock(AetherBlocks.BOSS_DOORWAY_HELLFIRE_STONE.get(), AetherBlocks.HELLFIRE_STONE.get()); + this.invisibleBlock(AetherBlocks.BOSS_DOORWAY_LIGHT_HELLFIRE_STONE.get(), AetherBlocks.LIGHT_HELLFIRE_STONE.get()); + + this.dungeonBlock(AetherBlocks.TREASURE_DOORWAY_CARVED_STONE.get(), AetherBlocks.CARVED_STONE.get()); + this.dungeonBlock(AetherBlocks.TREASURE_DOORWAY_SENTRY_STONE.get(), AetherBlocks.SENTRY_STONE.get()); + this.dungeonBlock(AetherBlocks.TREASURE_DOORWAY_ANGELIC_STONE.get(), AetherBlocks.ANGELIC_STONE.get()); + this.dungeonBlock(AetherBlocks.TREASURE_DOORWAY_LIGHT_ANGELIC_STONE.get(), AetherBlocks.LIGHT_ANGELIC_STONE.get()); + this.dungeonBlock(AetherBlocks.TREASURE_DOORWAY_HELLFIRE_STONE.get(), AetherBlocks.HELLFIRE_STONE.get()); + this.dungeonBlock(AetherBlocks.TREASURE_DOORWAY_LIGHT_HELLFIRE_STONE.get(), AetherBlocks.LIGHT_HELLFIRE_STONE.get()); + + this.chestMimic(AetherBlocks.CHEST_MIMIC.get(), Blocks.OAK_PLANKS); + this.treasureChest(AetherBlocks.TREASURE_CHEST.get(), AetherBlocks.CARVED_STONE.get()); + + this.pillar(AetherBlocks.PILLAR.get()); + this.pillarTop(AetherBlocks.PILLAR_TOP.get()); + + this.present(AetherBlocks.PRESENT.get()); + + this.fence(AetherBlocks.SKYROOT_FENCE.get(), AetherBlocks.SKYROOT_PLANKS.get(), "construction/"); + this.fenceGateBlock(AetherBlocks.SKYROOT_FENCE_GATE.get(), AetherBlocks.SKYROOT_PLANKS.get(), "construction/"); + this.doorBlock(AetherBlocks.SKYROOT_DOOR.get(), this.texture(this.name(AetherBlocks.SKYROOT_DOOR.get()), "construction/", "_bottom"), this.texture(this.name(AetherBlocks.SKYROOT_DOOR.get()), "construction/", "_top")); + this.trapdoorBlock(AetherBlocks.SKYROOT_TRAPDOOR.get(), this.texture(this.name(AetherBlocks.SKYROOT_TRAPDOOR.get()), "construction/"), false); + this.buttonBlock(AetherBlocks.SKYROOT_BUTTON.get(), this.texture(this.name(AetherBlocks.SKYROOT_PLANKS.get()), "construction/")); + this.pressurePlateBlock(AetherBlocks.SKYROOT_PRESSURE_PLATE.get(), this.texture(this.name(AetherBlocks.SKYROOT_PLANKS.get()), "construction/")); + + this.buttonBlock(AetherBlocks.HOLYSTONE_BUTTON.get(), this.texture(this.name(AetherBlocks.HOLYSTONE.get()), "natural/")); + this.pressurePlateBlock(AetherBlocks.HOLYSTONE_PRESSURE_PLATE.get(), this.texture(this.name(AetherBlocks.HOLYSTONE.get()), "natural/")); + + this.wallBlock(AetherBlocks.CARVED_WALL.get(), AetherBlocks.CARVED_STONE.get(), "dungeon/"); + this.wallBlock(AetherBlocks.ANGELIC_WALL.get(), AetherBlocks.ANGELIC_STONE.get(), "dungeon/"); + this.wallBlock(AetherBlocks.HELLFIRE_WALL.get(), AetherBlocks.HELLFIRE_STONE.get(), "dungeon/"); + this.wallBlock(AetherBlocks.HOLYSTONE_WALL.get(), AetherBlocks.HOLYSTONE.get(), "natural/"); + this.wallBlock(AetherBlocks.MOSSY_HOLYSTONE_WALL.get(), AetherBlocks.MOSSY_HOLYSTONE.get(), "natural/"); + this.wallBlock(AetherBlocks.ICESTONE_WALL.get(), AetherBlocks.ICESTONE.get(), "natural/"); + this.wallBlock(AetherBlocks.HOLYSTONE_BRICK_WALL.get(), AetherBlocks.HOLYSTONE_BRICKS.get(), "construction/"); + + this.stairs(AetherBlocks.SKYROOT_STAIRS.get(), AetherBlocks.SKYROOT_PLANKS.get(), "construction/"); + this.stairs(AetherBlocks.CARVED_STAIRS.get(), AetherBlocks.CARVED_STONE.get(), "dungeon/"); + this.stairs(AetherBlocks.ANGELIC_STAIRS.get(), AetherBlocks.ANGELIC_STONE.get(), "dungeon/"); + this.stairs(AetherBlocks.HELLFIRE_STAIRS.get(), AetherBlocks.HELLFIRE_STONE.get(), "dungeon/"); + this.stairs(AetherBlocks.HOLYSTONE_STAIRS.get(), AetherBlocks.HOLYSTONE.get(), "natural/"); + this.stairs(AetherBlocks.MOSSY_HOLYSTONE_STAIRS.get(), AetherBlocks.MOSSY_HOLYSTONE.get(), "natural/"); + this.stairs(AetherBlocks.ICESTONE_STAIRS.get(), AetherBlocks.ICESTONE.get(), "natural/"); + this.stairs(AetherBlocks.HOLYSTONE_BRICK_STAIRS.get(), AetherBlocks.HOLYSTONE_BRICKS.get(), "construction/"); + + this.slab(AetherBlocks.SKYROOT_SLAB.get(), AetherBlocks.SKYROOT_PLANKS.get(), "construction/"); + this.slab(AetherBlocks.CARVED_SLAB.get(), AetherBlocks.CARVED_STONE.get(), "dungeon/"); + this.slab(AetherBlocks.ANGELIC_SLAB.get(), AetherBlocks.ANGELIC_STONE.get(), "dungeon/"); + this.slab(AetherBlocks.HELLFIRE_SLAB.get(), AetherBlocks.HELLFIRE_STONE.get(), "dungeon/"); + this.slab(AetherBlocks.HOLYSTONE_SLAB.get(), AetherBlocks.HOLYSTONE.get(), "natural/"); + this.slab(AetherBlocks.MOSSY_HOLYSTONE_SLAB.get(), AetherBlocks.MOSSY_HOLYSTONE.get(), "natural/"); + this.slab(AetherBlocks.ICESTONE_SLAB.get(), AetherBlocks.ICESTONE.get(), "natural/"); + this.slab(AetherBlocks.HOLYSTONE_BRICK_SLAB.get(), AetherBlocks.HOLYSTONE_BRICKS.get(), "construction/"); + this.translucentSlab(AetherBlocks.AEROGEL_SLAB.get(), AetherBlocks.AEROGEL.get(), "construction/"); + + this.sunAltar(AetherBlocks.SUN_ALTAR.get()); + this.bookshelf(AetherBlocks.SKYROOT_BOOKSHELF.get(), AetherBlocks.SKYROOT_PLANKS.get()); + this.bed(AetherBlocks.SKYROOT_BED.get(), AetherBlocks.SKYROOT_PLANKS.get()); + + this.unstableObsidian(AetherBlocks.UNSTABLE_OBSIDIAN.get()); } } diff --git a/src/main/java/com/gildedgames/aether/data/generators/AetherDataGenerators.java b/src/main/java/com/gildedgames/aether/data/generators/AetherDataGenerators.java deleted file mode 100644 index d4dcb3d5b7..0000000000 --- a/src/main/java/com/gildedgames/aether/data/generators/AetherDataGenerators.java +++ /dev/null @@ -1,66 +0,0 @@ -package com.gildedgames.aether.data.generators; - -import com.gildedgames.aether.Aether; -import com.gildedgames.aether.data.resources.AetherDimensions; -import com.gildedgames.aether.data.resources.AetherNoiseGeneratorSettings; -import com.gildedgames.aether.data.resources.builders.AetherBiomeBuilders; -import com.google.gson.JsonElement; -import com.mojang.serialization.JsonOps; -import net.minecraft.core.Holder; -import net.minecraft.core.Registry; -import net.minecraft.core.RegistryAccess; -import net.minecraft.data.DataGenerator; -import net.minecraft.data.DataProvider; -import net.minecraft.resources.RegistryOps; -import net.minecraft.resources.ResourceKey; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.server.packs.PackType; -import net.minecraft.world.level.biome.Biome; -import net.minecraft.world.level.biome.BiomeSource; -import net.minecraft.world.level.dimension.DimensionType; -import net.minecraft.world.level.dimension.LevelStem; -import net.minecraft.world.level.levelgen.NoiseBasedChunkGenerator; -import net.minecraft.world.level.levelgen.NoiseGeneratorSettings; -import net.minecraft.world.level.levelgen.structure.StructureSet; -import net.minecraft.world.level.levelgen.synth.NormalNoise; -import net.minecraftforge.common.data.ExistingFileHelper; -import net.minecraftforge.common.data.JsonCodecProvider; - -import java.util.HashMap; -import java.util.Map; - -public class AetherDataGenerators { - public static RegistryAccess DATA_REGISTRY = RegistryAccess.builtinCopy(); - - public static DataProvider create(DataGenerator generator, ExistingFileHelper helper, Map map, ResourceKey> registryKey) { - return JsonCodecProvider.forDatapackRegistry(generator, helper, Aether.MODID, RegistryOps.create(JsonOps.INSTANCE, DATA_REGISTRY), registryKey, map); - } - - public static DataProvider create(RegistryAccess registryAccess, DataGenerator generator, ExistingFileHelper helper, Map map, ResourceKey> registryKey) { - return JsonCodecProvider.forDatapackRegistry(generator, helper, Aether.MODID, RegistryOps.create(JsonOps.INSTANCE, registryAccess), registryKey, map); - } - - public static DataProvider levelStem(DataGenerator generator, ExistingFileHelper helper) { - RegistryOps registryOps = RegistryOps.create(JsonOps.INSTANCE, DATA_REGISTRY); - Map map = new HashMap<>(); - Registry biomeRegistry = registryOps.registry(Registry.BIOME_REGISTRY).orElseThrow(); - Registry dimensionTypeRegistry = registryOps.registry(Registry.DIMENSION_TYPE_REGISTRY).orElseThrow(); - Registry structureSetRegistry = registryOps.registry(Registry.STRUCTURE_SET_REGISTRY).orElseThrow(); - Registry noiseParametersRegistry = registryOps.registry(Registry.NOISE_REGISTRY).orElseThrow(); - Registry noiseGeneratorSettingsRegistry = registryOps.registry(Registry.NOISE_GENERATOR_SETTINGS_REGISTRY).orElseThrow(); - BiomeSource source = AetherBiomeBuilders.buildAetherBiomeSource(biomeRegistry); - NoiseBasedChunkGenerator aetherChunkGen = new NoiseBasedChunkGenerator(structureSetRegistry, noiseParametersRegistry, source, getNoiseGeneratorSettings(noiseGeneratorSettingsRegistry)); - LevelStem levelStem = new LevelStem(dimensionTypeRegistry.getOrCreateHolderOrThrow(AetherDimensions.AETHER_DIMENSION_TYPE), aetherChunkGen); - map.put(AetherDimensions.AETHER_LEVEL_STEM.location(), levelStem); - final ResourceLocation registryId = Registry.LEVEL_STEM_REGISTRY.location(); - final String registryFolder = registryId.getPath(); - return new JsonCodecProvider<>(generator, helper, Aether.MODID, registryOps, PackType.SERVER_DATA, registryFolder, LevelStem.CODEC, map); - } - - public static Holder getNoiseGeneratorSettings(Registry registry) { - Holder.Reference holder = (Holder.Reference) registry.getOrCreateHolderOrThrow(AetherNoiseGeneratorSettings.SKYLANDS); - NoiseGeneratorSettings noiseGeneratorSettings = AetherNoiseGeneratorSettings.NOISE_GENERATOR_SETTINGS.get(AetherNoiseGeneratorSettings.SKYLANDS.location()); - holder.bind(AetherNoiseGeneratorSettings.SKYLANDS, noiseGeneratorSettings); - return holder; - } -} diff --git a/src/main/java/com/gildedgames/aether/data/generators/AetherItemModelData.java b/src/main/java/com/gildedgames/aether/data/generators/AetherItemModelData.java index 93a1293f1b..8387e10513 100644 --- a/src/main/java/com/gildedgames/aether/data/generators/AetherItemModelData.java +++ b/src/main/java/com/gildedgames/aether/data/generators/AetherItemModelData.java @@ -1,377 +1,369 @@ package com.gildedgames.aether.data.generators; +import com.gildedgames.aether.Aether; import com.gildedgames.aether.data.providers.AetherItemModelProvider; import com.gildedgames.aether.block.AetherBlocks; import com.gildedgames.aether.item.AetherItems; -import net.minecraft.data.DataGenerator; +import net.minecraft.data.PackOutput; import net.minecraftforge.common.data.ExistingFileHelper; -import javax.annotation.Nonnull; - -public class AetherItemModelData extends AetherItemModelProvider -{ - public AetherItemModelData(DataGenerator generator, ExistingFileHelper fileHelper) { - super(generator, fileHelper); - } - - @Nonnull - @Override - public String getName() { - return "Aether Item Models"; +public class AetherItemModelData extends AetherItemModelProvider { + public AetherItemModelData(PackOutput output, ExistingFileHelper helper) { + super(output, Aether.MODID, helper); } @Override protected void registerModels() { - handheldItem(AetherItems.SKYROOT_PICKAXE, "tools/"); - handheldItem(AetherItems.SKYROOT_AXE, "tools/"); - handheldItem(AetherItems.SKYROOT_SHOVEL, "tools/"); - handheldItem(AetherItems.SKYROOT_HOE, "tools/"); - - handheldItem(AetherItems.HOLYSTONE_PICKAXE, "tools/"); - handheldItem(AetherItems.HOLYSTONE_AXE, "tools/"); - handheldItem(AetherItems.HOLYSTONE_SHOVEL, "tools/"); - handheldItem(AetherItems.HOLYSTONE_HOE, "tools/"); - - handheldItem(AetherItems.ZANITE_PICKAXE, "tools/"); - handheldItem(AetherItems.ZANITE_AXE, "tools/"); - handheldItem(AetherItems.ZANITE_SHOVEL, "tools/"); - handheldItem(AetherItems.ZANITE_HOE, "tools/"); - - handheldItem(AetherItems.GRAVITITE_PICKAXE, "tools/"); - handheldItem(AetherItems.GRAVITITE_AXE, "tools/"); - handheldItem(AetherItems.GRAVITITE_SHOVEL, "tools/"); - handheldItem(AetherItems.GRAVITITE_HOE, "tools/"); - - handheldItem(AetherItems.VALKYRIE_PICKAXE, "tools/"); - handheldItem(AetherItems.VALKYRIE_AXE, "tools/"); - handheldItem(AetherItems.VALKYRIE_SHOVEL, "tools/"); - handheldItem(AetherItems.VALKYRIE_HOE, "tools/"); - - handheldItem(AetherItems.SKYROOT_SWORD, "weapons/"); - handheldItem(AetherItems.HOLYSTONE_SWORD, "weapons/"); - handheldItem(AetherItems.ZANITE_SWORD, "weapons/"); - handheldItem(AetherItems.GRAVITITE_SWORD, "weapons/"); - - lanceItem(AetherItems.VALKYRIE_LANCE, "weapons/"); - - handheldItem(AetherItems.FLAMING_SWORD, "weapons/"); - handheldItem(AetherItems.LIGHTNING_SWORD, "weapons/"); - handheldItem(AetherItems.HOLY_SWORD, "weapons/"); - handheldItem(AetherItems.VAMPIRE_BLADE, "weapons/"); - handheldItem(AetherItems.PIG_SLAYER, "weapons/"); - nameableWeapon(AetherItems.CANDY_CANE_SWORD, "weapons/", "green_candy_cane_sword"); - - nameableWeapon(AetherItems.HAMMER_OF_NOTCH, "weapons/", "hammer_of_jeb"); - - handheldItem(AetherItems.LIGHTNING_KNIFE, "weapons/"); - - item(AetherItems.GOLDEN_DART, "weapons/"); - item(AetherItems.POISON_DART, "weapons/"); - item(AetherItems.ENCHANTED_DART, "weapons/"); - - dartShooterItem(AetherItems.GOLDEN_DART_SHOOTER, "weapons/"); - dartShooterItem(AetherItems.POISON_DART_SHOOTER, "weapons/"); - dartShooterItem(AetherItems.ENCHANTED_DART_SHOOTER, "weapons/"); - - bowItem(AetherItems.PHOENIX_BOW, "weapons/"); - - item(AetherItems.ZANITE_HELMET, "armor/"); - item(AetherItems.ZANITE_CHESTPLATE, "armor/"); - item(AetherItems.ZANITE_LEGGINGS, "armor/"); - item(AetherItems.ZANITE_BOOTS, "armor/"); - - item(AetherItems.GRAVITITE_HELMET, "armor/"); - item(AetherItems.GRAVITITE_CHESTPLATE, "armor/"); - item(AetherItems.GRAVITITE_LEGGINGS, "armor/"); - item(AetherItems.GRAVITITE_BOOTS, "armor/"); - - item(AetherItems.NEPTUNE_HELMET, "armor/"); - item(AetherItems.NEPTUNE_CHESTPLATE, "armor/"); - item(AetherItems.NEPTUNE_LEGGINGS, "armor/"); - item(AetherItems.NEPTUNE_BOOTS, "armor/"); - - item(AetherItems.PHOENIX_HELMET, "armor/"); - item(AetherItems.PHOENIX_CHESTPLATE, "armor/"); - item(AetherItems.PHOENIX_LEGGINGS, "armor/"); - item(AetherItems.PHOENIX_BOOTS, "armor/"); - - item(AetherItems.OBSIDIAN_HELMET, "armor/"); - item(AetherItems.OBSIDIAN_CHESTPLATE, "armor/"); - item(AetherItems.OBSIDIAN_LEGGINGS, "armor/"); - item(AetherItems.OBSIDIAN_BOOTS, "armor/"); - - item(AetherItems.VALKYRIE_HELMET, "armor/"); - item(AetherItems.VALKYRIE_CHESTPLATE, "armor/"); - item(AetherItems.VALKYRIE_LEGGINGS, "armor/"); - item(AetherItems.VALKYRIE_BOOTS, "armor/"); - - item(AetherItems.SENTRY_BOOTS, "armor/"); - - item(AetherItems.BLUE_BERRY, "food/"); - item(AetherItems.ENCHANTED_BERRY, "food/"); - item(AetherItems.WHITE_APPLE, "food/"); - item(AetherItems.BLUE_GUMMY_SWET, "food/"); - item(AetherItems.GOLDEN_GUMMY_SWET, "food/"); - item(AetherItems.HEALING_STONE, "food/"); - item(AetherItems.CANDY_CANE, "food/"); - item(AetherItems.GINGERBREAD_MAN, "food/"); - - item(AetherItems.IRON_RING, "accessories/"); - item(AetherItems.GOLDEN_RING, "accessories/"); - item(AetherItems.ZANITE_RING, "accessories/"); - item(AetherItems.ICE_RING, "accessories/"); - - item(AetherItems.IRON_PENDANT, "accessories/"); - item(AetherItems.GOLDEN_PENDANT, "accessories/"); - item(AetherItems.ZANITE_PENDANT, "accessories/"); - item(AetherItems.ICE_PENDANT, "accessories/"); - - dyedItem(AetherItems.LEATHER_GLOVES, "accessories/"); - item(AetherItems.CHAINMAIL_GLOVES, "accessories/"); - item(AetherItems.IRON_GLOVES, "accessories/"); - item(AetherItems.GOLDEN_GLOVES, "accessories/"); - item(AetherItems.DIAMOND_GLOVES, "accessories/"); - item(AetherItems.NETHERITE_GLOVES, "accessories/"); - item(AetherItems.ZANITE_GLOVES, "accessories/"); - item(AetherItems.GRAVITITE_GLOVES, "accessories/"); - item(AetherItems.NEPTUNE_GLOVES, "accessories/"); - item(AetherItems.PHOENIX_GLOVES, "accessories/"); - item(AetherItems.OBSIDIAN_GLOVES, "accessories/"); - item(AetherItems.VALKYRIE_GLOVES, "accessories/"); - - item(AetherItems.RED_CAPE, "accessories/"); - item(AetherItems.BLUE_CAPE, "accessories/"); - item(AetherItems.YELLOW_CAPE, "accessories/"); - item(AetherItems.WHITE_CAPE, "accessories/"); - item(AetherItems.SWET_CAPE, "accessories/"); - item(AetherItems.INVISIBILITY_CLOAK, "accessories/"); - item(AetherItems.AGILITY_CAPE, "accessories/"); - item(AetherItems.VALKYRIE_CAPE, "accessories/"); - - item(AetherItems.GOLDEN_FEATHER, "accessories/"); - item(AetherItems.REGENERATION_STONE, "accessories/"); - item(AetherItems.IRON_BUBBLE, "accessories/"); - item(AetherItems.SHIELD_OF_REPULSION, "accessories/"); - - handheldItem(AetherItems.SKYROOT_STICK, "materials/"); - item(AetherItems.GOLDEN_AMBER, "materials/"); - item(AetherItems.SWET_BALL, "materials/"); - item(AetherItems.AECHOR_PETAL, "materials/"); - item(AetherItems.AMBROSIUM_SHARD, "materials/"); - item(AetherItems.ZANITE_GEMSTONE, "materials/"); - - item(AetherItems.VICTORY_MEDAL, "miscellaneous/"); - - keyItem(AetherItems.BRONZE_DUNGEON_KEY, "miscellaneous/"); - keyItem(AetherItems.SILVER_DUNGEON_KEY, "miscellaneous/"); - keyItem(AetherItems.GOLD_DUNGEON_KEY, "miscellaneous/"); - - item(AetherItems.SKYROOT_BUCKET, "miscellaneous/"); - item(AetherItems.SKYROOT_WATER_BUCKET, "miscellaneous/"); - item(AetherItems.SKYROOT_POISON_BUCKET, "miscellaneous/"); - item(AetherItems.SKYROOT_REMEDY_BUCKET, "miscellaneous/"); - item(AetherItems.SKYROOT_MILK_BUCKET, "miscellaneous/"); - item(AetherItems.SKYROOT_POWDER_SNOW_BUCKET, "miscellaneous/"); - item(AetherItems.SKYROOT_COD_BUCKET, "miscellaneous/"); - item(AetherItems.SKYROOT_SALMON_BUCKET, "miscellaneous/"); - item(AetherItems.SKYROOT_PUFFERFISH_BUCKET, "miscellaneous/"); - item(AetherItems.SKYROOT_TROPICAL_FISH_BUCKET, "miscellaneous/"); - item(AetherItems.SKYROOT_AXOLOTL_BUCKET, "miscellaneous/"); - item(AetherItems.SKYROOT_TADPOLE_BUCKET, "miscellaneous/"); - - item(AetherItems.SKYROOT_BOAT, "miscellaneous/"); - item(AetherItems.SKYROOT_CHEST_BOAT, "miscellaneous/"); - - item(AetherItems.COLD_PARACHUTE, "miscellaneous/"); - item(AetherItems.GOLDEN_PARACHUTE, "miscellaneous/"); - - handheldItem(AetherItems.NATURE_STAFF, "miscellaneous/"); - handheldItem(AetherItems.CLOUD_STAFF, "miscellaneous/"); - - moaEggItem(AetherItems.BLUE_MOA_EGG, "miscellaneous/"); - moaEggItem(AetherItems.WHITE_MOA_EGG, "miscellaneous/"); - moaEggItem(AetherItems.BLACK_MOA_EGG, "miscellaneous/"); - moaEggItem(AetherItems.ORANGE_MOA_EGG, "miscellaneous/"); - - item(AetherItems.LIFE_SHARD, "miscellaneous/"); - - item(AetherItems.MUSIC_DISC_AETHER_TUNE, "miscellaneous/"); - item(AetherItems.MUSIC_DISC_ASCENDING_DAWN, "miscellaneous/"); - item(AetherItems.MUSIC_DISC_WELCOMING_SKIES, "miscellaneous/"); - item(AetherItems.MUSIC_DISC_LEGACY, "miscellaneous/"); - item(AetherItems.MUSIC_DISC_CHINCHILLA, "miscellaneous/"); - - item(AetherItems.BOOK_OF_LORE, "miscellaneous/"); - - portalItem(AetherItems.AETHER_PORTAL_FRAME, "miscellaneous/"); - - eggItem(AetherItems.PHYG_SPAWN_EGG); - eggItem(AetherItems.FLYING_COW_SPAWN_EGG); - eggItem(AetherItems.SHEEPUFF_SPAWN_EGG); - eggItem(AetherItems.MOA_SPAWN_EGG); - eggItem(AetherItems.AERWHALE_SPAWN_EGG); - eggItem(AetherItems.AERBUNNY_SPAWN_EGG); - eggItem(AetherItems.WHIRLWIND_SPAWN_EGG); - eggItem(AetherItems.BLUE_SWET_SPAWN_EGG); - eggItem(AetherItems.GOLDEN_SWET_SPAWN_EGG); - eggItem(AetherItems.EVIL_WHIRLWIND_SPAWN_EGG); - eggItem(AetherItems.AECHOR_PLANT_SPAWN_EGG); - eggItem(AetherItems.COCKATRICE_SPAWN_EGG); - eggItem(AetherItems.ZEPHYR_SPAWN_EGG); - eggItem(AetherItems.SENTRY_SPAWN_EGG); - eggItem(AetherItems.MIMIC_SPAWN_EGG); - eggItem(AetherItems.VALKYRIE_SPAWN_EGG); - eggItem(AetherItems.FIRE_MINION_SPAWN_EGG); - - eggItem(AetherItems.SLIDER_SPAWN_EGG); - eggItem(AetherItems.VALKYRIE_QUEEN_SPAWN_EGG); - eggItem(AetherItems.SUN_SPIRIT_SPAWN_EGG); - - itemBlock(AetherBlocks.AETHER_GRASS_BLOCK); - itemBlock(AetherBlocks.ENCHANTED_AETHER_GRASS_BLOCK); - itemBlock(AetherBlocks.AETHER_DIRT); - itemBlock(AetherBlocks.QUICKSOIL); - itemBlock(AetherBlocks.HOLYSTONE); - itemBlock(AetherBlocks.MOSSY_HOLYSTONE); - itemBlock(AetherBlocks.AETHER_FARMLAND); - itemBlock(AetherBlocks.AETHER_DIRT_PATH); - - itemBlock(AetherBlocks.COLD_AERCLOUD); - itemBlock(AetherBlocks.BLUE_AERCLOUD); - itemBlock(AetherBlocks.GOLDEN_AERCLOUD); - itemBlock(AetherBlocks.PINK_AERCLOUD); - - itemBlock(AetherBlocks.ICESTONE); - itemBlock(AetherBlocks.AMBROSIUM_ORE); - itemBlock(AetherBlocks.ZANITE_ORE); - itemBlock(AetherBlocks.GRAVITITE_ORE); - - itemBlock(AetherBlocks.SKYROOT_LEAVES); - itemBlock(AetherBlocks.GOLDEN_OAK_LEAVES); - itemBlock(AetherBlocks.CRYSTAL_LEAVES); - itemBlock(AetherBlocks.CRYSTAL_FRUIT_LEAVES); - itemBlock(AetherBlocks.HOLIDAY_LEAVES); - itemBlock(AetherBlocks.DECORATED_HOLIDAY_LEAVES); - - itemBlock(AetherBlocks.SKYROOT_LOG); - itemBlock(AetherBlocks.GOLDEN_OAK_LOG); - itemBlock(AetherBlocks.STRIPPED_SKYROOT_LOG); - itemBlock(AetherBlocks.SKYROOT_WOOD); - itemBlock(AetherBlocks.GOLDEN_OAK_WOOD); - itemBlock(AetherBlocks.STRIPPED_SKYROOT_WOOD); - - itemBlock(AetherBlocks.SKYROOT_PLANKS); - itemBlock(AetherBlocks.HOLYSTONE_BRICKS); - itemBlock(AetherBlocks.QUICKSOIL_GLASS); - pane(AetherBlocks.QUICKSOIL_GLASS_PANE, AetherBlocks.QUICKSOIL_GLASS, "construction/"); - itemBlock(AetherBlocks.AEROGEL); - - itemBlock(AetherBlocks.AMBROSIUM_BLOCK); - itemBlock(AetherBlocks.ZANITE_BLOCK); - itemBlock(AetherBlocks.ENCHANTED_GRAVITITE); - - itemBlock(AetherBlocks.ALTAR); - itemBlock(AetherBlocks.FREEZER); - itemBlock(AetherBlocks.INCUBATOR); - - itemTorch(AetherBlocks.AMBROSIUM_TORCH, "utility/"); - item(() -> AetherBlocks.SKYROOT_SIGN.get().asItem(), "miscellaneous/"); - - itemBlock(AetherBlocks.BERRY_BUSH); - itemBlockFlat(AetherBlocks.BERRY_BUSH_STEM, "natural/"); - - itemBlockFlat(AetherBlocks.WHITE_FLOWER, "natural/"); - itemBlockFlat(AetherBlocks.PURPLE_FLOWER, "natural/"); - - itemBlockFlat(AetherBlocks.SKYROOT_SAPLING, "natural/"); - itemBlockFlat(AetherBlocks.GOLDEN_OAK_SAPLING, "natural/"); - - itemBlock(AetherBlocks.CARVED_STONE); - itemBlock(AetherBlocks.SENTRY_STONE); - itemBlock(AetherBlocks.ANGELIC_STONE); - itemBlock(AetherBlocks.LIGHT_ANGELIC_STONE); - itemBlock(AetherBlocks.HELLFIRE_STONE); - itemBlock(AetherBlocks.LIGHT_HELLFIRE_STONE); - - itemLockedDungeonBlock(AetherBlocks.LOCKED_CARVED_STONE, AetherBlocks.CARVED_STONE); - itemLockedDungeonBlock(AetherBlocks.LOCKED_SENTRY_STONE, AetherBlocks.SENTRY_STONE); - itemLockedDungeonBlock(AetherBlocks.LOCKED_ANGELIC_STONE, AetherBlocks.ANGELIC_STONE); - itemLockedDungeonBlock(AetherBlocks.LOCKED_LIGHT_ANGELIC_STONE, AetherBlocks.LIGHT_ANGELIC_STONE); - itemLockedDungeonBlock(AetherBlocks.LOCKED_HELLFIRE_STONE, AetherBlocks.HELLFIRE_STONE); - itemLockedDungeonBlock(AetherBlocks.LOCKED_LIGHT_HELLFIRE_STONE, AetherBlocks.LIGHT_HELLFIRE_STONE); - - itemTrappedDungeonBlock(AetherBlocks.TRAPPED_CARVED_STONE, AetherBlocks.CARVED_STONE); - itemTrappedDungeonBlock(AetherBlocks.TRAPPED_SENTRY_STONE, AetherBlocks.SENTRY_STONE); - itemTrappedDungeonBlock(AetherBlocks.TRAPPED_ANGELIC_STONE, AetherBlocks.ANGELIC_STONE); - itemTrappedDungeonBlock(AetherBlocks.TRAPPED_LIGHT_ANGELIC_STONE, AetherBlocks.LIGHT_ANGELIC_STONE); - itemTrappedDungeonBlock(AetherBlocks.TRAPPED_HELLFIRE_STONE, AetherBlocks.HELLFIRE_STONE); - itemTrappedDungeonBlock(AetherBlocks.TRAPPED_LIGHT_HELLFIRE_STONE, AetherBlocks.LIGHT_HELLFIRE_STONE); - - itemInvisibleBlock(AetherBlocks.BOSS_DOORWAY_CARVED_STONE, AetherBlocks.CARVED_STONE); - itemInvisibleBlock(AetherBlocks.BOSS_DOORWAY_SENTRY_STONE, AetherBlocks.SENTRY_STONE); - itemInvisibleBlock(AetherBlocks.BOSS_DOORWAY_ANGELIC_STONE, AetherBlocks.ANGELIC_STONE); - itemInvisibleBlock(AetherBlocks.BOSS_DOORWAY_LIGHT_ANGELIC_STONE, AetherBlocks.LIGHT_ANGELIC_STONE); - itemInvisibleBlock(AetherBlocks.BOSS_DOORWAY_HELLFIRE_STONE, AetherBlocks.HELLFIRE_STONE); - itemInvisibleBlock(AetherBlocks.BOSS_DOORWAY_LIGHT_HELLFIRE_STONE, AetherBlocks.LIGHT_HELLFIRE_STONE); - - itemTreasureBlock(AetherBlocks.TREASURE_DOORWAY_CARVED_STONE, AetherBlocks.CARVED_STONE); - itemTreasureBlock(AetherBlocks.TREASURE_DOORWAY_SENTRY_STONE, AetherBlocks.SENTRY_STONE); - itemTreasureBlock(AetherBlocks.TREASURE_DOORWAY_ANGELIC_STONE, AetherBlocks.ANGELIC_STONE); - itemTreasureBlock(AetherBlocks.TREASURE_DOORWAY_LIGHT_ANGELIC_STONE, AetherBlocks.LIGHT_ANGELIC_STONE); - itemTreasureBlock(AetherBlocks.TREASURE_DOORWAY_HELLFIRE_STONE, AetherBlocks.HELLFIRE_STONE); - itemTreasureBlock(AetherBlocks.TREASURE_DOORWAY_LIGHT_HELLFIRE_STONE, AetherBlocks.LIGHT_HELLFIRE_STONE); - - lookalikeBlock(AetherBlocks.CHEST_MIMIC, mcLoc("item/chest")); - lookalikeBlock(AetherBlocks.TREASURE_CHEST, mcLoc("item/chest")); - - itemBlock(AetherBlocks.PILLAR); - itemBlock(AetherBlocks.PILLAR_TOP); - - itemBlock(AetherBlocks.PRESENT); - - itemFence(AetherBlocks.SKYROOT_FENCE, AetherBlocks.SKYROOT_PLANKS, "construction/"); - itemBlock(AetherBlocks.SKYROOT_FENCE_GATE); - item(() -> AetherBlocks.SKYROOT_DOOR.get().asItem(), "miscellaneous/"); - itemBlock(AetherBlocks.SKYROOT_TRAPDOOR, "_bottom"); - itemButton(AetherBlocks.SKYROOT_BUTTON, AetherBlocks.SKYROOT_PLANKS, "construction/"); - itemBlock(AetherBlocks.SKYROOT_PRESSURE_PLATE); - - itemButton(AetherBlocks.HOLYSTONE_BUTTON, AetherBlocks.HOLYSTONE, "natural/"); - itemBlock(AetherBlocks.HOLYSTONE_PRESSURE_PLATE); - - itemWallBlock(AetherBlocks.CARVED_WALL, AetherBlocks.CARVED_STONE, "dungeon/"); - itemWallBlock(AetherBlocks.ANGELIC_WALL, AetherBlocks.ANGELIC_STONE, "dungeon/"); - itemWallBlock(AetherBlocks.HELLFIRE_WALL, AetherBlocks.HELLFIRE_STONE, "dungeon/"); - itemWallBlock(AetherBlocks.HOLYSTONE_WALL, AetherBlocks.HOLYSTONE, "natural/"); - itemWallBlock(AetherBlocks.MOSSY_HOLYSTONE_WALL, AetherBlocks.MOSSY_HOLYSTONE, "natural/"); - itemWallBlock(AetherBlocks.ICESTONE_WALL, AetherBlocks.ICESTONE, "natural/"); - itemWallBlock(AetherBlocks.HOLYSTONE_BRICK_WALL, AetherBlocks.HOLYSTONE_BRICKS, "construction/"); - translucentItemWallBlock(AetherBlocks.AEROGEL_WALL, AetherBlocks.AEROGEL, "construction/"); - - itemBlock(AetherBlocks.SKYROOT_STAIRS); - itemBlock(AetherBlocks.CARVED_STAIRS); - itemBlock(AetherBlocks.ANGELIC_STAIRS); - itemBlock(AetherBlocks.HELLFIRE_STAIRS); - itemBlock(AetherBlocks.HOLYSTONE_STAIRS); - itemBlock(AetherBlocks.MOSSY_HOLYSTONE_STAIRS); - itemBlock(AetherBlocks.ICESTONE_STAIRS); - itemBlock(AetherBlocks.HOLYSTONE_BRICK_STAIRS); - itemBlock(AetherBlocks.AEROGEL_STAIRS); - - itemBlock(AetherBlocks.SKYROOT_SLAB); - itemBlock(AetherBlocks.CARVED_SLAB); - itemBlock(AetherBlocks.ANGELIC_SLAB); - itemBlock(AetherBlocks.HELLFIRE_SLAB); - itemBlock(AetherBlocks.HOLYSTONE_SLAB); - itemBlock(AetherBlocks.MOSSY_HOLYSTONE_SLAB); - itemBlock(AetherBlocks.ICESTONE_SLAB); - itemBlock(AetherBlocks.HOLYSTONE_BRICK_SLAB); - itemBlock(AetherBlocks.AEROGEL_SLAB); - - itemBlock(AetherBlocks.SUN_ALTAR); - - itemBlock(AetherBlocks.SKYROOT_BOOKSHELF); - - lookalikeBlock(AetherBlocks.SKYROOT_BED, mcLoc("item/template_bed")); + this.handheldItem(AetherItems.SKYROOT_PICKAXE.get(), "tools/"); + this.handheldItem(AetherItems.SKYROOT_AXE.get(), "tools/"); + this.handheldItem(AetherItems.SKYROOT_SHOVEL.get(), "tools/"); + this.handheldItem(AetherItems.SKYROOT_HOE.get(), "tools/"); + + this.handheldItem(AetherItems.HOLYSTONE_PICKAXE.get(), "tools/"); + this.handheldItem(AetherItems.HOLYSTONE_AXE.get(), "tools/"); + this.handheldItem(AetherItems.HOLYSTONE_SHOVEL.get(), "tools/"); + this.handheldItem(AetherItems.HOLYSTONE_HOE.get(), "tools/"); + + this.handheldItem(AetherItems.ZANITE_PICKAXE.get(), "tools/"); + this.handheldItem(AetherItems.ZANITE_AXE.get(), "tools/"); + this.handheldItem(AetherItems.ZANITE_SHOVEL.get(), "tools/"); + this.handheldItem(AetherItems.ZANITE_HOE.get(), "tools/"); + + this.handheldItem(AetherItems.GRAVITITE_PICKAXE.get(), "tools/"); + this.handheldItem(AetherItems.GRAVITITE_AXE.get(), "tools/"); + this.handheldItem(AetherItems.GRAVITITE_SHOVEL.get(), "tools/"); + this.handheldItem(AetherItems.GRAVITITE_HOE.get(), "tools/"); + + this.handheldItem(AetherItems.VALKYRIE_PICKAXE.get(), "tools/"); + this.handheldItem(AetherItems.VALKYRIE_AXE.get(), "tools/"); + this.handheldItem(AetherItems.VALKYRIE_SHOVEL.get(), "tools/"); + this.handheldItem(AetherItems.VALKYRIE_HOE.get(), "tools/"); + + this.handheldItem(AetherItems.SKYROOT_SWORD.get(), "weapons/"); + this.handheldItem(AetherItems.HOLYSTONE_SWORD.get(), "weapons/"); + this.handheldItem(AetherItems.ZANITE_SWORD.get(), "weapons/"); + this.handheldItem(AetherItems.GRAVITITE_SWORD.get(), "weapons/"); + + this.lanceItem(AetherItems.VALKYRIE_LANCE.get(), "weapons/"); + + this.handheldItem(AetherItems.FLAMING_SWORD.get(), "weapons/"); + this.handheldItem(AetherItems.LIGHTNING_SWORD.get(), "weapons/"); + this.handheldItem(AetherItems.HOLY_SWORD.get(), "weapons/"); + this.handheldItem(AetherItems.VAMPIRE_BLADE.get(), "weapons/"); + this.handheldItem(AetherItems.PIG_SLAYER.get(), "weapons/"); + this.nameableWeapon(AetherItems.CANDY_CANE_SWORD.get(), "weapons/", "green_candy_cane_sword"); + + this.nameableWeapon(AetherItems.HAMMER_OF_NOTCH.get(), "weapons/", "hammer_of_jeb"); + + this.handheldItem(AetherItems.LIGHTNING_KNIFE.get(), "weapons/"); + + this.item(AetherItems.GOLDEN_DART.get(), "weapons/"); + this.item(AetherItems.POISON_DART.get(), "weapons/"); + this.item(AetherItems.ENCHANTED_DART.get(), "weapons/"); + + this.dartShooterItem(AetherItems.GOLDEN_DART_SHOOTER.get(), "weapons/"); + this.dartShooterItem(AetherItems.POISON_DART_SHOOTER.get(), "weapons/"); + this.dartShooterItem(AetherItems.ENCHANTED_DART_SHOOTER.get(), "weapons/"); + + 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.item(AetherItems.VALKYRIE_HELMET.get(), "armor/"); + this.item(AetherItems.VALKYRIE_CHESTPLATE.get(), "armor/"); + this.item(AetherItems.VALKYRIE_LEGGINGS.get(), "armor/"); + this.item(AetherItems.VALKYRIE_BOOTS.get(), "armor/"); + + this.item(AetherItems.SENTRY_BOOTS.get(), "armor/"); + + this.item(AetherItems.BLUE_BERRY.get(), "food/"); + this.item(AetherItems.ENCHANTED_BERRY.get(), "food/"); + this.item(AetherItems.WHITE_APPLE.get(), "food/"); + this.item(AetherItems.BLUE_GUMMY_SWET.get(), "food/"); + this.item(AetherItems.GOLDEN_GUMMY_SWET.get(), "food/"); + this.item(AetherItems.HEALING_STONE.get(), "food/"); + this.item(AetherItems.CANDY_CANE.get(), "food/"); + this.item(AetherItems.GINGERBREAD_MAN.get(), "food/"); + + this.item(AetherItems.IRON_RING.get(), "accessories/"); + this.item(AetherItems.GOLDEN_RING.get(), "accessories/"); + this.item(AetherItems.ZANITE_RING.get(), "accessories/"); + this.item(AetherItems.ICE_RING.get(), "accessories/"); + + this.item(AetherItems.IRON_PENDANT.get(), "accessories/"); + this.item(AetherItems.GOLDEN_PENDANT.get(), "accessories/"); + 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.item(AetherItems.RED_CAPE.get(), "accessories/"); + this.item(AetherItems.BLUE_CAPE.get(), "accessories/"); + this.item(AetherItems.YELLOW_CAPE.get(), "accessories/"); + this.item(AetherItems.WHITE_CAPE.get(), "accessories/"); + this.item(AetherItems.SWET_CAPE.get(), "accessories/"); + this.item(AetherItems.INVISIBILITY_CLOAK.get(), "accessories/"); + this.item(AetherItems.AGILITY_CAPE.get(), "accessories/"); + this.item(AetherItems.VALKYRIE_CAPE.get(), "accessories/"); + + this.item(AetherItems.GOLDEN_FEATHER.get(), "accessories/"); + this.item(AetherItems.REGENERATION_STONE.get(), "accessories/"); + this.item(AetherItems.IRON_BUBBLE.get(), "accessories/"); + this.item(AetherItems.SHIELD_OF_REPULSION.get(), "accessories/"); + + this.handheldItem(AetherItems.SKYROOT_STICK.get(), "materials/"); + this.item(AetherItems.GOLDEN_AMBER.get(), "materials/"); + this.item(AetherItems.SWET_BALL.get(), "materials/"); + this.item(AetherItems.AECHOR_PETAL.get(), "materials/"); + this.item(AetherItems.AMBROSIUM_SHARD.get(), "materials/"); + this.item(AetherItems.ZANITE_GEMSTONE.get(), "materials/"); + + this.item(AetherItems.VICTORY_MEDAL.get(), "miscellaneous/"); + + this.keyItem(AetherItems.BRONZE_DUNGEON_KEY.get(), "miscellaneous/"); + this.keyItem(AetherItems.SILVER_DUNGEON_KEY.get(), "miscellaneous/"); + this.keyItem(AetherItems.GOLD_DUNGEON_KEY.get(), "miscellaneous/"); + + this.item(AetherItems.SKYROOT_BUCKET.get(), "miscellaneous/"); + this.item(AetherItems.SKYROOT_WATER_BUCKET.get(), "miscellaneous/"); + this.item(AetherItems.SKYROOT_POISON_BUCKET.get(), "miscellaneous/"); + this.item(AetherItems.SKYROOT_REMEDY_BUCKET.get(), "miscellaneous/"); + this.item(AetherItems.SKYROOT_MILK_BUCKET.get(), "miscellaneous/"); + this.item(AetherItems.SKYROOT_POWDER_SNOW_BUCKET.get(), "miscellaneous/"); + this.item(AetherItems.SKYROOT_COD_BUCKET.get(), "miscellaneous/"); + this.item(AetherItems.SKYROOT_SALMON_BUCKET.get(), "miscellaneous/"); + this.item(AetherItems.SKYROOT_PUFFERFISH_BUCKET.get(), "miscellaneous/"); + this.item(AetherItems.SKYROOT_TROPICAL_FISH_BUCKET.get(), "miscellaneous/"); + this.item(AetherItems.SKYROOT_AXOLOTL_BUCKET.get(), "miscellaneous/"); + this.item(AetherItems.SKYROOT_TADPOLE_BUCKET.get(), "miscellaneous/"); + + this.item(AetherItems.SKYROOT_BOAT.get(), "miscellaneous/"); + this.item(AetherItems.SKYROOT_CHEST_BOAT.get(), "miscellaneous/"); + + this.item(AetherItems.COLD_PARACHUTE.get(), "miscellaneous/"); + this.item(AetherItems.GOLDEN_PARACHUTE.get(), "miscellaneous/"); + + this.handheldItem(AetherItems.NATURE_STAFF.get(), "miscellaneous/"); + this.handheldItem(AetherItems.CLOUD_STAFF.get(), "miscellaneous/"); + + this.moaEggItem(AetherItems.BLUE_MOA_EGG.get(), "miscellaneous/"); + this.moaEggItem(AetherItems.WHITE_MOA_EGG.get(), "miscellaneous/"); + this.moaEggItem(AetherItems.BLACK_MOA_EGG.get(), "miscellaneous/"); + this.moaEggItem(AetherItems.ORANGE_MOA_EGG.get(), "miscellaneous/"); + + this.item(AetherItems.LIFE_SHARD.get(), "miscellaneous/"); + + this.item(AetherItems.MUSIC_DISC_AETHER_TUNE.get(), "miscellaneous/"); + this.item(AetherItems.MUSIC_DISC_ASCENDING_DAWN.get(), "miscellaneous/"); + this.item(AetherItems.MUSIC_DISC_WELCOMING_SKIES.get(), "miscellaneous/"); + this.item(AetherItems.MUSIC_DISC_LEGACY.get(), "miscellaneous/"); + this.item(AetherItems.MUSIC_DISC_CHINCHILLA.get(), "miscellaneous/"); + + this.item(AetherItems.BOOK_OF_LORE.get(), "miscellaneous/"); + + this.portalItem(AetherItems.AETHER_PORTAL_FRAME.get(), "miscellaneous/"); + + this.eggItem(AetherItems.PHYG_SPAWN_EGG.get()); + this.eggItem(AetherItems.FLYING_COW_SPAWN_EGG.get()); + this.eggItem(AetherItems.SHEEPUFF_SPAWN_EGG.get()); + this.eggItem(AetherItems.MOA_SPAWN_EGG.get()); + this.eggItem(AetherItems.AERWHALE_SPAWN_EGG.get()); + this.eggItem(AetherItems.AERBUNNY_SPAWN_EGG.get()); + this.eggItem(AetherItems.WHIRLWIND_SPAWN_EGG.get()); + this.eggItem(AetherItems.BLUE_SWET_SPAWN_EGG.get()); + this.eggItem(AetherItems.GOLDEN_SWET_SPAWN_EGG.get()); + this.eggItem(AetherItems.EVIL_WHIRLWIND_SPAWN_EGG.get()); + this.eggItem(AetherItems.AECHOR_PLANT_SPAWN_EGG.get()); + this.eggItem(AetherItems.COCKATRICE_SPAWN_EGG.get()); + this.eggItem(AetherItems.ZEPHYR_SPAWN_EGG.get()); + this.eggItem(AetherItems.SENTRY_SPAWN_EGG.get()); + this.eggItem(AetherItems.MIMIC_SPAWN_EGG.get()); + this.eggItem(AetherItems.VALKYRIE_SPAWN_EGG.get()); + this.eggItem(AetherItems.FIRE_MINION_SPAWN_EGG.get()); + + this.eggItem(AetherItems.SLIDER_SPAWN_EGG.get()); + this.eggItem(AetherItems.VALKYRIE_QUEEN_SPAWN_EGG.get()); + this.eggItem(AetherItems.SUN_SPIRIT_SPAWN_EGG.get()); + + this.itemBlock(AetherBlocks.AETHER_GRASS_BLOCK.get()); + this.itemBlock(AetherBlocks.ENCHANTED_AETHER_GRASS_BLOCK.get()); + this.itemBlock(AetherBlocks.AETHER_DIRT.get()); + this.itemBlock(AetherBlocks.QUICKSOIL.get()); + this.itemBlock(AetherBlocks.HOLYSTONE.get()); + this.itemBlock(AetherBlocks.MOSSY_HOLYSTONE.get()); + this.itemBlock(AetherBlocks.AETHER_FARMLAND.get()); + this.itemBlock(AetherBlocks.AETHER_DIRT_PATH.get()); + + this.itemBlock(AetherBlocks.COLD_AERCLOUD.get()); + this.itemBlock(AetherBlocks.BLUE_AERCLOUD.get()); + this.itemBlock(AetherBlocks.GOLDEN_AERCLOUD.get()); + this.itemBlock(AetherBlocks.PINK_AERCLOUD.get()); + + this.itemBlock(AetherBlocks.ICESTONE.get()); + this.itemBlock(AetherBlocks.AMBROSIUM_ORE.get()); + this.itemBlock(AetherBlocks.ZANITE_ORE.get()); + this.itemBlock(AetherBlocks.GRAVITITE_ORE.get()); + + this.itemBlock(AetherBlocks.SKYROOT_LEAVES.get()); + this.itemBlock(AetherBlocks.GOLDEN_OAK_LEAVES.get()); + this.itemBlock(AetherBlocks.CRYSTAL_LEAVES.get()); + this.itemBlock(AetherBlocks.CRYSTAL_FRUIT_LEAVES.get()); + this.itemBlock(AetherBlocks.HOLIDAY_LEAVES.get()); + this.itemBlock(AetherBlocks.DECORATED_HOLIDAY_LEAVES.get()); + + this.itemBlock(AetherBlocks.SKYROOT_LOG.get()); + this.itemBlock(AetherBlocks.GOLDEN_OAK_LOG.get()); + this.itemBlock(AetherBlocks.STRIPPED_SKYROOT_LOG.get()); + this.itemBlock(AetherBlocks.SKYROOT_WOOD.get()); + this.itemBlock(AetherBlocks.GOLDEN_OAK_WOOD.get()); + this.itemBlock(AetherBlocks.STRIPPED_SKYROOT_WOOD.get()); + + this.itemBlock(AetherBlocks.SKYROOT_PLANKS.get()); + this.itemBlock(AetherBlocks.HOLYSTONE_BRICKS.get()); + this.itemBlock(AetherBlocks.QUICKSOIL_GLASS.get()); + this.pane(AetherBlocks.QUICKSOIL_GLASS_PANE.get(), AetherBlocks.QUICKSOIL_GLASS.get(), "construction/"); + this.itemBlock(AetherBlocks.AEROGEL.get()); + + this.itemBlock(AetherBlocks.AMBROSIUM_BLOCK.get()); + this.itemBlock(AetherBlocks.ZANITE_BLOCK.get()); + this.itemBlock(AetherBlocks.ENCHANTED_GRAVITITE.get()); + + this.itemBlock(AetherBlocks.ALTAR.get()); + this.itemBlock(AetherBlocks.FREEZER.get()); + this.itemBlock(AetherBlocks.INCUBATOR.get()); + + this.itemTorch(AetherBlocks.AMBROSIUM_TORCH.get(), "utility/"); + this.item(AetherBlocks.SKYROOT_SIGN.get().asItem(), "miscellaneous/"); + + this.itemBlock(AetherBlocks.BERRY_BUSH.get()); + this.itemBlockFlat(AetherBlocks.BERRY_BUSH_STEM.get(), "natural/"); + + this.itemBlockFlat(AetherBlocks.WHITE_FLOWER.get(), "natural/"); + this.itemBlockFlat(AetherBlocks.PURPLE_FLOWER.get(), "natural/"); + + this.itemBlockFlat(AetherBlocks.SKYROOT_SAPLING.get(), "natural/"); + this.itemBlockFlat(AetherBlocks.GOLDEN_OAK_SAPLING.get(), "natural/"); + + this.itemBlock(AetherBlocks.CARVED_STONE.get()); + this.itemBlock(AetherBlocks.SENTRY_STONE.get()); + this.itemBlock(AetherBlocks.ANGELIC_STONE.get()); + this.itemBlock(AetherBlocks.LIGHT_ANGELIC_STONE.get()); + this.itemBlock(AetherBlocks.HELLFIRE_STONE.get()); + this.itemBlock(AetherBlocks.LIGHT_HELLFIRE_STONE.get()); + + this.itemLockedDungeonBlock(AetherBlocks.LOCKED_CARVED_STONE.get(), AetherBlocks.CARVED_STONE.get()); + this.itemLockedDungeonBlock(AetherBlocks.LOCKED_SENTRY_STONE.get(), AetherBlocks.SENTRY_STONE.get()); + this.itemLockedDungeonBlock(AetherBlocks.LOCKED_ANGELIC_STONE.get(), AetherBlocks.ANGELIC_STONE.get()); + this.itemLockedDungeonBlock(AetherBlocks.LOCKED_LIGHT_ANGELIC_STONE.get(), AetherBlocks.LIGHT_ANGELIC_STONE.get()); + this.itemLockedDungeonBlock(AetherBlocks.LOCKED_HELLFIRE_STONE.get(), AetherBlocks.HELLFIRE_STONE.get()); + this.itemLockedDungeonBlock(AetherBlocks.LOCKED_LIGHT_HELLFIRE_STONE.get(), AetherBlocks.LIGHT_HELLFIRE_STONE.get()); + + this.itemTrappedDungeonBlock(AetherBlocks.TRAPPED_CARVED_STONE.get(), AetherBlocks.CARVED_STONE.get()); + this.itemTrappedDungeonBlock(AetherBlocks.TRAPPED_SENTRY_STONE.get(), AetherBlocks.SENTRY_STONE.get()); + this.itemTrappedDungeonBlock(AetherBlocks.TRAPPED_ANGELIC_STONE.get(), AetherBlocks.ANGELIC_STONE.get()); + this.itemTrappedDungeonBlock(AetherBlocks.TRAPPED_LIGHT_ANGELIC_STONE.get(), AetherBlocks.LIGHT_ANGELIC_STONE.get()); + this.itemTrappedDungeonBlock(AetherBlocks.TRAPPED_HELLFIRE_STONE.get(), AetherBlocks.HELLFIRE_STONE.get()); + this.itemTrappedDungeonBlock(AetherBlocks.TRAPPED_LIGHT_HELLFIRE_STONE.get(), AetherBlocks.LIGHT_HELLFIRE_STONE.get()); + + this.itemBossDoorwayDungeonBlock(AetherBlocks.BOSS_DOORWAY_CARVED_STONE.get(), AetherBlocks.CARVED_STONE.get()); + this.itemBossDoorwayDungeonBlock(AetherBlocks.BOSS_DOORWAY_SENTRY_STONE.get(), AetherBlocks.SENTRY_STONE.get()); + this.itemBossDoorwayDungeonBlock(AetherBlocks.BOSS_DOORWAY_ANGELIC_STONE.get(), AetherBlocks.ANGELIC_STONE.get()); + this.itemBossDoorwayDungeonBlock(AetherBlocks.BOSS_DOORWAY_LIGHT_ANGELIC_STONE.get(), AetherBlocks.LIGHT_ANGELIC_STONE.get()); + this.itemBossDoorwayDungeonBlock(AetherBlocks.BOSS_DOORWAY_HELLFIRE_STONE.get(), AetherBlocks.HELLFIRE_STONE.get()); + this.itemBossDoorwayDungeonBlock(AetherBlocks.BOSS_DOORWAY_LIGHT_HELLFIRE_STONE.get(), AetherBlocks.LIGHT_HELLFIRE_STONE.get()); + + this.itemTreasureDoorwayDungeonBlock(AetherBlocks.TREASURE_DOORWAY_CARVED_STONE.get(), AetherBlocks.CARVED_STONE.get()); + this.itemTreasureDoorwayDungeonBlock(AetherBlocks.TREASURE_DOORWAY_SENTRY_STONE.get(), AetherBlocks.SENTRY_STONE.get()); + this.itemTreasureDoorwayDungeonBlock(AetherBlocks.TREASURE_DOORWAY_ANGELIC_STONE.get(), AetherBlocks.ANGELIC_STONE.get()); + this.itemTreasureDoorwayDungeonBlock(AetherBlocks.TREASURE_DOORWAY_LIGHT_ANGELIC_STONE.get(), AetherBlocks.LIGHT_ANGELIC_STONE.get()); + this.itemTreasureDoorwayDungeonBlock(AetherBlocks.TREASURE_DOORWAY_HELLFIRE_STONE.get(), AetherBlocks.HELLFIRE_STONE.get()); + this.itemTreasureDoorwayDungeonBlock(AetherBlocks.TREASURE_DOORWAY_LIGHT_HELLFIRE_STONE.get(), AetherBlocks.LIGHT_HELLFIRE_STONE.get()); + + this.lookalikeBlock(AetherBlocks.CHEST_MIMIC.get(), this.mcLoc("item/chest")); + this.lookalikeBlock(AetherBlocks.TREASURE_CHEST.get(), this.mcLoc("item/chest")); + + this.itemBlock(AetherBlocks.PILLAR.get()); + this.itemBlock(AetherBlocks.PILLAR_TOP.get()); + + this.itemBlock(AetherBlocks.PRESENT.get()); + + this.itemFence(AetherBlocks.SKYROOT_FENCE.get(), AetherBlocks.SKYROOT_PLANKS.get(), "construction/"); + this.itemBlock(AetherBlocks.SKYROOT_FENCE_GATE.get()); + this.item(AetherBlocks.SKYROOT_DOOR.get().asItem(), "miscellaneous/"); + this.itemBlock(AetherBlocks.SKYROOT_TRAPDOOR.get(), "_bottom"); + this.itemButton(AetherBlocks.SKYROOT_BUTTON.get(), AetherBlocks.SKYROOT_PLANKS.get(), "construction/"); + this.itemBlock(AetherBlocks.SKYROOT_PRESSURE_PLATE.get()); + + this.itemButton(AetherBlocks.HOLYSTONE_BUTTON.get(), AetherBlocks.HOLYSTONE.get(), "natural/"); + this.itemBlock(AetherBlocks.HOLYSTONE_PRESSURE_PLATE.get()); + + this.itemWallBlock(AetherBlocks.CARVED_WALL.get(), AetherBlocks.CARVED_STONE.get(), "dungeon/"); + this.itemWallBlock(AetherBlocks.ANGELIC_WALL.get(), AetherBlocks.ANGELIC_STONE.get(), "dungeon/"); + this.itemWallBlock(AetherBlocks.HELLFIRE_WALL.get(), AetherBlocks.HELLFIRE_STONE.get(), "dungeon/"); + this.itemWallBlock(AetherBlocks.HOLYSTONE_WALL.get(), AetherBlocks.HOLYSTONE.get(), "natural/"); + this.itemWallBlock(AetherBlocks.MOSSY_HOLYSTONE_WALL.get(), AetherBlocks.MOSSY_HOLYSTONE.get(), "natural/"); + this.itemWallBlock(AetherBlocks.ICESTONE_WALL.get(), AetherBlocks.ICESTONE.get(), "natural/"); + this.itemWallBlock(AetherBlocks.HOLYSTONE_BRICK_WALL.get(), AetherBlocks.HOLYSTONE_BRICKS.get(), "construction/"); + this.translucentItemWallBlock(AetherBlocks.AEROGEL_WALL.get(), AetherBlocks.AEROGEL.get(), "construction/"); + + this.itemBlock(AetherBlocks.SKYROOT_STAIRS.get()); + this.itemBlock(AetherBlocks.CARVED_STAIRS.get()); + this.itemBlock(AetherBlocks.ANGELIC_STAIRS.get()); + this.itemBlock(AetherBlocks.HELLFIRE_STAIRS.get()); + this.itemBlock(AetherBlocks.HOLYSTONE_STAIRS.get()); + this.itemBlock(AetherBlocks.MOSSY_HOLYSTONE_STAIRS.get()); + this.itemBlock(AetherBlocks.ICESTONE_STAIRS.get()); + this.itemBlock(AetherBlocks.HOLYSTONE_BRICK_STAIRS.get()); + this.itemBlock(AetherBlocks.AEROGEL_STAIRS.get()); + + this.itemBlock(AetherBlocks.SKYROOT_SLAB.get()); + this.itemBlock(AetherBlocks.CARVED_SLAB.get()); + this.itemBlock(AetherBlocks.ANGELIC_SLAB.get()); + this.itemBlock(AetherBlocks.HELLFIRE_SLAB.get()); + this.itemBlock(AetherBlocks.HOLYSTONE_SLAB.get()); + this.itemBlock(AetherBlocks.MOSSY_HOLYSTONE_SLAB.get()); + this.itemBlock(AetherBlocks.ICESTONE_SLAB.get()); + this.itemBlock(AetherBlocks.HOLYSTONE_BRICK_SLAB.get()); + this.itemBlock(AetherBlocks.AEROGEL_SLAB.get()); + + this.itemBlock(AetherBlocks.SUN_ALTAR.get()); + + this.itemBlock(AetherBlocks.SKYROOT_BOOKSHELF.get()); + + this.lookalikeBlock(AetherBlocks.SKYROOT_BED.get(), this.mcLoc("item/template_bed")); } } diff --git a/src/main/java/com/gildedgames/aether/data/generators/AetherLanguageData.java b/src/main/java/com/gildedgames/aether/data/generators/AetherLanguageData.java index cea146e068..7349ee73aa 100644 --- a/src/main/java/com/gildedgames/aether/data/generators/AetherLanguageData.java +++ b/src/main/java/com/gildedgames/aether/data/generators/AetherLanguageData.java @@ -1,18 +1,18 @@ package com.gildedgames.aether.data.generators; +import com.gildedgames.aether.Aether; import com.gildedgames.aether.block.AetherBlocks; import com.gildedgames.aether.data.providers.AetherLanguageProvider; import com.gildedgames.aether.effect.AetherEffects; import com.gildedgames.aether.entity.AetherEntityTypes; import com.gildedgames.aether.inventory.menu.AetherMenuTypes; -import com.gildedgames.aether.item.AetherItemGroups; +import com.gildedgames.aether.item.AetherCreativeTabs; import com.gildedgames.aether.item.AetherItems; -import net.minecraft.data.DataGenerator; +import net.minecraft.data.PackOutput; -public class AetherLanguageData extends AetherLanguageProvider -{ - public AetherLanguageData(DataGenerator gen) { - super(gen); +public class AetherLanguageData extends AetherLanguageProvider { + public AetherLanguageData(PackOutput output) { + super(output, Aether.MODID); } @Override @@ -161,9 +161,7 @@ protected void addTranslations() { addBlock(AetherBlocks.AEROGEL_SLAB, "Aerogel Slab"); addBlock(AetherBlocks.SUN_ALTAR, "Sun Altar"); - addBlock(AetherBlocks.SKYROOT_BOOKSHELF, "Skyroot Bookshelf"); - addBlock(AetherBlocks.SKYROOT_BED, "Skyroot Bed"); addBlock(AetherBlocks.UNSTABLE_OBSIDIAN, "Unstable Obsidian"); @@ -435,35 +433,36 @@ protected void addTranslations() { addContainerType("sun_altar", "Sun Altar"); - addItemGroup(AetherItemGroups.AETHER_BLOCKS, "Aether Blocks"); - addItemGroup(AetherItemGroups.AETHER_TOOLS, "Aether Tools"); - addItemGroup(AetherItemGroups.AETHER_WEAPONS, "Aether Weapons"); - addItemGroup(AetherItemGroups.AETHER_ARMOR, "Aether Armor"); - addItemGroup(AetherItemGroups.AETHER_FOOD, "Aether Foods"); - addItemGroup(AetherItemGroups.AETHER_ACCESSORIES, "Aether Accessories"); - addItemGroup(AetherItemGroups.AETHER_MATERIALS, "Aether Materials"); - addItemGroup(AetherItemGroups.AETHER_MISC, "Aether Miscellaneous"); + addCreativeTab(AetherCreativeTabs.AETHER_BUILDING_BLOCKS, "Aether Building Blocks"); + addCreativeTab(AetherCreativeTabs.AETHER_DUNGEON_BLOCKS, "Aether Dungeon Blocks"); + addCreativeTab(AetherCreativeTabs.AETHER_NATURAL_BLOCKS, "Aether Natural Blocks"); + addCreativeTab(AetherCreativeTabs.AETHER_FUNCTIONAL_BLOCKS, "Aether Functional Blocks"); + addCreativeTab(AetherCreativeTabs.AETHER_REDSTONE_BLOCKS, "Aether Redstone Blocks"); + addCreativeTab(AetherCreativeTabs.AETHER_EQUIPMENT_AND_UTILITIES, "Aether Equipment & Utilities"); + addCreativeTab(AetherCreativeTabs.AETHER_ARMOR_AND_ACCESSORIES, "Aether Armor & Accessories"); + addCreativeTab(AetherCreativeTabs.AETHER_FOOD_AND_DRINKS, "Aether Food & Drinks"); + addCreativeTab(AetherCreativeTabs.AETHER_INGREDIENTS, "Aether Ingredients"); + addCreativeTab(AetherCreativeTabs.AETHER_SPAWN_EGGS, "Aether Spawn Eggs"); addAdvancement("enter_aether", "Hostile Paradise"); addAdvancement("read_lore", "The More You Know!"); addAdvancement("loreception", "Lore-Ception!"); addAdvancement("blue_aercloud", "To Infinity and Beyond!"); - addAdvancement("incubator", "Now You're Family"); - addAdvancement("altar", "Do You Believe in Magic?"); + addAdvancement("incubate_moa", "Now You're Family"); + addAdvancement("craft_altar", "Do You Believe in Magic?"); addAdvancement("gravitite_tools", "Pink is the New Blue"); addAdvancement("mount_phyg", "When Phygs Fly"); addAdvancement("bronze_dungeon", "Like a Bossaru!"); addAdvancement("silver_dungeon", "Dethroned"); addAdvancement("gold_dungeon", "Extinguished"); - addAdvancementDesc("enter_aether", "Enter the Aether"); addAdvancementDesc("read_lore", "Read a Book of Lore"); addAdvancementDesc("loreception", "Put a Book of Lore inside a Book of Lore"); addAdvancementDesc("blue_aercloud", "Bounce on a Blue Aercloud"); - addAdvancementDesc("incubator", "Incubate a Moa"); - addAdvancementDesc("altar", "Craft an Altar"); + addAdvancementDesc("incubate_moa", "Incubate a Moa"); + addAdvancementDesc("craft_altar", "Craft an Altar"); addAdvancementDesc("gravitite_tools", "Craft a Gravitite tool"); addAdvancementDesc("mount_phyg", "Fly on a Phyg!"); addAdvancementDesc("bronze_dungeon", "Defeat the bronze boss"); @@ -586,7 +585,8 @@ protected void addTranslations() { addSubtitle("entity", "dart.hit", "Dart hits"); - + addDeath("floating_block", "%1$s was squashed by a floating block"); + addDeath("floating_block.player", "%1$s was squashed by a floating block whilst fighting %2$s"); addDeath("inebriation", "%1$s was inebriated"); addDeath("inebriation.player", "%1$s was inebriated by %2$s"); addDeath("crush", "%1$s was crushed by %2$s"); @@ -596,22 +596,18 @@ protected void addTranslations() { addDeath("incineration", "%1$s was incinerated by %2$s"); - addMenuText("minecraft", "Normal Theme"); addMenuText("aether", "Aether Theme"); addMenuText("preview", "Toggle World"); addMenuText("load", "Quick Load"); - addGuiText("pro_tip", "Pro Tip:"); addGuiText("ascending", "Ascending to the Aether"); addGuiText("descending", "Descending from the Aether"); - addGuiText("accessories.skins_button", "Skins"); addGuiText("accessories.customization_button", "Customization"); - addGuiText("sun_altar.time", "Time"); addGuiText("recipebook.toggleRecipes.enchantable", "Showing Enchantable"); @@ -624,11 +620,10 @@ protected void addTranslations() { addGuiText("jei.incubating", "Incubating"); addGuiText("jei.fuel", "Aether Fuel"); - addGuiText("slider.title", "the Slider"); addGuiText("slider.message.attack.invalid", "Hmm. Perhaps I need to attack it with a Pickaxe?"); - //Valkyrie dialogue + // Valkyrie Dialogue addGuiText("valkyrie.dialog.1", "What's that? You want to fight? Aww, what a cute little human."); addGuiText("valkyrie.dialog.2", "You're not thinking of fighting a big, strong Valkyrie are you?"); addGuiText("valkyrie.dialog.3", "I don't think you should bother me, you could get really hurt."); @@ -645,11 +640,11 @@ protected void addTranslations() { addGuiText("valkyrie.dialog.medal.2", "That's pretty impressive, but you won't defeat me."); addGuiText("valkyrie.dialog.medal.3", "You think you're a tough guy, eh? Well, bring it on!"); - addGuiText("valkyrie.dialog.playerdead.1", "You want a medallion? Try being less pathetic."); - addGuiText("valkyrie.dialog.playerdead.2", "Maybe some day, %s... maybe some day."); - addGuiText("valkyrie.dialog.playerdead.3", "Humans aren't nearly as cute when they're dead."); + addGuiText("valkyrie.dialog.playerdeath.1", "You want a medallion? Try being less pathetic."); + addGuiText("valkyrie.dialog.playerdeath.2", "Maybe some day, %s... maybe some day."); + addGuiText("valkyrie.dialog.playerdeath.3", "Humans aren't nearly as cute when they're dead."); - //Valkyrie queen dialogue + // Valkyrie Queen Dialogue addGuiText("queen.dialog.answer", "This is a sanctuary for us Valkyries who seek rest."); addGuiText("queen.dialog.challenge", "Very well then. Bring me ten medals from my subordinates to prove your worth, then we'll see."); addGuiText("queen.dialog.defeated", "You are truly... a mighty warrior..."); @@ -670,7 +665,7 @@ protected void addTranslations() { addGuiText("player.dialog.no_medals", "I'll return when I have them."); addGuiText("player.dialog.question", "What can you tell me about this place?"); - //Sun spirit dialogue + // Sun Spirit Dialogue addGuiText("sun_spirit.title", "the Sun Spirit"); addGuiText("sun_spirit.dead", "Such bitter cold... is this the feeling... of pain?"); addGuiText("sun_spirit.playerdeath", "Such is the fate of a being who opposes the might of the sun."); @@ -690,7 +685,6 @@ protected void addTranslations() { addGuiText("sun_spirit.line10", "Did your previous death not satisfy your curiosity, human?"); - addCustomizationText("title", "Customization"); addCustomizationText("gloves.arm", "Glove Layer: Arm"); addCustomizationText("gloves.sleeve", "Glove Layer: Sleeve"); @@ -713,7 +707,6 @@ protected void addTranslations() { addMessage("hammer_of_notch_cooldown", "Cooldown"); - addMessage("life_shard_limit", "You can only use a total of %s Life Shards."); addMessage("bronze_treasure_chest_locked", "This Treasure Chest must be unlocked with a Bronze Key."); addMessage("silver_treasure_chest_locked", "This Treasure Chest must be unlocked with a Silver Key."); @@ -722,6 +715,11 @@ protected void addTranslations() { addMessage("sun_altar.no_permission", "You don't have permission to use this."); addMessage("sun_altar.no_power", "The sun spirit has no power over this realm."); + addMessage("dungeon.bronze_dungeon", "Bronze Dungeon"); + addMessage("dungeon.silver_dungeon", "Silver Dungeon"); + addMessage("dungeon.gold_dungeon", "Gold Dungeon"); + + addCommand("menu.fix", "Reset world preview values"); addCommand("capability.player.life_shards.set", "Set life shard count for %s to %s"); @@ -742,13 +740,11 @@ protected void addTranslations() { addCommand("sun_altar_whitelist.remove.failed", "Player is not whitelisted to use the Sun Altar"); - addKeyInfo("category", "Aether"); addKeyInfo("open_accessories.desc", "Open/Close Accessories Inventory"); addKeyInfo("gravitite_jump_ability.desc", "Activate Gravitite Jump"); - addCuriosIdentifier("aether_pendant", "Pendant"); addCuriosIdentifier("aether_cape", "Cape"); addCuriosIdentifier("aether_ring", "Ring"); @@ -995,7 +991,6 @@ protected void addTranslations() { addLore(AetherItems.MUSIC_DISC_LEGACY, "A music disc that plays Legacy by Jon Lachney."); addLore(AetherItems.MUSIC_DISC_WELCOMING_SKIES, "A music disc that plays Welcoming Skies by Voyed."); addLore(AetherItems.MUSIC_DISC_CHINCHILLA,"A music disc that plays chinchilla by RENREN."); - addLoreUnique("item.aether.hammer_of_jeb", "A mysterious hammer that can shoot projectiles. At one point it vanished from existence. It's said this was actually Jeb's hammer at one point."); @@ -1035,7 +1030,7 @@ protected void addTranslations() { addProTip("zephyr_shooting", "Zephyrs shoot snowballs with a force that can throw you off islands."); addProTip("aether_day_length", "Days in the Aether realm last three times longer than surface days."); addProTip("sheepuff_puff", "Sheepuff occasionally puff their wool out, making them float."); - addProTip("victory_medal_drop", "When Valkyrie's are defeated they will drop a Victory Medal."); + addProTip("victory_medal_drop", "When Valkyries are defeated they will drop a Victory Medal."); addProTip("dig_straight_down", "Never dig straight down."); addProTip("drops", "If a drop looks too big, it probably is."); addProTip("shelter", "A shelter made of dirt is still a shelter."); diff --git a/src/main/java/com/gildedgames/aether/data/generators/AetherLevelStemData.java b/src/main/java/com/gildedgames/aether/data/generators/AetherLevelStemData.java new file mode 100644 index 0000000000..d32804119c --- /dev/null +++ b/src/main/java/com/gildedgames/aether/data/generators/AetherLevelStemData.java @@ -0,0 +1,43 @@ +package com.gildedgames.aether.data.generators; + +import com.gildedgames.aether.Aether; +import com.gildedgames.aether.data.resources.registries.AetherDimensions; +import com.gildedgames.aether.data.resources.registries.AetherNoiseSettings; +import com.gildedgames.aether.data.resources.builders.AetherBiomeBuilders; +import com.google.gson.JsonElement; +import com.mojang.serialization.JsonOps; +import net.minecraft.core.HolderGetter; +import net.minecraft.core.HolderLookup; +import net.minecraft.core.registries.Registries; +import net.minecraft.data.DataProvider; +import net.minecraft.data.PackOutput; +import net.minecraft.resources.RegistryOps; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.packs.PackType; +import net.minecraft.world.level.biome.Biome; +import net.minecraft.world.level.biome.BiomeSource; +import net.minecraft.world.level.dimension.DimensionType; +import net.minecraft.world.level.dimension.LevelStem; +import net.minecraft.world.level.levelgen.NoiseBasedChunkGenerator; +import net.minecraft.world.level.levelgen.NoiseGeneratorSettings; +import net.minecraftforge.common.data.ExistingFileHelper; +import net.minecraftforge.common.data.JsonCodecProvider; + +import java.util.Map; + +public class AetherLevelStemData { + public static DataProvider create(PackOutput output, ExistingFileHelper helper) { + HolderLookup.Provider aetherRegistry = AetherWorldGenData.createLookup(); + RegistryOps registryOps = RegistryOps.create(JsonOps.INSTANCE, aetherRegistry); + HolderGetter biomes = aetherRegistry.lookupOrThrow(Registries.BIOME); + HolderGetter noiseSettings = aetherRegistry.lookupOrThrow(Registries.NOISE_SETTINGS); + HolderGetter dimensionTypes = aetherRegistry.lookupOrThrow(Registries.DIMENSION_TYPE); + BiomeSource source = AetherBiomeBuilders.buildAetherBiomeSource(biomes); + NoiseBasedChunkGenerator aetherChunkGen = new NoiseBasedChunkGenerator(source, noiseSettings.getOrThrow(AetherNoiseSettings.SKYLANDS)); + LevelStem levelStem = new LevelStem(dimensionTypes.getOrThrow(AetherDimensions.AETHER_DIMENSION_TYPE), aetherChunkGen); + Map map = Map.of(AetherDimensions.AETHER_LEVEL_STEM.location(), levelStem); + ResourceLocation registryId = Registries.LEVEL_STEM.location(); + String registryFolder = registryId.getPath(); + return new JsonCodecProvider<>(output, helper, Aether.MODID, registryOps, PackType.SERVER_DATA, registryFolder, LevelStem.CODEC, map); + } +} diff --git a/src/main/java/com/gildedgames/aether/data/generators/AetherLootModifierData.java b/src/main/java/com/gildedgames/aether/data/generators/AetherLootModifierData.java index aeb399029d..d1dc2cec37 100644 --- a/src/main/java/com/gildedgames/aether/data/generators/AetherLootModifierData.java +++ b/src/main/java/com/gildedgames/aether/data/generators/AetherLootModifierData.java @@ -3,7 +3,7 @@ import com.gildedgames.aether.Aether; import com.gildedgames.aether.loot.modifiers.RemoveSeedsModifier; import net.minecraft.advancements.critereon.ItemPredicate; -import net.minecraft.data.DataGenerator; +import net.minecraft.data.PackOutput; import net.minecraft.world.item.Items; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.storage.loot.predicates.AlternativeLootItemCondition; @@ -12,17 +12,9 @@ import net.minecraft.world.level.storage.loot.predicates.MatchTool; import net.minecraftforge.common.data.GlobalLootModifierProvider; -import javax.annotation.Nonnull; - public class AetherLootModifierData extends GlobalLootModifierProvider { - public AetherLootModifierData(DataGenerator dataGenerator) { - super(dataGenerator, Aether.MODID); - } - - @Nonnull - @Override - public String getName() { - return "Aether Loot Modifiers"; + public AetherLootModifierData(PackOutput output) { + super(output, Aether.MODID); } @Override diff --git a/src/main/java/com/gildedgames/aether/data/generators/AetherLootTableData.java b/src/main/java/com/gildedgames/aether/data/generators/AetherLootTableData.java index 639a5a8aad..ee11263415 100644 --- a/src/main/java/com/gildedgames/aether/data/generators/AetherLootTableData.java +++ b/src/main/java/com/gildedgames/aether/data/generators/AetherLootTableData.java @@ -3,48 +3,21 @@ import com.gildedgames.aether.data.generators.loot.*; import com.gildedgames.aether.loot.AetherLoot; import com.gildedgames.aether.loot.AetherLootContexts; -import com.google.common.collect.ImmutableList; -import com.mojang.datafixers.util.Pair; -import net.minecraft.data.DataGenerator; +import net.minecraft.data.PackOutput; import net.minecraft.data.loot.LootTableProvider; -import net.minecraft.world.level.storage.loot.ValidationContext; -import net.minecraft.world.level.storage.loot.parameters.LootContextParamSet; import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets; -import net.minecraft.resources.ResourceLocation; import java.util.List; -import java.util.Map; -import java.util.function.BiConsumer; -import java.util.function.Consumer; -import java.util.function.Supplier; -import javax.annotation.Nonnull; - -import net.minecraft.world.level.storage.loot.LootTable; - -public class AetherLootTableData extends LootTableProvider { - public AetherLootTableData(DataGenerator dataGeneratorIn) { - super(dataGeneratorIn); - } - - @Nonnull - @Override - public String getName() { - return "Aether Loot Tables"; +public class AetherLootTableData { + public static LootTableProvider create(PackOutput output) { + return new LootTableProvider(output, AetherLoot.IMMUTABLE_LOOT_TABLES, List.of( + new LootTableProvider.SubProviderEntry(AetherDungeonLoot::new, LootContextParamSets.CHEST), + new LootTableProvider.SubProviderEntry(AetherEntityLoot::new, LootContextParamSets.ENTITY), + new LootTableProvider.SubProviderEntry(AetherBlockLoot::new, LootContextParamSets.BLOCK), + new LootTableProvider.SubProviderEntry(AetherAdvancementLoot::new, LootContextParamSets.ADVANCEMENT_REWARD), + new LootTableProvider.SubProviderEntry(AetherSelectorLoot::new, LootContextParamSets.SELECTOR), + new LootTableProvider.SubProviderEntry(AetherStrippingLoot::new, AetherLootContexts.STRIPPING) + )); } - - @Nonnull - @Override - protected List>>, LootContextParamSet>> getTables() { - return ImmutableList.of( - Pair.of(AetherBlockLootData::new, LootContextParamSets.BLOCK), - Pair.of(AetherEntityLootData::new, LootContextParamSets.ENTITY), - Pair.of(AetherDungeonLootData::new, LootContextParamSets.CHEST), - Pair.of(AetherAdvancementLootData::new, LootContextParamSets.ADVANCEMENT_REWARD), - Pair.of(AetherSelectorLootData::new, LootContextParamSets.SELECTOR), - Pair.of(AetherStrippingLootData::new, AetherLootContexts.STRIPPING)); - } - - @Override - protected void validate(@Nonnull Map map, @Nonnull ValidationContext validationtracker) { } -} +} \ No newline at end of file diff --git a/src/main/java/com/gildedgames/aether/data/generators/AetherRecipeData.java b/src/main/java/com/gildedgames/aether/data/generators/AetherRecipeData.java index d140c9ed0e..6711b64159 100644 --- a/src/main/java/com/gildedgames/aether/data/generators/AetherRecipeData.java +++ b/src/main/java/com/gildedgames/aether/data/generators/AetherRecipeData.java @@ -7,179 +7,173 @@ import com.gildedgames.aether.entity.AetherEntityTypes; import com.gildedgames.aether.item.AetherItems; import com.gildedgames.aether.AetherTags; -import net.minecraft.advancements.critereon.EntityPredicate; -import net.minecraft.advancements.critereon.InventoryChangeTrigger; -import net.minecraft.advancements.critereon.ItemPredicate; -import net.minecraft.advancements.critereon.MinMaxBounds; +import net.minecraft.advancements.critereon.*; +import net.minecraft.data.PackOutput; +import net.minecraft.data.recipes.*; +import net.minecraft.world.item.crafting.Ingredient; import net.minecraft.world.level.block.Blocks; -import net.minecraft.data.DataGenerator; -import net.minecraft.data.recipes.FinishedRecipe; -import net.minecraft.data.recipes.ShapedRecipeBuilder; -import net.minecraft.data.recipes.ShapelessRecipeBuilder; import net.minecraft.world.item.Items; import net.minecraft.tags.ItemTags; -import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.block.CampfireBlock; import net.minecraft.world.level.block.CandleBlock; import net.minecraftforge.common.Tags; -import javax.annotation.Nonnull; import java.util.Map; import java.util.function.Consumer; -public class AetherRecipeData extends AetherRecipeProvider -{ - public AetherRecipeData(DataGenerator generatorIn) { - super(generatorIn); +public class AetherRecipeData extends AetherRecipeProvider { + public AetherRecipeData(PackOutput output) { + super(output, Aether.MODID); } @Override - protected void buildCraftingRecipes(@Nonnull Consumer consumer) { - ShapelessRecipeBuilder.shapeless(AetherBlocks.MOSSY_HOLYSTONE.get()) + protected void buildRecipes(Consumer consumer) { + ShapelessRecipeBuilder.shapeless(RecipeCategory.BUILDING_BLOCKS, AetherBlocks.MOSSY_HOLYSTONE.get()) + .group("mossy_holystone") .requires(AetherBlocks.HOLYSTONE.get()) .requires(Blocks.VINE) - .group("mossy_holystone") - .unlockedBy("has_holystone", has(AetherBlocks.HOLYSTONE.get())) + .unlockedBy(getHasName(AetherBlocks.HOLYSTONE.get()), has(AetherBlocks.HOLYSTONE.get())) .save(consumer, name("mossy_holystone_with_vine")); - ShapelessRecipeBuilder.shapeless(AetherBlocks.MOSSY_HOLYSTONE.get()) + ShapelessRecipeBuilder.shapeless(RecipeCategory.BUILDING_BLOCKS, AetherBlocks.MOSSY_HOLYSTONE.get()) + .group("mossy_holystone") .requires(AetherBlocks.HOLYSTONE.get()) .requires(Blocks.MOSS_BLOCK) - .group("mossy_holystone") - .unlockedBy("has_holystone", has(AetherBlocks.HOLYSTONE.get())) + .unlockedBy(getHasName(AetherBlocks.HOLYSTONE.get()), has(AetherBlocks.HOLYSTONE.get())) .save(consumer, name("mossy_holystone_with_moss")); - makeWood(AetherBlocks.SKYROOT_WOOD, AetherBlocks.SKYROOT_LOG).save(consumer); - makeWood(AetherBlocks.GOLDEN_OAK_WOOD, AetherBlocks.GOLDEN_OAK_LOG).save(consumer); - makeWood(AetherBlocks.STRIPPED_SKYROOT_WOOD, AetherBlocks.STRIPPED_SKYROOT_LOG).save(consumer); - - makePlanks(AetherBlocks.SKYROOT_PLANKS, AetherBlocks.SKYROOT_LOG).save(consumer); - makePlanks(AetherBlocks.SKYROOT_PLANKS, AetherBlocks.STRIPPED_SKYROOT_LOG).save(consumer, name("stripped_log_to_planks")); - makePlanks(AetherBlocks.SKYROOT_PLANKS, AetherBlocks.SKYROOT_WOOD).save(consumer, name("wood_to_planks")); - makePlanks(AetherBlocks.SKYROOT_PLANKS, AetherBlocks.STRIPPED_SKYROOT_WOOD).save(consumer, name("stripped_wood_to_planks")); - makePlanks(AetherBlocks.SKYROOT_PLANKS, AetherBlocks.GOLDEN_OAK_LOG).save(consumer, name("golden_log_to_planks")); - makePlanks(AetherBlocks.SKYROOT_PLANKS, AetherBlocks.GOLDEN_OAK_WOOD).save(consumer, name("golden_wood_to_planks")); - makeBricks(AetherBlocks.HOLYSTONE_BRICKS, AetherBlocks.HOLYSTONE).save(consumer); - - makeOreToBlock(AetherBlocks.AMBROSIUM_BLOCK, AetherItems.AMBROSIUM_SHARD).save(consumer); - makeOreToBlock(AetherBlocks.ZANITE_BLOCK, AetherItems.ZANITE_GEMSTONE).save(consumer); - - ShapedRecipeBuilder.shaped(AetherBlocks.QUICKSOIL_GLASS_PANE.get(), 16) - .pattern("GGG") - .pattern("GGG") - .define('G', AetherBlocks.QUICKSOIL_GLASS.get()) - .unlockedBy("has_quicksoil_glass", has(AetherBlocks.QUICKSOIL_GLASS.get())) + woodFromLogs(consumer, AetherBlocks.SKYROOT_WOOD.get(), AetherBlocks.SKYROOT_LOG.get()); + woodFromLogs(consumer, AetherBlocks.GOLDEN_OAK_WOOD.get(), AetherBlocks.GOLDEN_OAK_LOG.get()); + woodFromLogs(consumer, AetherBlocks.STRIPPED_SKYROOT_WOOD.get(), AetherBlocks.STRIPPED_SKYROOT_LOG.get()); + planksFromLogs(consumer, AetherBlocks.SKYROOT_PLANKS.get(), AetherTags.Items.CRAFTS_SKYROOT_PLANKS, 4); + + ShapedRecipeBuilder.shaped(RecipeCategory.BUILDING_BLOCKS, AetherBlocks.HOLYSTONE_BRICKS.get(), 4) + .define('#', AetherBlocks.HOLYSTONE.get()) + .pattern("##") + .pattern("##") + .unlockedBy(getHasName(AetherBlocks.HOLYSTONE.get()), has(AetherBlocks.HOLYSTONE.get())) .save(consumer); - ShapedRecipeBuilder.shaped(AetherBlocks.ALTAR.get(), 1) + oreBlockStorageRecipesRecipesWithCustomUnpacking(consumer, RecipeCategory.MISC, AetherItems.AMBROSIUM_SHARD.get(), RecipeCategory.BUILDING_BLOCKS, AetherBlocks.AMBROSIUM_BLOCK.get(), "ambrosium_shard_from_ambrosium_block", "ambrosium_shard"); + oreBlockStorageRecipesRecipesWithCustomUnpacking(consumer, RecipeCategory.MISC, AetherItems.ZANITE_GEMSTONE.get(), RecipeCategory.BUILDING_BLOCKS, AetherBlocks.ZANITE_BLOCK.get(), "zanite_gemstone_from_zanite_block", "zanite_gemstone"); + + ShapedRecipeBuilder.shaped(RecipeCategory.DECORATIONS, AetherBlocks.QUICKSOIL_GLASS_PANE.get(), 16) + .define('#', AetherBlocks.QUICKSOIL_GLASS.get()) + .pattern("###") + .pattern("###") + .unlockedBy(getHasName(AetherBlocks.QUICKSOIL_GLASS.get()), has(AetherBlocks.QUICKSOIL_GLASS.get())) + .save(consumer); + + ShapedRecipeBuilder.shaped(RecipeCategory.DECORATIONS, AetherBlocks.ALTAR.get(), 1) + .define('H', AetherBlocks.HOLYSTONE.get()) + .define('Z', AetherItems.ZANITE_GEMSTONE.get()) .pattern("HHH") .pattern("HZH") .pattern("HHH") - .define('H', AetherBlocks.HOLYSTONE.get()) - .define('Z', AetherItems.ZANITE_GEMSTONE.get()) - .unlockedBy("has_holystone", has(AetherBlocks.HOLYSTONE.get())) + .unlockedBy(getHasName(AetherBlocks.HOLYSTONE.get()), has(AetherBlocks.HOLYSTONE.get())) .save(consumer); - ShapedRecipeBuilder.shaped(AetherBlocks.FREEZER.get(), 1) - .pattern("HHH") - .pattern("HIH") - .pattern("SSS") + ShapedRecipeBuilder.shaped(RecipeCategory.DECORATIONS, AetherBlocks.FREEZER.get(), 1) .define('H', AetherBlocks.HOLYSTONE.get()) .define('I', AetherBlocks.ICESTONE.get()) - .define('S', AetherBlocks.SKYROOT_PLANKS.get()) - .unlockedBy("has_holystone", has(AetherBlocks.HOLYSTONE.get())) + .define('P', AetherBlocks.SKYROOT_PLANKS.get()) + .pattern("HHH") + .pattern("HIH") + .pattern("PPP") + .unlockedBy(getHasName(AetherBlocks.HOLYSTONE.get()), has(AetherBlocks.HOLYSTONE.get())) .save(consumer); - ShapedRecipeBuilder.shaped(AetherBlocks.INCUBATOR.get(), 1) + ShapedRecipeBuilder.shaped(RecipeCategory.DECORATIONS, AetherBlocks.INCUBATOR.get(), 1) + .define('H', AetherBlocks.HOLYSTONE.get()) + .define('T', AetherBlocks.AMBROSIUM_TORCH.get()) .pattern("HHH") - .pattern("HAH") + .pattern("HTH") .pattern("HHH") - .define('H', AetherBlocks.HOLYSTONE.get()) - .define('A', AetherBlocks.AMBROSIUM_TORCH.get()) - .unlockedBy("has_holystone", has(AetherBlocks.HOLYSTONE.get())) + .unlockedBy(getHasName(AetherBlocks.HOLYSTONE.get()), has(AetherBlocks.HOLYSTONE.get())) .save(consumer); - ShapedRecipeBuilder.shaped(AetherBlocks.AMBROSIUM_TORCH.get(), 4) - .pattern("A") - .pattern("S") + ShapedRecipeBuilder.shaped(RecipeCategory.DECORATIONS, AetherBlocks.AMBROSIUM_TORCH.get(), 4) .define('A', AetherItems.AMBROSIUM_SHARD.get()) - .define('S', AetherTags.Items.SKYROOT_STICKS) - .unlockedBy("has_holystone_pickaxe", has(AetherItems.HOLYSTONE_PICKAXE.get())) + .define('/', AetherTags.Items.SKYROOT_STICKS) + .pattern("A") + .pattern("/") + .unlockedBy(getHasName(AetherItems.HOLYSTONE_PICKAXE.get()), has(AetherItems.HOLYSTONE_PICKAXE.get())) .save(consumer); - ShapedRecipeBuilder.shaped(AetherBlocks.SKYROOT_SIGN.get(), 3) + ShapedRecipeBuilder.shaped(RecipeCategory.DECORATIONS, AetherBlocks.SKYROOT_SIGN.get(), 3) + .group("wooden_sign") + .define('P', AetherBlocks.SKYROOT_PLANKS.get().asItem()) + .define('/', Tags.Items.RODS_WOODEN) .pattern("PPP") .pattern("PPP") - .pattern(" S ") - .define('P', AetherBlocks.SKYROOT_PLANKS.get().asItem()) - .define('S', AetherTags.Items.SKYROOT_STICKS) - .unlockedBy("has_skyroot", has(AetherBlocks.SKYROOT_PLANKS.get())) + .pattern(" / ") + .unlockedBy(getHasName(AetherBlocks.SKYROOT_PLANKS.get()), has(AetherBlocks.SKYROOT_PLANKS.get())) .save(consumer); - makeFence(AetherBlocks.SKYROOT_FENCE, AetherBlocks.SKYROOT_PLANKS).save(consumer); - makeFenceGate(AetherBlocks.SKYROOT_FENCE_GATE, AetherBlocks.SKYROOT_PLANKS).save(consumer); - - makeWall(AetherBlocks.CARVED_WALL, AetherBlocks.CARVED_STONE).save(consumer); - makeWall(AetherBlocks.ANGELIC_WALL, AetherBlocks.ANGELIC_STONE).save(consumer); - makeWall(AetherBlocks.HELLFIRE_WALL, AetherBlocks.HELLFIRE_STONE).save(consumer); - makeWall(AetherBlocks.HOLYSTONE_WALL, AetherBlocks.HOLYSTONE).save(consumer); - makeWall(AetherBlocks.MOSSY_HOLYSTONE_WALL, AetherBlocks.MOSSY_HOLYSTONE).save(consumer); - makeWall(AetherBlocks.ICESTONE_WALL, AetherBlocks.ICESTONE).save(consumer); - makeWall(AetherBlocks.HOLYSTONE_BRICK_WALL, AetherBlocks.HOLYSTONE_BRICKS).save(consumer); - makeWall(AetherBlocks.AEROGEL_WALL, AetherBlocks.AEROGEL).save(consumer); - - makeStairs(AetherBlocks.SKYROOT_STAIRS, AetherBlocks.SKYROOT_PLANKS).save(consumer); - makeStairs(AetherBlocks.CARVED_STAIRS, AetherBlocks.CARVED_STONE).save(consumer); - makeStairs(AetherBlocks.ANGELIC_STAIRS, AetherBlocks.ANGELIC_STONE).save(consumer); - makeStairs(AetherBlocks.HELLFIRE_STAIRS, AetherBlocks.HELLFIRE_STONE).save(consumer); - makeStairs(AetherBlocks.HOLYSTONE_STAIRS, AetherBlocks.HOLYSTONE).save(consumer); - makeStairs(AetherBlocks.MOSSY_HOLYSTONE_STAIRS, AetherBlocks.MOSSY_HOLYSTONE).save(consumer); - makeStairs(AetherBlocks.ICESTONE_STAIRS, AetherBlocks.ICESTONE).save(consumer); - makeStairs(AetherBlocks.HOLYSTONE_BRICK_STAIRS, AetherBlocks.HOLYSTONE_BRICKS).save(consumer); - makeStairs(AetherBlocks.AEROGEL_STAIRS, AetherBlocks.AEROGEL).save(consumer); - - makeSlab(AetherBlocks.SKYROOT_SLAB, AetherBlocks.SKYROOT_PLANKS).save(consumer); - makeSlab(AetherBlocks.CARVED_SLAB, AetherBlocks.CARVED_STONE).save(consumer); - makeSlab(AetherBlocks.ANGELIC_SLAB, AetherBlocks.ANGELIC_STONE).save(consumer); - makeSlab(AetherBlocks.HELLFIRE_SLAB, AetherBlocks.HELLFIRE_STONE).save(consumer); - makeSlab(AetherBlocks.HOLYSTONE_SLAB, AetherBlocks.HOLYSTONE).save(consumer); - makeSlab(AetherBlocks.MOSSY_HOLYSTONE_SLAB, AetherBlocks.MOSSY_HOLYSTONE).save(consumer); - makeSlab(AetherBlocks.ICESTONE_SLAB, AetherBlocks.ICESTONE).save(consumer); - makeSlab(AetherBlocks.HOLYSTONE_BRICK_SLAB, AetherBlocks.HOLYSTONE_BRICKS).save(consumer); - makeSlab(AetherBlocks.AEROGEL_SLAB, AetherBlocks.AEROGEL).save(consumer); - - ShapedRecipeBuilder.shaped(AetherBlocks.SKYROOT_BOOKSHELF.get(), 1) - .pattern("SSS") - .pattern("BBB") - .pattern("SSS") - .define('S', AetherBlocks.SKYROOT_PLANKS.get()) + fence(AetherBlocks.SKYROOT_FENCE, AetherBlocks.SKYROOT_PLANKS).save(consumer); + fenceGate(AetherBlocks.SKYROOT_FENCE_GATE, AetherBlocks.SKYROOT_PLANKS).save(consumer); + + wall(consumer, RecipeCategory.DECORATIONS, AetherBlocks.CARVED_WALL.get(), AetherBlocks.CARVED_STONE.get()); + wall(consumer, RecipeCategory.DECORATIONS, AetherBlocks.ANGELIC_WALL.get(), AetherBlocks.ANGELIC_STONE.get()); + wall(consumer, RecipeCategory.DECORATIONS, AetherBlocks.HELLFIRE_WALL.get(), AetherBlocks.HELLFIRE_STONE.get()); + wall(consumer, RecipeCategory.DECORATIONS, AetherBlocks.HOLYSTONE_WALL.get(), AetherBlocks.HOLYSTONE.get()); + wall(consumer, RecipeCategory.DECORATIONS, AetherBlocks.MOSSY_HOLYSTONE_WALL.get(), AetherBlocks.MOSSY_HOLYSTONE.get()); + wall(consumer, RecipeCategory.DECORATIONS, AetherBlocks.ICESTONE_WALL.get(), AetherBlocks.ICESTONE.get()); + wall(consumer, RecipeCategory.DECORATIONS, AetherBlocks.HOLYSTONE_BRICK_WALL.get(), AetherBlocks.HOLYSTONE_BRICKS.get()); + wall(consumer, RecipeCategory.DECORATIONS, AetherBlocks.AEROGEL_WALL.get(), AetherBlocks.AEROGEL.get()); + + stairs(AetherBlocks.SKYROOT_STAIRS, AetherBlocks.SKYROOT_PLANKS).group("wooden_stairs").save(consumer); + stairs(AetherBlocks.CARVED_STAIRS, AetherBlocks.CARVED_STONE).save(consumer); + stairs(AetherBlocks.ANGELIC_STAIRS, AetherBlocks.ANGELIC_STONE).save(consumer); + stairs(AetherBlocks.HELLFIRE_STAIRS, AetherBlocks.HELLFIRE_STONE).save(consumer); + stairs(AetherBlocks.HOLYSTONE_STAIRS, AetherBlocks.HOLYSTONE).save(consumer); + stairs(AetherBlocks.MOSSY_HOLYSTONE_STAIRS, AetherBlocks.MOSSY_HOLYSTONE).save(consumer); + stairs(AetherBlocks.ICESTONE_STAIRS, AetherBlocks.ICESTONE).save(consumer); + stairs(AetherBlocks.HOLYSTONE_BRICK_STAIRS, AetherBlocks.HOLYSTONE_BRICKS).save(consumer); + stairs(AetherBlocks.AEROGEL_STAIRS, AetherBlocks.AEROGEL).save(consumer); + + slabBuilder(RecipeCategory.BUILDING_BLOCKS, AetherBlocks.SKYROOT_SLAB.get(), Ingredient.of(AetherBlocks.SKYROOT_PLANKS.get())) + .group("wooden_slab") + .unlockedBy(getHasName(AetherBlocks.SKYROOT_PLANKS.get()), has(AetherBlocks.SKYROOT_PLANKS.get())) + .save(consumer); + slab(consumer, RecipeCategory.BUILDING_BLOCKS, AetherBlocks.CARVED_SLAB.get(), AetherBlocks.CARVED_STONE.get()); + slab(consumer, RecipeCategory.BUILDING_BLOCKS, AetherBlocks.ANGELIC_SLAB.get(), AetherBlocks.ANGELIC_STONE.get()); + slab(consumer, RecipeCategory.BUILDING_BLOCKS, AetherBlocks.HELLFIRE_SLAB.get(), AetherBlocks.HELLFIRE_STONE.get()); + slab(consumer, RecipeCategory.BUILDING_BLOCKS, AetherBlocks.HOLYSTONE_SLAB.get(), AetherBlocks.HOLYSTONE.get()); + slab(consumer, RecipeCategory.BUILDING_BLOCKS, AetherBlocks.MOSSY_HOLYSTONE_SLAB.get(), AetherBlocks.MOSSY_HOLYSTONE.get()); + slab(consumer, RecipeCategory.BUILDING_BLOCKS, AetherBlocks.ICESTONE_SLAB.get(), AetherBlocks.ICESTONE.get()); + slab(consumer, RecipeCategory.BUILDING_BLOCKS, AetherBlocks.HOLYSTONE_BRICK_SLAB.get(), AetherBlocks.HOLYSTONE_BRICKS.get()); + slab(consumer, RecipeCategory.BUILDING_BLOCKS, AetherBlocks.AEROGEL_SLAB.get(), AetherBlocks.AEROGEL.get()); + + ShapedRecipeBuilder.shaped(RecipeCategory.BUILDING_BLOCKS, AetherBlocks.SKYROOT_BOOKSHELF.get(), 1) + .define('P', AetherBlocks.SKYROOT_PLANKS.get()) .define('B', Items.BOOK) - .unlockedBy("has_book", has(Items.BOOK)) + .pattern("PPP") + .pattern("BBB") + .pattern("PPP") + .unlockedBy(getHasName(Items.BOOK), has(Items.BOOK)) .save(consumer); - ShapedRecipeBuilder.shaped(AetherBlocks.SKYROOT_BED.get(), 1) - .pattern("WWW") - .pattern("SSS") + ShapedRecipeBuilder.shaped(RecipeCategory.DECORATIONS, AetherBlocks.SKYROOT_BED.get(), 1) .define('W', ItemTags.WOOL) - .define('S', AetherBlocks.SKYROOT_PLANKS.get()) - .unlockedBy("has_book", has(ItemTags.WOOL)) + .define('P', AetherBlocks.SKYROOT_PLANKS.get()) + .pattern("WWW") + .pattern("PPP") + .unlockedBy("has_wool", has(ItemTags.WOOL)) .save(consumer); - ShapelessRecipeBuilder.shapeless(Items.PURPLE_DYE) - .requires(AetherBlocks.PURPLE_FLOWER.get()) - .unlockedBy("has_purple_flower", has(AetherBlocks.PURPLE_FLOWER.get())) + ShapelessRecipeBuilder.shapeless(RecipeCategory.MISC, Items.PURPLE_DYE) .group("purple_dye") + .requires(AetherBlocks.PURPLE_FLOWER.get()) + .unlockedBy(getHasName(AetherBlocks.PURPLE_FLOWER.get()), has(AetherBlocks.PURPLE_FLOWER.get())) .save(consumer, name("flower_to_purple_dye")); - ShapelessRecipeBuilder.shapeless(Items.WHITE_DYE) - .requires(AetherBlocks.WHITE_FLOWER.get()) - .unlockedBy("has_white_flower", has(AetherBlocks.WHITE_FLOWER.get())) + ShapelessRecipeBuilder.shapeless(RecipeCategory.MISC, Items.WHITE_DYE) .group("white_dye") + .requires(AetherBlocks.WHITE_FLOWER.get()) + .unlockedBy(getHasName(AetherBlocks.WHITE_FLOWER.get()), has(AetherBlocks.WHITE_FLOWER.get())) .save(consumer, name("flower_to_white_dye")); - makeBlockToOre(AetherItems.AMBROSIUM_SHARD, AetherBlocks.AMBROSIUM_BLOCK).save(consumer); - makeBlockToOre(AetherItems.ZANITE_GEMSTONE, AetherBlocks.ZANITE_BLOCK).save(consumer); - makePickaxeWithBlock(AetherItems.SKYROOT_PICKAXE, AetherBlocks.SKYROOT_PLANKS).save(consumer); makeAxeWithBlock(AetherItems.SKYROOT_AXE, AetherBlocks.SKYROOT_PLANKS).save(consumer); @@ -206,41 +200,41 @@ protected void buildCraftingRecipes(@Nonnull Consumer consumer) makeSword(AetherItems.ZANITE_SWORD, AetherItems.ZANITE_GEMSTONE).save(consumer); makeSwordWithBlock(AetherItems.GRAVITITE_SWORD, AetherBlocks.ENCHANTED_GRAVITITE).save(consumer); - ShapedRecipeBuilder.shaped(AetherItems.GOLDEN_DART.get(), 4) - .pattern("F") - .pattern("S") - .pattern("G") + ShapedRecipeBuilder.shaped(RecipeCategory.COMBAT, AetherItems.GOLDEN_DART.get(), 4) .define('F', Tags.Items.FEATHERS) - .define('S', AetherTags.Items.SKYROOT_STICKS) + .define('/', AetherTags.Items.SKYROOT_STICKS) .define('G', AetherItems.GOLDEN_AMBER.get()) + .pattern("F") + .pattern("/") + .pattern("G") .unlockedBy("has_feather", has(Tags.Items.FEATHERS)) - .unlockedBy("has_amber", has(AetherItems.GOLDEN_AMBER.get())) + .unlockedBy(getHasName(AetherItems.GOLDEN_AMBER.get()), has(AetherItems.GOLDEN_AMBER.get())) .save(consumer); - ShapedRecipeBuilder.shaped(AetherItems.GOLDEN_DART_SHOOTER.get(), 1) - .pattern("S") - .pattern("S") - .pattern("G") - .define('S', AetherBlocks.SKYROOT_PLANKS.get()) + ShapedRecipeBuilder.shaped(RecipeCategory.COMBAT, AetherItems.GOLDEN_DART_SHOOTER.get(), 1) + .define('P', AetherBlocks.SKYROOT_PLANKS.get()) .define('G', AetherItems.GOLDEN_AMBER.get()) - .unlockedBy("has_skyroot", has(AetherBlocks.SKYROOT_PLANKS.get())) + .pattern("P") + .pattern("P") + .pattern("G") + .unlockedBy(getHasName(AetherBlocks.SKYROOT_PLANKS.get()), has(AetherBlocks.SKYROOT_PLANKS.get())) .save(consumer); - ShapedRecipeBuilder.shaped(AetherItems.POISON_DART.get(), 8) + ShapedRecipeBuilder.shaped(RecipeCategory.COMBAT, AetherItems.POISON_DART.get(), 8) + .define('D', AetherItems.GOLDEN_DART.get()) + .define('B', AetherItems.SKYROOT_POISON_BUCKET.get()) .pattern("DDD") - .pattern("DPD") + .pattern("DBD") .pattern("DDD") - .define('D', AetherItems.GOLDEN_DART.get()) - .define('P', AetherItems.SKYROOT_POISON_BUCKET.get()) - .unlockedBy("has_golden_dart", has(AetherItems.GOLDEN_DART.get())) - .unlockedBy("has_poison_bucket", has(AetherItems.SKYROOT_POISON_BUCKET.get())) + .unlockedBy(getHasName(AetherItems.GOLDEN_DART.get()), has(AetherItems.GOLDEN_DART.get())) + .unlockedBy(getHasName(AetherItems.SKYROOT_POISON_BUCKET.get()), has(AetherItems.SKYROOT_POISON_BUCKET.get())) .save(consumer); - ShapelessRecipeBuilder.shapeless(AetherItems.POISON_DART_SHOOTER.get(), 1) + ShapelessRecipeBuilder.shapeless(RecipeCategory.COMBAT, AetherItems.POISON_DART_SHOOTER.get(), 1) .requires(AetherItems.GOLDEN_DART_SHOOTER.get()) .requires(AetherItems.AECHOR_PETAL.get()) - .unlockedBy("has_golden_dart_shooter", has(AetherItems.GOLDEN_DART_SHOOTER.get())) - .unlockedBy("has_aechor_petal", has(AetherItems.AECHOR_PETAL.get())) + .unlockedBy(getHasName(AetherItems.GOLDEN_DART_SHOOTER.get()), has(AetherItems.GOLDEN_DART_SHOOTER.get())) + .unlockedBy(getHasName(AetherItems.AECHOR_PETAL.get()), has(AetherItems.AECHOR_PETAL.get())) .save(consumer); makeHelmet(AetherItems.ZANITE_HELMET, AetherItems.ZANITE_GEMSTONE).save(consumer); @@ -270,485 +264,435 @@ protected void buildCraftingRecipes(@Nonnull Consumer consumer) makeGlovesWithTag(AetherItems.IRON_GLOVES, Tags.Items.INGOTS_IRON, "iron").save(consumer); makeGlovesWithTag(AetherItems.GOLDEN_GLOVES, Tags.Items.INGOTS_GOLD, "gold").save(consumer); makeGlovesWithTag(AetherItems.DIAMOND_GLOVES, Tags.Items.GEMS_DIAMOND, "diamond").save(consumer); - smithingRecipeWithTag(AetherItems.DIAMOND_GLOVES, Tags.Items.INGOTS_NETHERITE, AetherItems.NETHERITE_GLOVES, "netherite").save(consumer, name("netherite_gloves_smithing")); + netheriteSmithingRecipe(consumer, AetherItems.DIAMOND_GLOVES.get(), RecipeCategory.COMBAT, AetherItems.NETHERITE_GLOVES.get()); makeGloves(AetherItems.ZANITE_GLOVES, AetherItems.ZANITE_GEMSTONE).save(consumer); makeGlovesWithBlock(AetherItems.GRAVITITE_GLOVES, AetherBlocks.ENCHANTED_GRAVITITE).save(consumer); - ShapedRecipeBuilder.shaped(AetherItems.SKYROOT_STICK.get(), 4) - .pattern("S") - .pattern("S") - .define('S', AetherBlocks.SKYROOT_PLANKS.get()) - .unlockedBy("has_skyroot", has(AetherBlocks.SKYROOT_PLANKS.get())) + ShapedRecipeBuilder.shaped(RecipeCategory.MISC, AetherItems.SKYROOT_STICK.get(), 4) + .group("sticks") + .define('#', AetherBlocks.SKYROOT_PLANKS.get()) + .pattern("#") + .pattern("#") + .unlockedBy(getHasName(AetherBlocks.SKYROOT_PLANKS.get()), has(AetherBlocks.SKYROOT_PLANKS.get())) .save(consumer); - ShapedRecipeBuilder.shaped(AetherItems.SKYROOT_BUCKET.get(), 1) - .pattern("S S") - .pattern(" S ") - .define('S', AetherBlocks.SKYROOT_PLANKS.get()) - .unlockedBy("has_skyroot", has(AetherBlocks.SKYROOT_PLANKS.get())) + ShapedRecipeBuilder.shaped(RecipeCategory.MISC, AetherItems.SKYROOT_BUCKET.get(), 1) + .define('#', AetherBlocks.SKYROOT_PLANKS.get()) + .pattern("# #") + .pattern(" # ") + .unlockedBy(getHasName(AetherBlocks.SKYROOT_PLANKS.get()), has(AetherBlocks.SKYROOT_PLANKS.get())) .save(consumer); - ShapedRecipeBuilder.shaped(AetherItems.COLD_PARACHUTE.get(), 1) - .pattern("AA") - .pattern("AA") - .define('A', AetherBlocks.COLD_AERCLOUD.get()) - .unlockedBy("has_aercloud", has(AetherBlocks.COLD_AERCLOUD.get())) - .save(consumer); - - ShapedRecipeBuilder.shaped(AetherItems.GOLDEN_PARACHUTE.get(), 1) - .pattern("AA") - .pattern("AA") - .define('A', AetherBlocks.GOLDEN_AERCLOUD.get()) - .unlockedBy("has_aercloud", has(AetherBlocks.GOLDEN_AERCLOUD.get())) - .save(consumer); + twoByTwoPacker(consumer, RecipeCategory.TOOLS, AetherItems.COLD_PARACHUTE.get(), AetherBlocks.COLD_AERCLOUD.get()); + twoByTwoPacker(consumer, RecipeCategory.TOOLS, AetherItems.GOLDEN_PARACHUTE.get(), AetherBlocks.GOLDEN_AERCLOUD.get()); - ShapedRecipeBuilder.shaped(AetherItems.NATURE_STAFF.get(), 1) - .pattern("Z") - .pattern("S") + ShapedRecipeBuilder.shaped(RecipeCategory.TOOLS, AetherItems.NATURE_STAFF.get(), 1) .define('Z', AetherItems.ZANITE_GEMSTONE.get()) - .define('S', AetherTags.Items.SKYROOT_STICKS) - .unlockedBy("has_zanite", has(AetherItems.ZANITE_GEMSTONE.get())) + .define('/', AetherTags.Items.SKYROOT_STICKS) + .pattern("Z") + .pattern("/") + .unlockedBy(getHasName(AetherItems.ZANITE_GEMSTONE.get()), has(AetherItems.ZANITE_GEMSTONE.get())) .save(consumer); - ShapelessRecipeBuilder.shapeless(AetherItems.BOOK_OF_LORE.get()) + ShapelessRecipeBuilder.shapeless(RecipeCategory.MISC, AetherItems.BOOK_OF_LORE.get()) + .group("book_of_lore") .requires(Items.BOOK) .requires(AetherTags.Items.BOOK_OF_LORE_MATERIALS) - .unlockedBy("has_book", has(Items.BOOK)) - .group("book_of_lore") - .save(consumer); - - ShapedRecipeBuilder.shaped(AetherItems.SKYROOT_BOAT.get(), 1) - .group("boat") - .pattern("P P") - .pattern("PPP") - .define('P', AetherBlocks.SKYROOT_PLANKS.get().asItem()) - .unlockedBy("in_water", insideOf(Blocks.WATER)) + .unlockedBy(getHasName(Items.BOOK), has(Items.BOOK)) .save(consumer); - ShapelessRecipeBuilder.shapeless(AetherItems.SKYROOT_CHEST_BOAT.get(), 1) + woodenBoat(consumer, AetherItems.SKYROOT_BOAT.get(), AetherBlocks.SKYROOT_PLANKS.get()); + ShapelessRecipeBuilder.shapeless(RecipeCategory.TRANSPORTATION, AetherItems.SKYROOT_CHEST_BOAT.get()) + .group("chest_boat") .requires(Tags.Items.CHESTS_WOODEN) .requires(AetherItems.SKYROOT_BOAT.get()) - .unlockedBy("has_boat", has(AetherItems.SKYROOT_BOAT.get())) - .group("chest_boat") + .unlockedBy("has_boat", has(ItemTags.BOATS)) .save(consumer); - ShapedRecipeBuilder.shaped(Items.SADDLE, 1) - .pattern("LLL") - .pattern("LSL") + ShapedRecipeBuilder.shaped(RecipeCategory.TOOLS, Items.SADDLE, 1) .define('L', Items.LEATHER) .define('S', Items.STRING) - .unlockedBy("has_leather", has(Items.LEATHER)) + .pattern("LLL") + .pattern("LSL") + .unlockedBy(getHasName(Items.LEATHER), has(Items.LEATHER)) .save(consumer, name("aether_saddle")); - ShapedRecipeBuilder.shaped(AetherBlocks.SKYROOT_DOOR.get(), 3) - .pattern("SS") - .pattern("SS") - .pattern("SS") - .define('S', AetherBlocks.SKYROOT_PLANKS.get()) - .unlockedBy("has_skyroot", has(AetherBlocks.SKYROOT_PLANKS.get())) - .group("wooden_door") - .save(consumer); - - ShapedRecipeBuilder.shaped(AetherBlocks.SKYROOT_TRAPDOOR.get(), 2) - .pattern("SSS") - .pattern("SSS") - .define('S', AetherBlocks.SKYROOT_PLANKS.get()) - .unlockedBy("has_skyroot", has(AetherBlocks.SKYROOT_PLANKS.get())) - .group("wooden_trapdoor") - .save(consumer); - - ShapelessRecipeBuilder.shapeless(AetherBlocks.SKYROOT_BUTTON.get(), 1) - .requires(AetherBlocks.SKYROOT_PLANKS.get()) - .unlockedBy("has_skyroot", has(AetherBlocks.SKYROOT_PLANKS.get())) - .group("wooden_button") - .save(consumer); - - ShapelessRecipeBuilder.shapeless(AetherBlocks.HOLYSTONE_BUTTON.get(), 1) - .requires(AetherBlocks.HOLYSTONE.get()) - .unlockedBy("has_holystone", has(AetherBlocks.HOLYSTONE.get())) - .save(consumer); - - ShapedRecipeBuilder.shaped(AetherBlocks.SKYROOT_PRESSURE_PLATE.get(), 1) - .pattern("SS") - .define('S', AetherBlocks.SKYROOT_PLANKS.get()) - .unlockedBy("has_skyroot", has(AetherBlocks.SKYROOT_PLANKS.get())) - .group("wooden_pressure_plate") - .save(consumer); - - ShapedRecipeBuilder.shaped(AetherBlocks.HOLYSTONE_PRESSURE_PLATE.get(), 1) - .pattern("HH") - .define('H', AetherBlocks.HOLYSTONE.get()) - .unlockedBy("has_holystone", has(AetherBlocks.HOLYSTONE.get())) - .save(consumer); + doorBuilder(AetherBlocks.SKYROOT_DOOR.get(), Ingredient.of(AetherBlocks.SKYROOT_PLANKS.get())).unlockedBy(getHasName(AetherBlocks.SKYROOT_PLANKS.get()), has(AetherBlocks.SKYROOT_PLANKS.get())).group("wooden_door").save(consumer); + trapdoorBuilder(AetherBlocks.SKYROOT_TRAPDOOR.get(), Ingredient.of(AetherBlocks.SKYROOT_PLANKS.get())).unlockedBy(getHasName(AetherBlocks.SKYROOT_PLANKS.get()), has(AetherBlocks.SKYROOT_PLANKS.get())).group("wooden_trapdoor").save(consumer); + buttonBuilder(AetherBlocks.SKYROOT_BUTTON.get(), Ingredient.of(AetherBlocks.SKYROOT_PLANKS.get())).unlockedBy(getHasName(AetherBlocks.SKYROOT_PLANKS.get()), has(AetherBlocks.SKYROOT_PLANKS.get())).group("wooden_button").save(consumer); + buttonBuilder(AetherBlocks.HOLYSTONE_BUTTON.get(), Ingredient.of(AetherBlocks.HOLYSTONE.get())).unlockedBy(getHasName(AetherBlocks.HOLYSTONE.get()), has(AetherBlocks.HOLYSTONE.get())).save(consumer); + pressurePlateBuilder(RecipeCategory.REDSTONE, AetherBlocks.SKYROOT_PRESSURE_PLATE.get(), Ingredient.of(AetherBlocks.SKYROOT_PLANKS.get())).unlockedBy(getHasName(AetherBlocks.SKYROOT_PLANKS.get()), has(AetherBlocks.SKYROOT_PLANKS.get())).group("wooden_pressure_plate").save(consumer); + pressurePlateBuilder(RecipeCategory.REDSTONE, AetherBlocks.HOLYSTONE_PRESSURE_PLATE.get(), Ingredient.of(AetherBlocks.HOLYSTONE.get())).unlockedBy(getHasName(AetherBlocks.HOLYSTONE.get()), has(AetherBlocks.HOLYSTONE.get())).save(consumer); // The group IDs below match the IDs of the respective vanilla recipes - ShapedRecipeBuilder.shaped(Items.LEAD, 2) + ShapedRecipeBuilder.shaped(RecipeCategory.TOOLS, Items.LEAD, 2) + .group("minecraft:lead") + .define('B', AetherItems.SWET_BALL.get()) + .define('S', Tags.Items.STRING) .pattern("SS ") .pattern("SB ") .pattern(" S") - .define('B', AetherItems.SWET_BALL.get()) - .define('S', Tags.Items.STRING) - .unlockedBy("has_swet_ball", has(AetherItems.SWET_BALL.get())) - .group("minecraft:lead") + .unlockedBy(getHasName(AetherItems.SWET_BALL.get()), has(AetherItems.SWET_BALL.get())) .save(consumer, name("swet_lead")); - ShapedRecipeBuilder.shaped(Blocks.BARREL, 1) - .pattern("SHS") - .pattern("S S") - .pattern("SHS") - .define('S', AetherTags.Items.PLANKS_CRAFTING) - .define('H', ItemTags.WOODEN_SLABS) - .unlockedBy("has_skyroot", has(AetherBlocks.SKYROOT_PLANKS.get())) - .unlockedBy("has_skyroot_slab", has(AetherBlocks.SKYROOT_SLAB.get())) + ShapedRecipeBuilder.shaped(RecipeCategory.DECORATIONS, Blocks.BARREL, 1) .group("minecraft:barrel") + .define('P', AetherTags.Items.PLANKS_CRAFTING) + .define('H', ItemTags.WOODEN_SLABS) + .pattern("PHP") + .pattern("P P") + .pattern("PHP") + .unlockedBy(getHasName(AetherBlocks.SKYROOT_PLANKS.get()), has(AetherBlocks.SKYROOT_PLANKS.get())) + .unlockedBy(getHasName(AetherBlocks.SKYROOT_SLAB.get()), has(AetherBlocks.SKYROOT_SLAB.get())) .save(consumer, name("skyroot_barrel")); - ShapedRecipeBuilder.shaped(Blocks.BEEHIVE, 1) - .pattern("SSS") - .pattern("CCC") - .pattern("SSS") - .define('S', AetherTags.Items.PLANKS_CRAFTING) - .define('C', Items.HONEYCOMB) - .unlockedBy("has_honeycomb", has(Items.HONEYCOMB)) + ShapedRecipeBuilder.shaped(RecipeCategory.DECORATIONS, Blocks.BEEHIVE, 1) .group("minecraft:beehive") + .define('P', AetherTags.Items.PLANKS_CRAFTING) + .define('C', Items.HONEYCOMB) + .pattern("PPP") + .pattern("CCC") + .pattern("PPP") + .unlockedBy(getHasName(Items.HONEYCOMB), has(Items.HONEYCOMB)) .save(consumer, name("skyroot_beehive")); - ShapedRecipeBuilder.shaped(Blocks.CARTOGRAPHY_TABLE, 1) - .pattern("PP") - .pattern("SS") - .pattern("SS") - .define('P', Items.PAPER) - .define('S', AetherTags.Items.PLANKS_CRAFTING) - .unlockedBy("has_paper", has(Items.PAPER)) + ShapedRecipeBuilder.shaped(RecipeCategory.DECORATIONS, Blocks.CARTOGRAPHY_TABLE, 1) .group("minecraft:cartography_table") + .define('#', Items.PAPER) + .define('P', AetherTags.Items.PLANKS_CRAFTING) + .pattern("##") + .pattern("PP") + .pattern("PP") + .unlockedBy(getHasName(Items.PAPER), has(Items.PAPER)) .save(consumer, name("skyroot_cartography_table")); - ShapedRecipeBuilder.shaped(Blocks.CHEST, 1) - .pattern("SSS") - .pattern("S S") - .pattern("SSS") - .define('S', AetherTags.Items.PLANKS_CRAFTING) - .unlockedBy("has_lots_of_items", new InventoryChangeTrigger.TriggerInstance(EntityPredicate.Composite.ANY, MinMaxBounds.Ints.atLeast(10), MinMaxBounds.Ints.ANY, MinMaxBounds.Ints.ANY, new ItemPredicate[0])) + ShapedRecipeBuilder.shaped(RecipeCategory.DECORATIONS, Blocks.CHEST, 1) .group("minecraft:chest") + .define('P', AetherTags.Items.PLANKS_CRAFTING) + .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])) .save(consumer, name("skyroot_chest")); - ShapedRecipeBuilder.shaped(Blocks.CRAFTING_TABLE, 1) - .pattern("SS") - .pattern("SS") - .define('S', AetherTags.Items.PLANKS_CRAFTING) - .unlockedBy("has_skyroot", has(AetherBlocks.SKYROOT_PLANKS.get())) + ShapedRecipeBuilder.shaped(RecipeCategory.DECORATIONS, Blocks.CRAFTING_TABLE, 1) .group("minecraft:crafting_table") + .define('P', AetherTags.Items.PLANKS_CRAFTING) + .pattern("PP") + .pattern("PP") + .unlockedBy(getHasName(AetherBlocks.SKYROOT_PLANKS.get()), has(AetherBlocks.SKYROOT_PLANKS.get())) .save(consumer, name("skyroot_crafting_table")); - ShapedRecipeBuilder.shaped(Blocks.FLETCHING_TABLE, 1) - .pattern("FF") - .pattern("SS") - .pattern("SS") - .define('F', Items.FLINT) - .define('S', AetherTags.Items.PLANKS_CRAFTING) - .unlockedBy("has_flint", has(Items.FLINT)) + ShapedRecipeBuilder.shaped(RecipeCategory.DECORATIONS, Blocks.FLETCHING_TABLE, 1) .group("minecraft:fletching_table") + .define('F', Items.FLINT) + .define('P', AetherTags.Items.PLANKS_CRAFTING) + .pattern("FF") + .pattern("PP") + .pattern("PP") + .unlockedBy(getHasName(Items.FLINT), has(Items.FLINT)) .save(consumer, name("skyroot_fletching_table")); - ShapedRecipeBuilder.shaped(Blocks.GRINDSTONE, 1) - .pattern("THT") - .pattern("S S") - .define('T', Tags.Items.RODS_WOODEN) - .define('H', Blocks.STONE_SLAB) - .define('S', AetherTags.Items.PLANKS_CRAFTING) - .unlockedBy("has_stone_slab", has(Blocks.STONE_SLAB)) + ShapedRecipeBuilder.shaped(RecipeCategory.DECORATIONS, Blocks.GRINDSTONE, 1) .group("minecraft:grindstone") + .define('/', Tags.Items.RODS_WOODEN) + .define('H', Blocks.STONE_SLAB) + .define('P', AetherTags.Items.PLANKS_CRAFTING) + .pattern("/H/") + .pattern("P P") + .unlockedBy(getHasName(Blocks.STONE_SLAB), has(Blocks.STONE_SLAB)) .save(consumer, name("skyroot_grindstone")); - ShapedRecipeBuilder.shaped(Blocks.JUKEBOX, 1) - .pattern("SSS") - .pattern("SDS") - .pattern("SSS") - .define('S', AetherTags.Items.PLANKS_CRAFTING) + ShapedRecipeBuilder.shaped(RecipeCategory.DECORATIONS, Blocks.JUKEBOX, 1) + .group("minecraft:jukebox") + .define('P', AetherTags.Items.PLANKS_CRAFTING) .define('D', Tags.Items.GEMS_DIAMOND) + .pattern("PPP") + .pattern("PDP") + .pattern("PPP") .unlockedBy("has_diamond", has(Tags.Items.GEMS_DIAMOND)) - .group("minecraft:jukebox") .save(consumer, name("skyroot_jukebox")); - ShapedRecipeBuilder.shaped(Blocks.JUKEBOX, 1) + ShapedRecipeBuilder.shaped(RecipeCategory.DECORATIONS, Blocks.JUKEBOX, 1) + .group("minecraft:jukebox") + .define('P', ItemTags.PLANKS) + .define('G', AetherBlocks.ENCHANTED_GRAVITITE.get()) .pattern("PPP") .pattern("PGP") .pattern("PPP") - .define('P', ItemTags.PLANKS) - .define('G', AetherBlocks.ENCHANTED_GRAVITITE.get()) - .unlockedBy("has_gravitite", has(AetherBlocks.ENCHANTED_GRAVITITE.get())) - .group("minecraft:jukebox") + .unlockedBy(getHasName(AetherBlocks.ENCHANTED_GRAVITITE.get()), has(AetherBlocks.ENCHANTED_GRAVITITE.get())) .save(consumer, name("gravitite_jukebox")); - ShapedRecipeBuilder.shaped(Blocks.JUKEBOX, 1) - .pattern("SSS") - .pattern("SGS") - .pattern("SSS") - .define('S', AetherTags.Items.PLANKS_CRAFTING) - .define('G', AetherBlocks.ENCHANTED_GRAVITITE.get()) - .unlockedBy("has_gravitite", has(AetherBlocks.ENCHANTED_GRAVITITE.get())) + ShapedRecipeBuilder.shaped(RecipeCategory.DECORATIONS, Blocks.JUKEBOX, 1) .group("minecraft:jukebox") + .define('P', AetherTags.Items.PLANKS_CRAFTING) + .define('G', AetherBlocks.ENCHANTED_GRAVITITE.get()) + .pattern("PPP") + .pattern("PGP") + .pattern("PPP") + .unlockedBy(getHasName(AetherBlocks.ENCHANTED_GRAVITITE.get()), has(AetherBlocks.ENCHANTED_GRAVITITE.get())) .save(consumer, name("skyroot_gravitite_jukebox")); - ShapedRecipeBuilder.shaped(Blocks.LOOM, 1) - .pattern("TT") - .pattern("SS") + ShapedRecipeBuilder.shaped(RecipeCategory.DECORATIONS, Blocks.LOOM, 1) + .group("minecraft:loom") .define('T', Tags.Items.STRING) - .define('S', AetherTags.Items.PLANKS_CRAFTING) + .define('P', AetherTags.Items.PLANKS_CRAFTING) + .pattern("TT") + .pattern("PP") .unlockedBy("has_string", has(Tags.Items.STRING)) - .group("minecraft:loom") .save(consumer, name("skyroot_loom")); - ShapedRecipeBuilder.shaped(Blocks.NOTE_BLOCK, 1) - .pattern("SSS") - .pattern("SRS") - .pattern("SSS") - .define('S', AetherTags.Items.PLANKS_CRAFTING) + ShapedRecipeBuilder.shaped(RecipeCategory.REDSTONE, Blocks.NOTE_BLOCK, 1) + .group("minecraft:note_block") + .define('P', AetherTags.Items.PLANKS_CRAFTING) .define('R', Tags.Items.DUSTS_REDSTONE) + .pattern("PPP") + .pattern("PRP") + .pattern("PPP") .unlockedBy("has_redstone", has(Tags.Items.DUSTS_REDSTONE)) - .group("minecraft:note_block") .save(consumer, name("skyroot_note_block")); - ShapedRecipeBuilder.shaped(Blocks.PISTON, 1) - .pattern("SSS") - .pattern("CIC") - .pattern("CRC") - .define('S', AetherTags.Items.PLANKS_CRAFTING) + ShapedRecipeBuilder.shaped(RecipeCategory.REDSTONE, Blocks.PISTON, 1) + .group("minecraft:piston") + .define('P', AetherTags.Items.PLANKS_CRAFTING) .define('C', Blocks.COBBLESTONE) .define('I', Tags.Items.INGOTS_IRON) .define('R', Tags.Items.DUSTS_REDSTONE) + .pattern("PPP") + .pattern("CIC") + .pattern("CRC") .unlockedBy("has_redstone", has(Tags.Items.DUSTS_REDSTONE)) - .group("minecraft:piston") .save(consumer, name("skyroot_piston")); - ShapedRecipeBuilder.shaped(Items.SHIELD, 1) - .pattern("SIS") - .pattern("SSS") - .pattern(" S ") - .define('S', AetherTags.Items.PLANKS_CRAFTING) + ShapedRecipeBuilder.shaped(RecipeCategory.COMBAT, Items.SHIELD, 1) + .group("minecraft:shield") + .define('P', AetherTags.Items.PLANKS_CRAFTING) .define('I', Tags.Items.INGOTS_IRON) + .pattern("PIP") + .pattern("PPP") + .pattern(" P ") .unlockedBy("has_iron_ingot", has(Tags.Items.INGOTS_IRON)) - .group("minecraft:shield") .save(consumer, name("skyroot_shield")); - ShapedRecipeBuilder.shaped(Blocks.SMITHING_TABLE, 1) - .pattern("II") - .pattern("SS") - .pattern("SS") + ShapedRecipeBuilder.shaped(RecipeCategory.DECORATIONS, Blocks.SMITHING_TABLE, 1) + .group("minecraft:smithing_table") .define('I', Tags.Items.INGOTS_IRON) - .define('S', AetherTags.Items.PLANKS_CRAFTING) + .define('P', AetherTags.Items.PLANKS_CRAFTING) + .pattern("II") + .pattern("PP") + .pattern("PP") .unlockedBy("has_iron_ingot", has(Tags.Items.INGOTS_IRON)) - .group("minecraft:smithing_table") .save(consumer, name("skyroot_smithing_table")); - ShapedRecipeBuilder.shaped(Blocks.TRIPWIRE_HOOK, 2) - .pattern("I") - .pattern("T") - .pattern("S") + ShapedRecipeBuilder.shaped(RecipeCategory.REDSTONE, Blocks.TRIPWIRE_HOOK, 2) + .group("minecraft:tripwire_hook") .define('I', Tags.Items.INGOTS_IRON) - .define('T', Tags.Items.RODS_WOODEN) - .define('S', AetherTags.Items.PLANKS_CRAFTING) + .define('/', Tags.Items.RODS_WOODEN) + .define('P', AetherTags.Items.PLANKS_CRAFTING) + .pattern("I") + .pattern("/") + .pattern("P") .unlockedBy("has_string", has(Tags.Items.STRING)) - .group("minecraft:tripwire_hook") .save(consumer, name("skyroot_tripwire_hook")); - smeltingRecipe(AetherItems.AMBROSIUM_SHARD.get(), AetherBlocks.AMBROSIUM_ORE.get(), 0.1F).save(consumer, name("smelt_ambrosium")); - blastingRecipe(AetherItems.AMBROSIUM_SHARD.get(), AetherBlocks.AMBROSIUM_ORE.get(), 0.1F).save(consumer, name("blast_ambrosium")); - - smeltingRecipe(AetherItems.ZANITE_GEMSTONE.get(), AetherBlocks.ZANITE_ORE.get(), 0.7F).save(consumer, name("smelt_zanite")); - blastingRecipe(AetherItems.ZANITE_GEMSTONE.get(), AetherBlocks.ZANITE_ORE.get(), 0.7F).save(consumer, name("blast_zanite")); - - stonecuttingRecipe(AetherBlocks.HOLYSTONE, AetherBlocks.HOLYSTONE_BRICKS.get()).save(consumer, name("holystone_brick_stonecutting")); - - stonecuttingRecipe(AetherBlocks.CARVED_STONE, AetherBlocks.CARVED_WALL.get()).save(consumer, name("carved_wall_stonecutting")); - stonecuttingRecipe(AetherBlocks.CARVED_STONE, AetherBlocks.CARVED_STAIRS.get()).save(consumer, name("carved_stairs_stonecutting")); - stonecuttingRecipe(AetherBlocks.CARVED_STONE, AetherBlocks.CARVED_SLAB.get(), 2).save(consumer, name("carved_slab_stonecutting")); - stonecuttingRecipe(AetherBlocks.CARVED_STONE, AetherBlocks.SENTRY_STONE.get(), 1).save(consumer, name("sentry_stone_stoncutting")); - stonecuttingRecipe(AetherBlocks.SENTRY_STONE, AetherBlocks.CARVED_STONE.get(), 1).save(consumer, name("carved_stone_from_sentry_stone_stoncutting")); - - stonecuttingRecipe(AetherBlocks.ANGELIC_STONE, AetherBlocks.ANGELIC_WALL.get()).save(consumer, name("angelic_wall_stonecutting")); - stonecuttingRecipe(AetherBlocks.ANGELIC_STONE, AetherBlocks.ANGELIC_STAIRS.get()).save(consumer, name("angelic_stairs_stonecutting")); - stonecuttingRecipe(AetherBlocks.ANGELIC_STONE, AetherBlocks.ANGELIC_SLAB.get(), 2).save(consumer, name("angelic_slab_stonecutting")); - stonecuttingRecipe(AetherBlocks.ANGELIC_STONE, AetherBlocks.PILLAR.get(), 1).save(consumer, name("pillar_stonecutting")); - stonecuttingRecipe(AetherBlocks.ANGELIC_STONE, AetherBlocks.PILLAR_TOP.get(), 1).save(consumer, name("pillar_top_stonecutting")); - stonecuttingRecipe(AetherBlocks.PILLAR::get, AetherBlocks.ANGELIC_STONE.get(), 1).save(consumer, name("angelic_stone_from_pillar_stonecutting")); - stonecuttingRecipe(AetherBlocks.PILLAR_TOP::get, AetherBlocks.ANGELIC_STONE.get(), 1).save(consumer, name("angelic_stone_from_pillar_top_stonecutting")); - stonecuttingRecipe(AetherBlocks.PILLAR::get, AetherBlocks.PILLAR_TOP.get(), 1).save(consumer, name("pillar_top_from_pillar_stonecutting")); - stonecuttingRecipe(AetherBlocks.PILLAR_TOP::get, AetherBlocks.PILLAR.get(), 1).save(consumer, name("pillar_from_pillar_top_stonecutting")); - stonecuttingRecipe(AetherBlocks.ANGELIC_STONE, AetherBlocks.LIGHT_ANGELIC_STONE.get(), 1).save(consumer, name("light_angelic_stone_stonecutting")); - stonecuttingRecipe(AetherBlocks.LIGHT_ANGELIC_STONE, AetherBlocks.ANGELIC_STONE.get(), 1).save(consumer, name("angelic_stone_from_light_angelic_stone_stonecutting")); - - stonecuttingRecipe(AetherBlocks.HELLFIRE_STONE, AetherBlocks.HELLFIRE_WALL.get()).save(consumer, name("hellfire_wall_stonecutting")); - stonecuttingRecipe(AetherBlocks.HELLFIRE_STONE, AetherBlocks.HELLFIRE_STAIRS.get()).save(consumer, name("hellfire_stairs_stonecutting")); - stonecuttingRecipe(AetherBlocks.HELLFIRE_STONE, AetherBlocks.HELLFIRE_SLAB.get(), 2).save(consumer, name("hellfire_slab_stonecutting")); - stonecuttingRecipe(AetherBlocks.HELLFIRE_STONE, AetherBlocks.LIGHT_HELLFIRE_STONE.get(), 1).save(consumer, name("light_hellfire_stone_stonecutting")); - stonecuttingRecipe(AetherBlocks.LIGHT_HELLFIRE_STONE, AetherBlocks.HELLFIRE_STONE.get(), 1).save(consumer, name("hellfire_stone_from_light_hellfire_stone_stonecutting")); - - stonecuttingRecipe(AetherBlocks.HOLYSTONE, AetherBlocks.HOLYSTONE_WALL.get()).save(consumer, name("holystone_wall_stonecutting")); - stonecuttingRecipe(AetherBlocks.HOLYSTONE, AetherBlocks.HOLYSTONE_STAIRS.get()).save(consumer, name("holystone_stairs_stonecutting")); - stonecuttingRecipe(AetherBlocks.HOLYSTONE, AetherBlocks.HOLYSTONE_SLAB.get(), 2).save(consumer, name("holystone_slab_stonecutting")); - stonecuttingRecipe(AetherBlocks.HOLYSTONE, AetherBlocks.HOLYSTONE_BRICK_WALL.get()).save(consumer, name("holystone_to_holystone_brick_wall_stonecutting")); - stonecuttingRecipe(AetherBlocks.HOLYSTONE, AetherBlocks.HOLYSTONE_BRICK_STAIRS.get()).save(consumer, name("holystone_to_holystone_brick_stairs_stonecutting")); - stonecuttingRecipe(AetherBlocks.HOLYSTONE, AetherBlocks.HOLYSTONE_BRICK_SLAB.get(), 2).save(consumer, name("holystone_to_holystone_brick_slab_stonecutting")); - - stonecuttingRecipe(AetherBlocks.MOSSY_HOLYSTONE, AetherBlocks.MOSSY_HOLYSTONE_WALL.get()).save(consumer, name("mossy_holystone_wall_stonecutting")); - stonecuttingRecipe(AetherBlocks.MOSSY_HOLYSTONE, AetherBlocks.MOSSY_HOLYSTONE_STAIRS.get()).save(consumer, name("mossy_holystone_stairs_stonecutting")); - stonecuttingRecipe(AetherBlocks.MOSSY_HOLYSTONE, AetherBlocks.MOSSY_HOLYSTONE_SLAB.get(), 2).save(consumer, name("mossy_holystone_slab_stonecutting")); - - stonecuttingRecipe(AetherBlocks.HOLYSTONE_BRICKS, AetherBlocks.HOLYSTONE_BRICK_WALL.get()).save(consumer, name("holystone_brick_wall_stonecutting")); - stonecuttingRecipe(AetherBlocks.HOLYSTONE_BRICKS, AetherBlocks.HOLYSTONE_BRICK_STAIRS.get()).save(consumer, name("holystone_brick_stairs_stonecutting")); - stonecuttingRecipe(AetherBlocks.HOLYSTONE_BRICKS, AetherBlocks.HOLYSTONE_BRICK_SLAB.get(), 2).save(consumer, name("holystone_brick_slab_stonecutting")); - - stonecuttingRecipe(AetherBlocks.AEROGEL, AetherBlocks.AEROGEL_WALL.get()).save(consumer, name("aerogel_wall_stonecutting")); - stonecuttingRecipe(AetherBlocks.AEROGEL, AetherBlocks.AEROGEL_STAIRS.get()).save(consumer, name("aerogel_stairs_stonecutting")); - stonecuttingRecipe(AetherBlocks.AEROGEL, AetherBlocks.AEROGEL_SLAB.get(), 2).save(consumer, name("aerogel_slab_stonecutting")); - - repairingRecipe(Items.FISHING_ROD, 600).save(consumer, name("fishing_rod_repairing")); - repairingRecipe(Items.BOW, 4000).save(consumer, name("bow_repairing")); - - repairingRecipe(Items.SHIELD, 3000).save(consumer, name("shield_repairing")); - - repairingRecipe(AetherItems.SKYROOT_PICKAXE.get(), 225).group("altar_pickaxe_repair").save(consumer, name("skyroot_pickaxe_repairing")); - repairingRecipe(AetherItems.SKYROOT_AXE.get(), 225).group("altar_axe_repair").save(consumer, name("skyroot_axe_repairing")); - repairingRecipe(AetherItems.SKYROOT_SHOVEL.get(), 225).group("altar_shovel_repair").save(consumer, name("skyroot_shovel_repairing")); - repairingRecipe(AetherItems.SKYROOT_HOE.get(), 225).group("altar_hoe_repair").save(consumer, name("skyroot_hoe_repairing")); - - repairingRecipe(AetherItems.HOLYSTONE_PICKAXE.get(), 550).group("altar_pickaxe_repair").save(consumer, name("holystone_pickaxe_repairing")); - repairingRecipe(AetherItems.HOLYSTONE_AXE.get(), 550).group("altar_axe_repair").save(consumer, name("holystone_axe_repairing")); - repairingRecipe(AetherItems.HOLYSTONE_SHOVEL.get(), 550).group("altar_shovel_repair").save(consumer, name("holystone_shovel_repairing")); - repairingRecipe(AetherItems.HOLYSTONE_HOE.get(), 550).group("altar_hoe_repair").save(consumer, name("holystone_hoe_repairing")); - - repairingRecipe(AetherItems.ZANITE_PICKAXE.get(), 2250).group("altar_pickaxe_repair").save(consumer, name("zanite_pickaxe_repairing")); - repairingRecipe(AetherItems.ZANITE_AXE.get(), 2250).group("altar_axe_repair").save(consumer, name("zanite_axe_repairing")); - repairingRecipe(AetherItems.ZANITE_SHOVEL.get(), 2250).group("altar_shovel_repair").save(consumer, name("zanite_shovel_repairing")); - repairingRecipe(AetherItems.ZANITE_HOE.get(), 2250).group("altar_hoe_repair").save(consumer, name("zanite_hoe_repairing")); - - repairingRecipe(AetherItems.GRAVITITE_PICKAXE.get(), 5500).group("altar_pickaxe_repair").save(consumer, name("gravitite_pickaxe_repairing")); - repairingRecipe(AetherItems.GRAVITITE_AXE.get(), 5500).group("altar_axe_repair").save(consumer, name("gravitite_axe_repairing")); - repairingRecipe(AetherItems.GRAVITITE_SHOVEL.get(), 5500).group("altar_shovel_repair").save(consumer, name("gravitite_shovel_repairing")); - repairingRecipe(AetherItems.GRAVITITE_HOE.get(), 5500).group("altar_hoe_repair").save(consumer, name("gravitite_hoe_repairing")); - - repairingRecipe(AetherItems.SKYROOT_SWORD.get(), 225).group("altar_sword_repair").save(consumer, name("skyroot_sword_repairing")); - repairingRecipe(AetherItems.HOLYSTONE_SWORD.get(), 550).group("altar_sword_repair").save(consumer, name("holystone_sword_repairing")); - repairingRecipe(AetherItems.ZANITE_SWORD.get(), 2250).group("altar_sword_repair").save(consumer, name("zanite_sword_repairing")); - repairingRecipe(AetherItems.GRAVITITE_SWORD.get(), 5500).group("altar_sword_repair").save(consumer, name("gravitite_sword_repairing")); - - repairingRecipe(AetherItems.ZANITE_HELMET.get(), 6000).group("altar_helmet_repair").save(consumer, name("zanite_helmet_repairing")); - repairingRecipe(AetherItems.ZANITE_CHESTPLATE.get(), 6000).group("altar_chestplate_repair").save(consumer, name("zanite_chestplate_repairing")); - repairingRecipe(AetherItems.ZANITE_LEGGINGS.get(), 6000).group("altar_leggings_repair").save(consumer, name("zanite_leggings_repairing")); - repairingRecipe(AetherItems.ZANITE_BOOTS.get(), 6000).group("altar_boots_repair").save(consumer, name("zanite_boots_repairing")); - repairingRecipe(AetherItems.ZANITE_GLOVES.get(), 6000).group("altar_gloves_repair").save(consumer, name("zanite_gloves_repairing")); - - repairingRecipe(AetherItems.GRAVITITE_HELMET.get(), 13000).group("altar_helmet_repair").save(consumer, name("gravitite_helmet_repairing")); - repairingRecipe(AetherItems.GRAVITITE_CHESTPLATE.get(), 13000).group("altar_chestplate_repair").save(consumer, name("gravitite_chestplate_repairing")); - repairingRecipe(AetherItems.GRAVITITE_LEGGINGS.get(), 13000).group("altar_leggings_repair").save(consumer, name("gravitite_leggings_repairing")); - repairingRecipe(AetherItems.GRAVITITE_BOOTS.get(), 13000).group("altar_boots_repair").save(consumer, name("gravitite_boots_repairing")); - repairingRecipe(AetherItems.GRAVITITE_GLOVES.get(), 13000).group("altar_gloves_repair").save(consumer, name("gravitite_gloves_repairing")); - - repairingRecipe(Items.WOODEN_PICKAXE, 225).group("altar_pickaxe_repair").save(consumer, name("wooden_pickaxe_repairing")); - repairingRecipe(Items.WOODEN_AXE, 225).group("altar_axe_repair").save(consumer, name("wooden_axe_repairing")); - repairingRecipe(Items.WOODEN_SHOVEL, 225).group("altar_shovel_repair").save(consumer, name("wooden_shovel_repairing")); - repairingRecipe(Items.WOODEN_HOE, 225).group("altar_hoe_repair").save(consumer, name("wooden_hoe_repairing")); - - repairingRecipe(Items.STONE_PICKAXE, 550).group("altar_pickaxe_repair").save(consumer, name("stone_pickaxe_repairing")); - repairingRecipe(Items.STONE_AXE, 550).group("altar_axe_repair").save(consumer, name("stone_axe_repairing")); - repairingRecipe(Items.STONE_SHOVEL, 550).group("altar_shovel_repair").save(consumer, name("stone_shovel_repairing")); - repairingRecipe(Items.STONE_HOE, 550).group("altar_hoe_repair").save(consumer, name("stone_hoe_repairing")); - - repairingRecipe(Items.IRON_PICKAXE, 2250).group("altar_pickaxe_repair").save(consumer, name("iron_pickaxe_repairing")); - repairingRecipe(Items.IRON_AXE, 2250).group("altar_axe_repair").save(consumer, name("iron_axe_repairing")); - repairingRecipe(Items.IRON_SHOVEL, 2250).group("altar_shovel_repair").save(consumer, name("iron_shovel_repairing")); - repairingRecipe(Items.IRON_HOE, 2250).group("altar_hoe_repair").save(consumer, name("iron_hoe_repairing")); - - repairingRecipe(Items.GOLDEN_PICKAXE, 1075).group("altar_pickaxe_repair").save(consumer, name("golden_pickaxe_repairing")); - repairingRecipe(Items.GOLDEN_AXE, 1075).group("altar_axe_repair").save(consumer, name("golden_axe_repairing")); - repairingRecipe(Items.GOLDEN_SHOVEL, 1075).group("altar_shovel_repair").save(consumer, name("golden_shovel_repairing")); - repairingRecipe(Items.GOLDEN_HOE, 1075).group("altar_hoe_repair").save(consumer, name("golden_hoe_repairing")); - - repairingRecipe(Items.DIAMOND_PICKAXE, 5500).group("altar_pickaxe_repair").save(consumer, name("diamond_pickaxe_repairing")); - repairingRecipe(Items.DIAMOND_AXE, 5500).group("altar_axe_repair").save(consumer, name("diamond_axe_repairing")); - repairingRecipe(Items.DIAMOND_SHOVEL, 5500).group("altar_shovel_repair").save(consumer, name("diamond_shovel_repairing")); - repairingRecipe(Items.DIAMOND_HOE, 5500).group("altar_hoe_repair").save(consumer, name("diamond_hoe_repairing")); - - repairingRecipe(Items.NETHERITE_PICKAXE, 15000).group("altar_pickaxe_repair").save(consumer, name("netherite_pickaxe_repairing")); - repairingRecipe(Items.NETHERITE_AXE, 15000).group("altar_axe_repair").save(consumer, name("netherite_axe_repairing")); - repairingRecipe(Items.NETHERITE_SHOVEL, 15000).group("altar_shovel_repair").save(consumer, name("netherite_shovel_repairing")); - repairingRecipe(Items.NETHERITE_HOE, 15000).group("altar_hoe_repair").save(consumer, name("netherite_hoe_repairing")); - - repairingRecipe(Items.WOODEN_SWORD, 225).group("altar_sword_repair").save(consumer, name("wooden_sword_repairing")); - repairingRecipe(Items.STONE_SWORD, 550).group("altar_sword_repair").save(consumer, name("stone_sword_repairing")); - repairingRecipe(Items.IRON_SWORD, 2250).group("altar_sword_repair").save(consumer, name("iron_sword_repairing")); - repairingRecipe(Items.GOLDEN_SWORD, 1075).group("altar_sword_repair").save(consumer, name("golden_sword_repairing")); - repairingRecipe(Items.DIAMOND_SWORD, 5500).group("altar_sword_repair").save(consumer, name("diamond_sword_repairing")); - repairingRecipe(Items.NETHERITE_SWORD, 15000).group("altar_sword_repair").save(consumer, name("netherite_sword_repairing")); - - repairingRecipe(Items.LEATHER_HELMET, 550).group("altar_helmet_repair").save(consumer, name("leather_helmet_repairing")); - repairingRecipe(Items.LEATHER_CHESTPLATE, 550).group("altar_chestplate_repair").save(consumer, name("leather_chestplate_repairing")); - repairingRecipe(Items.LEATHER_LEGGINGS, 550).group("altar_leggings_repair").save(consumer, name("leather_leggings_repairing")); - repairingRecipe(Items.LEATHER_BOOTS, 550).group("altar_boots_repair").save(consumer, name("leather_boots_repairing")); - repairingRecipe(AetherItems.LEATHER_GLOVES.get(), 550).group("altar_gloves_repair").save(consumer, name("leather_gloves_repairing")); - - repairingRecipe(Items.IRON_HELMET, 6000).group("altar_helmet_repair").save(consumer, name("iron_helmet_repairing")); - repairingRecipe(Items.IRON_CHESTPLATE, 6000).group("altar_chestplate_repair").save(consumer, name("iron_chestplate_repairing")); - repairingRecipe(Items.IRON_LEGGINGS, 6000).group("altar_leggings_repair").save(consumer, name("iron_leggings_repairing")); - repairingRecipe(Items.IRON_BOOTS, 6000).group("altar_boots_repair").save(consumer, name("iron_boots_repairing")); - repairingRecipe(AetherItems.IRON_GLOVES.get(), 6000).group("altar_gloves_repair").save(consumer, name("iron_gloves_repairing")); - - repairingRecipe(Items.GOLDEN_HELMET, 2250).group("altar_helmet_repair").save(consumer, name("golden_helmet_repairing")); - repairingRecipe(Items.GOLDEN_CHESTPLATE, 2250).group("altar_chestplate_repair").save(consumer, name("golden_chestplate_repairing")); - repairingRecipe(Items.GOLDEN_LEGGINGS, 2250).group("altar_leggings_repair").save(consumer, name("golden_leggings_repairing")); - repairingRecipe(Items.GOLDEN_BOOTS, 2250).group("altar_boots_repair").save(consumer, name("golden_boots_repairing")); - repairingRecipe(AetherItems.GOLDEN_GLOVES.get(), 2250).group("altar_gloves_repair").save(consumer, name("golden_gloves_repairing")); - - repairingRecipe(Items.CHAINMAIL_HELMET, 2250).group("altar_helmet_repair").save(consumer, name("chainmail_helmet_repairing")); - repairingRecipe(Items.CHAINMAIL_CHESTPLATE, 2250).group("altar_chestplate_repair").save(consumer, name("chainmail_chestplate_repairing")); - repairingRecipe(Items.CHAINMAIL_LEGGINGS, 2250).group("altar_leggings_repair").save(consumer, name("chainmail_leggings_repairing")); - repairingRecipe(Items.CHAINMAIL_BOOTS, 2250).group("altar_boots_repair").save(consumer, name("chainmail_boots_repairing")); - repairingRecipe(AetherItems.CHAINMAIL_GLOVES.get(), 2250).group("altar_gloves_repair").save(consumer, name("chainmail_gloves_repairing")); - - repairingRecipe(Items.DIAMOND_HELMET, 10000).group("altar_helmet_repair").save(consumer, name("diamond_helmet_repairing")); - repairingRecipe(Items.DIAMOND_CHESTPLATE, 10000).group("altar_chestplate_repair").save(consumer, name("diamond_chestplate_repairing")); - repairingRecipe(Items.DIAMOND_LEGGINGS, 10000).group("altar_leggings_repair").save(consumer, name("diamond_leggings_repairing")); - repairingRecipe(Items.DIAMOND_BOOTS, 10000).group("altar_boots_repair").save(consumer, name("diamond_boots_repairing")); - repairingRecipe(AetherItems.DIAMOND_GLOVES.get(), 10000).group("altar_gloves_repair").save(consumer, name("diamond_gloves_repairing")); - - repairingRecipe(Items.NETHERITE_HELMET, 30000).group("altar_helmet_repair").save(consumer, name("netherite_helmet_repairing")); - repairingRecipe(Items.NETHERITE_CHESTPLATE, 30000).group("altar_chestplate_repair").save(consumer, name("netherite_chestplate_repairing")); - repairingRecipe(Items.NETHERITE_LEGGINGS, 30000).group("altar_leggings_repair").save(consumer, name("netherite_leggings_repairing")); - repairingRecipe(Items.NETHERITE_BOOTS, 30000).group("altar_boots_repair").save(consumer, name("netherite_boots_repairing")); - repairingRecipe(AetherItems.NETHERITE_GLOVES.get(), 30000).group("altar_gloves_repair").save(consumer, name("netherite_gloves_repairing")); - - repairingRecipe(AetherItems.ZANITE_RING.get(), 2250).group("altar_ring_repair").save(consumer, name("zanite_ring_repairing")); - repairingRecipe(AetherItems.ZANITE_PENDANT.get(), 2250).group("altar_pendant_repair").save(consumer, name("zanite_pendant_repairing")); - - enchantingRecipe(AetherItems.ENCHANTED_DART.get(), AetherItems.GOLDEN_DART.get(), 0.15F, 250).save(consumer, name("enchanted_dart_enchanting")); - enchantingRecipe(AetherItems.ENCHANTED_DART_SHOOTER.get(), AetherItems.GOLDEN_DART_SHOOTER.get(), 1.0F, 500).save(consumer, name("enchanted_dart_shooter_enchanting")); - - enchantingRecipe(AetherItems.HEALING_STONE.get(), AetherBlocks.HOLYSTONE.get(), 0.35F, 750).save(consumer, name("healing_stone_enchanting")); - enchantingRecipe(AetherBlocks.ENCHANTED_GRAVITITE.get(), AetherBlocks.GRAVITITE_ORE.get(), 1.0F, 1000).save(consumer, name("enchanted_gravitite_enchanting")); - enchantingRecipe(AetherBlocks.QUICKSOIL_GLASS.get(), AetherBlocks.QUICKSOIL.get(), 0.1F, 250).save(consumer, name("quicksoil_glass_enchanting")); - - enchantingRecipe(AetherItems.ENCHANTED_BERRY.get(), AetherItems.BLUE_BERRY.get(), 0.35F, 300).save(consumer, name("enchanted_berry_enchanting")); - - enchantingRecipe(AetherItems.MUSIC_DISC_AETHER_TUNE.get(), AetherTags.Items.ACCEPTED_MUSIC_DISCS, 1.0F, 2500).save(consumer, name("aether_tune_enchanting")); - hiddenEnchantingRecipe(AetherItems.MUSIC_DISC_LEGACY.get(), Items.MUSIC_DISC_CAT, 1.0F, 2500).save(consumer, name("legacy_enchanting")); - hiddenEnchantingRecipe(AetherItems.MUSIC_DISC_CHINCHILLA.get(), Items.MUSIC_DISC_STRAD, 1.0F, 2500).save(consumer, name("chinchilla_enchanting")); - - enchantingRecipe(AetherItems.SKYROOT_REMEDY_BUCKET.get(), AetherItems.SKYROOT_POISON_BUCKET.get(), 0.35F, 1000).save(consumer, name("remedy_bucket_enchanting")); - - freezingRecipe(AetherBlocks.BLUE_AERCLOUD.get(), AetherBlocks.COLD_AERCLOUD.get(), 0.1F, 100).save(consumer, name("blue_aercloud_freezing")); - freezingRecipe(AetherBlocks.CRYSTAL_LEAVES.get(), AetherBlocks.SKYROOT_LEAVES.get(), 0.1F, 150).save(consumer, name("crystal_leaves_freezing")); - - hiddenFreezingRecipe(AetherItems.MUSIC_DISC_WELCOMING_SKIES.get(), AetherItems.MUSIC_DISC_ASCENDING_DAWN.get(), 1.0F, 800).save(consumer, name("welcoming_skies_freezing")); - - freezingRecipeWithUnlockTag(Blocks.BLUE_ICE, Blocks.PACKED_ICE, AetherTags.Items.FREEZABLE_BUCKETS, 0.1F, 1000, "water_bucket").save(consumer, name("blue_ice_freezing")); - freezingRecipeWithUnlockTag(Blocks.PACKED_ICE, Blocks.ICE, AetherTags.Items.FREEZABLE_BUCKETS, 0.1F, 750, "water_bucket").save(consumer, name("packed_ice_freezing")); - freezingRecipeWithTag(Blocks.ICE, AetherTags.Items.FREEZABLE_BUCKETS, 0.1F, 500, "water_bucket").save(consumer, name("ice_from_bucket_freezing")); - freezingRecipe(Blocks.OBSIDIAN, Items.LAVA_BUCKET, 0.1F, 500).save(consumer, name("obsidian_from_bucket_freezing")); - - freezingRecipeWithTag(AetherItems.ICE_RING.get(), AetherTags.Items.FREEZABLE_RINGS, 1.0F, 2500, "ring").save(consumer, name("ice_ring_from_freezing")); - - freezingRecipeWithTag(AetherItems.ICE_PENDANT.get(), AetherTags.Items.FREEZABLE_PENDANTS, 1.0F, 2500, "pendant").save(consumer, name("ice_pendant_from_freezing")); + smeltingOreRecipe(AetherItems.AMBROSIUM_SHARD.get(), AetherBlocks.AMBROSIUM_ORE.get(), 0.1F).save(consumer, name("ambrosium_shard_from_smelting")); + blastingOreRecipe(AetherItems.AMBROSIUM_SHARD.get(), AetherBlocks.AMBROSIUM_ORE.get(), 0.1F).save(consumer, name("ambrosium_shard_from_blasting")); + + smeltingOreRecipe(AetherItems.ZANITE_GEMSTONE.get(), AetherBlocks.ZANITE_ORE.get(), 0.7F).save(consumer, name("zanite_gemstone_from_smelting")); + blastingOreRecipe(AetherItems.ZANITE_GEMSTONE.get(), AetherBlocks.ZANITE_ORE.get(), 0.7F).save(consumer, name("zanite_gemstone_from_blasting")); + + stonecuttingRecipe(consumer, RecipeCategory.DECORATIONS, AetherBlocks.CARVED_WALL.get(), AetherBlocks.CARVED_STONE.get()); + stonecuttingRecipe(consumer, RecipeCategory.BUILDING_BLOCKS, AetherBlocks.CARVED_STAIRS.get(), AetherBlocks.CARVED_STONE.get()); + stonecuttingRecipe(consumer, RecipeCategory.BUILDING_BLOCKS, AetherBlocks.CARVED_SLAB.get(), AetherBlocks.CARVED_STONE.get(), 2); + stonecuttingRecipe(consumer, RecipeCategory.BUILDING_BLOCKS, AetherBlocks.SENTRY_STONE.get(), AetherBlocks.CARVED_STONE.get()); + stonecuttingRecipe(consumer, RecipeCategory.BUILDING_BLOCKS, AetherBlocks.CARVED_STONE.get(), AetherBlocks.SENTRY_STONE.get()); + + stonecuttingRecipe(consumer, RecipeCategory.DECORATIONS, AetherBlocks.ANGELIC_WALL.get(), AetherBlocks.ANGELIC_STONE.get()); + stonecuttingRecipe(consumer, RecipeCategory.BUILDING_BLOCKS, AetherBlocks.ANGELIC_STAIRS.get(), AetherBlocks.ANGELIC_STONE.get()); + stonecuttingRecipe(consumer, RecipeCategory.BUILDING_BLOCKS, AetherBlocks.ANGELIC_SLAB.get(), AetherBlocks.ANGELIC_STONE.get(), 2); + stonecuttingRecipe(consumer, RecipeCategory.BUILDING_BLOCKS, AetherBlocks.PILLAR.get(), AetherBlocks.ANGELIC_STONE.get()); + stonecuttingRecipe(consumer, RecipeCategory.BUILDING_BLOCKS, AetherBlocks.PILLAR_TOP.get(), AetherBlocks.ANGELIC_STONE.get()); + stonecuttingRecipe(consumer, RecipeCategory.BUILDING_BLOCKS, AetherBlocks.ANGELIC_STONE.get(), AetherBlocks.PILLAR.get()); + stonecuttingRecipe(consumer, RecipeCategory.BUILDING_BLOCKS, AetherBlocks.ANGELIC_STONE.get(), AetherBlocks.PILLAR_TOP.get()); + stonecuttingRecipe(consumer, RecipeCategory.BUILDING_BLOCKS, AetherBlocks.PILLAR_TOP.get(), AetherBlocks.PILLAR.get()); + stonecuttingRecipe(consumer, RecipeCategory.BUILDING_BLOCKS, AetherBlocks.PILLAR.get(), AetherBlocks.PILLAR_TOP.get()); + stonecuttingRecipe(consumer, RecipeCategory.BUILDING_BLOCKS, AetherBlocks.LIGHT_ANGELIC_STONE.get(), AetherBlocks.ANGELIC_STONE.get()); + stonecuttingRecipe(consumer, RecipeCategory.BUILDING_BLOCKS, AetherBlocks.ANGELIC_STONE.get(), AetherBlocks.LIGHT_ANGELIC_STONE.get()); + + stonecuttingRecipe(consumer, RecipeCategory.DECORATIONS, AetherBlocks.HELLFIRE_WALL.get(), AetherBlocks.HELLFIRE_STONE.get()); + stonecuttingRecipe(consumer, RecipeCategory.BUILDING_BLOCKS, AetherBlocks.HELLFIRE_STAIRS.get(), AetherBlocks.HELLFIRE_STONE.get()); + stonecuttingRecipe(consumer, RecipeCategory.BUILDING_BLOCKS, AetherBlocks.HELLFIRE_SLAB.get(), AetherBlocks.HELLFIRE_STONE.get(), 2); + stonecuttingRecipe(consumer, RecipeCategory.BUILDING_BLOCKS, AetherBlocks.LIGHT_HELLFIRE_STONE.get(), AetherBlocks.HELLFIRE_STONE.get()); + stonecuttingRecipe(consumer, RecipeCategory.BUILDING_BLOCKS, AetherBlocks.HELLFIRE_STONE.get(), AetherBlocks.LIGHT_HELLFIRE_STONE.get()); + + stonecuttingRecipe(consumer, RecipeCategory.DECORATIONS, AetherBlocks.HOLYSTONE_WALL.get(), AetherBlocks.HOLYSTONE.get()); + stonecuttingRecipe(consumer, RecipeCategory.BUILDING_BLOCKS, AetherBlocks.HOLYSTONE_STAIRS.get(), AetherBlocks.HOLYSTONE.get()); + stonecuttingRecipe(consumer, RecipeCategory.BUILDING_BLOCKS, AetherBlocks.HOLYSTONE_SLAB.get(), AetherBlocks.HOLYSTONE.get(), 2); + + stonecuttingRecipe(consumer, RecipeCategory.BUILDING_BLOCKS, AetherBlocks.HOLYSTONE_BRICKS.get(), AetherBlocks.HOLYSTONE.get()); + stonecuttingRecipe(consumer, RecipeCategory.DECORATIONS, AetherBlocks.HOLYSTONE_BRICK_WALL.get(), AetherBlocks.HOLYSTONE.get()); + stonecuttingRecipe(consumer, RecipeCategory.BUILDING_BLOCKS, AetherBlocks.HOLYSTONE_BRICK_STAIRS.get(), AetherBlocks.HOLYSTONE.get()); + stonecuttingRecipe(consumer, RecipeCategory.BUILDING_BLOCKS, AetherBlocks.HOLYSTONE_BRICK_SLAB.get(), AetherBlocks.HOLYSTONE.get(), 2); + + stonecuttingRecipe(consumer, RecipeCategory.DECORATIONS, AetherBlocks.MOSSY_HOLYSTONE_WALL.get(), AetherBlocks.MOSSY_HOLYSTONE.get()); + stonecuttingRecipe(consumer, RecipeCategory.BUILDING_BLOCKS, AetherBlocks.MOSSY_HOLYSTONE_STAIRS.get(), AetherBlocks.MOSSY_HOLYSTONE.get()); + stonecuttingRecipe(consumer, RecipeCategory.BUILDING_BLOCKS, AetherBlocks.MOSSY_HOLYSTONE_SLAB.get(), AetherBlocks.MOSSY_HOLYSTONE.get(), 2); + + stonecuttingRecipe(consumer, RecipeCategory.DECORATIONS, AetherBlocks.HOLYSTONE_BRICK_WALL.get(), AetherBlocks.HOLYSTONE_BRICKS.get()); + stonecuttingRecipe(consumer, RecipeCategory.BUILDING_BLOCKS, AetherBlocks.HOLYSTONE_BRICK_STAIRS.get(), AetherBlocks.HOLYSTONE_BRICKS.get()); + stonecuttingRecipe(consumer, RecipeCategory.BUILDING_BLOCKS, AetherBlocks.HOLYSTONE_BRICK_SLAB.get(), AetherBlocks.HOLYSTONE_BRICKS.get(), 2); + + stonecuttingRecipe(consumer, RecipeCategory.DECORATIONS, AetherBlocks.AEROGEL_WALL.get(), AetherBlocks.AEROGEL.get()); + stonecuttingRecipe(consumer, RecipeCategory.BUILDING_BLOCKS, AetherBlocks.AEROGEL_STAIRS.get(), AetherBlocks.AEROGEL.get()); + stonecuttingRecipe(consumer, RecipeCategory.BUILDING_BLOCKS, AetherBlocks.AEROGEL_SLAB.get(), AetherBlocks.AEROGEL.get(), 2); + + + repairingRecipe(RecipeCategory.TOOLS, Items.FISHING_ROD, 600).save(consumer, name("fishing_rod_repairing")); + repairingRecipe(RecipeCategory.COMBAT, Items.BOW, 4000).save(consumer, name("bow_repairing")); + + repairingRecipe(RecipeCategory.COMBAT, Items.SHIELD, 3000).save(consumer, name("shield_repairing")); + + repairingRecipe(RecipeCategory.TOOLS, AetherItems.SKYROOT_PICKAXE.get(), 225).group("altar_pickaxe_repair").save(consumer, name("skyroot_pickaxe_repairing")); + repairingRecipe(RecipeCategory.TOOLS, AetherItems.SKYROOT_AXE.get(), 225).group("altar_axe_repair").save(consumer, name("skyroot_axe_repairing")); + repairingRecipe(RecipeCategory.TOOLS, AetherItems.SKYROOT_SHOVEL.get(), 225).group("altar_shovel_repair").save(consumer, name("skyroot_shovel_repairing")); + repairingRecipe(RecipeCategory.TOOLS, AetherItems.SKYROOT_HOE.get(), 225).group("altar_hoe_repair").save(consumer, name("skyroot_hoe_repairing")); + + repairingRecipe(RecipeCategory.TOOLS, AetherItems.HOLYSTONE_PICKAXE.get(), 550).group("altar_pickaxe_repair").save(consumer, name("holystone_pickaxe_repairing")); + repairingRecipe(RecipeCategory.TOOLS, AetherItems.HOLYSTONE_AXE.get(), 550).group("altar_axe_repair").save(consumer, name("holystone_axe_repairing")); + repairingRecipe(RecipeCategory.TOOLS, AetherItems.HOLYSTONE_SHOVEL.get(), 550).group("altar_shovel_repair").save(consumer, name("holystone_shovel_repairing")); + repairingRecipe(RecipeCategory.TOOLS, AetherItems.HOLYSTONE_HOE.get(), 550).group("altar_hoe_repair").save(consumer, name("holystone_hoe_repairing")); + + repairingRecipe(RecipeCategory.TOOLS, AetherItems.ZANITE_PICKAXE.get(), 2250).group("altar_pickaxe_repair").save(consumer, name("zanite_pickaxe_repairing")); + repairingRecipe(RecipeCategory.TOOLS, AetherItems.ZANITE_AXE.get(), 2250).group("altar_axe_repair").save(consumer, name("zanite_axe_repairing")); + repairingRecipe(RecipeCategory.TOOLS, AetherItems.ZANITE_SHOVEL.get(), 2250).group("altar_shovel_repair").save(consumer, name("zanite_shovel_repairing")); + repairingRecipe(RecipeCategory.TOOLS, AetherItems.ZANITE_HOE.get(), 2250).group("altar_hoe_repair").save(consumer, name("zanite_hoe_repairing")); + + repairingRecipe(RecipeCategory.TOOLS, AetherItems.GRAVITITE_PICKAXE.get(), 5500).group("altar_pickaxe_repair").save(consumer, name("gravitite_pickaxe_repairing")); + repairingRecipe(RecipeCategory.TOOLS, AetherItems.GRAVITITE_AXE.get(), 5500).group("altar_axe_repair").save(consumer, name("gravitite_axe_repairing")); + repairingRecipe(RecipeCategory.TOOLS, AetherItems.GRAVITITE_SHOVEL.get(), 5500).group("altar_shovel_repair").save(consumer, name("gravitite_shovel_repairing")); + repairingRecipe(RecipeCategory.TOOLS, AetherItems.GRAVITITE_HOE.get(), 5500).group("altar_hoe_repair").save(consumer, name("gravitite_hoe_repairing")); + + repairingRecipe(RecipeCategory.COMBAT, AetherItems.SKYROOT_SWORD.get(), 225).group("altar_sword_repair").save(consumer, name("skyroot_sword_repairing")); + repairingRecipe(RecipeCategory.COMBAT, AetherItems.HOLYSTONE_SWORD.get(), 550).group("altar_sword_repair").save(consumer, name("holystone_sword_repairing")); + repairingRecipe(RecipeCategory.COMBAT, AetherItems.ZANITE_SWORD.get(), 2250).group("altar_sword_repair").save(consumer, name("zanite_sword_repairing")); + repairingRecipe(RecipeCategory.COMBAT, AetherItems.GRAVITITE_SWORD.get(), 5500).group("altar_sword_repair").save(consumer, name("gravitite_sword_repairing")); + + repairingRecipe(RecipeCategory.COMBAT, AetherItems.ZANITE_HELMET.get(), 6000).group("altar_helmet_repair").save(consumer, name("zanite_helmet_repairing")); + repairingRecipe(RecipeCategory.COMBAT, AetherItems.ZANITE_CHESTPLATE.get(), 6000).group("altar_chestplate_repair").save(consumer, name("zanite_chestplate_repairing")); + repairingRecipe(RecipeCategory.COMBAT, AetherItems.ZANITE_LEGGINGS.get(), 6000).group("altar_leggings_repair").save(consumer, name("zanite_leggings_repairing")); + repairingRecipe(RecipeCategory.COMBAT, AetherItems.ZANITE_BOOTS.get(), 6000).group("altar_boots_repair").save(consumer, name("zanite_boots_repairing")); + repairingRecipe(RecipeCategory.COMBAT, AetherItems.ZANITE_GLOVES.get(), 6000).group("altar_gloves_repair").save(consumer, name("zanite_gloves_repairing")); + + repairingRecipe(RecipeCategory.COMBAT, AetherItems.GRAVITITE_HELMET.get(), 13000).group("altar_helmet_repair").save(consumer, name("gravitite_helmet_repairing")); + repairingRecipe(RecipeCategory.COMBAT, AetherItems.GRAVITITE_CHESTPLATE.get(), 13000).group("altar_chestplate_repair").save(consumer, name("gravitite_chestplate_repairing")); + repairingRecipe(RecipeCategory.COMBAT, AetherItems.GRAVITITE_LEGGINGS.get(), 13000).group("altar_leggings_repair").save(consumer, name("gravitite_leggings_repairing")); + repairingRecipe(RecipeCategory.COMBAT, AetherItems.GRAVITITE_BOOTS.get(), 13000).group("altar_boots_repair").save(consumer, name("gravitite_boots_repairing")); + repairingRecipe(RecipeCategory.COMBAT, AetherItems.GRAVITITE_GLOVES.get(), 13000).group("altar_gloves_repair").save(consumer, name("gravitite_gloves_repairing")); + + repairingRecipe(RecipeCategory.TOOLS, Items.WOODEN_PICKAXE, 225).group("altar_pickaxe_repair").save(consumer, name("wooden_pickaxe_repairing")); + repairingRecipe(RecipeCategory.TOOLS, Items.WOODEN_AXE, 225).group("altar_axe_repair").save(consumer, name("wooden_axe_repairing")); + repairingRecipe(RecipeCategory.TOOLS, Items.WOODEN_SHOVEL, 225).group("altar_shovel_repair").save(consumer, name("wooden_shovel_repairing")); + repairingRecipe(RecipeCategory.TOOLS, Items.WOODEN_HOE, 225).group("altar_hoe_repair").save(consumer, name("wooden_hoe_repairing")); + + repairingRecipe(RecipeCategory.TOOLS, Items.STONE_PICKAXE, 550).group("altar_pickaxe_repair").save(consumer, name("stone_pickaxe_repairing")); + repairingRecipe(RecipeCategory.TOOLS, Items.STONE_AXE, 550).group("altar_axe_repair").save(consumer, name("stone_axe_repairing")); + repairingRecipe(RecipeCategory.TOOLS, Items.STONE_SHOVEL, 550).group("altar_shovel_repair").save(consumer, name("stone_shovel_repairing")); + repairingRecipe(RecipeCategory.TOOLS, Items.STONE_HOE, 550).group("altar_hoe_repair").save(consumer, name("stone_hoe_repairing")); + + repairingRecipe(RecipeCategory.TOOLS, Items.IRON_PICKAXE, 2250).group("altar_pickaxe_repair").save(consumer, name("iron_pickaxe_repairing")); + repairingRecipe(RecipeCategory.TOOLS, Items.IRON_AXE, 2250).group("altar_axe_repair").save(consumer, name("iron_axe_repairing")); + repairingRecipe(RecipeCategory.TOOLS, Items.IRON_SHOVEL, 2250).group("altar_shovel_repair").save(consumer, name("iron_shovel_repairing")); + repairingRecipe(RecipeCategory.TOOLS, Items.IRON_HOE, 2250).group("altar_hoe_repair").save(consumer, name("iron_hoe_repairing")); + + repairingRecipe(RecipeCategory.TOOLS, Items.GOLDEN_PICKAXE, 1075).group("altar_pickaxe_repair").save(consumer, name("golden_pickaxe_repairing")); + repairingRecipe(RecipeCategory.TOOLS, Items.GOLDEN_AXE, 1075).group("altar_axe_repair").save(consumer, name("golden_axe_repairing")); + repairingRecipe(RecipeCategory.TOOLS, Items.GOLDEN_SHOVEL, 1075).group("altar_shovel_repair").save(consumer, name("golden_shovel_repairing")); + repairingRecipe(RecipeCategory.TOOLS, Items.GOLDEN_HOE, 1075).group("altar_hoe_repair").save(consumer, name("golden_hoe_repairing")); + + repairingRecipe(RecipeCategory.TOOLS, Items.DIAMOND_PICKAXE, 5500).group("altar_pickaxe_repair").save(consumer, name("diamond_pickaxe_repairing")); + repairingRecipe(RecipeCategory.TOOLS, Items.DIAMOND_AXE, 5500).group("altar_axe_repair").save(consumer, name("diamond_axe_repairing")); + repairingRecipe(RecipeCategory.TOOLS, Items.DIAMOND_SHOVEL, 5500).group("altar_shovel_repair").save(consumer, name("diamond_shovel_repairing")); + repairingRecipe(RecipeCategory.TOOLS, Items.DIAMOND_HOE, 5500).group("altar_hoe_repair").save(consumer, name("diamond_hoe_repairing")); + + repairingRecipe(RecipeCategory.TOOLS, Items.NETHERITE_PICKAXE, 15000).group("altar_pickaxe_repair").save(consumer, name("netherite_pickaxe_repairing")); + repairingRecipe(RecipeCategory.TOOLS, Items.NETHERITE_AXE, 15000).group("altar_axe_repair").save(consumer, name("netherite_axe_repairing")); + repairingRecipe(RecipeCategory.TOOLS, Items.NETHERITE_SHOVEL, 15000).group("altar_shovel_repair").save(consumer, name("netherite_shovel_repairing")); + repairingRecipe(RecipeCategory.TOOLS, Items.NETHERITE_HOE, 15000).group("altar_hoe_repair").save(consumer, name("netherite_hoe_repairing")); + + repairingRecipe(RecipeCategory.COMBAT, Items.WOODEN_SWORD, 225).group("altar_sword_repair").save(consumer, name("wooden_sword_repairing")); + repairingRecipe(RecipeCategory.COMBAT, Items.STONE_SWORD, 550).group("altar_sword_repair").save(consumer, name("stone_sword_repairing")); + repairingRecipe(RecipeCategory.COMBAT, Items.IRON_SWORD, 2250).group("altar_sword_repair").save(consumer, name("iron_sword_repairing")); + repairingRecipe(RecipeCategory.COMBAT, Items.GOLDEN_SWORD, 1075).group("altar_sword_repair").save(consumer, name("golden_sword_repairing")); + repairingRecipe(RecipeCategory.COMBAT, Items.DIAMOND_SWORD, 5500).group("altar_sword_repair").save(consumer, name("diamond_sword_repairing")); + repairingRecipe(RecipeCategory.COMBAT, Items.NETHERITE_SWORD, 15000).group("altar_sword_repair").save(consumer, name("netherite_sword_repairing")); + + repairingRecipe(RecipeCategory.COMBAT, Items.LEATHER_HELMET, 550).group("altar_helmet_repair").save(consumer, name("leather_helmet_repairing")); + repairingRecipe(RecipeCategory.COMBAT, Items.LEATHER_CHESTPLATE, 550).group("altar_chestplate_repair").save(consumer, name("leather_chestplate_repairing")); + repairingRecipe(RecipeCategory.COMBAT, Items.LEATHER_LEGGINGS, 550).group("altar_leggings_repair").save(consumer, name("leather_leggings_repairing")); + repairingRecipe(RecipeCategory.COMBAT, Items.LEATHER_BOOTS, 550).group("altar_boots_repair").save(consumer, name("leather_boots_repairing")); + repairingRecipe(RecipeCategory.COMBAT, AetherItems.LEATHER_GLOVES.get(), 550).group("altar_gloves_repair").save(consumer, name("leather_gloves_repairing")); + + repairingRecipe(RecipeCategory.COMBAT, Items.IRON_HELMET, 6000).group("altar_helmet_repair").save(consumer, name("iron_helmet_repairing")); + repairingRecipe(RecipeCategory.COMBAT, Items.IRON_CHESTPLATE, 6000).group("altar_chestplate_repair").save(consumer, name("iron_chestplate_repairing")); + repairingRecipe(RecipeCategory.COMBAT, Items.IRON_LEGGINGS, 6000).group("altar_leggings_repair").save(consumer, name("iron_leggings_repairing")); + repairingRecipe(RecipeCategory.COMBAT, Items.IRON_BOOTS, 6000).group("altar_boots_repair").save(consumer, name("iron_boots_repairing")); + repairingRecipe(RecipeCategory.COMBAT, AetherItems.IRON_GLOVES.get(), 6000).group("altar_gloves_repair").save(consumer, name("iron_gloves_repairing")); + + repairingRecipe(RecipeCategory.COMBAT, Items.GOLDEN_HELMET, 2250).group("altar_helmet_repair").save(consumer, name("golden_helmet_repairing")); + repairingRecipe(RecipeCategory.COMBAT, Items.GOLDEN_CHESTPLATE, 2250).group("altar_chestplate_repair").save(consumer, name("golden_chestplate_repairing")); + repairingRecipe(RecipeCategory.COMBAT, Items.GOLDEN_LEGGINGS, 2250).group("altar_leggings_repair").save(consumer, name("golden_leggings_repairing")); + repairingRecipe(RecipeCategory.COMBAT, Items.GOLDEN_BOOTS, 2250).group("altar_boots_repair").save(consumer, name("golden_boots_repairing")); + repairingRecipe(RecipeCategory.COMBAT, AetherItems.GOLDEN_GLOVES.get(), 2250).group("altar_gloves_repair").save(consumer, name("golden_gloves_repairing")); + + repairingRecipe(RecipeCategory.COMBAT, Items.CHAINMAIL_HELMET, 2250).group("altar_helmet_repair").save(consumer, name("chainmail_helmet_repairing")); + repairingRecipe(RecipeCategory.COMBAT, Items.CHAINMAIL_CHESTPLATE, 2250).group("altar_chestplate_repair").save(consumer, name("chainmail_chestplate_repairing")); + repairingRecipe(RecipeCategory.COMBAT, Items.CHAINMAIL_LEGGINGS, 2250).group("altar_leggings_repair").save(consumer, name("chainmail_leggings_repairing")); + repairingRecipe(RecipeCategory.COMBAT, Items.CHAINMAIL_BOOTS, 2250).group("altar_boots_repair").save(consumer, name("chainmail_boots_repairing")); + repairingRecipe(RecipeCategory.COMBAT, AetherItems.CHAINMAIL_GLOVES.get(), 2250).group("altar_gloves_repair").save(consumer, name("chainmail_gloves_repairing")); + + repairingRecipe(RecipeCategory.COMBAT, Items.DIAMOND_HELMET, 10000).group("altar_helmet_repair").save(consumer, name("diamond_helmet_repairing")); + repairingRecipe(RecipeCategory.COMBAT, Items.DIAMOND_CHESTPLATE, 10000).group("altar_chestplate_repair").save(consumer, name("diamond_chestplate_repairing")); + repairingRecipe(RecipeCategory.COMBAT, Items.DIAMOND_LEGGINGS, 10000).group("altar_leggings_repair").save(consumer, name("diamond_leggings_repairing")); + repairingRecipe(RecipeCategory.COMBAT, Items.DIAMOND_BOOTS, 10000).group("altar_boots_repair").save(consumer, name("diamond_boots_repairing")); + repairingRecipe(RecipeCategory.COMBAT, AetherItems.DIAMOND_GLOVES.get(), 10000).group("altar_gloves_repair").save(consumer, name("diamond_gloves_repairing")); + + repairingRecipe(RecipeCategory.COMBAT, Items.NETHERITE_HELMET, 30000).group("altar_helmet_repair").save(consumer, name("netherite_helmet_repairing")); + repairingRecipe(RecipeCategory.COMBAT, Items.NETHERITE_CHESTPLATE, 30000).group("altar_chestplate_repair").save(consumer, name("netherite_chestplate_repairing")); + repairingRecipe(RecipeCategory.COMBAT, Items.NETHERITE_LEGGINGS, 30000).group("altar_leggings_repair").save(consumer, name("netherite_leggings_repairing")); + repairingRecipe(RecipeCategory.COMBAT, Items.NETHERITE_BOOTS, 30000).group("altar_boots_repair").save(consumer, name("netherite_boots_repairing")); + repairingRecipe(RecipeCategory.COMBAT, AetherItems.NETHERITE_GLOVES.get(), 30000).group("altar_gloves_repair").save(consumer, name("netherite_gloves_repairing")); + + repairingRecipe(RecipeCategory.COMBAT, AetherItems.ZANITE_RING.get(), 2250).group("altar_ring_repair").save(consumer, name("zanite_ring_repairing")); + repairingRecipe(RecipeCategory.COMBAT, AetherItems.ZANITE_PENDANT.get(), 2250).group("altar_pendant_repair").save(consumer, name("zanite_pendant_repairing")); + + enchantingRecipe(RecipeCategory.MISC, AetherItems.ENCHANTED_DART.get(), AetherItems.GOLDEN_DART.get(), 0.15F, 250).save(consumer, name("enchanted_dart_enchanting")); + enchantingRecipe(RecipeCategory.MISC, AetherItems.ENCHANTED_DART_SHOOTER.get(), AetherItems.GOLDEN_DART_SHOOTER.get(), 1.0F, 500).save(consumer, name("enchanted_dart_shooter_enchanting")); + + enchantingRecipe(RecipeCategory.FOOD, AetherItems.HEALING_STONE.get(), AetherBlocks.HOLYSTONE.get(), 0.35F, 750).save(consumer, name("healing_stone_enchanting")); + enchantingRecipe(RecipeCategory.BUILDING_BLOCKS, AetherBlocks.ENCHANTED_GRAVITITE.get(), AetherBlocks.GRAVITITE_ORE.get(), 1.0F, 1000).save(consumer, name("enchanted_gravitite_enchanting")); + enchantingRecipe(RecipeCategory.BUILDING_BLOCKS, AetherBlocks.QUICKSOIL_GLASS.get(), AetherBlocks.QUICKSOIL.get(), 0.1F, 250).save(consumer, name("quicksoil_glass_enchanting")); + + enchantingRecipe(RecipeCategory.FOOD, AetherItems.ENCHANTED_BERRY.get(), AetherItems.BLUE_BERRY.get(), 0.35F, 300).save(consumer, name("enchanted_berry_enchanting")); + + enchantingRecipe(RecipeCategory.MISC, AetherItems.MUSIC_DISC_AETHER_TUNE.get(), AetherTags.Items.ACCEPTED_MUSIC_DISCS, 1.0F, 2500, "disc").save(consumer, name("aether_tune_enchanting")); + hiddenEnchantingRecipe(RecipeCategory.MISC, AetherItems.MUSIC_DISC_LEGACY.get(), Items.MUSIC_DISC_CAT, 1.0F, 2500).save(consumer, name("legacy_enchanting")); + hiddenEnchantingRecipe(RecipeCategory.MISC, AetherItems.MUSIC_DISC_CHINCHILLA.get(), Items.MUSIC_DISC_STRAD, 1.0F, 2500).save(consumer, name("chinchilla_enchanting")); + + enchantingRecipe(RecipeCategory.MISC, AetherItems.SKYROOT_REMEDY_BUCKET.get(), AetherItems.SKYROOT_POISON_BUCKET.get(), 0.35F, 1000).save(consumer, name("remedy_bucket_enchanting")); + + freezingRecipe(RecipeCategory.BUILDING_BLOCKS, AetherBlocks.BLUE_AERCLOUD.get(), AetherBlocks.COLD_AERCLOUD.get(), 0.1F, 100).save(consumer, name("blue_aercloud_freezing")); + freezingRecipe(RecipeCategory.BUILDING_BLOCKS, AetherBlocks.CRYSTAL_LEAVES.get(), AetherBlocks.SKYROOT_LEAVES.get(), 0.1F, 150).save(consumer, name("crystal_leaves_freezing")); + + hiddenFreezingRecipe(RecipeCategory.MISC, AetherItems.MUSIC_DISC_WELCOMING_SKIES.get(), AetherItems.MUSIC_DISC_ASCENDING_DAWN.get(), 1.0F, 800).save(consumer, name("welcoming_skies_freezing")); + + freezingRecipeWithUnlockTag(RecipeCategory.BUILDING_BLOCKS, Blocks.BLUE_ICE, Blocks.PACKED_ICE, AetherTags.Items.FREEZABLE_BUCKETS, 0.1F, 1000, "water_bucket").save(consumer, name("blue_ice_freezing")); + freezingRecipeWithUnlockTag(RecipeCategory.BUILDING_BLOCKS, Blocks.PACKED_ICE, Blocks.ICE, AetherTags.Items.FREEZABLE_BUCKETS, 0.1F, 750, "water_bucket").save(consumer, name("packed_ice_freezing")); + freezingRecipeWithTag(RecipeCategory.BUILDING_BLOCKS, Blocks.ICE, AetherTags.Items.FREEZABLE_BUCKETS, 0.1F, 500, "water_bucket").save(consumer, name("ice_from_bucket_freezing")); + freezingRecipe(RecipeCategory.BUILDING_BLOCKS, Blocks.OBSIDIAN, Items.LAVA_BUCKET, 0.1F, 500).save(consumer, name("obsidian_from_bucket_freezing")); + + freezingRecipeWithTag(RecipeCategory.MISC, AetherItems.ICE_RING.get(), AetherTags.Items.FREEZABLE_RINGS, 1.0F, 2500, "ring").save(consumer, name("ice_ring_from_freezing")); + + freezingRecipeWithTag(RecipeCategory.MISC, AetherItems.ICE_PENDANT.get(), AetherTags.Items.FREEZABLE_PENDANTS, 1.0F, 2500, "pendant").save(consumer, name("ice_pendant_from_freezing")); moaIncubationRecipe(AetherEntityTypes.MOA.get(), AetherMoaTypes.BLUE, AetherItems.BLUE_MOA_EGG.get()).save(consumer, name("blue_moa_incubation")); moaIncubationRecipe(AetherEntityTypes.MOA.get(), AetherMoaTypes.WHITE, AetherItems.WHITE_MOA_EGG.get()).save(consumer, name("white_moa_incubation")); @@ -784,8 +728,4 @@ protected void buildCraftingRecipes(@Nonnull Consumer consumer) banBlockPlacement(Blocks.TORCH, AetherTags.Biomes.ULTRACOLD).save(consumer, name("torch_block_ban")); banBlockPlacement(Blocks.LANTERN, AetherTags.Biomes.ULTRACOLD).save(consumer, name("lantern_block_ban")); } - - private ResourceLocation name(String name) { - return new ResourceLocation(Aether.MODID, name); - } } diff --git a/src/main/java/com/gildedgames/aether/data/generators/AetherSoundData.java b/src/main/java/com/gildedgames/aether/data/generators/AetherSoundData.java index 0cf41ae000..36c79f86af 100644 --- a/src/main/java/com/gildedgames/aether/data/generators/AetherSoundData.java +++ b/src/main/java/com/gildedgames/aether/data/generators/AetherSoundData.java @@ -2,19 +2,18 @@ import com.gildedgames.aether.Aether; import com.gildedgames.aether.client.AetherSoundEvents; -import net.minecraft.data.DataGenerator; +import net.minecraft.data.PackOutput; import net.minecraftforge.common.data.ExistingFileHelper; import net.minecraftforge.common.data.SoundDefinitionsProvider; -public class AetherSoundData extends SoundDefinitionsProvider -{ - public AetherSoundData(DataGenerator generator, ExistingFileHelper helper) { - super(generator, Aether.MODID, helper); +public class AetherSoundData extends SoundDefinitionsProvider { + public AetherSoundData(PackOutput output, ExistingFileHelper helper) { + super(output, Aether.MODID, helper); } @Override public void registerSounds() { - //Blocks + // Blocks this.add(AetherSoundEvents.BLOCK_AETHER_PORTAL_AMBIENT, definition().with(sound("minecraft:portal/portal").attenuationDistance(10)) .subtitle("subtitles.block.aether_portal.ambient") @@ -520,7 +519,7 @@ public void registerSounds() { ); this.add(AetherSoundEvents.ENTITY_MIMIC_DEATH, definition().with( - sound("minecraft:block/chest/close"), + sound("minecraft:block/chest/close1"), sound("minecraft:block/chest/close2"), sound("minecraft:block/chest/close3") ).subtitle("subtitles.entity.mimic.death") diff --git a/src/main/java/com/gildedgames/aether/data/generators/AetherWorldGenData.java b/src/main/java/com/gildedgames/aether/data/generators/AetherWorldGenData.java new file mode 100644 index 0000000000..0b9aa8d9b3 --- /dev/null +++ b/src/main/java/com/gildedgames/aether/data/generators/AetherWorldGenData.java @@ -0,0 +1,34 @@ +package com.gildedgames.aether.data.generators; + +import com.gildedgames.aether.Aether; +import com.gildedgames.aether.data.resources.registries.*; +import net.minecraft.core.HolderLookup; +import net.minecraft.core.RegistryAccess; +import net.minecraft.core.RegistrySetBuilder; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.core.registries.Registries; +import net.minecraft.data.PackOutput; +import net.minecraft.data.registries.VanillaRegistries; +import net.minecraftforge.common.data.DatapackBuiltinEntriesProvider; + +import java.util.Collections; +import java.util.concurrent.CompletableFuture; + +public class AetherWorldGenData extends DatapackBuiltinEntriesProvider { + public static final RegistrySetBuilder BUILDER = new RegistrySetBuilder() + .add(Registries.CONFIGURED_FEATURE, AetherConfiguredFeatures::bootstrap) + .add(Registries.PLACED_FEATURE, AetherPlacedFeatures::bootstrap) + .add(Registries.BIOME, AetherBiomes::bootstrap) + .add(Registries.NOISE_SETTINGS, AetherNoiseSettings::bootstrap) + .add(Registries.DIMENSION_TYPE, AetherDimensions::bootstrap) + .add(Registries.STRUCTURE, AetherStructures::bootstrap) + .add(Registries.STRUCTURE_SET, AetherStructureSets::bootstrap); + + public AetherWorldGenData(PackOutput output, CompletableFuture registries) { + super(output, registries, BUILDER, Collections.singleton(Aether.MODID)); + } + + public static HolderLookup.Provider createLookup() { + return BUILDER.buildPatch(RegistryAccess.fromRegistryOfRegistries(BuiltInRegistries.REGISTRY), VanillaRegistries.createLookup()); + } +} diff --git a/src/main/java/com/gildedgames/aether/data/generators/loot/AetherAdvancementLootData.java b/src/main/java/com/gildedgames/aether/data/generators/loot/AetherAdvancementLoot.java similarity index 83% rename from src/main/java/com/gildedgames/aether/data/generators/loot/AetherAdvancementLootData.java rename to src/main/java/com/gildedgames/aether/data/generators/loot/AetherAdvancementLoot.java index 172798e49a..25e2295b16 100644 --- a/src/main/java/com/gildedgames/aether/data/generators/loot/AetherAdvancementLootData.java +++ b/src/main/java/com/gildedgames/aether/data/generators/loot/AetherAdvancementLoot.java @@ -4,6 +4,7 @@ import com.gildedgames.aether.item.AetherItems; import com.gildedgames.aether.loot.AetherLoot; import com.gildedgames.aether.loot.conditions.ConfigEnabled; +import net.minecraft.data.loot.LootTableSubProvider; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.storage.loot.LootPool; import net.minecraft.world.level.storage.loot.LootTable; @@ -11,10 +12,10 @@ import net.minecraft.world.level.storage.loot.providers.number.ConstantValue; import java.util.function.BiConsumer; -import java.util.function.Consumer; -public class AetherAdvancementLootData implements Consumer> { - public void accept(BiConsumer builder) { +public class AetherAdvancementLoot implements LootTableSubProvider { + @Override + public void generate(BiConsumer builder) { builder.accept(AetherLoot.ENTER_AETHER, LootTable.lootTable() .withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1)).add(LootItem.lootTableItem(AetherItems.GOLDEN_PARACHUTE.get())).when(ConfigEnabled.isEnabled(AetherConfig.COMMON.enable_startup_loot))) .withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1)).add(LootItem.lootTableItem(AetherItems.BOOK_OF_LORE.get())).when(ConfigEnabled.isEnabled(AetherConfig.COMMON.enable_startup_loot))) diff --git a/src/main/java/com/gildedgames/aether/data/generators/loot/AetherBlockLoot.java b/src/main/java/com/gildedgames/aether/data/generators/loot/AetherBlockLoot.java new file mode 100644 index 0000000000..a1121cfed6 --- /dev/null +++ b/src/main/java/com/gildedgames/aether/data/generators/loot/AetherBlockLoot.java @@ -0,0 +1,202 @@ +package com.gildedgames.aether.data.generators.loot; + +import com.gildedgames.aether.block.AetherBlocks; +import com.gildedgames.aether.data.providers.AetherBlockLootSubProvider; +import com.gildedgames.aether.item.AetherItems; +import com.gildedgames.aether.mixin.mixins.common.accessor.BlockLootAccessor; +import net.minecraft.world.flag.FeatureFlags; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.Items; +import net.minecraft.world.level.ItemLike; +import net.minecraft.world.level.block.BedBlock; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.properties.BedPart; +import net.minecraft.world.level.storage.loot.providers.number.ConstantValue; + +import java.util.Set; +import java.util.function.Supplier; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +public class AetherBlockLoot extends AetherBlockLootSubProvider { + private static final Set EXPLOSION_RESISTANT = Stream.of(AetherBlocks.TREASURE_CHEST.get()).map(ItemLike::asItem).collect(Collectors.toSet()); + + public AetherBlockLoot() { + super(EXPLOSION_RESISTANT, FeatureFlags.REGISTRY.allFlags()); + } + + @Override + public void generate() { + this.dropNone(AetherBlocks.AETHER_PORTAL.get()); + + this.dropDoubleWithSilk(AetherBlocks.AETHER_GRASS_BLOCK.get(), AetherBlocks.AETHER_DIRT.get()); + this.dropDoubleWithSilk(AetherBlocks.ENCHANTED_AETHER_GRASS_BLOCK.get(), AetherBlocks.AETHER_DIRT.get()); + this.dropSelfDouble(AetherBlocks.AETHER_DIRT.get()); + this.dropSelfDouble(AetherBlocks.QUICKSOIL.get()); + this.dropSelfDouble(AetherBlocks.HOLYSTONE.get()); + this.dropSelfDouble(AetherBlocks.MOSSY_HOLYSTONE.get()); + this.dropOther(AetherBlocks.AETHER_FARMLAND.get(), AetherBlocks.AETHER_DIRT.get()); + this.dropOther(AetherBlocks.AETHER_DIRT_PATH.get(), AetherBlocks.AETHER_DIRT.get()); + + this.dropSelfDouble(AetherBlocks.COLD_AERCLOUD.get()); + this.dropSelfDouble(AetherBlocks.BLUE_AERCLOUD.get()); + this.dropSelfDouble(AetherBlocks.GOLDEN_AERCLOUD.get()); + this.dropSelfDouble(AetherBlocks.PINK_AERCLOUD.get()); + + this.dropSelf(AetherBlocks.ICESTONE.get()); + this.dropDoubleWithFortune(AetherBlocks.AMBROSIUM_ORE.get(), AetherItems.AMBROSIUM_SHARD.get()); + this.dropWithFortune(AetherBlocks.ZANITE_ORE.get(), AetherItems.ZANITE_GEMSTONE.get()); + this.dropSelf(AetherBlocks.GRAVITITE_ORE.get()); + this.add(AetherBlocks.SKYROOT_LEAVES.get(), + (leaves) -> droppingWithChancesAndSkyrootSticks(leaves, AetherBlocks.SKYROOT_SAPLING.get(), BlockLootAccessor.getNormalLeavesSaplingChances())); + this.add(AetherBlocks.GOLDEN_OAK_LEAVES.get(), + (leaves) -> droppingGoldenOakLeaves(leaves, AetherBlocks.GOLDEN_OAK_SAPLING.get(), BlockLootAccessor.getNormalLeavesSaplingChances())); + this.add(AetherBlocks.CRYSTAL_LEAVES.get(), + this::droppingWithSkyrootSticks); + this.add(AetherBlocks.CRYSTAL_FRUIT_LEAVES.get(), + (leaves) -> droppingWithFruitAndSkyrootSticks(leaves, AetherItems.WHITE_APPLE.get())); + this.add(AetherBlocks.HOLIDAY_LEAVES.get(), + this::droppingWithSkyrootSticks); + this.add(AetherBlocks.DECORATED_HOLIDAY_LEAVES.get(), + this::droppingWithSkyrootSticks); + + this.dropSelfDouble(AetherBlocks.SKYROOT_LOG.get()); + this.add(AetherBlocks.GOLDEN_OAK_LOG.get(), + (log) -> droppingDoubleGoldenOak(log, AetherBlocks.SKYROOT_LOG.get(), AetherItems.GOLDEN_AMBER.get())); + this.dropSelfDouble(AetherBlocks.STRIPPED_SKYROOT_LOG.get()); + this.dropSelfDouble(AetherBlocks.SKYROOT_WOOD.get()); + this.add(AetherBlocks.GOLDEN_OAK_WOOD.get(), + (wood) -> droppingDoubleGoldenOak(wood, AetherBlocks.SKYROOT_WOOD.get(), AetherItems.GOLDEN_AMBER.get())); + this.dropSelfDouble(AetherBlocks.STRIPPED_SKYROOT_WOOD.get()); + + this.dropSelf(AetherBlocks.SKYROOT_PLANKS.get()); + this.dropSelf(AetherBlocks.HOLYSTONE_BRICKS.get()); + this.dropWhenSilkTouch(AetherBlocks.QUICKSOIL_GLASS.get()); + this.dropWhenSilkTouch(AetherBlocks.QUICKSOIL_GLASS_PANE.get()); + this.dropSelf(AetherBlocks.AEROGEL.get()); + + this.dropSelf(AetherBlocks.AMBROSIUM_BLOCK.get()); + this.dropSelf(AetherBlocks.ZANITE_BLOCK.get()); + this.dropSelf(AetherBlocks.ENCHANTED_GRAVITITE.get()); + + this.add(AetherBlocks.ALTAR.get(), this::droppingNameableBlockEntityTable); + this.add(AetherBlocks.FREEZER.get(), this::droppingNameableBlockEntityTable); + this.add(AetherBlocks.INCUBATOR.get(), this::droppingNameableBlockEntityTable); + + this.dropOther(AetherBlocks.AMBROSIUM_WALL_TORCH.get(), AetherBlocks.AMBROSIUM_TORCH.get()); + this.dropSelf(AetherBlocks.AMBROSIUM_TORCH.get()); + + this.dropOther(AetherBlocks.SKYROOT_WALL_SIGN.get(), AetherBlocks.SKYROOT_SIGN.get()); + this.dropSelf(AetherBlocks.SKYROOT_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()); + this.dropPottedContents(AetherBlocks.POTTED_BERRY_BUSH_STEM.get()); + + this.dropSelf(AetherBlocks.PURPLE_FLOWER.get()); + this.dropSelf(AetherBlocks.WHITE_FLOWER.get()); + this.dropPottedContents(AetherBlocks.POTTED_PURPLE_FLOWER.get()); + this.dropPottedContents(AetherBlocks.POTTED_WHITE_FLOWER.get()); + + this.dropSelf(AetherBlocks.SKYROOT_SAPLING.get()); + this.dropSelf(AetherBlocks.GOLDEN_OAK_SAPLING.get()); + this.dropPottedContents(AetherBlocks.POTTED_SKYROOT_SAPLING.get()); + this.dropPottedContents(AetherBlocks.POTTED_GOLDEN_OAK_SAPLING.get()); + + this.dropSelf(AetherBlocks.CARVED_STONE.get()); + this.dropSelf(AetherBlocks.SENTRY_STONE.get()); + this.dropSelf(AetherBlocks.ANGELIC_STONE.get()); + this.dropSelf(AetherBlocks.LIGHT_ANGELIC_STONE.get()); + this.dropSelf(AetherBlocks.HELLFIRE_STONE.get()); + this.dropSelf(AetherBlocks.LIGHT_HELLFIRE_STONE.get()); + + this.dropNone(AetherBlocks.LOCKED_CARVED_STONE.get()); + this.dropNone(AetherBlocks.LOCKED_SENTRY_STONE.get()); + this.dropNone(AetherBlocks.LOCKED_ANGELIC_STONE.get()); + this.dropNone(AetherBlocks.LOCKED_LIGHT_ANGELIC_STONE.get()); + this.dropNone(AetherBlocks.LOCKED_HELLFIRE_STONE.get()); + this.dropNone(AetherBlocks.LOCKED_LIGHT_HELLFIRE_STONE.get()); + + this.dropNone(AetherBlocks.TRAPPED_CARVED_STONE.get()); + this.dropNone(AetherBlocks.TRAPPED_SENTRY_STONE.get()); + this.dropNone(AetherBlocks.TRAPPED_ANGELIC_STONE.get()); + this.dropNone(AetherBlocks.TRAPPED_LIGHT_ANGELIC_STONE.get()); + this.dropNone(AetherBlocks.TRAPPED_HELLFIRE_STONE.get()); + this.dropNone(AetherBlocks.TRAPPED_LIGHT_HELLFIRE_STONE.get()); + + this.dropNone(AetherBlocks.BOSS_DOORWAY_CARVED_STONE.get()); + this.dropNone(AetherBlocks.BOSS_DOORWAY_SENTRY_STONE.get()); + this.dropNone(AetherBlocks.BOSS_DOORWAY_ANGELIC_STONE.get()); + this.dropNone(AetherBlocks.BOSS_DOORWAY_LIGHT_ANGELIC_STONE.get()); + this.dropNone(AetherBlocks.BOSS_DOORWAY_HELLFIRE_STONE.get()); + this.dropNone(AetherBlocks.BOSS_DOORWAY_LIGHT_HELLFIRE_STONE.get()); + + this.dropNone(AetherBlocks.TREASURE_DOORWAY_CARVED_STONE.get()); + this.dropNone(AetherBlocks.TREASURE_DOORWAY_SENTRY_STONE.get()); + this.dropNone(AetherBlocks.TREASURE_DOORWAY_ANGELIC_STONE.get()); + this.dropNone(AetherBlocks.TREASURE_DOORWAY_LIGHT_ANGELIC_STONE.get()); + this.dropNone(AetherBlocks.TREASURE_DOORWAY_HELLFIRE_STONE.get()); + this.dropNone(AetherBlocks.TREASURE_DOORWAY_LIGHT_HELLFIRE_STONE.get()); + + this.dropNone(AetherBlocks.CHEST_MIMIC.get()); + this.add(AetherBlocks.TREASURE_CHEST.get(), this::droppingTreasureChest); + + this.dropSelf(AetherBlocks.PILLAR.get()); + this.dropSelf(AetherBlocks.PILLAR_TOP.get()); + + this.add(AetherBlocks.PRESENT.get(), this::droppingPresentLoot); + + this.dropSelf(AetherBlocks.SKYROOT_FENCE.get()); + this.dropSelf(AetherBlocks.SKYROOT_FENCE_GATE.get()); + this.add(AetherBlocks.SKYROOT_DOOR.get(), createDoorTable(AetherBlocks.SKYROOT_DOOR.get())); + this.dropSelf(AetherBlocks.SKYROOT_TRAPDOOR.get()); + this.dropSelf(AetherBlocks.SKYROOT_BUTTON.get()); + this.dropSelf(AetherBlocks.SKYROOT_PRESSURE_PLATE.get()); + + this.dropSelf(AetherBlocks.HOLYSTONE_BUTTON.get()); + this.dropSelf(AetherBlocks.HOLYSTONE_PRESSURE_PLATE.get()); + + this.dropSelf(AetherBlocks.CARVED_WALL.get()); + this.dropSelf(AetherBlocks.ANGELIC_WALL.get()); + this.dropSelf(AetherBlocks.HELLFIRE_WALL.get()); + this.dropSelf(AetherBlocks.HOLYSTONE_WALL.get()); + this.dropSelf(AetherBlocks.MOSSY_HOLYSTONE_WALL.get()); + this.dropSelf(AetherBlocks.ICESTONE_WALL.get()); + this.dropSelf(AetherBlocks.HOLYSTONE_BRICK_WALL.get()); + this.dropSelf(AetherBlocks.AEROGEL_WALL.get()); + + this.dropSelf(AetherBlocks.SKYROOT_STAIRS.get()); + this.dropSelf(AetherBlocks.CARVED_STAIRS.get()); + this.dropSelf(AetherBlocks.ANGELIC_STAIRS.get()); + this.dropSelf(AetherBlocks.HELLFIRE_STAIRS.get()); + this.dropSelf(AetherBlocks.HOLYSTONE_STAIRS.get()); + this.dropSelf(AetherBlocks.MOSSY_HOLYSTONE_STAIRS.get()); + this.dropSelf(AetherBlocks.ICESTONE_STAIRS.get()); + this.dropSelf(AetherBlocks.HOLYSTONE_BRICK_STAIRS.get()); + this.dropSelf(AetherBlocks.AEROGEL_STAIRS.get()); + + this.dropSelf(AetherBlocks.SKYROOT_SLAB.get()); + this.dropSelf(AetherBlocks.CARVED_SLAB.get()); + this.dropSelf(AetherBlocks.ANGELIC_SLAB.get()); + this.dropSelf(AetherBlocks.HELLFIRE_SLAB.get()); + this.dropSelf(AetherBlocks.HOLYSTONE_SLAB.get()); + this.dropSelf(AetherBlocks.MOSSY_HOLYSTONE_SLAB.get()); + this.dropSelf(AetherBlocks.ICESTONE_SLAB.get()); + this.dropSelf(AetherBlocks.HOLYSTONE_BRICK_SLAB.get()); + this.dropSelf(AetherBlocks.AEROGEL_SLAB.get()); + + this.add(AetherBlocks.SUN_ALTAR.get(), this::droppingNameableBlockEntityTable); + this.add(AetherBlocks.SKYROOT_BOOKSHELF.get(), + (bookshelf) -> createSingleItemTableWithSilkTouch(bookshelf, Items.BOOK, ConstantValue.exactly(3))); + this.add(AetherBlocks.SKYROOT_BED.get(), + (bed) -> createSinglePropConditionTable(bed, BedBlock.PART, BedPart.HEAD)); + + this.dropNone(AetherBlocks.UNSTABLE_OBSIDIAN.get()); + } + + @Override + public Iterable getKnownBlocks() { + return AetherBlocks.BLOCKS.getEntries().stream().map(Supplier::get).collect(Collectors.toList()); + } +} diff --git a/src/main/java/com/gildedgames/aether/data/generators/loot/AetherBlockLootData.java b/src/main/java/com/gildedgames/aether/data/generators/loot/AetherBlockLootData.java deleted file mode 100644 index c6dead6065..0000000000 --- a/src/main/java/com/gildedgames/aether/data/generators/loot/AetherBlockLootData.java +++ /dev/null @@ -1,195 +0,0 @@ -package com.gildedgames.aether.data.generators.loot; - -import com.gildedgames.aether.block.AetherBlocks; -import com.gildedgames.aether.data.providers.AetherBlockLootProvider; -import com.gildedgames.aether.item.AetherItems; -import com.gildedgames.aether.mixin.mixins.common.accessor.BlockLootAccessor; -import net.minecraft.world.item.Items; -import net.minecraft.world.level.block.BedBlock; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.state.properties.BedPart; -import net.minecraft.world.level.storage.loot.providers.number.ConstantValue; - -import javax.annotation.Nonnull; -import java.util.function.Supplier; -import java.util.stream.Collectors; - -public class AetherBlockLootData extends AetherBlockLootProvider { - @Override - protected void addTables() { - dropNone(AetherBlocks.AETHER_PORTAL); - - dropDoubleWithSilk(AetherBlocks.AETHER_GRASS_BLOCK, AetherBlocks.AETHER_DIRT); - dropDoubleWithSilk(AetherBlocks.ENCHANTED_AETHER_GRASS_BLOCK, AetherBlocks.AETHER_DIRT); - dropSelfDouble(AetherBlocks.AETHER_DIRT); - dropSelfDouble(AetherBlocks.QUICKSOIL); - dropSelfDouble(AetherBlocks.HOLYSTONE); - dropSelfDouble(AetherBlocks.MOSSY_HOLYSTONE); - drop(AetherBlocks.AETHER_FARMLAND, AetherBlocks.AETHER_DIRT); - drop(AetherBlocks.AETHER_DIRT_PATH, AetherBlocks.AETHER_DIRT); - - dropSelfDouble(AetherBlocks.COLD_AERCLOUD); - dropSelfDouble(AetherBlocks.BLUE_AERCLOUD); - dropSelfDouble(AetherBlocks.GOLDEN_AERCLOUD); - dropSelfDouble(AetherBlocks.PINK_AERCLOUD); - - dropSelf(AetherBlocks.ICESTONE); - dropDoubleWithFortune(AetherBlocks.AMBROSIUM_ORE, AetherItems.AMBROSIUM_SHARD); - dropWithFortune(AetherBlocks.ZANITE_ORE, AetherItems.ZANITE_GEMSTONE); - dropSelf(AetherBlocks.GRAVITITE_ORE); - this.add(AetherBlocks.SKYROOT_LEAVES.get(), - (leaves) -> droppingWithChancesAndSkyrootSticks(leaves, AetherBlocks.SKYROOT_SAPLING.get(), BlockLootAccessor.getNormalLeavesSaplingChances())); - this.add(AetherBlocks.GOLDEN_OAK_LEAVES.get(), - (leaves) -> droppingGoldenOakLeaves(leaves, AetherBlocks.GOLDEN_OAK_SAPLING.get(), BlockLootAccessor.getNormalLeavesSaplingChances())); - this.add(AetherBlocks.CRYSTAL_LEAVES.get(), - AetherBlockLootProvider::droppingWithSkyrootSticks); - this.add(AetherBlocks.CRYSTAL_FRUIT_LEAVES.get(), - (leaves) -> droppingWithFruitAndSkyrootSticks(leaves, AetherItems.WHITE_APPLE.get())); - this.add(AetherBlocks.HOLIDAY_LEAVES.get(), - AetherBlockLootProvider::droppingWithSkyrootSticks); - this.add(AetherBlocks.DECORATED_HOLIDAY_LEAVES.get(), - AetherBlockLootProvider::droppingWithSkyrootSticks); - - dropSelfDouble(AetherBlocks.SKYROOT_LOG); - this.add(AetherBlocks.GOLDEN_OAK_LOG.get(), - (log) -> droppingDoubleGoldenOak(log, AetherBlocks.SKYROOT_LOG.get(), AetherItems.GOLDEN_AMBER.get())); - dropSelfDouble(AetherBlocks.STRIPPED_SKYROOT_LOG); - dropSelfDouble(AetherBlocks.SKYROOT_WOOD); - this.add(AetherBlocks.GOLDEN_OAK_WOOD.get(), - (wood) -> droppingDoubleGoldenOak(wood, AetherBlocks.SKYROOT_WOOD.get(), AetherItems.GOLDEN_AMBER.get())); - dropSelfDouble(AetherBlocks.STRIPPED_SKYROOT_WOOD); - - dropSelf(AetherBlocks.SKYROOT_PLANKS); - dropSelf(AetherBlocks.HOLYSTONE_BRICKS); - dropSilk(AetherBlocks.QUICKSOIL_GLASS); - dropSilk(AetherBlocks.QUICKSOIL_GLASS_PANE); - dropSelf(AetherBlocks.AEROGEL); - - dropSelf(AetherBlocks.AMBROSIUM_BLOCK); - dropSelf(AetherBlocks.ZANITE_BLOCK); - dropSelf(AetherBlocks.ENCHANTED_GRAVITITE); - - this.add(AetherBlocks.ALTAR.get(), AetherBlockLootProvider::droppingNameableBlockEntityTable); - this.add(AetherBlocks.FREEZER.get(), AetherBlockLootProvider::droppingNameableBlockEntityTable); - this.add(AetherBlocks.INCUBATOR.get(), AetherBlockLootProvider::droppingNameableBlockEntityTable); - - drop(AetherBlocks.AMBROSIUM_WALL_TORCH, AetherBlocks.AMBROSIUM_TORCH); - dropSelf(AetherBlocks.AMBROSIUM_TORCH); - - drop(AetherBlocks.SKYROOT_WALL_SIGN, AetherBlocks.SKYROOT_SIGN); - dropSelf(AetherBlocks.SKYROOT_SIGN); - - this.add(AetherBlocks.BERRY_BUSH.get(), (bush) -> droppingBerryBush(bush, AetherBlocks.BERRY_BUSH_STEM.get(), AetherItems.BLUE_BERRY.get())); - dropSelfDouble(AetherBlocks.BERRY_BUSH_STEM); - dropPot(AetherBlocks.POTTED_BERRY_BUSH); - dropPot(AetherBlocks.POTTED_BERRY_BUSH_STEM); - - dropSelf(AetherBlocks.PURPLE_FLOWER); - dropSelf(AetherBlocks.WHITE_FLOWER); - dropPot(AetherBlocks.POTTED_PURPLE_FLOWER); - dropPot(AetherBlocks.POTTED_WHITE_FLOWER); - - dropSelf(AetherBlocks.SKYROOT_SAPLING); - dropSelf(AetherBlocks.GOLDEN_OAK_SAPLING); - dropPot(AetherBlocks.POTTED_SKYROOT_SAPLING); - dropPot(AetherBlocks.POTTED_GOLDEN_OAK_SAPLING); - - dropSelf(AetherBlocks.CARVED_STONE); - dropSelf(AetherBlocks.SENTRY_STONE); - dropSelf(AetherBlocks.ANGELIC_STONE); - dropSelf(AetherBlocks.LIGHT_ANGELIC_STONE); - dropSelf(AetherBlocks.HELLFIRE_STONE); - dropSelf(AetherBlocks.LIGHT_HELLFIRE_STONE); - - dropNone(AetherBlocks.LOCKED_CARVED_STONE); - dropNone(AetherBlocks.LOCKED_SENTRY_STONE); - dropNone(AetherBlocks.LOCKED_ANGELIC_STONE); - dropNone(AetherBlocks.LOCKED_LIGHT_ANGELIC_STONE); - dropNone(AetherBlocks.LOCKED_HELLFIRE_STONE); - dropNone(AetherBlocks.LOCKED_LIGHT_HELLFIRE_STONE); - - dropNone(AetherBlocks.TRAPPED_CARVED_STONE); - dropNone(AetherBlocks.TRAPPED_SENTRY_STONE); - dropNone(AetherBlocks.TRAPPED_ANGELIC_STONE); - dropNone(AetherBlocks.TRAPPED_LIGHT_ANGELIC_STONE); - dropNone(AetherBlocks.TRAPPED_HELLFIRE_STONE); - dropNone(AetherBlocks.TRAPPED_LIGHT_HELLFIRE_STONE); - - dropNone(AetherBlocks.BOSS_DOORWAY_CARVED_STONE); - dropNone(AetherBlocks.BOSS_DOORWAY_SENTRY_STONE); - dropNone(AetherBlocks.BOSS_DOORWAY_ANGELIC_STONE); - dropNone(AetherBlocks.BOSS_DOORWAY_LIGHT_ANGELIC_STONE); - dropNone(AetherBlocks.BOSS_DOORWAY_HELLFIRE_STONE); - dropNone(AetherBlocks.BOSS_DOORWAY_LIGHT_HELLFIRE_STONE); - - dropNone(AetherBlocks.TREASURE_DOORWAY_CARVED_STONE); - dropNone(AetherBlocks.TREASURE_DOORWAY_SENTRY_STONE); - dropNone(AetherBlocks.TREASURE_DOORWAY_ANGELIC_STONE); - dropNone(AetherBlocks.TREASURE_DOORWAY_LIGHT_ANGELIC_STONE); - dropNone(AetherBlocks.TREASURE_DOORWAY_HELLFIRE_STONE); - dropNone(AetherBlocks.TREASURE_DOORWAY_LIGHT_HELLFIRE_STONE); - - dropNone(AetherBlocks.CHEST_MIMIC); - this.add(AetherBlocks.TREASURE_CHEST.get(), AetherBlockLootProvider::droppingTreasureChest); - - dropSelf(AetherBlocks.PILLAR); - dropSelf(AetherBlocks.PILLAR_TOP); - - this.add(AetherBlocks.PRESENT.get(), AetherBlockLootProvider::droppingPresentLoot); - - dropSelf(AetherBlocks.SKYROOT_FENCE); - dropSelf(AetherBlocks.SKYROOT_FENCE_GATE); - this.add(AetherBlocks.SKYROOT_DOOR.get(), createDoorTable(AetherBlocks.SKYROOT_DOOR.get())); - dropSelf(AetherBlocks.SKYROOT_TRAPDOOR); - dropSelf(AetherBlocks.SKYROOT_BUTTON); - dropSelf(AetherBlocks.SKYROOT_PRESSURE_PLATE); - - dropSelf(AetherBlocks.HOLYSTONE_BUTTON); - dropSelf(AetherBlocks.HOLYSTONE_PRESSURE_PLATE); - - dropSelf(AetherBlocks.CARVED_WALL); - dropSelf(AetherBlocks.ANGELIC_WALL); - dropSelf(AetherBlocks.HELLFIRE_WALL); - dropSelf(AetherBlocks.HOLYSTONE_WALL); - dropSelf(AetherBlocks.MOSSY_HOLYSTONE_WALL); - dropSelf(AetherBlocks.ICESTONE_WALL); - dropSelf(AetherBlocks.HOLYSTONE_BRICK_WALL); - dropSelf(AetherBlocks.AEROGEL_WALL); - - dropSelf(AetherBlocks.SKYROOT_STAIRS); - dropSelf(AetherBlocks.CARVED_STAIRS); - dropSelf(AetherBlocks.ANGELIC_STAIRS); - dropSelf(AetherBlocks.HELLFIRE_STAIRS); - dropSelf(AetherBlocks.HOLYSTONE_STAIRS); - dropSelf(AetherBlocks.MOSSY_HOLYSTONE_STAIRS); - dropSelf(AetherBlocks.ICESTONE_STAIRS); - dropSelf(AetherBlocks.HOLYSTONE_BRICK_STAIRS); - dropSelf(AetherBlocks.AEROGEL_STAIRS); - - dropSelf(AetherBlocks.SKYROOT_SLAB); - dropSelf(AetherBlocks.CARVED_SLAB); - dropSelf(AetherBlocks.ANGELIC_SLAB); - dropSelf(AetherBlocks.HELLFIRE_SLAB); - dropSelf(AetherBlocks.HOLYSTONE_SLAB); - dropSelf(AetherBlocks.MOSSY_HOLYSTONE_SLAB); - dropSelf(AetherBlocks.ICESTONE_SLAB); - dropSelf(AetherBlocks.HOLYSTONE_BRICK_SLAB); - dropSelf(AetherBlocks.AEROGEL_SLAB); - - this.add(AetherBlocks.SUN_ALTAR.get(), AetherBlockLootProvider::droppingNameableBlockEntityTable); - - this.add(AetherBlocks.SKYROOT_BOOKSHELF.get(), - (bookshelf) -> createSingleItemTableWithSilkTouch(bookshelf, Items.BOOK, ConstantValue.exactly(3))); - - this.add(AetherBlocks.SKYROOT_BED.get(), - (bed) -> createSinglePropConditionTable(bed, BedBlock.PART, BedPart.HEAD)); - - this.dropNone(AetherBlocks.UNSTABLE_OBSIDIAN); - } - - @Nonnull - @Override - protected Iterable getKnownBlocks() { - return AetherBlocks.BLOCKS.getEntries().stream().map(Supplier::get).collect(Collectors.toList()); - } -} diff --git a/src/main/java/com/gildedgames/aether/data/generators/loot/AetherDungeonLootData.java b/src/main/java/com/gildedgames/aether/data/generators/loot/AetherDungeonLoot.java similarity index 98% rename from src/main/java/com/gildedgames/aether/data/generators/loot/AetherDungeonLootData.java rename to src/main/java/com/gildedgames/aether/data/generators/loot/AetherDungeonLoot.java index 41e71e321f..60a2c67bd0 100644 --- a/src/main/java/com/gildedgames/aether/data/generators/loot/AetherDungeonLootData.java +++ b/src/main/java/com/gildedgames/aether/data/generators/loot/AetherDungeonLoot.java @@ -5,7 +5,7 @@ import com.gildedgames.aether.item.AetherItems; import com.gildedgames.aether.loot.AetherLoot; import com.gildedgames.aether.loot.conditions.ConfigEnabled; -import net.minecraft.data.loot.ChestLoot; +import net.minecraft.data.loot.LootTableSubProvider; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.Items; import net.minecraft.world.level.storage.loot.LootPool; @@ -15,12 +15,11 @@ import net.minecraft.world.level.storage.loot.functions.SetItemCountFunction; import net.minecraft.world.level.storage.loot.providers.number.UniformGenerator; -import javax.annotation.Nonnull; import java.util.function.BiConsumer; -public class AetherDungeonLootData extends ChestLoot { +public class AetherDungeonLoot implements LootTableSubProvider { @Override - public void accept(@Nonnull BiConsumer builder) { + public void generate(BiConsumer builder) { builder.accept(AetherLoot.BRONZE_DUNGEON, LootTable.lootTable() .withPool(LootPool.lootPool().setRolls(UniformGenerator.between(3.0F, 5.0F)) .add(LootItem.lootTableItem(AetherItems.ZANITE_PICKAXE.get()).setWeight(1)) diff --git a/src/main/java/com/gildedgames/aether/data/generators/AetherEntityLootData.java b/src/main/java/com/gildedgames/aether/data/generators/loot/AetherEntityLoot.java similarity index 82% rename from src/main/java/com/gildedgames/aether/data/generators/AetherEntityLootData.java rename to src/main/java/com/gildedgames/aether/data/generators/loot/AetherEntityLoot.java index 9bb8bf4275..7ed070e6f8 100644 --- a/src/main/java/com/gildedgames/aether/data/generators/AetherEntityLootData.java +++ b/src/main/java/com/gildedgames/aether/data/generators/loot/AetherEntityLoot.java @@ -1,11 +1,12 @@ -package com.gildedgames.aether.data.generators; +package com.gildedgames.aether.data.generators.loot; import com.gildedgames.aether.block.AetherBlocks; import com.gildedgames.aether.entity.AetherEntityTypes; import com.gildedgames.aether.item.AetherItems; import com.gildedgames.aether.loot.AetherLoot; -import net.minecraft.data.loot.EntityLoot; +import net.minecraft.data.loot.EntityLootSubProvider; import net.minecraft.world.entity.EntityType; +import net.minecraft.world.flag.FeatureFlags; import net.minecraft.world.item.Items; import net.minecraft.world.level.ItemLike; import net.minecraft.world.level.block.Blocks; @@ -21,13 +22,15 @@ import net.minecraft.world.level.storage.loot.providers.number.ConstantValue; import net.minecraft.world.level.storage.loot.providers.number.UniformGenerator; -import javax.annotation.Nonnull; -import java.util.function.Supplier; -import java.util.stream.Collectors; +import java.util.stream.Stream; + +public class AetherEntityLoot extends EntityLootSubProvider { + public AetherEntityLoot() { + super(FeatureFlags.REGISTRY.allFlags()); + } -public class AetherEntityLootData extends EntityLoot { @Override - protected void addTables() { + public void generate() { this.add(AetherEntityTypes.PHYG.get(), LootTable.lootTable() .withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1)) .add(LootItem.lootTableItem(Items.PORKCHOP) @@ -69,22 +72,22 @@ protected void addTables() { ) ) ); - this.add(AetherLoot.ENTITIES_SHEEPUFF_BLACK, sheepLootTableBuilderWithDrop(Blocks.BLACK_WOOL)); - this.add(AetherLoot.ENTITIES_SHEEPUFF_BLUE, sheepLootTableBuilderWithDrop(Blocks.BLUE_WOOL)); - this.add(AetherLoot.ENTITIES_SHEEPUFF_BROWN, sheepLootTableBuilderWithDrop(Blocks.BROWN_WOOL)); - this.add(AetherLoot.ENTITIES_SHEEPUFF_CYAN, sheepLootTableBuilderWithDrop(Blocks.CYAN_WOOL)); - this.add(AetherLoot.ENTITIES_SHEEPUFF_GRAY, sheepLootTableBuilderWithDrop(Blocks.GRAY_WOOL)); - this.add(AetherLoot.ENTITIES_SHEEPUFF_GREEN, sheepLootTableBuilderWithDrop(Blocks.GREEN_WOOL)); - this.add(AetherLoot.ENTITIES_SHEEPUFF_LIGHT_BLUE, sheepLootTableBuilderWithDrop(Blocks.LIGHT_BLUE_WOOL)); - this.add(AetherLoot.ENTITIES_SHEEPUFF_LIGHT_GRAY, sheepLootTableBuilderWithDrop(Blocks.LIGHT_GRAY_WOOL)); - this.add(AetherLoot.ENTITIES_SHEEPUFF_LIME, sheepLootTableBuilderWithDrop(Blocks.LIME_WOOL)); - this.add(AetherLoot.ENTITIES_SHEEPUFF_MAGENTA, sheepLootTableBuilderWithDrop(Blocks.MAGENTA_WOOL)); - this.add(AetherLoot.ENTITIES_SHEEPUFF_ORANGE, sheepLootTableBuilderWithDrop(Blocks.ORANGE_WOOL)); - this.add(AetherLoot.ENTITIES_SHEEPUFF_PINK, sheepLootTableBuilderWithDrop(Blocks.PINK_WOOL)); - this.add(AetherLoot.ENTITIES_SHEEPUFF_PURPLE, sheepLootTableBuilderWithDrop(Blocks.PURPLE_WOOL)); - this.add(AetherLoot.ENTITIES_SHEEPUFF_RED, sheepLootTableBuilderWithDrop(Blocks.RED_WOOL)); - this.add(AetherLoot.ENTITIES_SHEEPUFF_WHITE, sheepLootTableBuilderWithDrop(Blocks.WHITE_WOOL)); - this.add(AetherLoot.ENTITIES_SHEEPUFF_YELLOW, sheepLootTableBuilderWithDrop(Blocks.YELLOW_WOOL)); + this.add(AetherEntityTypes.SHEEPUFF.get(), AetherLoot.ENTITIES_SHEEPUFF_BLACK, createSheepuffTable(Blocks.BLACK_WOOL)); + this.add(AetherEntityTypes.SHEEPUFF.get(), AetherLoot.ENTITIES_SHEEPUFF_BLUE, createSheepuffTable(Blocks.BLUE_WOOL)); + this.add(AetherEntityTypes.SHEEPUFF.get(), AetherLoot.ENTITIES_SHEEPUFF_BROWN, createSheepuffTable(Blocks.BROWN_WOOL)); + this.add(AetherEntityTypes.SHEEPUFF.get(), AetherLoot.ENTITIES_SHEEPUFF_CYAN, createSheepuffTable(Blocks.CYAN_WOOL)); + this.add(AetherEntityTypes.SHEEPUFF.get(), AetherLoot.ENTITIES_SHEEPUFF_GRAY, createSheepuffTable(Blocks.GRAY_WOOL)); + this.add(AetherEntityTypes.SHEEPUFF.get(), AetherLoot.ENTITIES_SHEEPUFF_GREEN, createSheepuffTable(Blocks.GREEN_WOOL)); + this.add(AetherEntityTypes.SHEEPUFF.get(), AetherLoot.ENTITIES_SHEEPUFF_LIGHT_BLUE, createSheepuffTable(Blocks.LIGHT_BLUE_WOOL)); + this.add(AetherEntityTypes.SHEEPUFF.get(), AetherLoot.ENTITIES_SHEEPUFF_LIGHT_GRAY, createSheepuffTable(Blocks.LIGHT_GRAY_WOOL)); + this.add(AetherEntityTypes.SHEEPUFF.get(), AetherLoot.ENTITIES_SHEEPUFF_LIME, createSheepuffTable(Blocks.LIME_WOOL)); + this.add(AetherEntityTypes.SHEEPUFF.get(), AetherLoot.ENTITIES_SHEEPUFF_MAGENTA, createSheepuffTable(Blocks.MAGENTA_WOOL)); + this.add(AetherEntityTypes.SHEEPUFF.get(), AetherLoot.ENTITIES_SHEEPUFF_ORANGE, createSheepuffTable(Blocks.ORANGE_WOOL)); + this.add(AetherEntityTypes.SHEEPUFF.get(), AetherLoot.ENTITIES_SHEEPUFF_PINK, createSheepuffTable(Blocks.PINK_WOOL)); + this.add(AetherEntityTypes.SHEEPUFF.get(), AetherLoot.ENTITIES_SHEEPUFF_PURPLE, createSheepuffTable(Blocks.PURPLE_WOOL)); + this.add(AetherEntityTypes.SHEEPUFF.get(), AetherLoot.ENTITIES_SHEEPUFF_RED, createSheepuffTable(Blocks.RED_WOOL)); + this.add(AetherEntityTypes.SHEEPUFF.get(), AetherLoot.ENTITIES_SHEEPUFF_WHITE, createSheepuffTable(Blocks.WHITE_WOOL)); + this.add(AetherEntityTypes.SHEEPUFF.get(), AetherLoot.ENTITIES_SHEEPUFF_YELLOW, createSheepuffTable(Blocks.YELLOW_WOOL)); this.add(AetherEntityTypes.MOA.get(), LootTable.lootTable() .withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1)) @@ -232,15 +235,14 @@ protected void addTables() { ); } - private static LootTable.Builder sheepLootTableBuilderWithDrop(ItemLike wool) { + private static LootTable.Builder createSheepuffTable(ItemLike wool) { return LootTable.lootTable() .withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1)).add(LootItem.lootTableItem(wool))) .withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1)).add(LootTableReference.lootTableReference(AetherEntityTypes.SHEEPUFF.get().getDefaultLootTable()))); } - @Nonnull @Override - protected Iterable> getKnownEntities() { - return AetherEntityTypes.ENTITY_TYPES.getEntries().stream().map(Supplier::get).collect(Collectors.toList()); + public Stream> getKnownEntityTypes() { + return AetherEntityTypes.ENTITY_TYPES.getEntries().stream().flatMap(entityType -> Stream.of(entityType.get())); } } diff --git a/src/main/java/com/gildedgames/aether/data/generators/loot/AetherSelectorLootData.java b/src/main/java/com/gildedgames/aether/data/generators/loot/AetherSelectorLoot.java similarity index 78% rename from src/main/java/com/gildedgames/aether/data/generators/loot/AetherSelectorLootData.java rename to src/main/java/com/gildedgames/aether/data/generators/loot/AetherSelectorLoot.java index b7d973e36d..eb3cc3504a 100644 --- a/src/main/java/com/gildedgames/aether/data/generators/loot/AetherSelectorLootData.java +++ b/src/main/java/com/gildedgames/aether/data/generators/loot/AetherSelectorLoot.java @@ -2,6 +2,7 @@ import com.gildedgames.aether.loot.AetherLoot; import com.gildedgames.aether.loot.functions.WhirlwindSpawnEntity; +import net.minecraft.data.loot.LootTableSubProvider; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.EntityType; import net.minecraft.world.item.Items; @@ -12,19 +13,19 @@ import net.minecraft.world.level.storage.loot.providers.number.ConstantValue; import java.util.function.BiConsumer; -import java.util.function.Consumer; -public class AetherSelectorLootData implements Consumer> { - public void accept(BiConsumer builder) { +public class AetherSelectorLoot implements LootTableSubProvider { + @Override + public void generate(BiConsumer builder) { builder.accept(AetherLoot.WHIRLWIND_JUNK, LootTable.lootTable() - .withPool(this.whirlwindLoot()) + .withPool(whirlwindLoot()) ); builder.accept(AetherLoot.EVIL_WHIRLWIND_JUNK, LootTable.lootTable() - .withPool(this.whirlwindLoot().add(LootItem.lootTableItem(Items.AIR).apply(WhirlwindSpawnEntity.builder(EntityType.CREEPER, 1)).setWeight(60))) + .withPool(whirlwindLoot().add(LootItem.lootTableItem(Items.AIR).apply(WhirlwindSpawnEntity.builder(EntityType.CREEPER, 1)).setWeight(60))) ); } - private LootPool.Builder whirlwindLoot() { + private static LootPool.Builder whirlwindLoot() { return LootPool.lootPool().setRolls(ConstantValue.exactly(1)) .add(LootItem.lootTableItem(Items.DIAMOND).setWeight(1)) .add(LootItem.lootTableItem(Items.IRON_INGOT).setWeight(4)) diff --git a/src/main/java/com/gildedgames/aether/data/generators/loot/AetherStrippingLootData.java b/src/main/java/com/gildedgames/aether/data/generators/loot/AetherStrippingLoot.java similarity index 82% rename from src/main/java/com/gildedgames/aether/data/generators/loot/AetherStrippingLootData.java rename to src/main/java/com/gildedgames/aether/data/generators/loot/AetherStrippingLoot.java index 936bf0cfa5..17d91a8f6f 100644 --- a/src/main/java/com/gildedgames/aether/data/generators/loot/AetherStrippingLootData.java +++ b/src/main/java/com/gildedgames/aether/data/generators/loot/AetherStrippingLoot.java @@ -2,6 +2,7 @@ import com.gildedgames.aether.item.AetherItems; import com.gildedgames.aether.loot.AetherLoot; +import net.minecraft.data.loot.LootTableSubProvider; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.enchantment.Enchantments; import net.minecraft.world.level.storage.loot.LootPool; @@ -12,10 +13,10 @@ import net.minecraft.world.level.storage.loot.providers.number.UniformGenerator; import java.util.function.BiConsumer; -import java.util.function.Consumer; -public class AetherStrippingLootData implements Consumer> { - public void accept(BiConsumer builder) { +public class AetherStrippingLoot implements LootTableSubProvider { + @Override + public void generate(BiConsumer builder) { builder.accept(AetherLoot.STRIP_GOLDEN_OAK, LootTable.lootTable() .withPool(LootPool.lootPool().add(LootItem.lootTableItem(AetherItems.GOLDEN_AMBER.get()) .apply(SetItemCountFunction.setCount(UniformGenerator.between(1.0F, 2.0F))) diff --git a/src/main/java/com/gildedgames/aether/data/generators/tags/AetherBiomeTagData.java b/src/main/java/com/gildedgames/aether/data/generators/tags/AetherBiomeTagData.java index 2e1c19087f..969441a9a1 100644 --- a/src/main/java/com/gildedgames/aether/data/generators/tags/AetherBiomeTagData.java +++ b/src/main/java/com/gildedgames/aether/data/generators/tags/AetherBiomeTagData.java @@ -2,44 +2,47 @@ import com.gildedgames.aether.Aether; import com.gildedgames.aether.AetherTags; -import com.gildedgames.aether.data.resources.AetherBiomes; -import net.minecraft.data.DataGenerator; +import com.gildedgames.aether.data.resources.registries.AetherBiomes; +import net.minecraft.core.HolderLookup; +import net.minecraft.data.PackOutput; import net.minecraft.data.tags.BiomeTagsProvider; import net.minecraft.tags.BiomeTags; import net.minecraft.world.level.biome.Biomes; import net.minecraftforge.common.data.ExistingFileHelper; -import org.jetbrains.annotations.Nullable; + +import javax.annotation.Nullable; +import java.util.concurrent.CompletableFuture; public class AetherBiomeTagData extends BiomeTagsProvider { - public AetherBiomeTagData(DataGenerator generator, @Nullable ExistingFileHelper existingFileHelper) { - super(generator, Aether.MODID, existingFileHelper); + public AetherBiomeTagData(PackOutput output, CompletableFuture registries, @Nullable ExistingFileHelper helper) { + super(output, registries, Aether.MODID, helper); } @Override - protected void addTags() { - tag(AetherTags.Biomes.IS_AETHER).add( + public void addTags(HolderLookup.Provider provider) { + this.tag(AetherTags.Biomes.IS_AETHER).add( AetherBiomes.GOLDEN_FOREST, AetherBiomes.SKYROOT_FOREST, AetherBiomes.SKYROOT_GROVE, AetherBiomes.SKYROOT_THICKET ); - tag(AetherTags.Biomes.HAS_LARGE_AERCLOUD).addTag(AetherTags.Biomes.IS_AETHER); - tag(AetherTags.Biomes.HAS_BRONZE_DUNGEON).addTag(AetherTags.Biomes.IS_AETHER); - tag(AetherTags.Biomes.HAS_SILVER_DUNGEON).addTag(AetherTags.Biomes.IS_AETHER); - tag(AetherTags.Biomes.HAS_GOLD_DUNGEON).addTag(AetherTags.Biomes.IS_AETHER); + this.tag(AetherTags.Biomes.HAS_LARGE_AERCLOUD).addTag(AetherTags.Biomes.IS_AETHER); + this.tag(AetherTags.Biomes.HAS_BRONZE_DUNGEON).addTag(AetherTags.Biomes.IS_AETHER); + this.tag(AetherTags.Biomes.HAS_SILVER_DUNGEON).addTag(AetherTags.Biomes.IS_AETHER); + this.tag(AetherTags.Biomes.HAS_GOLD_DUNGEON).addTag(AetherTags.Biomes.IS_AETHER); - tag(AetherTags.Biomes.MYCELIUM_CONVERSION).add(Biomes.MUSHROOM_FIELDS); - tag(AetherTags.Biomes.PODZOL_CONVERSION).add( + this.tag(AetherTags.Biomes.MYCELIUM_CONVERSION).add(Biomes.MUSHROOM_FIELDS); + this.tag(AetherTags.Biomes.PODZOL_CONVERSION).add( Biomes.OLD_GROWTH_PINE_TAIGA, Biomes.OLD_GROWTH_SPRUCE_TAIGA, Biomes.BAMBOO_JUNGLE); - tag(AetherTags.Biomes.CRIMSON_NYLIUM_CONVERSION).add(Biomes.CRIMSON_FOREST); - tag(AetherTags.Biomes.WARPED_NYLIUM_CONVERSION).add(Biomes.WARPED_FOREST); + this.tag(AetherTags.Biomes.CRIMSON_NYLIUM_CONVERSION).add(Biomes.CRIMSON_FOREST); + this.tag(AetherTags.Biomes.WARPED_NYLIUM_CONVERSION).add(Biomes.WARPED_FOREST); - tag(AetherTags.Biomes.ULTRACOLD).addTag(AetherTags.Biomes.IS_AETHER); - tag(AetherTags.Biomes.NO_WHEAT_SEEDS).addTag(AetherTags.Biomes.IS_AETHER); - tag(AetherTags.Biomes.FALL_TO_OVERWORLD).addTag(AetherTags.Biomes.IS_AETHER); - tag(AetherTags.Biomes.DISPLAY_TRAVEL_TEXT).addTag(AetherTags.Biomes.IS_AETHER).addTag(BiomeTags.IS_OVERWORLD).add(Biomes.THE_VOID); - tag(AetherTags.Biomes.AETHER_MUSIC).addTag(AetherTags.Biomes.IS_AETHER); + this.tag(AetherTags.Biomes.ULTRACOLD).addTag(AetherTags.Biomes.IS_AETHER); + this.tag(AetherTags.Biomes.NO_WHEAT_SEEDS).addTag(AetherTags.Biomes.IS_AETHER); + this.tag(AetherTags.Biomes.FALL_TO_OVERWORLD).addTag(AetherTags.Biomes.IS_AETHER); + this.tag(AetherTags.Biomes.DISPLAY_TRAVEL_TEXT).addTag(AetherTags.Biomes.IS_AETHER).addTag(BiomeTags.IS_OVERWORLD).add(Biomes.THE_VOID); + this.tag(AetherTags.Biomes.AETHER_MUSIC).addTag(AetherTags.Biomes.IS_AETHER); } } diff --git a/src/main/java/com/gildedgames/aether/data/generators/tags/AetherBlockTagData.java b/src/main/java/com/gildedgames/aether/data/generators/tags/AetherBlockTagData.java index 71958845ce..f785830441 100644 --- a/src/main/java/com/gildedgames/aether/data/generators/tags/AetherBlockTagData.java +++ b/src/main/java/com/gildedgames/aether/data/generators/tags/AetherBlockTagData.java @@ -3,105 +3,96 @@ import com.gildedgames.aether.Aether; import com.gildedgames.aether.block.AetherBlocks; import com.gildedgames.aether.AetherTags; -import net.minecraft.tags.TagKey; -import net.minecraft.world.level.block.Block; +import net.minecraft.core.HolderLookup; +import net.minecraft.data.PackOutput; import net.minecraft.world.level.block.Blocks; -import net.minecraft.data.tags.BlockTagsProvider; -import net.minecraft.data.DataGenerator; -import net.minecraft.data.tags.TagsProvider; import net.minecraft.tags.BlockTags; import net.minecraftforge.common.Tags; +import net.minecraftforge.common.data.BlockTagsProvider; import net.minecraftforge.common.data.ExistingFileHelper; -import javax.annotation.Nonnull; import javax.annotation.Nullable; +import java.util.concurrent.CompletableFuture; -public class AetherBlockTagData extends BlockTagsProvider -{ - public AetherBlockTagData(DataGenerator generatorIn, @Nullable ExistingFileHelper existingFileHelper) { - super(generatorIn, Aether.MODID, existingFileHelper); - } - - @Nonnull - @Override - public String getName() { - return "Aether Block Tags"; +public class AetherBlockTagData extends BlockTagsProvider { + public AetherBlockTagData(PackOutput output, CompletableFuture registries, @Nullable ExistingFileHelper helper) { + super(output, registries, Aether.MODID, helper); } @SuppressWarnings("unchecked") @Override - protected void addTags() { - //aether - tag(AetherTags.Blocks.TREATED_AS_VANILLA_BLOCK).add( + public void addTags(HolderLookup.Provider provider) { + // Aether + this.tag(AetherTags.Blocks.TREATED_AS_VANILLA_BLOCK).add( AetherBlocks.CHEST_MIMIC.get(), AetherBlocks.UNSTABLE_OBSIDIAN.get()); - tag(AetherTags.Blocks.AETHER_PORTAL_BLOCKS).add(Blocks.GLOWSTONE); - tag(AetherTags.Blocks.AETHER_ISLAND_BLOCKS).add( + this.tag(AetherTags.Blocks.AETHER_PORTAL_BLOCKS).add(Blocks.GLOWSTONE); + this.tag(AetherTags.Blocks.AETHER_ISLAND_BLOCKS).add( AetherBlocks.AETHER_DIRT.get(), AetherBlocks.AETHER_GRASS_BLOCK.get(), AetherBlocks.HOLYSTONE.get()); - tag(AetherTags.Blocks.AETHER_DIRT).add( + this.tag(AetherTags.Blocks.AETHER_DIRT).add( AetherBlocks.AETHER_GRASS_BLOCK.get(), AetherBlocks.ENCHANTED_AETHER_GRASS_BLOCK.get(), AetherBlocks.AETHER_DIRT.get()); - tag(AetherTags.Blocks.HOLYSTONE).add( + this.tag(AetherTags.Blocks.HOLYSTONE).add( AetherBlocks.HOLYSTONE.get(), AetherBlocks.MOSSY_HOLYSTONE.get()); - tag(AetherTags.Blocks.AERCLOUDS).add( + this.tag(AetherTags.Blocks.AERCLOUDS).add( AetherBlocks.COLD_AERCLOUD.get(), AetherBlocks.BLUE_AERCLOUD.get(), AetherBlocks.GOLDEN_AERCLOUD.get(), AetherBlocks.PINK_AERCLOUD.get()); - tag(AetherTags.Blocks.SKYROOT_LOGS).add( + this.tag(AetherTags.Blocks.SKYROOT_LOGS).add( AetherBlocks.SKYROOT_LOG.get(), AetherBlocks.SKYROOT_WOOD.get(), AetherBlocks.STRIPPED_SKYROOT_LOG.get(), AetherBlocks.STRIPPED_SKYROOT_WOOD.get()); - tag(AetherTags.Blocks.GOLDEN_OAK_LOGS).add( + this.tag(AetherTags.Blocks.GOLDEN_OAK_LOGS).add( AetherBlocks.GOLDEN_OAK_LOG.get(), AetherBlocks.GOLDEN_OAK_WOOD.get()); - tag(AetherTags.Blocks.ALLOWED_BUCKET_PICKUP).add( + this.tag(AetherTags.Blocks.ALLOWED_BUCKET_PICKUP).add( Blocks.POWDER_SNOW); - tag(AetherTags.Blocks.AEROGEL).add(AetherBlocks.AEROGEL.get(), + this.tag(AetherTags.Blocks.AEROGEL).add(AetherBlocks.AEROGEL.get(), AetherBlocks.AEROGEL_WALL.get(), AetherBlocks.AEROGEL_STAIRS.get(), AetherBlocks.AEROGEL_SLAB.get()); - tag(AetherTags.Blocks.DUNGEON_BLOCKS).add( + this.tag(AetherTags.Blocks.DUNGEON_BLOCKS).add( AetherBlocks.CARVED_STONE.get(), AetherBlocks.SENTRY_STONE.get(), AetherBlocks.ANGELIC_STONE.get(), AetherBlocks.LIGHT_ANGELIC_STONE.get(), AetherBlocks.HELLFIRE_STONE.get(), AetherBlocks.LIGHT_HELLFIRE_STONE.get()); - tag(AetherTags.Blocks.LOCKED_DUNGEON_BLOCKS).add( + this.tag(AetherTags.Blocks.LOCKED_DUNGEON_BLOCKS).add( AetherBlocks.LOCKED_CARVED_STONE.get(), AetherBlocks.LOCKED_SENTRY_STONE.get(), AetherBlocks.LOCKED_ANGELIC_STONE.get(), AetherBlocks.LOCKED_LIGHT_ANGELIC_STONE.get(), AetherBlocks.LOCKED_HELLFIRE_STONE.get(), AetherBlocks.LOCKED_LIGHT_HELLFIRE_STONE.get()); - tag(AetherTags.Blocks.TRAPPED_DUNGEON_BLOCKS).add( + this.tag(AetherTags.Blocks.TRAPPED_DUNGEON_BLOCKS).add( AetherBlocks.TRAPPED_CARVED_STONE.get(), AetherBlocks.TRAPPED_SENTRY_STONE.get(), AetherBlocks.TRAPPED_ANGELIC_STONE.get(), AetherBlocks.TRAPPED_LIGHT_ANGELIC_STONE.get(), AetherBlocks.TRAPPED_HELLFIRE_STONE.get(), AetherBlocks.TRAPPED_LIGHT_HELLFIRE_STONE.get()); - tag(AetherTags.Blocks.BOSS_DOORWAY_DUNGEON_BLOCKS).add( + this.tag(AetherTags.Blocks.BOSS_DOORWAY_DUNGEON_BLOCKS).add( AetherBlocks.BOSS_DOORWAY_CARVED_STONE.get(), AetherBlocks.BOSS_DOORWAY_SENTRY_STONE.get(), AetherBlocks.BOSS_DOORWAY_ANGELIC_STONE.get(), AetherBlocks.BOSS_DOORWAY_LIGHT_ANGELIC_STONE.get(), AetherBlocks.BOSS_DOORWAY_HELLFIRE_STONE.get(), AetherBlocks.BOSS_DOORWAY_LIGHT_HELLFIRE_STONE.get()); - tag(AetherTags.Blocks.TREASURE_DOORWAY_DUNGEON_BLOCKS).add( + this.tag(AetherTags.Blocks.TREASURE_DOORWAY_DUNGEON_BLOCKS).add( AetherBlocks.TREASURE_DOORWAY_CARVED_STONE.get(), AetherBlocks.TREASURE_DOORWAY_SENTRY_STONE.get(), AetherBlocks.TREASURE_DOORWAY_ANGELIC_STONE.get(), AetherBlocks.TREASURE_DOORWAY_LIGHT_ANGELIC_STONE.get(), AetherBlocks.TREASURE_DOORWAY_HELLFIRE_STONE.get(), AetherBlocks.TREASURE_DOORWAY_LIGHT_HELLFIRE_STONE.get()); - tag(AetherTags.Blocks.SENTRY_BLOCKS).add( + this.tag(AetherTags.Blocks.SENTRY_BLOCKS).add( AetherBlocks.CARVED_STONE.get(), AetherBlocks.SENTRY_STONE.get(), AetherBlocks.LOCKED_CARVED_STONE.get(), @@ -113,7 +104,7 @@ protected void addTags() { AetherBlocks.CARVED_STAIRS.get(), AetherBlocks.CARVED_SLAB.get(), AetherBlocks.CARVED_WALL.get()); - tag(AetherTags.Blocks.ANGELIC_BLOCKS).add( + this.tag(AetherTags.Blocks.ANGELIC_BLOCKS).add( AetherBlocks.ANGELIC_STONE.get(), AetherBlocks.LIGHT_ANGELIC_STONE.get(), AetherBlocks.LOCKED_ANGELIC_STONE.get(), @@ -125,7 +116,7 @@ protected void addTags() { AetherBlocks.ANGELIC_STAIRS.get(), AetherBlocks.ANGELIC_SLAB.get(), AetherBlocks.ANGELIC_WALL.get()); - tag(AetherTags.Blocks.HELLFIRE_BLOCKS).add( + this.tag(AetherTags.Blocks.HELLFIRE_BLOCKS).add( AetherBlocks.HELLFIRE_STONE.get(), AetherBlocks.LIGHT_HELLFIRE_STONE.get(), AetherBlocks.LOCKED_HELLFIRE_STONE.get(), @@ -137,59 +128,59 @@ protected void addTags() { AetherBlocks.HELLFIRE_STAIRS.get(), AetherBlocks.HELLFIRE_SLAB.get(), AetherBlocks.HELLFIRE_WALL.get()); - tag(AetherTags.Blocks.SLIDER_UNBREAKABLE).addTags( + this.tag(AetherTags.Blocks.SLIDER_UNBREAKABLE).addTags( AetherTags.Blocks.LOCKED_DUNGEON_BLOCKS, AetherTags.Blocks.TRAPPED_DUNGEON_BLOCKS, AetherTags.Blocks.BOSS_DOORWAY_DUNGEON_BLOCKS, AetherTags.Blocks.TREASURE_DOORWAY_DUNGEON_BLOCKS); - tag(AetherTags.Blocks.GRAVITITE_ABILITY_BLACKLIST).addTags( + this.tag(AetherTags.Blocks.GRAVITITE_ABILITY_BLACKLIST).addTags( BlockTags.BUTTONS, BlockTags.PRESSURE_PLATES, BlockTags.TRAPDOORS, BlockTags.FENCE_GATES); - tag(AetherTags.Blocks.AETHER_ANIMALS_SPAWNABLE_ON).add(AetherBlocks.AETHER_GRASS_BLOCK.get()); - tag(AetherTags.Blocks.AERWHALE_SPAWNABLE_ON).addTag(AetherTags.Blocks.AERCLOUDS); - tag(AetherTags.Blocks.SWET_SPAWNABLE_ON).add(AetherBlocks.AETHER_GRASS_BLOCK.get()); - tag(AetherTags.Blocks.AECHOR_PLANT_SPAWNABLE_ON).add(AetherBlocks.AETHER_GRASS_BLOCK.get()); - tag(AetherTags.Blocks.ZEPHYR_SPAWNABLE_ON).addTag(AetherTags.Blocks.AERCLOUDS); - tag(AetherTags.Blocks.COCKATRICE_SPAWNABLE_BLACKLIST).addTags( + this.tag(AetherTags.Blocks.AETHER_ANIMALS_SPAWNABLE_ON).add(AetherBlocks.AETHER_GRASS_BLOCK.get()); + this.tag(AetherTags.Blocks.AERWHALE_SPAWNABLE_ON).addTag(AetherTags.Blocks.AERCLOUDS); + this.tag(AetherTags.Blocks.SWET_SPAWNABLE_ON).add(AetherBlocks.AETHER_GRASS_BLOCK.get()); + this.tag(AetherTags.Blocks.AECHOR_PLANT_SPAWNABLE_ON).add(AetherBlocks.AETHER_GRASS_BLOCK.get()); + this.tag(AetherTags.Blocks.ZEPHYR_SPAWNABLE_ON).addTag(AetherTags.Blocks.AERCLOUDS); + this.tag(AetherTags.Blocks.COCKATRICE_SPAWNABLE_BLACKLIST).addTags( AetherTags.Blocks.DUNGEON_BLOCKS, AetherTags.Blocks.LOCKED_DUNGEON_BLOCKS, AetherTags.Blocks.TRAPPED_DUNGEON_BLOCKS); - tag(AetherTags.Blocks.INFINIBURN).addTag(BlockTags.INFINIBURN_OVERWORLD); - tag(AetherTags.Blocks.ALLOWED_FLAMMABLES).add(Blocks.SOUL_SAND, Blocks.SOUL_SOIL).addTags( + this.tag(AetherTags.Blocks.INFINIBURN).addTag(BlockTags.INFINIBURN_OVERWORLD); + this.tag(AetherTags.Blocks.ALLOWED_FLAMMABLES).add(Blocks.SOUL_SAND, Blocks.SOUL_SOIL).addTags( AetherTags.Blocks.INFINIBURN, AetherTags.Blocks.HELLFIRE_BLOCKS); - tag(AetherTags.Blocks.QUICKSOIL_CAN_GENERATE).add( + this.tag(AetherTags.Blocks.QUICKSOIL_CAN_GENERATE).add( AetherBlocks.AETHER_DIRT.get(), AetherBlocks.HOLYSTONE.get()); - tag(AetherTags.Blocks.VALKYRIE_TELEPORTABLE_ON).add( + this.tag(AetherTags.Blocks.VALKYRIE_TELEPORTABLE_ON).add( AetherBlocks.ANGELIC_STONE.get(), AetherBlocks.LIGHT_ANGELIC_STONE.get()); - tag(AetherTags.Blocks.TREATED_AS_AETHER_BLOCK); + this.tag(AetherTags.Blocks.TREATED_AS_AETHER_BLOCK); - //vanilla - tag(BlockTags.STONE_BRICKS).add(AetherBlocks.HOLYSTONE_BRICKS.get()).addTag(AetherTags.Blocks.DUNGEON_BLOCKS); - tag(BlockTags.WOODEN_STAIRS).add(AetherBlocks.SKYROOT_STAIRS.get()); - tag(BlockTags.WOODEN_SLABS).add(AetherBlocks.SKYROOT_SLAB.get()); - tag(BlockTags.WOODEN_FENCES).add(AetherBlocks.SKYROOT_FENCE.get()); - tag(BlockTags.WOODEN_DOORS).add(AetherBlocks.SKYROOT_DOOR.get()); - tag(BlockTags.WOODEN_TRAPDOORS).add(AetherBlocks.SKYROOT_TRAPDOOR.get()); - tag(BlockTags.WOODEN_BUTTONS).add(AetherBlocks.SKYROOT_BUTTON.get()); - tag(BlockTags.WOODEN_PRESSURE_PLATES).add(AetherBlocks.SKYROOT_PRESSURE_PLATE.get()); - tag(BlockTags.BUTTONS).add( + // Vanilla + this.tag(BlockTags.STONE_BRICKS).add(AetherBlocks.HOLYSTONE_BRICKS.get()).addTag(AetherTags.Blocks.DUNGEON_BLOCKS); + this.tag(BlockTags.WOODEN_STAIRS).add(AetherBlocks.SKYROOT_STAIRS.get()); + this.tag(BlockTags.WOODEN_SLABS).add(AetherBlocks.SKYROOT_SLAB.get()); + this.tag(BlockTags.WOODEN_FENCES).add(AetherBlocks.SKYROOT_FENCE.get()); + this.tag(BlockTags.WOODEN_DOORS).add(AetherBlocks.SKYROOT_DOOR.get()); + this.tag(BlockTags.WOODEN_TRAPDOORS).add(AetherBlocks.SKYROOT_TRAPDOOR.get()); + this.tag(BlockTags.WOODEN_BUTTONS).add(AetherBlocks.SKYROOT_BUTTON.get()); + this.tag(BlockTags.WOODEN_PRESSURE_PLATES).add(AetherBlocks.SKYROOT_PRESSURE_PLATE.get()); + this.tag(BlockTags.BUTTONS).add( AetherBlocks.SKYROOT_BUTTON.get(), AetherBlocks.HOLYSTONE_BUTTON.get()); - tag(BlockTags.PRESSURE_PLATES).add( + this.tag(BlockTags.PRESSURE_PLATES).add( AetherBlocks.SKYROOT_PRESSURE_PLATE.get(), AetherBlocks.HOLYSTONE_PRESSURE_PLATE.get()); - tag(BlockTags.SAPLINGS).add( + this.tag(BlockTags.SAPLINGS).add( AetherBlocks.SKYROOT_SAPLING.get(), AetherBlocks.GOLDEN_OAK_SAPLING.get()); - tag(BlockTags.LOGS_THAT_BURN).addTags( + this.tag(BlockTags.LOGS_THAT_BURN).addTags( AetherTags.Blocks.SKYROOT_LOGS, AetherTags.Blocks.GOLDEN_OAK_LOGS); - tag(BlockTags.STAIRS).add( + this.tag(BlockTags.STAIRS).add( AetherBlocks.SKYROOT_STAIRS.get(), AetherBlocks.CARVED_STAIRS.get(), AetherBlocks.ANGELIC_STAIRS.get(), @@ -199,7 +190,7 @@ protected void addTags() { AetherBlocks.ICESTONE_STAIRS.get(), AetherBlocks.HOLYSTONE_BRICK_STAIRS.get(), AetherBlocks.AEROGEL_STAIRS.get()); - tag(BlockTags.SLABS).add( + this.tag(BlockTags.SLABS).add( AetherBlocks.SKYROOT_SLAB.get(), AetherBlocks.CARVED_SLAB.get(), AetherBlocks.ANGELIC_SLAB.get(), @@ -209,7 +200,7 @@ protected void addTags() { AetherBlocks.ICESTONE_SLAB.get(), AetherBlocks.HOLYSTONE_BRICK_SLAB.get(), AetherBlocks.AEROGEL_SLAB.get()); - tag(BlockTags.WALLS).add( + this.tag(BlockTags.WALLS).add( AetherBlocks.CARVED_WALL.get(), AetherBlocks.ANGELIC_WALL.get(), AetherBlocks.HELLFIRE_WALL.get(), @@ -218,52 +209,52 @@ protected void addTags() { AetherBlocks.ICESTONE_WALL.get(), AetherBlocks.HOLYSTONE_BRICK_WALL.get(), AetherBlocks.AEROGEL_WALL.get()); - tag(BlockTags.LEAVES).add( + this.tag(BlockTags.LEAVES).add( AetherBlocks.SKYROOT_LEAVES.get(), AetherBlocks.GOLDEN_OAK_LEAVES.get(), AetherBlocks.CRYSTAL_LEAVES.get(), AetherBlocks.CRYSTAL_FRUIT_LEAVES.get(), AetherBlocks.HOLIDAY_LEAVES.get(), AetherBlocks.DECORATED_HOLIDAY_LEAVES.get()); - tag(BlockTags.SMALL_FLOWERS).add( + this.tag(BlockTags.SMALL_FLOWERS).add( AetherBlocks.PURPLE_FLOWER.get(), AetherBlocks.WHITE_FLOWER.get()); - tag(BlockTags.BEDS).add(AetherBlocks.SKYROOT_BED.get()); - tag(BlockTags.DIRT).addTag(AetherTags.Blocks.AETHER_DIRT); - tag(BlockTags.FLOWER_POTS).add( + this.tag(BlockTags.BEDS).add(AetherBlocks.SKYROOT_BED.get()); + this.tag(BlockTags.DIRT).addTag(AetherTags.Blocks.AETHER_DIRT); + this.tag(BlockTags.FLOWER_POTS).add( AetherBlocks.POTTED_BERRY_BUSH.get(), AetherBlocks.POTTED_BERRY_BUSH_STEM.get(), AetherBlocks.POTTED_PURPLE_FLOWER.get(), AetherBlocks.POTTED_WHITE_FLOWER.get(), AetherBlocks.POTTED_SKYROOT_SAPLING.get(), AetherBlocks.POTTED_GOLDEN_OAK_SAPLING.get()); - tag(BlockTags.ENDERMAN_HOLDABLE).addTag(AetherTags.Blocks.AETHER_DIRT).add( + this.tag(BlockTags.ENDERMAN_HOLDABLE).addTag(AetherTags.Blocks.AETHER_DIRT).add( AetherBlocks.QUICKSOIL.get(), AetherBlocks.PURPLE_FLOWER.get(), AetherBlocks.WHITE_FLOWER.get()); - tag(BlockTags.VALID_SPAWN).addTag(AetherTags.Blocks.AETHER_DIRT); - tag(BlockTags.IMPERMEABLE).add(AetherBlocks.QUICKSOIL_GLASS.get()); - tag(BlockTags.BAMBOO_PLANTABLE_ON).addTag(AetherTags.Blocks.AETHER_DIRT); - tag(BlockTags.SIGNS).add( + this.tag(BlockTags.VALID_SPAWN).addTag(AetherTags.Blocks.AETHER_DIRT); + this.tag(BlockTags.IMPERMEABLE).add(AetherBlocks.QUICKSOIL_GLASS.get()); + this.tag(BlockTags.BAMBOO_PLANTABLE_ON).addTag(AetherTags.Blocks.AETHER_DIRT); + this.tag(BlockTags.SIGNS).add( AetherBlocks.SKYROOT_SIGN.get(), AetherBlocks.SKYROOT_WALL_SIGN.get()); - tag(BlockTags.STANDING_SIGNS).add(AetherBlocks.SKYROOT_SIGN.get()); - tag(BlockTags.WALL_SIGNS).add(AetherBlocks.SKYROOT_WALL_SIGN.get()); - tag(BlockTags.DRAGON_IMMUNE).addTags( + this.tag(BlockTags.STANDING_SIGNS).add(AetherBlocks.SKYROOT_SIGN.get()); + this.tag(BlockTags.WALL_SIGNS).add(AetherBlocks.SKYROOT_WALL_SIGN.get()); + this.tag(BlockTags.DRAGON_IMMUNE).addTags( AetherTags.Blocks.LOCKED_DUNGEON_BLOCKS, AetherTags.Blocks.TRAPPED_DUNGEON_BLOCKS, AetherTags.Blocks.AEROGEL); - tag(BlockTags.WITHER_IMMUNE).addTags( + this.tag(BlockTags.WITHER_IMMUNE).addTags( AetherTags.Blocks.LOCKED_DUNGEON_BLOCKS, AetherTags.Blocks.TRAPPED_DUNGEON_BLOCKS); - tag(BlockTags.BEE_GROWABLES).add(AetherBlocks.BERRY_BUSH_STEM.get()); - tag(BlockTags.PORTALS).add(AetherBlocks.AETHER_PORTAL.get()); - tag(BlockTags.BEACON_BASE_BLOCKS).add( + this.tag(BlockTags.BEE_GROWABLES).add(AetherBlocks.BERRY_BUSH_STEM.get()); + this.tag(BlockTags.PORTALS).add(AetherBlocks.AETHER_PORTAL.get()); + this.tag(BlockTags.BEACON_BASE_BLOCKS).add( AetherBlocks.ZANITE_BLOCK.get(), AetherBlocks.ENCHANTED_GRAVITITE.get()); - tag(BlockTags.WALL_POST_OVERRIDE).add(AetherBlocks.AMBROSIUM_TORCH.get()); - tag(BlockTags.FENCE_GATES).add(AetherBlocks.SKYROOT_FENCE_GATE.get()); - tag(BlockTags.MINEABLE_WITH_PICKAXE).add( + this.tag(BlockTags.WALL_POST_OVERRIDE).add(AetherBlocks.AMBROSIUM_TORCH.get()); + this.tag(BlockTags.FENCE_GATES).add(AetherBlocks.SKYROOT_FENCE_GATE.get()); + this.tag(BlockTags.MINEABLE_WITH_PICKAXE).add( AetherBlocks.HOLYSTONE.get(), AetherBlocks.MOSSY_HOLYSTONE.get(), AetherBlocks.ICESTONE.get(), @@ -314,7 +305,7 @@ protected void addTags() { AetherBlocks.HOLYSTONE_BRICK_SLAB.get(), AetherBlocks.AEROGEL_SLAB.get(), AetherBlocks.SUN_ALTAR.get()); - tag(BlockTags.MINEABLE_WITH_AXE).add( + this.tag(BlockTags.MINEABLE_WITH_AXE).add( AetherBlocks.SKYROOT_LOG.get(), AetherBlocks.GOLDEN_OAK_LOG.get(), AetherBlocks.STRIPPED_SKYROOT_LOG.get(), @@ -336,14 +327,14 @@ protected void addTags() { AetherBlocks.SKYROOT_SLAB.get(), AetherBlocks.SKYROOT_BOOKSHELF.get(), AetherBlocks.SKYROOT_BED.get()); - tag(BlockTags.MINEABLE_WITH_SHOVEL).add( + this.tag(BlockTags.MINEABLE_WITH_SHOVEL).add( AetherBlocks.AETHER_GRASS_BLOCK.get(), AetherBlocks.ENCHANTED_AETHER_GRASS_BLOCK.get(), AetherBlocks.AETHER_DIRT.get(), AetherBlocks.QUICKSOIL.get(), AetherBlocks.AETHER_FARMLAND.get(), AetherBlocks.AETHER_DIRT_PATH.get()); - tag(BlockTags.MINEABLE_WITH_HOE).add( + this.tag(BlockTags.MINEABLE_WITH_HOE).add( AetherBlocks.COLD_AERCLOUD.get(), AetherBlocks.BLUE_AERCLOUD.get(), AetherBlocks.GOLDEN_AERCLOUD.get(), @@ -355,7 +346,7 @@ protected void addTags() { AetherBlocks.HOLIDAY_LEAVES.get(), AetherBlocks.DECORATED_HOLIDAY_LEAVES.get(), AetherBlocks.BERRY_BUSH.get()); - tag(BlockTags.NEEDS_STONE_TOOL).add( + this.tag(BlockTags.NEEDS_STONE_TOOL).add( AetherBlocks.ICESTONE.get(), AetherBlocks.ICESTONE_STAIRS.get(), AetherBlocks.ICESTONE_SLAB.get(), @@ -380,50 +371,45 @@ protected void addTags() { AetherBlocks.TREASURE_CHEST.get(), AetherBlocks.PILLAR.get(), AetherBlocks.PILLAR_TOP.get()); - tag(BlockTags.NEEDS_IRON_TOOL).add( + this.tag(BlockTags.NEEDS_IRON_TOOL).add( AetherBlocks.GRAVITITE_ORE.get(), AetherBlocks.ENCHANTED_GRAVITITE.get()); - tag(BlockTags.NEEDS_DIAMOND_TOOL).add( + this.tag(BlockTags.NEEDS_DIAMOND_TOOL).add( AetherBlocks.AEROGEL.get(), AetherBlocks.AEROGEL_STAIRS.get(), AetherBlocks.AEROGEL_SLAB.get(), AetherBlocks.AEROGEL_WALL.get()); - tag(BlockTags.CONVERTABLE_TO_MUD).add(AetherBlocks.AETHER_DIRT.get()); - tag(BlockTags.SCULK_REPLACEABLE).addTag(AetherTags.Blocks.HOLYSTONE).add( + this.tag(BlockTags.CONVERTABLE_TO_MUD).add(AetherBlocks.AETHER_DIRT.get()); + this.tag(BlockTags.SCULK_REPLACEABLE).addTag(AetherTags.Blocks.HOLYSTONE).add( AetherBlocks.AETHER_DIRT.get(), AetherBlocks.QUICKSOIL.get() ); - tag(BlockTags.SNAPS_GOAT_HORN).addTag(AetherTags.Blocks.SKYROOT_LOGS).add( + this.tag(BlockTags.SNAPS_GOAT_HORN).addTag(AetherTags.Blocks.SKYROOT_LOGS).add( AetherBlocks.HOLYSTONE.get(), AetherBlocks.ICESTONE.get(), AetherBlocks.AMBROSIUM_ORE.get(), AetherBlocks.ZANITE_ORE.get(), AetherBlocks.GRAVITITE_ORE.get() ); - tag(BlockTags.SNOW_LAYER_CANNOT_SURVIVE_ON).add(AetherBlocks.ICESTONE.get()); + this.tag(BlockTags.SNOW_LAYER_CANNOT_SURVIVE_ON).add(AetherBlocks.ICESTONE.get()); - //forge - tag(Tags.Blocks.BOOKSHELVES).add(AetherBlocks.SKYROOT_BOOKSHELF.get()); - tag(Tags.Blocks.FENCE_GATES_WOODEN).add(AetherBlocks.SKYROOT_FENCE_GATE.get()); - tag(Tags.Blocks.FENCES_WOODEN).add(AetherBlocks.SKYROOT_FENCE.get()); - tag(Tags.Blocks.GLASS_COLORLESS).add(AetherBlocks.QUICKSOIL_GLASS.get()); - tag(Tags.Blocks.GLASS_PANES_COLORLESS).add(AetherBlocks.QUICKSOIL_GLASS_PANE.get()); - tag(Tags.Blocks.ORE_RATES_SINGULAR).add( + // Forge + this.tag(Tags.Blocks.BOOKSHELVES).add(AetherBlocks.SKYROOT_BOOKSHELF.get()); + this.tag(Tags.Blocks.FENCE_GATES_WOODEN).add(AetherBlocks.SKYROOT_FENCE_GATE.get()); + this.tag(Tags.Blocks.FENCES_WOODEN).add(AetherBlocks.SKYROOT_FENCE.get()); + this.tag(Tags.Blocks.GLASS_COLORLESS).add(AetherBlocks.QUICKSOIL_GLASS.get()); + this.tag(Tags.Blocks.GLASS_PANES_COLORLESS).add(AetherBlocks.QUICKSOIL_GLASS_PANE.get()); + this.tag(Tags.Blocks.ORE_RATES_SINGULAR).add( AetherBlocks.AMBROSIUM_ORE.get(), AetherBlocks.ZANITE_ORE.get(), AetherBlocks.GRAVITITE_ORE.get()); - tag(Tags.Blocks.ORES).add( + this.tag(Tags.Blocks.ORES).add( AetherBlocks.AMBROSIUM_ORE.get(), AetherBlocks.ZANITE_ORE.get(), AetherBlocks.GRAVITITE_ORE.get()); - tag(Tags.Blocks.STONE).addTag(AetherTags.Blocks.HOLYSTONE); - tag(Tags.Blocks.STORAGE_BLOCKS).add( + this.tag(Tags.Blocks.STONE).addTag(AetherTags.Blocks.HOLYSTONE); + this.tag(Tags.Blocks.STORAGE_BLOCKS).add( AetherBlocks.AMBROSIUM_BLOCK.get(), AetherBlocks.ZANITE_BLOCK.get()); } - - @Nonnull - protected TagsProvider.TagAppender tag(@Nonnull TagKey tag) { - return super.tag(tag); - } } diff --git a/src/main/java/com/gildedgames/aether/data/generators/tags/AetherEntityTagData.java b/src/main/java/com/gildedgames/aether/data/generators/tags/AetherEntityTagData.java index 5eaa85108c..d64d9a517d 100644 --- a/src/main/java/com/gildedgames/aether/data/generators/tags/AetherEntityTagData.java +++ b/src/main/java/com/gildedgames/aether/data/generators/tags/AetherEntityTagData.java @@ -3,34 +3,26 @@ import com.gildedgames.aether.Aether; import com.gildedgames.aether.entity.AetherEntityTypes; import com.gildedgames.aether.AetherTags; -import net.minecraft.data.DataGenerator; +import net.minecraft.core.HolderLookup; +import net.minecraft.data.PackOutput; import net.minecraft.data.tags.EntityTypeTagsProvider; -import net.minecraft.data.tags.TagsProvider; -import net.minecraft.tags.TagKey; import net.minecraft.world.entity.EntityType; import net.minecraft.tags.EntityTypeTags; import net.minecraftforge.common.Tags; import net.minecraftforge.common.data.ExistingFileHelper; -import javax.annotation.Nonnull; import javax.annotation.Nullable; +import java.util.concurrent.CompletableFuture; -public class AetherEntityTagData extends EntityTypeTagsProvider -{ - public AetherEntityTagData(DataGenerator generatorIn, @Nullable ExistingFileHelper existingFileHelper) { - super(generatorIn, Aether.MODID, existingFileHelper); +public class AetherEntityTagData extends EntityTypeTagsProvider { + public AetherEntityTagData(PackOutput output, CompletableFuture registries, @Nullable ExistingFileHelper helper) { + super(output, registries, Aether.MODID, helper); } - @Nonnull @Override - public String getName() { - return "Aether Entity Tags"; - } - - @Override - protected void addTags() { - //aether - tag(AetherTags.Entities.PIGS).add( + public void addTags(HolderLookup.Provider provider) { + // Aether + this.tag(AetherTags.Entities.PIGS).add( EntityType.PIG, AetherEntityTypes.PHYG.get(), EntityType.PIGLIN, @@ -38,14 +30,14 @@ protected void addTags() { EntityType.ZOMBIFIED_PIGLIN, EntityType.HOGLIN, EntityType.ZOGLIN); - tag(AetherTags.Entities.NO_SKYROOT_DOUBLE_DROPS).add( + this.tag(AetherTags.Entities.NO_SKYROOT_DOUBLE_DROPS).add( EntityType.PLAYER, EntityType.WITHER, EntityType.ENDER_DRAGON); - tag(AetherTags.Entities.NO_AMBROSIUM_DROPS).add(EntityType.PLAYER); - tag(AetherTags.Entities.UNLAUNCHABLE); - tag(AetherTags.Entities.NO_CANDY_CANE_DROPS).add(EntityType.PLAYER); - tag(AetherTags.Entities.DEFLECTABLE_PROJECTILES).addTag(EntityTypeTags.ARROWS).add( + this.tag(AetherTags.Entities.NO_AMBROSIUM_DROPS).add(EntityType.PLAYER); + this.tag(AetherTags.Entities.UNLAUNCHABLE); + this.tag(AetherTags.Entities.NO_CANDY_CANE_DROPS).add(EntityType.PLAYER); + this.tag(AetherTags.Entities.DEFLECTABLE_PROJECTILES).addTag(EntityTypeTags.ARROWS).add( EntityType.EGG, EntityType.SMALL_FIREBALL, EntityType.FIREBALL, @@ -60,7 +52,7 @@ protected void addTags() { AetherEntityTypes.ZEPHYR_SNOWBALL.get(), AetherEntityTypes.LIGHTNING_KNIFE.get(), AetherEntityTypes.HAMMER_PROJECTILE.get()); - tag(AetherTags.Entities.SWET_TARGETS).add( + this.tag(AetherTags.Entities.SWET_TARGETS).add( EntityType.CHICKEN, EntityType.COW, EntityType.PIG, @@ -69,7 +61,7 @@ protected void addTags() { AetherEntityTypes.PHYG.get(), AetherEntityTypes.SHEEPUFF.get() ); - tag(AetherTags.Entities.AECHOR_PLANT_TARGETS).add( + this.tag(AetherTags.Entities.AECHOR_PLANT_TARGETS).add( EntityType.CHICKEN, EntityType.COW, EntityType.PIG, @@ -78,35 +70,30 @@ protected void addTags() { AetherEntityTypes.PHYG.get(), AetherEntityTypes.SHEEPUFF.get() ); - tag(AetherTags.Entities.AERCLOUD_SPAWNABLE).add( + this.tag(AetherTags.Entities.AERCLOUD_SPAWNABLE).add( AetherEntityTypes.AERWHALE.get(), AetherEntityTypes.ZEPHYR.get() ); - //forge - tag(Tags.EntityTypes.BOSSES).add( + // Forge + this.tag(Tags.EntityTypes.BOSSES).add( AetherEntityTypes.SLIDER.get(), AetherEntityTypes.VALKYRIE_QUEEN.get(), AetherEntityTypes.SUN_SPIRIT.get() ); - //vanilla - tag(EntityTypeTags.IMPACT_PROJECTILES).add( + // Vanilla + this.tag(EntityTypeTags.IMPACT_PROJECTILES).add( AetherEntityTypes.GOLDEN_DART.get(), AetherEntityTypes.POISON_DART.get(), AetherEntityTypes.ENCHANTED_DART.get(), AetherEntityTypes.LIGHTNING_KNIFE.get(), AetherEntityTypes.HAMMER_PROJECTILE.get()); - tag(EntityTypeTags.POWDER_SNOW_WALKABLE_MOBS).add(AetherEntityTypes.AERBUNNY.get()); - tag(EntityTypeTags.FREEZE_HURTS_EXTRA_TYPES).add(AetherEntityTypes.FIRE_MINION.get()); - tag(EntityTypeTags.FROG_FOOD).add( + this.tag(EntityTypeTags.POWDER_SNOW_WALKABLE_MOBS).add(AetherEntityTypes.AERBUNNY.get()); + this.tag(EntityTypeTags.FREEZE_HURTS_EXTRA_TYPES).add(AetherEntityTypes.FIRE_MINION.get()); + this.tag(EntityTypeTags.FROG_FOOD).add( AetherEntityTypes.BLUE_SWET.get(), AetherEntityTypes.GOLDEN_SWET.get(), AetherEntityTypes.SENTRY.get()); } - - @Nonnull - protected TagsProvider.TagAppender> tag(@Nonnull TagKey> tag) { - return super.tag(tag); - } } diff --git a/src/main/java/com/gildedgames/aether/data/generators/tags/AetherFluidTagData.java b/src/main/java/com/gildedgames/aether/data/generators/tags/AetherFluidTagData.java index e295c5a75c..86d101fbb1 100644 --- a/src/main/java/com/gildedgames/aether/data/generators/tags/AetherFluidTagData.java +++ b/src/main/java/com/gildedgames/aether/data/generators/tags/AetherFluidTagData.java @@ -2,38 +2,24 @@ import com.gildedgames.aether.Aether; import com.gildedgames.aether.AetherTags; -import net.minecraft.data.DataGenerator; +import net.minecraft.core.HolderLookup; +import net.minecraft.data.PackOutput; import net.minecraft.data.tags.FluidTagsProvider; -import net.minecraft.data.tags.TagsProvider; -import net.minecraft.tags.TagKey; -import net.minecraft.world.level.material.Fluid; import net.minecraft.world.level.material.Fluids; import net.minecraftforge.common.data.ExistingFileHelper; -import javax.annotation.Nonnull; import javax.annotation.Nullable; +import java.util.concurrent.CompletableFuture; -public class AetherFluidTagData extends FluidTagsProvider -{ - public AetherFluidTagData(DataGenerator generatorIn, @Nullable ExistingFileHelper existingFileHelper) { - super(generatorIn, Aether.MODID, existingFileHelper); +public class AetherFluidTagData extends FluidTagsProvider { + public AetherFluidTagData(PackOutput output, CompletableFuture registries, @Nullable ExistingFileHelper helper) { + super(output, registries, Aether.MODID, helper); } - @Nonnull @Override - public String getName() { - return "Aether Fluid Tags"; - } - - @Override - protected void addTags() { - tag(AetherTags.Fluids.ALLOWED_BUCKET_PICKUP).add( + public void addTags(HolderLookup.Provider provider) { + this.tag(AetherTags.Fluids.ALLOWED_BUCKET_PICKUP).add( Fluids.WATER, Fluids.FLOWING_WATER); } - - @Nonnull - protected TagsProvider.TagAppender tag(@Nonnull TagKey tag) { - return super.tag(tag); - } } diff --git a/src/main/java/com/gildedgames/aether/data/generators/tags/AetherItemTagData.java b/src/main/java/com/gildedgames/aether/data/generators/tags/AetherItemTagData.java index 2a021f1c04..ee16a7eaf0 100644 --- a/src/main/java/com/gildedgames/aether/data/generators/tags/AetherItemTagData.java +++ b/src/main/java/com/gildedgames/aether/data/generators/tags/AetherItemTagData.java @@ -4,66 +4,61 @@ import com.gildedgames.aether.block.AetherBlocks; import com.gildedgames.aether.item.AetherItems; import com.gildedgames.aether.AetherTags; -import net.minecraft.data.tags.BlockTagsProvider; -import net.minecraft.data.DataGenerator; +import net.minecraft.core.HolderLookup; +import net.minecraft.data.PackOutput; import net.minecraft.data.tags.ItemTagsProvider; import net.minecraft.data.tags.TagsProvider; import net.minecraft.resources.ResourceLocation; -import net.minecraft.tags.TagKey; -import net.minecraft.world.item.Item; import net.minecraft.world.item.Items; import net.minecraft.tags.ItemTags; +import net.minecraft.world.level.block.Block; import net.minecraftforge.common.Tags; import net.minecraftforge.common.data.ExistingFileHelper; import top.theillusivec4.curios.Curios; -import javax.annotation.Nonnull; import javax.annotation.Nullable; +import java.util.concurrent.CompletableFuture; -public class AetherItemTagData extends ItemTagsProvider -{ - public AetherItemTagData(DataGenerator dataGenerator, BlockTagsProvider blockTagProvider, @Nullable ExistingFileHelper existingFileHelper) { - super(dataGenerator, blockTagProvider, Aether.MODID, existingFileHelper); - } - - @Nonnull - @Override - public String getName() { - return "Aether Item Tags"; +public class AetherItemTagData extends ItemTagsProvider { + public AetherItemTagData(PackOutput output, CompletableFuture registries, TagsProvider blockTags, @Nullable ExistingFileHelper helper) { + super(output, registries, blockTags, Aether.MODID, helper); } @SuppressWarnings("unchecked") @Override - protected void addTags() { - //aether - copy(AetherTags.Blocks.AETHER_DIRT, AetherTags.Items.AETHER_DIRT); - copy(AetherTags.Blocks.HOLYSTONE, AetherTags.Items.HOLYSTONE); - copy(AetherTags.Blocks.AERCLOUDS, AetherTags.Items.AERCLOUDS); - copy(AetherTags.Blocks.SKYROOT_LOGS, AetherTags.Items.SKYROOT_LOGS); - copy(AetherTags.Blocks.GOLDEN_OAK_LOGS, AetherTags.Items.GOLDEN_OAK_LOGS); - copy(AetherTags.Blocks.AEROGEL, AetherTags.Items.AEROGEL); - copy(AetherTags.Blocks.DUNGEON_BLOCKS, AetherTags.Items.DUNGEON_BLOCKS); - copy(AetherTags.Blocks.LOCKED_DUNGEON_BLOCKS, AetherTags.Items.LOCKED_DUNGEON_BLOCKS); - copy(AetherTags.Blocks.TRAPPED_DUNGEON_BLOCKS, AetherTags.Items.TRAPPED_DUNGEON_BLOCKS); - copy(AetherTags.Blocks.BOSS_DOORWAY_DUNGEON_BLOCKS, AetherTags.Items.BOSS_DOORWAY_DUNGEON_BLOCKS); - copy(AetherTags.Blocks.TREASURE_DOORWAY_DUNGEON_BLOCKS, AetherTags.Items.TREASURE_DOORWAY_DUNGEON_BLOCKS); - copy(AetherTags.Blocks.SENTRY_BLOCKS, AetherTags.Items.SENTRY_BLOCKS); - copy(AetherTags.Blocks.ANGELIC_BLOCKS, AetherTags.Items.ANGELIC_BLOCKS); - copy(AetherTags.Blocks.HELLFIRE_BLOCKS, AetherTags.Items.HELLFIRE_BLOCKS); + public void addTags(HolderLookup.Provider provider) { + // Aether + this.copy(AetherTags.Blocks.AETHER_DIRT, AetherTags.Items.AETHER_DIRT); + this.copy(AetherTags.Blocks.HOLYSTONE, AetherTags.Items.HOLYSTONE); + this.copy(AetherTags.Blocks.AERCLOUDS, AetherTags.Items.AERCLOUDS); + this.copy(AetherTags.Blocks.SKYROOT_LOGS, AetherTags.Items.SKYROOT_LOGS); + this.copy(AetherTags.Blocks.GOLDEN_OAK_LOGS, AetherTags.Items.GOLDEN_OAK_LOGS); + this.copy(AetherTags.Blocks.AEROGEL, AetherTags.Items.AEROGEL); + this.copy(AetherTags.Blocks.DUNGEON_BLOCKS, AetherTags.Items.DUNGEON_BLOCKS); + this.copy(AetherTags.Blocks.LOCKED_DUNGEON_BLOCKS, AetherTags.Items.LOCKED_DUNGEON_BLOCKS); + this.copy(AetherTags.Blocks.TRAPPED_DUNGEON_BLOCKS, AetherTags.Items.TRAPPED_DUNGEON_BLOCKS); + this.copy(AetherTags.Blocks.BOSS_DOORWAY_DUNGEON_BLOCKS, AetherTags.Items.BOSS_DOORWAY_DUNGEON_BLOCKS); + this.copy(AetherTags.Blocks.TREASURE_DOORWAY_DUNGEON_BLOCKS, AetherTags.Items.TREASURE_DOORWAY_DUNGEON_BLOCKS); + this.copy(AetherTags.Blocks.SENTRY_BLOCKS, AetherTags.Items.SENTRY_BLOCKS); + this.copy(AetherTags.Blocks.ANGELIC_BLOCKS, AetherTags.Items.ANGELIC_BLOCKS); + this.copy(AetherTags.Blocks.HELLFIRE_BLOCKS, AetherTags.Items.HELLFIRE_BLOCKS); - tag(AetherTags.Items.PLANKS_CRAFTING).add(AetherBlocks.SKYROOT_PLANKS.get().asItem()); + this.tag(AetherTags.Items.CRAFTS_SKYROOT_PLANKS).addTags( + AetherTags.Items.SKYROOT_LOGS, + AetherTags.Items.GOLDEN_OAK_LOGS); + this.tag(AetherTags.Items.PLANKS_CRAFTING).add(AetherBlocks.SKYROOT_PLANKS.get().asItem()); - tag(AetherTags.Items.AETHER_PORTAL_ACTIVATION_ITEMS); - tag(AetherTags.Items.BOOK_OF_LORE_MATERIALS).addTag(Tags.Items.DUSTS_GLOWSTONE).add( + this.tag(AetherTags.Items.AETHER_PORTAL_ACTIVATION_ITEMS); + this.tag(AetherTags.Items.BOOK_OF_LORE_MATERIALS).addTag(Tags.Items.DUSTS_GLOWSTONE).add( Items.FLINT, AetherItems.AMBROSIUM_SHARD.get()); - tag(AetherTags.Items.SKYROOT_STICKS).add(AetherItems.SKYROOT_STICK.get()); - tag(AetherTags.Items.GOLDEN_AMBER_HARVESTERS).add( + this.tag(AetherTags.Items.SKYROOT_STICKS).add(AetherItems.SKYROOT_STICK.get()); + this.tag(AetherTags.Items.GOLDEN_AMBER_HARVESTERS).add( AetherItems.ZANITE_AXE.get(), AetherItems.GRAVITITE_AXE.get(), AetherItems.VALKYRIE_AXE.get()); - tag(AetherTags.Items.TREATED_AS_AETHER_ITEM); - tag(AetherTags.Items.NO_SKYROOT_DOUBLE_DROPS).addTag(AetherTags.Items.DUNGEON_KEYS).add( + this.tag(AetherTags.Items.TREATED_AS_AETHER_ITEM); + this.tag(AetherTags.Items.NO_SKYROOT_DOUBLE_DROPS).addTag(AetherTags.Items.DUNGEON_KEYS).add( AetherItems.VICTORY_MEDAL.get(), Items.PLAYER_HEAD, Items.SKELETON_SKULL, @@ -72,25 +67,25 @@ protected void addTags() { Items.WITHER_SKELETON_SKULL, Items.DRAGON_HEAD, Items.NETHER_STAR); - tag(AetherTags.Items.PIG_DROPS).add( + this.tag(AetherTags.Items.PIG_DROPS).add( Items.PORKCHOP, Items.COOKED_PORKCHOP); - tag(AetherTags.Items.DARTS).add( + this.tag(AetherTags.Items.DARTS).add( AetherItems.GOLDEN_DART.get(), AetherItems.POISON_DART.get(), AetherItems.ENCHANTED_DART.get()); - tag(AetherTags.Items.DART_SHOOTERS).add( + this.tag(AetherTags.Items.DART_SHOOTERS).add( AetherItems.GOLDEN_DART_SHOOTER.get(), AetherItems.POISON_DART_SHOOTER.get(), AetherItems.ENCHANTED_DART_SHOOTER.get()); - tag(AetherTags.Items.DEPLOYABLE_PARACHUTES).add( + this.tag(AetherTags.Items.DEPLOYABLE_PARACHUTES).add( AetherItems.COLD_PARACHUTE.get(), AetherItems.GOLDEN_PARACHUTE.get()); - tag(AetherTags.Items.DUNGEON_KEYS).add( + this.tag(AetherTags.Items.DUNGEON_KEYS).add( AetherItems.BRONZE_DUNGEON_KEY.get(), AetherItems.SILVER_DUNGEON_KEY.get(), AetherItems.GOLD_DUNGEON_KEY.get()); - tag(AetherTags.Items.ACCEPTED_MUSIC_DISCS).add( + this.tag(AetherTags.Items.ACCEPTED_MUSIC_DISCS).add( Items.MUSIC_DISC_11, Items.MUSIC_DISC_13, Items.MUSIC_DISC_BLOCKS, @@ -102,67 +97,67 @@ protected void addTags() { Items.MUSIC_DISC_WAIT, Items.MUSIC_DISC_WARD, Items.MUSIC_DISC_OTHERSIDE); - tag(AetherTags.Items.SAVE_NBT_IN_RECIPE).add( + this.tag(AetherTags.Items.SAVE_NBT_IN_RECIPE).add( AetherItems.ENCHANTED_DART_SHOOTER.get(), AetherItems.ICE_RING.get(), AetherItems.ICE_PENDANT.get()); - tag(AetherTags.Items.MOA_EGGS).add( + this.tag(AetherTags.Items.MOA_EGGS).add( AetherItems.BLUE_MOA_EGG.get(), AetherItems.WHITE_MOA_EGG.get(), AetherItems.BLACK_MOA_EGG.get(), AetherItems.ORANGE_MOA_EGG.get()); - tag(AetherTags.Items.FREEZABLE_BUCKETS) + this.tag(AetherTags.Items.FREEZABLE_BUCKETS) .add(Items.WATER_BUCKET) .add(AetherItems.SKYROOT_WATER_BUCKET.get()); - tag(AetherTags.Items.FREEZABLE_RINGS) + this.tag(AetherTags.Items.FREEZABLE_RINGS) .add(AetherItems.IRON_RING.get()) .add(AetherItems.GOLDEN_RING.get()); - tag(AetherTags.Items.FREEZABLE_PENDANTS) + this.tag(AetherTags.Items.FREEZABLE_PENDANTS) .add(AetherItems.IRON_PENDANT.get()) .add(AetherItems.GOLDEN_PENDANT.get()); - tag(AetherTags.Items.SLIDER_DAMAGING_ITEMS).addTag(Tags.Items.TOOLS_PICKAXES); + this.tag(AetherTags.Items.SLIDER_DAMAGING_ITEMS).addTag(Tags.Items.TOOLS_PICKAXES); - tag(AetherTags.Items.PHYG_TEMPTATION_ITEMS).add(AetherItems.BLUE_BERRY.get()); - tag(AetherTags.Items.FLYING_COW_TEMPTATION_ITEMS).add(AetherItems.BLUE_BERRY.get()); - tag(AetherTags.Items.SHEEPUFF_TEMPTATION_ITEMS).add(AetherItems.BLUE_BERRY.get()); - tag(AetherTags.Items.AERBUNNY_TEMPTATION_ITEMS).add(AetherItems.BLUE_BERRY.get()); - tag(AetherTags.Items.MOA_TEMPTATION_ITEMS).add(AetherItems.NATURE_STAFF.get()); - tag(AetherTags.Items.MOA_FOOD_ITEMS).add(AetherItems.AECHOR_PETAL.get()); + this.tag(AetherTags.Items.PHYG_TEMPTATION_ITEMS).add(AetherItems.BLUE_BERRY.get()); + this.tag(AetherTags.Items.FLYING_COW_TEMPTATION_ITEMS).add(AetherItems.BLUE_BERRY.get()); + this.tag(AetherTags.Items.SHEEPUFF_TEMPTATION_ITEMS).add(AetherItems.BLUE_BERRY.get()); + this.tag(AetherTags.Items.AERBUNNY_TEMPTATION_ITEMS).add(AetherItems.BLUE_BERRY.get()); + this.tag(AetherTags.Items.MOA_TEMPTATION_ITEMS).add(AetherItems.NATURE_STAFF.get()); + this.tag(AetherTags.Items.MOA_FOOD_ITEMS).add(AetherItems.AECHOR_PETAL.get()); - tag(AetherTags.Items.SKYROOT_REPAIRING).add(AetherBlocks.SKYROOT_PLANKS.get().asItem()); - tag(AetherTags.Items.HOLYSTONE_REPAIRING).add(AetherBlocks.HOLYSTONE.get().asItem()); - tag(AetherTags.Items.ZANITE_REPAIRING).add(AetherItems.ZANITE_GEMSTONE.get()); - tag(AetherTags.Items.GRAVITITE_REPAIRING).add(AetherBlocks.ENCHANTED_GRAVITITE.get().asItem()); - tag(AetherTags.Items.VALKYRIE_REPAIRING); - tag(AetherTags.Items.FLAMING_REPAIRING); - tag(AetherTags.Items.LIGHTNING_REPAIRING); - tag(AetherTags.Items.HOLY_REPAIRING); - tag(AetherTags.Items.VAMPIRE_REPAIRING); - tag(AetherTags.Items.PIG_SLAYER_REPAIRING); - tag(AetherTags.Items.HAMMER_OF_NOTCH_REPAIRING); - tag(AetherTags.Items.CANDY_CANE_REPAIRING).add(AetherItems.CANDY_CANE.get()); - tag(AetherTags.Items.NEPTUNE_REPAIRING); - tag(AetherTags.Items.PHOENIX_REPAIRING); - tag(AetherTags.Items.OBSIDIAN_REPAIRING); - tag(AetherTags.Items.SENTRY_REPAIRING); - tag(AetherTags.Items.ICE_REPAIRING); + this.tag(AetherTags.Items.SKYROOT_REPAIRING).add(AetherBlocks.SKYROOT_PLANKS.get().asItem()); + this.tag(AetherTags.Items.HOLYSTONE_REPAIRING).add(AetherBlocks.HOLYSTONE.get().asItem()); + this.tag(AetherTags.Items.ZANITE_REPAIRING).add(AetherItems.ZANITE_GEMSTONE.get()); + this.tag(AetherTags.Items.GRAVITITE_REPAIRING).add(AetherBlocks.ENCHANTED_GRAVITITE.get().asItem()); + this.tag(AetherTags.Items.VALKYRIE_REPAIRING); + this.tag(AetherTags.Items.FLAMING_REPAIRING); + this.tag(AetherTags.Items.LIGHTNING_REPAIRING); + this.tag(AetherTags.Items.HOLY_REPAIRING); + this.tag(AetherTags.Items.VAMPIRE_REPAIRING); + this.tag(AetherTags.Items.PIG_SLAYER_REPAIRING); + this.tag(AetherTags.Items.HAMMER_OF_NOTCH_REPAIRING); + this.tag(AetherTags.Items.CANDY_CANE_REPAIRING).add(AetherItems.CANDY_CANE.get()); + this.tag(AetherTags.Items.NEPTUNE_REPAIRING); + this.tag(AetherTags.Items.PHOENIX_REPAIRING); + this.tag(AetherTags.Items.OBSIDIAN_REPAIRING); + this.tag(AetherTags.Items.SENTRY_REPAIRING); + this.tag(AetherTags.Items.ICE_REPAIRING); - tag(AetherTags.Items.TOOLS_LANCES).add(AetherItems.VALKYRIE_LANCE.get()); - tag(AetherTags.Items.TOOLS_HAMMERS).add(AetherItems.HAMMER_OF_NOTCH.get()); + this.tag(AetherTags.Items.TOOLS_LANCES).add(AetherItems.VALKYRIE_LANCE.get()); + this.tag(AetherTags.Items.TOOLS_HAMMERS).add(AetherItems.HAMMER_OF_NOTCH.get()); - tag(AetherTags.Items.AETHER_RING).add( + this.tag(AetherTags.Items.AETHER_RING).add( AetherItems.IRON_RING.get(), AetherItems.GOLDEN_RING.get(), AetherItems.ZANITE_RING.get(), AetherItems.ICE_RING.get()) .addOptionalTag(new ResourceLocation(Curios.MODID, "ring")); - tag(AetherTags.Items.AETHER_PENDANT).add( + this.tag(AetherTags.Items.AETHER_PENDANT).add( AetherItems.IRON_PENDANT.get(), AetherItems.GOLDEN_PENDANT.get(), AetherItems.ZANITE_PENDANT.get(), AetherItems.ICE_PENDANT.get()) .addOptionalTag(new ResourceLocation(Curios.MODID, "necklace")); - tag(AetherTags.Items.AETHER_GLOVES).add( + this.tag(AetherTags.Items.AETHER_GLOVES).add( AetherItems.LEATHER_GLOVES.get(), AetherItems.CHAINMAIL_GLOVES.get(), AetherItems.IRON_GLOVES.get(), @@ -176,7 +171,7 @@ protected void addTags() { AetherItems.OBSIDIAN_GLOVES.get(), AetherItems.VALKYRIE_GLOVES.get()) .addOptionalTag(new ResourceLocation(Curios.MODID, "hands")); - tag(AetherTags.Items.AETHER_CAPE).add( + this.tag(AetherTags.Items.AETHER_CAPE).add( AetherItems.RED_CAPE.get(), AetherItems.BLUE_CAPE.get(), AetherItems.YELLOW_CAPE.get(), @@ -186,21 +181,21 @@ protected void addTags() { AetherItems.AGILITY_CAPE.get(), AetherItems.VALKYRIE_CAPE.get()) .addOptionalTag(new ResourceLocation(Curios.MODID, "back")); - tag(AetherTags.Items.AETHER_ACCESSORY).add( + this.tag(AetherTags.Items.AETHER_ACCESSORY).add( AetherItems.GOLDEN_FEATHER.get(), AetherItems.REGENERATION_STONE.get(), AetherItems.IRON_BUBBLE.get()) .addOptionalTag(new ResourceLocation(Curios.MODID, "curio")) .addOptionalTag(new ResourceLocation(Curios.MODID, "charm")); - tag(AetherTags.Items.AETHER_SHIELD).add(AetherItems.SHIELD_OF_REPULSION.get()); - tag(AetherTags.Items.RING).addTag(AetherTags.Items.AETHER_RING); - tag(AetherTags.Items.NECKLACE).addTag(AetherTags.Items.AETHER_PENDANT); - tag(AetherTags.Items.HANDS).addTag(AetherTags.Items.AETHER_GLOVES); - tag(AetherTags.Items.BACK).addTag(AetherTags.Items.AETHER_CAPE); - tag(AetherTags.Items.CURIO).addTag(AetherTags.Items.AETHER_ACCESSORY); - tag(AetherTags.Items.CHARM).addTag(AetherTags.Items.AETHER_ACCESSORY); + this.tag(AetherTags.Items.AETHER_SHIELD).add(AetherItems.SHIELD_OF_REPULSION.get()); + this.tag(AetherTags.Items.RING).addTag(AetherTags.Items.AETHER_RING); + this.tag(AetherTags.Items.NECKLACE).addTag(AetherTags.Items.AETHER_PENDANT); + this.tag(AetherTags.Items.HANDS).addTag(AetherTags.Items.AETHER_GLOVES); + this.tag(AetherTags.Items.BACK).addTag(AetherTags.Items.AETHER_CAPE); + this.tag(AetherTags.Items.CURIO).addTag(AetherTags.Items.AETHER_ACCESSORY); + this.tag(AetherTags.Items.CHARM).addTag(AetherTags.Items.AETHER_ACCESSORY); - tag(AetherTags.Items.ACCESSORIES).addTags( + this.tag(AetherTags.Items.ACCESSORIES).addTags( AetherTags.Items.AETHER_RING, AetherTags.Items.AETHER_PENDANT, AetherTags.Items.AETHER_GLOVES, @@ -208,107 +203,34 @@ protected void addTags() { AetherTags.Items.AETHER_ACCESSORY, AetherTags.Items.AETHER_SHIELD); - //vanilla - tag(ItemTags.STONE_CRAFTING_MATERIALS).add(AetherBlocks.HOLYSTONE.get().asItem()); - tag(ItemTags.STONE_BRICKS).add(AetherBlocks.HOLYSTONE_BRICKS.get().asItem()).addTag(AetherTags.Items.DUNGEON_BLOCKS); - tag(ItemTags.WOODEN_STAIRS).add(AetherBlocks.SKYROOT_STAIRS.get().asItem()); - tag(ItemTags.WOODEN_SLABS).add(AetherBlocks.SKYROOT_SLAB.get().asItem()); - tag(ItemTags.WOODEN_FENCES).add(AetherBlocks.SKYROOT_FENCE.get().asItem()); - tag(ItemTags.WOODEN_DOORS).add(AetherBlocks.SKYROOT_DOOR.get().asItem()); - tag(ItemTags.WOODEN_TRAPDOORS).add(AetherBlocks.SKYROOT_TRAPDOOR.get().asItem()); - tag(ItemTags.SAPLINGS).add( - AetherBlocks.SKYROOT_SAPLING.get().asItem(), - AetherBlocks.GOLDEN_OAK_SAPLING.get().asItem()); - tag(ItemTags.LOGS_THAT_BURN).addTags( //charcoal recipes - AetherTags.Items.SKYROOT_LOGS, - AetherTags.Items.GOLDEN_OAK_LOGS); - tag(ItemTags.STAIRS).add( - AetherBlocks.SKYROOT_STAIRS.get().asItem(), - AetherBlocks.CARVED_STAIRS.get().asItem(), - AetherBlocks.ANGELIC_STAIRS.get().asItem(), - AetherBlocks.HELLFIRE_STAIRS.get().asItem(), - AetherBlocks.HOLYSTONE_STAIRS.get().asItem(), - AetherBlocks.MOSSY_HOLYSTONE_STAIRS.get().asItem(), - AetherBlocks.ICESTONE_STAIRS.get().asItem(), - AetherBlocks.HOLYSTONE_BRICK_STAIRS.get().asItem(), - AetherBlocks.AEROGEL_STAIRS.get().asItem()); - tag(ItemTags.SLABS).add( - AetherBlocks.SKYROOT_SLAB.get().asItem(), - AetherBlocks.CARVED_SLAB.get().asItem(), - AetherBlocks.ANGELIC_SLAB.get().asItem(), - AetherBlocks.HELLFIRE_SLAB.get().asItem(), - AetherBlocks.HOLYSTONE_SLAB.get().asItem(), - AetherBlocks.MOSSY_HOLYSTONE_SLAB.get().asItem(), - AetherBlocks.ICESTONE_SLAB.get().asItem(), - AetherBlocks.HOLYSTONE_BRICK_SLAB.get().asItem(), - AetherBlocks.AEROGEL_SLAB.get().asItem()); - tag(ItemTags.WALLS).add( - AetherBlocks.CARVED_WALL.get().asItem(), - AetherBlocks.ANGELIC_WALL.get().asItem(), - AetherBlocks.HELLFIRE_WALL.get().asItem(), - AetherBlocks.HOLYSTONE_WALL.get().asItem(), - AetherBlocks.MOSSY_HOLYSTONE_WALL.get().asItem(), - AetherBlocks.ICESTONE_WALL.get().asItem(), - AetherBlocks.HOLYSTONE_BRICK_WALL.get().asItem(), - AetherBlocks.AEROGEL_WALL.get().asItem()); - tag(ItemTags.LEAVES).add( - AetherBlocks.SKYROOT_LEAVES.get().asItem(), - AetherBlocks.GOLDEN_OAK_LEAVES.get().asItem(), - AetherBlocks.CRYSTAL_LEAVES.get().asItem(), - AetherBlocks.CRYSTAL_FRUIT_LEAVES.get().asItem(), - AetherBlocks.HOLIDAY_LEAVES.get().asItem(), - AetherBlocks.DECORATED_HOLIDAY_LEAVES.get().asItem()); - tag(ItemTags.SMALL_FLOWERS).add( - AetherBlocks.PURPLE_FLOWER.get().asItem(), - AetherBlocks.WHITE_FLOWER.get().asItem()); - tag(ItemTags.BEDS).add(AetherBlocks.SKYROOT_BED.get().asItem()); - tag(ItemTags.PIGLIN_LOVED).add( - AetherItems.GOLDEN_RING.get(), - AetherItems.GOLDEN_PENDANT.get(), - AetherItems.GOLDEN_GLOVES.get()); - tag(ItemTags.FOX_FOOD).add( - AetherItems.BLUE_BERRY.get(), - AetherItems.ENCHANTED_BERRY.get()); - tag(ItemTags.SIGNS).add(AetherBlocks.SKYROOT_SIGN.get().asItem()); - tag(ItemTags.MUSIC_DISCS).add( - AetherItems.MUSIC_DISC_AETHER_TUNE.get(), - AetherItems.MUSIC_DISC_ASCENDING_DAWN.get(), - AetherItems.MUSIC_DISC_WELCOMING_SKIES.get(), - AetherItems.MUSIC_DISC_LEGACY.get()); - tag(ItemTags.BEACON_PAYMENT_ITEMS).add( - AetherItems.ZANITE_GEMSTONE.get(), - AetherBlocks.ENCHANTED_GRAVITITE.get().asItem()); - tag(ItemTags.BOATS).add(AetherItems.SKYROOT_BOAT.get()); - tag(ItemTags.CHEST_BOATS).add(AetherItems.SKYROOT_CHEST_BOAT.get()); - - //forge - tag(Tags.Items.BOOKSHELVES).add(AetherBlocks.SKYROOT_BOOKSHELF.get().asItem()); - tag(Tags.Items.FENCE_GATES_WOODEN).add(AetherBlocks.SKYROOT_FENCE_GATE.get().asItem()); - tag(Tags.Items.FENCES_WOODEN).add(AetherBlocks.SKYROOT_FENCE.get().asItem()); - tag(Tags.Items.FENCE_GATES).add(AetherBlocks.SKYROOT_FENCE_GATE.get().asItem()); - tag(Tags.Items.FENCES).add(AetherBlocks.SKYROOT_FENCE.get().asItem()); - tag(Tags.Items.EGGS).add( + // Forge + this.tag(Tags.Items.BOOKSHELVES).add(AetherBlocks.SKYROOT_BOOKSHELF.get().asItem()); + this.tag(Tags.Items.FENCE_GATES_WOODEN).add(AetherBlocks.SKYROOT_FENCE_GATE.get().asItem()); + this.tag(Tags.Items.FENCES_WOODEN).add(AetherBlocks.SKYROOT_FENCE.get().asItem()); + this.tag(Tags.Items.FENCE_GATES).add(AetherBlocks.SKYROOT_FENCE_GATE.get().asItem()); + this.tag(Tags.Items.FENCES).add(AetherBlocks.SKYROOT_FENCE.get().asItem()); + this.tag(Tags.Items.EGGS).add( AetherItems.BLUE_MOA_EGG.get(), AetherItems.WHITE_MOA_EGG.get(), AetherItems.BLACK_MOA_EGG.get(), AetherItems.ORANGE_MOA_EGG.get()); - tag(Tags.Items.GEMS).add(AetherItems.ZANITE_GEMSTONE.get()); - tag(Tags.Items.GLASS_COLORLESS).add(AetherBlocks.QUICKSOIL_GLASS.get().asItem()); - tag(Tags.Items.GLASS_PANES_COLORLESS).add(AetherBlocks.QUICKSOIL_GLASS_PANE.get().asItem()); - tag(Tags.Items.ORE_RATES_SINGULAR).add( + this.tag(Tags.Items.GEMS).add(AetherItems.ZANITE_GEMSTONE.get()); + this.tag(Tags.Items.GLASS_COLORLESS).add(AetherBlocks.QUICKSOIL_GLASS.get().asItem()); + this.tag(Tags.Items.GLASS_PANES_COLORLESS).add(AetherBlocks.QUICKSOIL_GLASS_PANE.get().asItem()); + this.tag(Tags.Items.ORE_RATES_SINGULAR).add( AetherBlocks.AMBROSIUM_ORE.get().asItem(), AetherBlocks.ZANITE_ORE.get().asItem(), AetherBlocks.GRAVITITE_ORE.get().asItem()); - tag(Tags.Items.ORES).add( + this.tag(Tags.Items.ORES).add( AetherBlocks.AMBROSIUM_ORE.get().asItem(), AetherBlocks.ZANITE_ORE.get().asItem(), AetherBlocks.GRAVITITE_ORE.get().asItem()); - tag(Tags.Items.RODS_WOODEN).add(AetherItems.SKYROOT_STICK.get()); - tag(Tags.Items.STORAGE_BLOCKS).add( + this.tag(Tags.Items.RODS_WOODEN).add(AetherItems.SKYROOT_STICK.get()); + this.tag(Tags.Items.STORAGE_BLOCKS).add( AetherBlocks.AMBROSIUM_BLOCK.get().asItem(), AetherBlocks.ZANITE_BLOCK.get().asItem()); - tag(Tags.Items.TOOLS).addTag(AetherTags.Items.TOOLS_HAMMERS); - tag(Tags.Items.TOOLS_SWORDS).add( + this.tag(Tags.Items.TOOLS).addTag(AetherTags.Items.TOOLS_HAMMERS); + this.tag(Tags.Items.TOOLS_SWORDS).add( AetherItems.SKYROOT_SWORD.get(), AetherItems.HOLYSTONE_SWORD.get(), AetherItems.ZANITE_SWORD.get(), @@ -319,53 +241,53 @@ protected void addTags() { AetherItems.VAMPIRE_BLADE.get(), AetherItems.PIG_SLAYER.get(), AetherItems.CANDY_CANE_SWORD.get()).addTag(AetherTags.Items.TOOLS_LANCES); - tag(Tags.Items.TOOLS_AXES).add( + this.tag(Tags.Items.TOOLS_AXES).add( AetherItems.SKYROOT_AXE.get(), AetherItems.HOLYSTONE_AXE.get(), AetherItems.ZANITE_AXE.get(), AetherItems.GRAVITITE_AXE.get(), AetherItems.VALKYRIE_AXE.get()); - tag(Tags.Items.TOOLS_PICKAXES).add( + this.tag(Tags.Items.TOOLS_PICKAXES).add( AetherItems.SKYROOT_PICKAXE.get(), AetherItems.HOLYSTONE_PICKAXE.get(), AetherItems.ZANITE_PICKAXE.get(), AetherItems.GRAVITITE_PICKAXE.get(), AetherItems.VALKYRIE_PICKAXE.get()); - tag(Tags.Items.TOOLS_SHOVELS).add( + this.tag(Tags.Items.TOOLS_SHOVELS).add( AetherItems.SKYROOT_SHOVEL.get(), AetherItems.HOLYSTONE_SHOVEL.get(), AetherItems.ZANITE_SHOVEL.get(), AetherItems.GRAVITITE_SHOVEL.get(), AetherItems.VALKYRIE_SHOVEL.get()); - tag(Tags.Items.TOOLS_HOES).add( + this.tag(Tags.Items.TOOLS_HOES).add( AetherItems.SKYROOT_HOE.get(), AetherItems.HOLYSTONE_HOE.get(), AetherItems.ZANITE_HOE.get(), AetherItems.GRAVITITE_HOE.get(), AetherItems.VALKYRIE_HOE.get()); - tag(Tags.Items.TOOLS_BOWS).add(AetherItems.PHOENIX_BOW.get()); - tag(Tags.Items.ARMORS_HELMETS).add( + this.tag(Tags.Items.TOOLS_BOWS).add(AetherItems.PHOENIX_BOW.get()); + this.tag(Tags.Items.ARMORS_HELMETS).add( AetherItems.ZANITE_HELMET.get(), AetherItems.GRAVITITE_HELMET.get(), AetherItems.NEPTUNE_HELMET.get(), AetherItems.PHOENIX_HELMET.get(), AetherItems.OBSIDIAN_HELMET.get(), AetherItems.VALKYRIE_HELMET.get()); - tag(Tags.Items.ARMORS_CHESTPLATES).add( + this.tag(Tags.Items.ARMORS_CHESTPLATES).add( AetherItems.ZANITE_CHESTPLATE.get(), AetherItems.GRAVITITE_CHESTPLATE.get(), AetherItems.NEPTUNE_CHESTPLATE.get(), AetherItems.PHOENIX_CHESTPLATE.get(), AetherItems.OBSIDIAN_CHESTPLATE.get(), AetherItems.VALKYRIE_CHESTPLATE.get()); - tag(Tags.Items.ARMORS_LEGGINGS).add( + this.tag(Tags.Items.ARMORS_LEGGINGS).add( AetherItems.ZANITE_LEGGINGS.get(), AetherItems.GRAVITITE_LEGGINGS.get(), AetherItems.NEPTUNE_LEGGINGS.get(), AetherItems.PHOENIX_LEGGINGS.get(), AetherItems.OBSIDIAN_LEGGINGS.get(), AetherItems.VALKYRIE_LEGGINGS.get()); - tag(Tags.Items.ARMORS_BOOTS).add( + this.tag(Tags.Items.ARMORS_BOOTS).add( AetherItems.ZANITE_BOOTS.get(), AetherItems.GRAVITITE_BOOTS.get(), AetherItems.NEPTUNE_BOOTS.get(), @@ -373,10 +295,78 @@ protected void addTags() { AetherItems.OBSIDIAN_BOOTS.get(), AetherItems.VALKYRIE_BOOTS.get(), AetherItems.SENTRY_BOOTS.get()); - } - @Nonnull - protected TagsProvider.TagAppender tag(@Nonnull TagKey tag) { - return super.tag(tag); + // Vanilla + this.tag(ItemTags.STONE_CRAFTING_MATERIALS).add(AetherBlocks.HOLYSTONE.get().asItem()); + this.tag(ItemTags.STONE_BRICKS).add(AetherBlocks.HOLYSTONE_BRICKS.get().asItem()).addTag(AetherTags.Items.DUNGEON_BLOCKS); + this.tag(ItemTags.WOODEN_STAIRS).add(AetherBlocks.SKYROOT_STAIRS.get().asItem()); + this.tag(ItemTags.WOODEN_SLABS).add(AetherBlocks.SKYROOT_SLAB.get().asItem()); + this.tag(ItemTags.WOODEN_FENCES).add(AetherBlocks.SKYROOT_FENCE.get().asItem()); + 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.SAPLINGS).add( + AetherBlocks.SKYROOT_SAPLING.get().asItem(), + AetherBlocks.GOLDEN_OAK_SAPLING.get().asItem()); + this.tag(ItemTags.LOGS_THAT_BURN).addTags( // Charcoal Recipes + AetherTags.Items.SKYROOT_LOGS, + AetherTags.Items.GOLDEN_OAK_LOGS); + this.tag(ItemTags.STAIRS).add( + AetherBlocks.SKYROOT_STAIRS.get().asItem(), + AetherBlocks.CARVED_STAIRS.get().asItem(), + AetherBlocks.ANGELIC_STAIRS.get().asItem(), + AetherBlocks.HELLFIRE_STAIRS.get().asItem(), + AetherBlocks.HOLYSTONE_STAIRS.get().asItem(), + AetherBlocks.MOSSY_HOLYSTONE_STAIRS.get().asItem(), + AetherBlocks.ICESTONE_STAIRS.get().asItem(), + AetherBlocks.HOLYSTONE_BRICK_STAIRS.get().asItem(), + AetherBlocks.AEROGEL_STAIRS.get().asItem()); + this.tag(ItemTags.SLABS).add( + AetherBlocks.SKYROOT_SLAB.get().asItem(), + AetherBlocks.CARVED_SLAB.get().asItem(), + AetherBlocks.ANGELIC_SLAB.get().asItem(), + AetherBlocks.HELLFIRE_SLAB.get().asItem(), + AetherBlocks.HOLYSTONE_SLAB.get().asItem(), + AetherBlocks.MOSSY_HOLYSTONE_SLAB.get().asItem(), + AetherBlocks.ICESTONE_SLAB.get().asItem(), + AetherBlocks.HOLYSTONE_BRICK_SLAB.get().asItem(), + AetherBlocks.AEROGEL_SLAB.get().asItem()); + this.tag(ItemTags.WALLS).add( + AetherBlocks.CARVED_WALL.get().asItem(), + AetherBlocks.ANGELIC_WALL.get().asItem(), + AetherBlocks.HELLFIRE_WALL.get().asItem(), + AetherBlocks.HOLYSTONE_WALL.get().asItem(), + AetherBlocks.MOSSY_HOLYSTONE_WALL.get().asItem(), + AetherBlocks.ICESTONE_WALL.get().asItem(), + AetherBlocks.HOLYSTONE_BRICK_WALL.get().asItem(), + AetherBlocks.AEROGEL_WALL.get().asItem()); + this.tag(ItemTags.LEAVES).add( + AetherBlocks.SKYROOT_LEAVES.get().asItem(), + AetherBlocks.GOLDEN_OAK_LEAVES.get().asItem(), + AetherBlocks.CRYSTAL_LEAVES.get().asItem(), + AetherBlocks.CRYSTAL_FRUIT_LEAVES.get().asItem(), + AetherBlocks.HOLIDAY_LEAVES.get().asItem(), + AetherBlocks.DECORATED_HOLIDAY_LEAVES.get().asItem()); + this.tag(ItemTags.SMALL_FLOWERS).add( + AetherBlocks.PURPLE_FLOWER.get().asItem(), + AetherBlocks.WHITE_FLOWER.get().asItem()); + this.tag(ItemTags.BEDS).add(AetherBlocks.SKYROOT_BED.get().asItem()); + this.tag(ItemTags.PIGLIN_LOVED).add( + AetherItems.GOLDEN_RING.get(), + AetherItems.GOLDEN_PENDANT.get(), + AetherItems.GOLDEN_GLOVES.get()); + this.tag(ItemTags.FOX_FOOD).add( + AetherItems.BLUE_BERRY.get(), + AetherItems.ENCHANTED_BERRY.get()); + this.tag(ItemTags.SIGNS).add(AetherBlocks.SKYROOT_SIGN.get().asItem()); + this.tag(ItemTags.MUSIC_DISCS).add( + AetherItems.MUSIC_DISC_AETHER_TUNE.get(), + AetherItems.MUSIC_DISC_ASCENDING_DAWN.get(), + AetherItems.MUSIC_DISC_WELCOMING_SKIES.get(), + AetherItems.MUSIC_DISC_LEGACY.get()); + this.tag(ItemTags.BEACON_PAYMENT_ITEMS).add( + AetherItems.ZANITE_GEMSTONE.get(), + AetherBlocks.ENCHANTED_GRAVITITE.get().asItem()); + this.tag(ItemTags.BOATS).add(AetherItems.SKYROOT_BOAT.get()); + this.tag(ItemTags.CHEST_BOATS).add(AetherItems.SKYROOT_CHEST_BOAT.get()); } } diff --git a/src/main/java/com/gildedgames/aether/data/generators/tags/AetherStructureTagData.java b/src/main/java/com/gildedgames/aether/data/generators/tags/AetherStructureTagData.java index 5038203329..b894850665 100644 --- a/src/main/java/com/gildedgames/aether/data/generators/tags/AetherStructureTagData.java +++ b/src/main/java/com/gildedgames/aether/data/generators/tags/AetherStructureTagData.java @@ -2,21 +2,23 @@ import com.gildedgames.aether.Aether; import com.gildedgames.aether.AetherTags; -import com.gildedgames.aether.data.resources.AetherStructures; -import net.minecraft.data.DataGenerator; +import com.gildedgames.aether.data.resources.registries.AetherStructures; +import net.minecraft.core.HolderLookup; +import net.minecraft.data.PackOutput; import net.minecraft.data.tags.StructureTagsProvider; import net.minecraftforge.common.data.ExistingFileHelper; -import org.jetbrains.annotations.Nullable; -public class AetherStructureTagData extends StructureTagsProvider { +import javax.annotation.Nullable; +import java.util.concurrent.CompletableFuture; - public AetherStructureTagData(DataGenerator generator, @Nullable ExistingFileHelper existingFileHelper) { - super(generator, Aether.MODID, existingFileHelper); +public class AetherStructureTagData extends StructureTagsProvider { + public AetherStructureTagData(PackOutput output, CompletableFuture registries, @Nullable ExistingFileHelper helper) { + super(output, registries, Aether.MODID, helper); } @Override - protected void addTags() { - tag(AetherTags.Structures.DUNGEONS).add( + public void addTags(HolderLookup.Provider provider) { + this.tag(AetherTags.Structures.DUNGEONS).add( AetherStructures.BRONZE_DUNGEON, AetherStructures.SILVER_DUNGEON, AetherStructures.GOLD_DUNGEON diff --git a/src/main/java/com/gildedgames/aether/data/providers/AetherBlockLootProvider.java b/src/main/java/com/gildedgames/aether/data/providers/AetherBlockLootSubProvider.java similarity index 59% rename from src/main/java/com/gildedgames/aether/data/providers/AetherBlockLootProvider.java rename to src/main/java/com/gildedgames/aether/data/providers/AetherBlockLootSubProvider.java index 19992ba0fb..305c0a1b67 100644 --- a/src/main/java/com/gildedgames/aether/data/providers/AetherBlockLootProvider.java +++ b/src/main/java/com/gildedgames/aether/data/providers/AetherBlockLootSubProvider.java @@ -11,7 +11,8 @@ import net.minecraft.advancements.critereon.ItemPredicate; import net.minecraft.advancements.critereon.LocationPredicate; import net.minecraft.core.BlockPos; -import net.minecraft.data.loot.BlockLoot; +import net.minecraft.data.loot.BlockLootSubProvider; +import net.minecraft.world.flag.FeatureFlagSet; import net.minecraft.world.item.Item; import net.minecraft.world.item.Items; import net.minecraft.world.item.enchantment.Enchantments; @@ -31,111 +32,99 @@ import net.minecraft.world.level.storage.loot.providers.number.ConstantValue; import net.minecraft.world.level.storage.loot.providers.number.UniformGenerator; -import java.util.function.Supplier; +import java.util.Set; -public abstract class AetherBlockLootProvider extends BlockLoot { - public void dropNone(Supplier block) { - super.add(block.get(), noDrop()); +public abstract class AetherBlockLootSubProvider extends BlockLootSubProvider { + public AetherBlockLootSubProvider(Set items, FeatureFlagSet flags) { + super(items, flags); } - public void dropDoubleWithSilk(Supplier block, Supplier drop) { - add(block.get(), (result) -> droppingDoubleWithSilkTouch(result, drop.get())); + public void dropNone(Block block) { + this.add(block, noDrop()); } - public void dropSelfDouble(Supplier block) { - super.add(block.get(), droppingDouble(block.get())); + public void dropDoubleWithSilk(Block block, ItemLike drop) { + this.add(block, (result) -> this.droppingDoubleWithSilkTouch(result, drop)); } - public void dropSelf(Supplier block) { - super.dropSelf(block.get()); + public void dropSelfDouble(Block block) { + this.add(block, this.droppingDouble(block)); } - public void dropDoubleWithFortune(Supplier block, Supplier drop) { - super.add(block.get(), (result) -> droppingDoubleItemsWithFortune(result, drop.get())); + public void dropDoubleWithFortune(Block block, Item drop) { + this.add(block, (result) -> this.droppingDoubleItemsWithFortune(result, drop)); } - public void dropWithFortune(Supplier block, Supplier drop) { - super.add(block.get(), (result) -> createOreDrop(result, drop.get())); + public void dropWithFortune(Block block, Item drop) { + this.add(block, (result) -> this.createOreDrop(result, drop)); } - public void dropSilk(Supplier block) { - super.dropWhenSilkTouch(block.get()); + public LootTable.Builder droppingDoubleWithSilkTouch(Block block, ItemLike noSilkTouch) { + return this.droppingDoubleWithSilkTouch(block, this.applyExplosionCondition(block, LootItem.lootTableItem(noSilkTouch))); } - public void drop(Supplier block, Supplier drop) { - this.dropOther(block.get(), drop.get()); + public LootTable.Builder droppingDoubleWithSilkTouch(Block block, LootPoolEntryContainer.Builder builder) { + return this.droppingDouble(block, BlockLootAccessor.hasSilkTouch(), builder); } - public void dropPot(Supplier block) { - this.dropPottedContents(block.get()); - } - - protected static LootTable.Builder droppingDoubleWithSilkTouch(Block block, ItemLike noSilkTouch) { - return droppingDoubleWithSilkTouch(block, applyExplosionCondition(block, LootItem.lootTableItem(noSilkTouch))); - } - - protected static LootTable.Builder droppingDoubleWithSilkTouch(Block block, LootPoolEntryContainer.Builder builder) { - return droppingDouble(block, BlockLootAccessor.hasSilkTouch(), builder); - } - - protected static LootTable.Builder droppingDouble(ItemLike item) { - return LootTable.lootTable().withPool(applyExplosionCondition(item, LootPool.lootPool().setRolls(ConstantValue.exactly(1)) + public LootTable.Builder droppingDouble(ItemLike item) { + return LootTable.lootTable().withPool(this.applyExplosionCondition(item, LootPool.lootPool().setRolls(ConstantValue.exactly(1)) .add(LootItem.lootTableItem(item)))) .apply(DoubleDrops.builder()); } - protected static LootTable.Builder droppingDouble(Block block, LootItemCondition.Builder conditionBuilder, LootPoolEntryContainer.Builder p_218494_2_) { + public LootTable.Builder droppingDouble(Block block, LootItemCondition.Builder conditionBuilder, LootPoolEntryContainer.Builder builder) { return LootTable.lootTable().withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1)) - .add(LootItem.lootTableItem(block).when(conditionBuilder).otherwise(p_218494_2_))) + .add(LootItem.lootTableItem(block).when(conditionBuilder).otherwise(builder))) .apply(DoubleDrops.builder()); } - protected static LootTable.Builder droppingWithChancesAndSkyrootSticks(Block block, Block sapling, float... chances) { - return createSilkTouchOrShearsDispatchTable(block, applyExplosionCondition(block, LootItem.lootTableItem(sapling)).when(BonusLevelTableCondition.bonusLevelFlatChance(Enchantments.BLOCK_FORTUNE, chances))) + public LootTable.Builder droppingWithChancesAndSkyrootSticks(Block block, Block sapling, float... chances) { + return createSilkTouchOrShearsDispatchTable(block, this.applyExplosionCondition(block, LootItem.lootTableItem(sapling)).when(BonusLevelTableCondition.bonusLevelFlatChance(Enchantments.BLOCK_FORTUNE, chances))) .withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1)).when(BlockLootAccessor.hasShearsOrSilkTouch().invert()) - .add(applyExplosionDecay(block, + .add(this.applyExplosionDecay(block, LootItem.lootTableItem(AetherItems.SKYROOT_STICK.get()).apply(SetItemCountFunction.setCount(UniformGenerator.between(1.0F, 2.0F)))) .when(BonusLevelTableCondition.bonusLevelFlatChance(Enchantments.BLOCK_FORTUNE, 0.02F, 0.022222223F, 0.025F, 0.033333335F, 0.1F)))) .apply(DoubleDrops.builder()); } - protected static LootTable.Builder droppingGoldenOakLeaves(Block block, Block sapling, float... chances) { - return droppingWithChancesAndSkyrootSticks(block, sapling, chances) + public LootTable.Builder droppingGoldenOakLeaves(Block block, Block sapling, float... chances) { + return this.droppingWithChancesAndSkyrootSticks(block, sapling, chances) .withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).when(BlockLootAccessor.hasShearsOrSilkTouch().invert()) - .add(applyExplosionCondition(block, + .add(this.applyExplosionCondition(block, LootItem.lootTableItem(Items.GOLDEN_APPLE)) .when(BonusLevelTableCondition.bonusLevelFlatChance(Enchantments.BLOCK_FORTUNE, 0.00005F, 0.000055555557F, 0.0000625F, 0.00008333334F, 0.00025F)))); } - protected static LootTable.Builder droppingDoubleItemsWithFortune(Block block, Item item) { - return createSilkTouchDispatchTable(block, applyExplosionDecay(block, LootItem.lootTableItem(item) + public LootTable.Builder droppingDoubleItemsWithFortune(Block block, Item item) { + return createSilkTouchDispatchTable(block, this.applyExplosionDecay(block, LootItem.lootTableItem(item) .apply(ApplyBonusCount.addOreBonusCount(Enchantments.BLOCK_FORTUNE)))) .apply(DoubleDrops.builder()); } - protected static LootTable.Builder droppingWithSkyrootSticks(Block block) { - return createSilkTouchOrShearsDispatchTable(block, applyExplosionDecay(block, + public LootTable.Builder droppingWithSkyrootSticks(Block block) { + return createSilkTouchOrShearsDispatchTable(block, this.applyExplosionDecay(block, LootItem.lootTableItem(AetherItems.SKYROOT_STICK.get()).apply(SetItemCountFunction.setCount(UniformGenerator.between(1.0F, 2.0F)))) .when(BonusLevelTableCondition.bonusLevelFlatChance(Enchantments.BLOCK_FORTUNE, 0.02F, 0.022222223F, 0.025F, 0.033333335F, 0.1F))) .apply(DoubleDrops.builder()); } - protected static LootTable.Builder droppingWithFruitAndSkyrootSticks(Block block, Item fruit) { - return createSilkTouchOrShearsDispatchTable(block, applyExplosionDecay(block, LootItem.lootTableItem(fruit))) + public LootTable.Builder droppingWithFruitAndSkyrootSticks(Block block, Item fruit) { + return createSilkTouchOrShearsDispatchTable(block, this.applyExplosionDecay(block, LootItem.lootTableItem(fruit))) .withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1)).when(BlockLootAccessor.hasShearsOrSilkTouch().invert()) - .add(applyExplosionDecay(block, + .add(this.applyExplosionDecay(block, LootItem.lootTableItem(AetherItems.SKYROOT_STICK.get()).apply(SetItemCountFunction.setCount(UniformGenerator.between(1.0F, 2.0F)))) .when(BonusLevelTableCondition.bonusLevelFlatChance(Enchantments.BLOCK_FORTUNE, 0.02F, 0.022222223F, 0.025F, 0.033333335F, 0.1F)))) .apply(DoubleDrops.builder()); } - protected static LootTable.Builder droppingDoubleGoldenOak(Block original, Block block, Item item) { + public LootTable.Builder droppingDoubleGoldenOak(Block original, Block block, Item item) { return LootTable.lootTable() - .withPool(applyExplosionDecay(block, LootPool.lootPool().setRolls(ConstantValue.exactly(1)).add(LootItem.lootTableItem(original) + .withPool(this.applyExplosionDecay(block, LootPool.lootPool().setRolls(ConstantValue.exactly(1)).add(LootItem.lootTableItem(original) .when(BlockLootAccessor.hasSilkTouch())))) - .withPool(applyExplosionDecay(block, LootPool.lootPool().setRolls(ConstantValue.exactly(1)).add(LootItem.lootTableItem(block) + .withPool(this.applyExplosionDecay(block, LootPool.lootPool().setRolls(ConstantValue.exactly(1)).add(LootItem.lootTableItem(block) .when(BlockLootAccessor.hasSilkTouch().invert())))) - .withPool(applyExplosionDecay(item, LootPool.lootPool().setRolls(ConstantValue.exactly(1)).add(LootItem.lootTableItem(item) + .withPool(this.applyExplosionDecay(item, LootPool.lootPool().setRolls(ConstantValue.exactly(1)).add(LootItem.lootTableItem(item) .when(MatchTool.toolMatches(ItemPredicate.Builder.item().of(AetherTags.Items.GOLDEN_AMBER_HARVESTERS))) .when(BlockLootAccessor.hasSilkTouch().invert()) .apply(SetItemCountFunction.setCount(UniformGenerator.between(1.0F, 2.0F))) @@ -143,16 +132,16 @@ protected static LootTable.Builder droppingDoubleGoldenOak(Block original, Block .apply(DoubleDrops.builder()); } - protected static LootTable.Builder droppingNameableBlockEntityTable(Block block) { - return LootTable.lootTable().withPool(applyExplosionCondition(block, LootPool.lootPool().setRolls(ConstantValue.exactly(1)) + public LootTable.Builder droppingNameableBlockEntityTable(Block block) { + return LootTable.lootTable().withPool(this.applyExplosionCondition(block, LootPool.lootPool().setRolls(ConstantValue.exactly(1)) .add(LootItem.lootTableItem(block) .apply(CopyNameFunction.copyName(CopyNameFunction.NameSource.BLOCK_ENTITY)))) ); } - protected static LootTable.Builder droppingBerryBush(Block block, Block stem, Item drop) { + public LootTable.Builder droppingBerryBush(Block block, Block stem, Item drop) { return LootTable.lootTable().withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1)) - .add(applyExplosionDecay(block, LootItem.lootTableItem(drop) + .add(this.applyExplosionDecay(block, LootItem.lootTableItem(drop) .apply(SetItemCountFunction.setCount(UniformGenerator.between(1.0F, 3.0F)) .when(LocationCheck.checkLocation( LocationPredicate.Builder.location().setBlock( @@ -174,8 +163,8 @@ protected static LootTable.Builder droppingBerryBush(Block block, Block stem, It ); } - protected static LootTable.Builder droppingTreasureChest(Block block) { - return LootTable.lootTable().withPool(applyExplosionCondition(block, LootPool.lootPool().setRolls(ConstantValue.exactly(1)) + public LootTable.Builder droppingTreasureChest(Block block) { + return LootTable.lootTable().withPool(this.applyExplosionCondition(block, LootPool.lootPool().setRolls(ConstantValue.exactly(1)) .add(LootItem.lootTableItem(block) .apply(CopyNameFunction.copyName(CopyNameFunction.NameSource.BLOCK_ENTITY)) .apply(CopyNbtFunction.copyData(ContextNbtProvider.BLOCK_ENTITY) @@ -184,15 +173,15 @@ protected static LootTable.Builder droppingTreasureChest(Block block) { ); } - protected static LootTable.Builder droppingPresentLoot(Block block) { + public LootTable.Builder droppingPresentLoot(Block block) { return LootTable.lootTable().withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1)) .add(LootItem.lootTableItem(Items.AIR).setWeight(18) .apply(SpawnTNT.builder())) .add(LootItem.lootTableItem(Items.AIR).setWeight(9) .apply(SpawnXP.builder())) - .add((applyExplosionDecay(block, LootItem.lootTableItem(AetherItems.GINGERBREAD_MAN.get()).setWeight(8) - .apply(SetItemCountFunction.setCount(UniformGenerator.between(5.0F, 6.0F)))))) - .add((applyExplosionDecay(block, LootItem.lootTableItem(AetherItems.CANDY_CANE_SWORD.get()).setWeight(1)))) + .add(this.applyExplosionDecay(block, LootItem.lootTableItem(AetherItems.GINGERBREAD_MAN.get()).setWeight(8) + .apply(SetItemCountFunction.setCount(UniformGenerator.between(5.0F, 6.0F))))) + .add(this.applyExplosionDecay(block, LootItem.lootTableItem(AetherItems.CANDY_CANE_SWORD.get()).setWeight(1))) ); } } diff --git a/src/main/java/com/gildedgames/aether/data/providers/AetherBlockStateProvider.java b/src/main/java/com/gildedgames/aether/data/providers/AetherBlockStateProvider.java index 357ab16742..e05885a6d1 100644 --- a/src/main/java/com/gildedgames/aether/data/providers/AetherBlockStateProvider.java +++ b/src/main/java/com/gildedgames/aether/data/providers/AetherBlockStateProvider.java @@ -1,11 +1,10 @@ package com.gildedgames.aether.data.providers; -import com.gildedgames.aether.Aether; import com.gildedgames.aether.block.construction.AetherFarmBlock; import com.gildedgames.aether.block.AetherBlockStateProperties; import com.gildedgames.aether.block.dungeon.DoorwayBlock; import com.gildedgames.aether.block.miscellaneous.UnstableObsidianBlock; -import net.minecraft.data.DataGenerator; +import net.minecraft.data.PackOutput; import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.state.properties.BedPart; import net.minecraft.world.level.block.state.properties.BlockStateProperties; @@ -16,146 +15,50 @@ import net.minecraftforge.common.data.ExistingFileHelper; import net.minecraftforge.registries.ForgeRegistries; -import java.util.function.Supplier; - public abstract class AetherBlockStateProvider extends BlockStateProvider { - public AetherBlockStateProvider(DataGenerator generator, ExistingFileHelper fileHelper) { - super(generator, Aether.MODID, fileHelper); - } - - protected ResourceLocation texture(String name) { - return modLoc("block/" + name); - } - - protected ResourceLocation texture(String name, String location) { - return modLoc("block/" + location + name); - } - - protected ResourceLocation texture(String name, String location, String suffix) { - return modLoc("block/" + location + name + suffix); - } - - protected String name(Supplier block) { - return ForgeRegistries.BLOCKS.getKey(block.get()).getPath(); - } - - public void block(Supplier block, String location) { - simpleBlock(block.get(), cubeAll(block, location)); - } - - public void blockDoubleDrops(Supplier block, String location) { - getVariantBuilder(block.get()).forAllStatesExcept(state -> ConfiguredModel.builder().modelFile(cubeAll(block, location)).build(), AetherBlockStateProperties.DOUBLE_DROPS); - } - - public void randomBlockDoubleDrops(Supplier block, String location) { - getVariantBuilder(block.get()).forAllStatesExcept(state -> ConfiguredModel.allYRotations(cubeAll(block, location), 0, false), AetherBlockStateProperties.DOUBLE_DROPS); - } - - public void translucentBlock(Supplier block, String location) { - simpleBlock(block.get(), cubeAllTranslucent(block, location)); - } - - public void crossBlock(Supplier block, String location) { - crossBlock(block, models().cross(name(block), texture(name(block), location)).renderType(new ResourceLocation("cutout"))); - } - - private void crossBlock(Supplier block, ModelFile model) { - getVariantBuilder(block.get()).forAllStates(state -> ConfiguredModel.builder().modelFile(model).build()); + public AetherBlockStateProvider(PackOutput output, String id, ExistingFileHelper helper) { + super(output, id, helper); } - public void saplingBlock(Supplier block, String location) { - ModelFile sapling = models().cross(name(block), texture(name(block), location)).renderType(new ResourceLocation("cutout")); - getVariantBuilder(block.get()).forAllStatesExcept(state -> ConfiguredModel.builder().modelFile(sapling).build(), - SaplingBlock.STAGE); + public String name(Block block) { + ResourceLocation location = ForgeRegistries.BLOCKS.getKey(block); + if (location != null) { + return location.getPath(); + } else { + throw new IllegalStateException("Unknown block: " + block.toString()); + } } - public void stairs(Supplier block, Supplier baseBlock, String location) { - stairsBlock(block.get(), texture(name(baseBlock), location)); + public ResourceLocation texture(String name) { + return this.modLoc("block/" + name); } - public void slab(Supplier block, Supplier baseBlock, String location) { - slabBlock(block.get(), texture(name(baseBlock)), texture(name(baseBlock), location)); + public ResourceLocation texture(String name, String location) { + return this.modLoc("block/" + location + name); } - public void translucentSlab(Supplier block, Supplier baseBlock, String location) { - ResourceLocation texture = texture(name(baseBlock), location); - translucentSlabBlock(block.get(), models().slab(name(block), texture, texture, texture).renderType(new ResourceLocation("translucent")), models().slabTop(name(block) + "_top", texture, texture, texture).renderType(new ResourceLocation("translucent")), models().getExistingFile(texture(name(baseBlock)))); + public ResourceLocation texture(String name, String location, String suffix) { + return this.modLoc("block/" + location + name + suffix); } - public void translucentSlabBlock(SlabBlock block, ModelFile bottom, ModelFile top, ModelFile doubleslab) { - getVariantBuilder(block) - .partialState().with(SlabBlock.TYPE, SlabType.BOTTOM).addModels(new ConfiguredModel(bottom)) - .partialState().with(SlabBlock.TYPE, SlabType.TOP).addModels(new ConfiguredModel(top)) - .partialState().with(SlabBlock.TYPE, SlabType.DOUBLE).addModels(new ConfiguredModel(doubleslab)); + public ResourceLocation extend(ResourceLocation location, String suffix) { + return new ResourceLocation(location.getNamespace(), location.getPath() + suffix); } - public void buttonBlock(Supplier block, ResourceLocation texture) { - ModelFile button = models().button(name(block), texture); - ModelFile buttonPressed = models().buttonPressed(name(block) + "_pressed", texture); - buttonBlock(block.get(), button, buttonPressed); + public void block(Block block, String location) { + this.simpleBlock(block, this.cubeAll(block, location)); } - public void pressurePlateBlock(Supplier block, ResourceLocation texture) { - ModelFile pressurePlate = models().pressurePlate(name(block), texture); - ModelFile pressurePlateDown = models().pressurePlateDown(name(block) + "_down", texture); - pressurePlateBlock(block.get(), pressurePlate, pressurePlateDown); - } - - public void signBlock(Supplier signBlock, Supplier wallSignBlock, ResourceLocation texture) { - ModelFile sign = models().sign(name(signBlock), texture); - signBlock(signBlock.get(), wallSignBlock.get(), sign); - } - - public void fence(Supplier block, Supplier baseBlock, String location) { - fenceBlock(block.get(), texture(name(baseBlock), location)); - fenceColumn(block, name(baseBlock), location); - } - - private void fenceColumn(Supplier block, String side, String location) { - String baseName = name(block); - fourWayBlock(block.get(), - models().fencePost(baseName + "_post", texture(side, location)), - models().fenceSide(baseName + "_side", texture(side, location))); - } - - public void fenceGateBlock(Supplier block, Supplier baseBlock, String location) { - fenceGateBlockInternal(block.get(), name(block), texture(name(baseBlock), location)); - } - - private void fenceGateBlockInternal(FenceGateBlock block, String baseName, ResourceLocation texture) { - ModelFile gate = models().fenceGate(baseName, texture); - ModelFile gateOpen = models().fenceGateOpen(baseName + "_open", texture); - ModelFile gateWall = models().fenceGateWall(baseName + "_wall", texture); - ModelFile gateWallOpen = models().fenceGateWallOpen(baseName + "_wall_open", texture); - fenceGateBlock(block, gate, gateOpen, gateWall, gateWallOpen); - } - - public void doorBlock(Supplier block, ResourceLocation bottom, ResourceLocation top) { - doorBlockWithRenderType(block.get(), bottom, top, "cutout"); - } - - public void trapdoorBlock(Supplier block, ResourceLocation texture, boolean orientable) { - trapdoorBlockWithRenderType(block.get(), texture, orientable, "cutout"); - } - - public void wallBlock(Supplier block, Supplier baseBlock, String location) { - wallBlockInternal(block.get(), name(block), texture(name(baseBlock), location)); - } - - private void wallBlockInternal(WallBlock block, String baseName, ResourceLocation texture) { - wallBlock(block, models().wallPost(baseName + "_post", texture), models().wallSide(baseName + "_side", texture), models().wallSideTall(baseName + "_side_tall", texture)); - } - - public void portal(Supplier block) { - ModelFile portal_ew = models().withExistingParent(name(block) + "_ew", mcLoc("block/nether_portal_ew")) - .texture("particle", modLoc("block/miscellaneous/" + name(block))) - .texture("portal", modLoc("block/miscellaneous/" + name(block))) + public void portal(Block block) { + ModelFile portal_ew = this.models().withExistingParent(this.name(block) + "_ew", this.mcLoc("block/nether_portal_ew")) + .texture("particle", this.modLoc("block/miscellaneous/" + this.name(block))) + .texture("portal", this.modLoc("block/miscellaneous/" + this.name(block))) .renderType(new ResourceLocation("translucent")); - ModelFile portal_ns = models().withExistingParent(name(block) + "_ns", mcLoc("block/nether_portal_ns")) - .texture("particle", modLoc("block/miscellaneous/" + name(block))) - .texture("portal", modLoc("block/miscellaneous/" + name(block))) + ModelFile portal_ns = this.models().withExistingParent(this.name(block) + "_ns", this.mcLoc("block/nether_portal_ns")) + .texture("particle", this.modLoc("block/miscellaneous/" + this.name(block))) + .texture("portal", this.modLoc("block/miscellaneous/" + this.name(block))) .renderType(new ResourceLocation("translucent")); - getVariantBuilder(block.get()).forAllStates(state -> { + this.getVariantBuilder(block).forAllStates(state -> { Direction.Axis axis = state.getValue(NetherPortalBlock.AXIS); return ConfiguredModel.builder() .modelFile(axis == Direction.Axis.Z ? portal_ew : portal_ns) @@ -163,41 +66,54 @@ public void portal(Supplier block) { }); } - public void grass(Supplier block, Supplier dirtBlock) { - ModelFile grass = cubeBottomTop(name(block), extend(texture(name(block), "natural/"), "_side"), texture(name(dirtBlock), "natural/"), extend(texture(name(block), "natural/"), "_top")); - ModelFile grassSnowed = cubeBottomTop(name(block) + "_snow", extend(texture(name(block), "natural/"), "_snow"), texture(name(dirtBlock), "natural/"), extend(texture(name(block), "natural/"), "_top")); - getVariantBuilder(block.get()).forAllStatesExcept(state -> { + public void grass(Block block, Block dirtBlock) { + ModelFile grass = this.grassBlock(block, dirtBlock); + ModelFile grassSnowed = this.cubeBottomTop(this.name(block) + "_snow", + this.extend(this.texture(this.name(block), "natural/"), "_snow"), + this.texture(this.name(dirtBlock), "natural/"), + this.extend(this.texture(this.name(block), "natural/"), "_top")); + this.getVariantBuilder(block).forAllStatesExcept(state -> { boolean snowy = state.getValue(SnowyDirtBlock.SNOWY); return ConfiguredModel.allYRotations(snowy ? grassSnowed : grass, 0, false); }, AetherBlockStateProperties.DOUBLE_DROPS); } - public void enchantedGrass(Supplier block, Supplier grassBlock, Supplier dirtBlock) { - ModelFile grass = cubeBottomTop(name(block), extend(texture(name(block), "natural/"), "_side"), texture(name(dirtBlock), "natural/"), extend(texture(name(block), "natural/"), "_top")); - ModelFile grassSnowed = cubeBottomTop(name(grassBlock) + "_snow", extend(texture(name(grassBlock), "natural/"), "_snow"), texture(name(dirtBlock), "natural/"), extend(texture(name(block), "natural/"), "_top")); - getVariantBuilder(block.get()).forAllStatesExcept(state -> { + public void enchantedGrass(Block block, Block grassBlock, Block dirtBlock) { + ModelFile grass = this.grassBlock(block, dirtBlock); + ModelFile grassSnowed = this.cubeBottomTop(this.name(grassBlock) + "_snow", + this.extend(this.texture(this.name(grassBlock), "natural/"), "_snow"), + this.texture(this.name(dirtBlock), "natural/"), + this.extend(this.texture(this.name(block), "natural/"), "_top")); + this.getVariantBuilder(block).forAllStatesExcept(state -> { boolean snowy = state.getValue(SnowyDirtBlock.SNOWY); return ConfiguredModel.allYRotations(snowy ? grassSnowed : grass, 0, false); }, AetherBlockStateProperties.DOUBLE_DROPS); } - public void dirtPath(Supplier block, Supplier dirtBlock) { - ModelFile path = models().withExistingParent(name(block), mcLoc("block/dirt_path")) - .texture("particle", modLoc("block/natural/" + name(dirtBlock))) - .texture("top", modLoc("block/construction/" + name(block) + "_top")) - .texture("side", modLoc("block/construction/" + name(block) + "_side")) - .texture("bottom", modLoc("block/natural/" + name(dirtBlock))); - getVariantBuilder(block.get()).forAllStatesExcept(state -> ConfiguredModel.allYRotations(path, 0, false), AetherBlockStateProperties.DOUBLE_DROPS); + public ModelFile grassBlock(Block block, Block dirtBlock) { + return this.cubeBottomTop(this.name(block), + this.extend(this.texture(this.name(block), "natural/"), "_side"), + this.texture(this.name(dirtBlock), "natural/"), + this.extend(this.texture(this.name(block), "natural/"), "_top")); + } + + public void dirtPath(Block block, Block dirtBlock) { + ModelFile path = this.models().withExistingParent(this.name(block), this.mcLoc("block/dirt_path")) + .texture("particle", this.modLoc("block/natural/" + this.name(dirtBlock))) + .texture("top", this.modLoc("block/construction/" + this.name(block) + "_top")) + .texture("side", this.modLoc("block/construction/" + this.name(block) + "_side")) + .texture("bottom", this.modLoc("block/natural/" + this.name(dirtBlock))); + this.getVariantBuilder(block).forAllStatesExcept(state -> ConfiguredModel.allYRotations(path, 0, false), AetherBlockStateProperties.DOUBLE_DROPS); } - public void farmland(Supplier block, Supplier dirtBlock) { - ModelFile farmland = models().withExistingParent(name(block), mcLoc("block/template_farmland")) - .texture("dirt", modLoc("block/natural/" + name(dirtBlock))) - .texture("top", modLoc("block/construction/" + name(block))); - ModelFile moist = models().withExistingParent(name(block) + "_moist", mcLoc("block/template_farmland")) - .texture("dirt", modLoc("block/natural/" + name(dirtBlock))) - .texture("top", modLoc("block/construction/" + name(block) + "_moist")); - getVariantBuilder(block.get()).forAllStatesExcept(state -> { + public void farmland(Block block, Block dirtBlock) { + ModelFile farmland = this.models().withExistingParent(this.name(block), this.mcLoc("block/template_farmland")) + .texture("dirt", this.modLoc("block/natural/" + this.name(dirtBlock))) + .texture("top", this.modLoc("block/construction/" + this.name(block))); + ModelFile moist = this.models().withExistingParent(this.name(block) + "_moist", mcLoc("block/template_farmland")) + .texture("dirt", this.modLoc("block/natural/" + this.name(dirtBlock))) + .texture("top", this.modLoc("block/construction/" + this.name(block) + "_moist")); + this.getVariantBuilder(block).forAllStatesExcept(state -> { int moisture = state.getValue(AetherFarmBlock.MOISTURE); return ConfiguredModel.builder() .modelFile(moisture < AetherFarmBlock.MAX_MOISTURE ? farmland : moist) @@ -205,64 +121,99 @@ public void farmland(Supplier block, Supplier }, AetherBlockStateProperties.DOUBLE_DROPS); } - public void log(Supplier block) { - axisBlock(block.get(), texture(name(block), "natural/"), extend(texture(name(block), "natural/"), "_top")); + public void randomBlockDoubleDrops(Block block, String location) { + this.getVariantBuilder(block).forAllStatesExcept(state -> ConfiguredModel.allYRotations(this.cubeAll(block, location), 0, false), AetherBlockStateProperties.DOUBLE_DROPS); + } + + public void blockDoubleDrops(Block block, String location) { + this.getVariantBuilder(block).forAllStatesExcept(state -> ConfiguredModel.builder().modelFile(this.cubeAll(block, location)).build(), AetherBlockStateProperties.DOUBLE_DROPS); } - public void enchantedLog(Supplier block, Supplier baseBlock) { - axisBlock(block.get(), texture(name(block), "natural/"), extend(texture(name(baseBlock), "natural/"), "_top")); + public void translucentBlock(Block block, String location) { + this.simpleBlock(block, this.cubeAllTranslucent(block, location)); } - public void wood(Supplier block, Supplier baseBlock) { - axisBlock(block.get(), texture(name(baseBlock), "natural/"), texture(name(baseBlock), "natural/")); + public void log(RotatedPillarBlock block) { + this.axisBlock(block, this.texture(this.name(block), "natural/"), this.extend(this.texture(this.name(block), "natural/"), "_top")); } - public void pane(Supplier block, Supplier glass, String location) { - paneBlockWithRenderType(block.get(), texture(name(glass), location), extend(texture(name(block), location), "_top"), ResourceLocation.tryParse("translucent")); + public void enchantedLog(RotatedPillarBlock block, RotatedPillarBlock baseBlock) { + this.axisBlock(block, this.texture(this.name(block), "natural/"), this.extend(this.texture(this.name(baseBlock), "natural/"), "_top")); } - public void altar(Supplier block) { - ModelFile altar = cubeBottomTop(name(block), extend(texture(name(block), "utility/"), "_side"), extend(texture(name(block), "utility/"), "_bottom"), extend(texture(name(block), "utility/"), "_bottom")); - getVariantBuilder(block.get()).partialState().addModels(new ConfiguredModel(altar)); + public void wood(RotatedPillarBlock block, RotatedPillarBlock baseBlock) { + this.axisBlock(block, this.texture(this.name(baseBlock), "natural/"), this.texture(this.name(baseBlock), "natural/")); } - public void freezer(Supplier block) { - ModelFile freezer = cubeBottomTop(name(block), extend(texture(name(block), "utility/"), "_side"), extend(texture("altar", "utility/"), "_bottom"), extend(texture(name(block), "utility/"), "_top")); - getVariantBuilder(block.get()).partialState().addModels(new ConfiguredModel(freezer)); + public void pane(IronBarsBlock block, GlassBlock glass, String location) { + this.paneBlockWithRenderType(block, this.texture(this.name(glass), location), this.extend(this.texture(this.name(block), location), "_top"), ResourceLocation.tryParse("translucent")); } - public void incubator(Supplier block) { - ModelFile incubator = cubeBottomTop(name(block), extend(texture(name(block), "utility/"), "_side"), extend(texture("altar", "utility/"), "_bottom"), extend(texture(name(block), "utility/"), "_top")); - getVariantBuilder(block.get()).partialState().addModels(new ConfiguredModel(incubator)); + public void altar(Block block) { + ModelFile altar = this.cubeBottomTop(this.name(block), + this.extend(this.texture(this.name(block), "utility/"), "_side"), + this.extend(this.texture(this.name(block), "utility/"), "_bottom"), + this.extend(this.texture(this.name(block), "utility/"), "_bottom")); + this.getVariantBuilder(block).partialState().addModels(new ConfiguredModel(altar)); } - public void torchBlock(Supplier block, Supplier wall) { - ModelFile torch = models().torch(name(block), texture(name(block), "utility/")).renderType(new ResourceLocation("cutout")); - ModelFile torchwall = models().torchWall(name(wall), texture(name(block), "utility/")).renderType(new ResourceLocation("cutout")); - simpleBlock(block.get(), torch); - getVariantBuilder(wall.get()).forAllStates(state -> + public void freezer(Block block) { + ModelFile freezer = this.utility(block); + this.getVariantBuilder(block).partialState().addModels(new ConfiguredModel(freezer)); + } + + public void incubator(Block block) { + ModelFile incubator = this.utility(block); + this.getVariantBuilder(block).partialState().addModels(new ConfiguredModel(incubator)); + } + + public ModelFile utility(Block block) { + return this.cubeBottomTop(this.name(block), + this.extend(this.texture(this.name(block), "utility/"), "_side"), + this.extend(this.texture("altar", "utility/"), "_bottom"), + this.extend(this.texture(this.name(block), "utility/"), "_top")); + } + + public void torchBlock(Block block, Block wall) { + ModelFile torch = this.models().torch(this.name(block), this.texture(this.name(block), "utility/")).renderType(new ResourceLocation("cutout")); + ModelFile wallTorch = this.models().torchWall(this.name(wall), this.texture(this.name(block), "utility/")).renderType(new ResourceLocation("cutout")); + this.simpleBlock(block, torch); + getVariantBuilder(wall).forAllStates(state -> ConfiguredModel.builder() - .modelFile(torchwall) + .modelFile(wallTorch) .rotationY(((int) state.getValue(BlockStateProperties.HORIZONTAL_FACING).toYRot() + 90) % 360) .build()); } - public void berryBush(Supplier block, Supplier stem) { - getVariantBuilder(block.get()).partialState().addModels(new ConfiguredModel(bush(block, stem))); + public void signBlock(StandingSignBlock signBlock, WallSignBlock wallSignBlock, ResourceLocation texture) { + ModelFile sign = this.models().sign(this.name(signBlock), texture); + this.signBlock(signBlock, wallSignBlock, sign); + } + + public void crossBlock(Block block, String location) { + this.crossBlock(block, models().cross(this.name(block), this.texture(this.name(block), location)).renderType(new ResourceLocation("cutout"))); + } + + public void crossBlock(Block block, ModelFile model) { + this.getVariantBuilder(block).forAllStates(state -> ConfiguredModel.builder().modelFile(model).build()); + } + + public void berryBush(Block block, Block stem) { + this.getVariantBuilder(block).partialState().addModels(new ConfiguredModel(this.bush(block, stem))); } - public ModelFile bush(Supplier block, Supplier stem) { - return this.models().withExistingParent(name(block), mcLoc("block/block")) - .texture("particle", texture(name(block), "natural/")).texture("bush", texture(name(block), "natural/")).texture("stem", texture(name(stem), "natural/")) + public ModelFile bush(Block block, Block stem) { + return this.models().withExistingParent(this.name(block), this.mcLoc("block/block")) + .texture("particle", this.texture(this.name(block), "natural/")).texture("bush", this.texture(this.name(block), "natural/")).texture("stem", this.texture(this.name(stem), "natural/")) .element().from(0.0F, 0.0F, 0.0F).to(16.0F, 16.0F, 16.0F).shade(true).allFaces((direction, builder) -> builder.texture("#bush").end()).end() .element().from(0.8F, 0.0F, 8.0F).to(15.2F, 16.0F, 8.0F).rotation().origin(8.0F, 8.0F, 8.0F).axis(Direction.Axis.Y).angle(45.0F).rescale(true).end().shade(true).face(Direction.NORTH).texture("#stem").end().face(Direction.SOUTH).texture("#stem").end().end() .element().from(8.0F, 0.0F, 0.8F).to(8.0F, 16.0F, 15.2F).rotation().origin(8.0F, 8.0F, 8.0F).axis(Direction.Axis.Y).angle(45.0F).rescale(true).end().shade(true).face(Direction.WEST).texture("#stem").end().face(Direction.EAST).texture("#stem").end().end() .renderType(new ResourceLocation("cutout")); } - public BlockModelBuilder pottedStemModel(Supplier block, Supplier stem, String location) { - return models().withExistingParent(name(block), mcLoc("block/block")) - .texture("particle", mcLoc("block/flower_pot")).texture("stem", modLoc("block/" + location + name(stem))).texture("dirt", mcLoc("block/dirt")).texture("flowerpot", mcLoc("block/flower_pot")) + public BlockModelBuilder pottedStemModel(Block block, Block stem, String location) { + return models().withExistingParent(this.name(block), this.mcLoc("block/block")) + .texture("particle", this.mcLoc("block/flower_pot")).texture("stem", this.modLoc("block/" + location + this.name(stem))).texture("dirt", this.mcLoc("block/dirt")).texture("flowerpot", this.mcLoc("block/flower_pot")) .element().from(5.0F, 0.0F, 5.0F).to(6.0F, 6.0F, 11.0F) .face(Direction.NORTH).uvs(10.0F, 10.0F, 11.0F, 16.0F).texture("#flowerpot").end() .face(Direction.EAST).uvs(5.0F, 10.0F, 11.0F, 16.0F).texture("#flowerpot").end() @@ -298,14 +249,14 @@ public BlockModelBuilder pottedStemModel(Supplier block, Suppli .face(Direction.WEST).uvs(0.0F, 4.0F, 16.0F, 16.0F).texture("#stem").end().end(); } - public void pottedStem(Supplier stem, String location) { - ModelFile pot = pottedStemModel(stem, stem, location).renderType(new ResourceLocation("cutout")); - getVariantBuilder(stem.get()).partialState().addModels(new ConfiguredModel(pot)); + public void pottedStem(Block stem, String location) { + ModelFile pot = this.pottedStemModel(stem, stem, location).renderType(new ResourceLocation("cutout")); + this.getVariantBuilder(stem).partialState().addModels(new ConfiguredModel(pot)); } - public void pottedBush(Supplier bush, Supplier stem, String location) { - ModelFile pot = pottedStemModel(bush, stem, location) - .texture("stem", modLoc("block/" + location + name(stem))).texture("bush", modLoc("block/" + location + name(bush))) + public void pottedBush(Block bush, Block stem, String location) { + ModelFile pot = this.pottedStemModel(bush, stem, location) + .texture("stem", this.modLoc("block/" + location + this.name(stem))).texture("bush", this.modLoc("block/" + location + this.name(bush))) .element().from(3.0F, 6.0F, 3.0F).to(13.0F, 16.0F, 13.0F) .face(Direction.NORTH).uvs(3.0F, 3.0F, 13.0F, 13.0F).texture("#bush").end() .face(Direction.EAST).uvs(3.0F, 3.0F, 13.0F, 13.0F).texture("#bush").end() @@ -314,23 +265,28 @@ public void pottedBush(Supplier bush, Supplier .face(Direction.UP).uvs(3.0F, 3.0F, 13.0F, 13.0F).texture("#bush").end() .face(Direction.DOWN).uvs(3.0F, 3.0F, 13.0F, 13.0F).texture("#bush").end().end() .renderType(new ResourceLocation("cutout")); - getVariantBuilder(bush.get()).partialState().addModels(new ConfiguredModel(pot)); + this.getVariantBuilder(bush).partialState().addModels(new ConfiguredModel(pot)); } - public void pottedPlant(Supplier block, Supplier flower, String location) { - ModelFile pot = models().withExistingParent(name(block), mcLoc("block/flower_pot_cross")).texture("plant", modLoc("block/" + location + name(flower))).renderType(new ResourceLocation("cutout")); - getVariantBuilder(block.get()).partialState().addModels(new ConfiguredModel(pot)); + public void pottedPlant(Block block, Block flower, String location) { + ModelFile pot = this.models().withExistingParent(this.name(block), this.mcLoc("block/flower_pot_cross")).texture("plant", this.modLoc("block/" + location + this.name(flower))).renderType(new ResourceLocation("cutout")); + this.getVariantBuilder(block).partialState().addModels(new ConfiguredModel(pot)); } - public void dungeonBlock(Supplier block, Supplier baseBlock) { - ConfiguredModel dungeonBlock = new ConfiguredModel(models().cubeAll(name(baseBlock), texture(name(baseBlock), "dungeon/"))); - getVariantBuilder(block.get()).partialState().setModels(dungeonBlock); + public void saplingBlock(Block block, String location) { + ModelFile sapling = models().cross(this.name(block), this.texture(this.name(block), location)).renderType(new ResourceLocation("cutout")); + this.getVariantBuilder(block).forAllStatesExcept(state -> ConfiguredModel.builder().modelFile(sapling).build(), SaplingBlock.STAGE); } - public void invisibleBlock(Supplier block, Supplier baseBlock) { - ModelFile visible = models().cubeAll(name(baseBlock), texture(name(baseBlock), "dungeon/")); - ModelFile invisible = models().getBuilder(name(block)); - getVariantBuilder(block.get()).forAllStatesExcept(state -> { + public void dungeonBlock(Block block, Block baseBlock) { + ConfiguredModel dungeonBlock = new ConfiguredModel(this.models().cubeAll(this.name(baseBlock), this.texture(this.name(baseBlock), "dungeon/"))); + this.getVariantBuilder(block).partialState().setModels(dungeonBlock); + } + + 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 -> { if (!state.getValue(DoorwayBlock.INVISIBLE)) { return ConfiguredModel.builder().modelFile(visible).build(); } else { @@ -339,48 +295,129 @@ public void invisibleBlock(Supplier block, Supplier block, Supplier dummyBlock) { - ModelFile chest = models().cubeAll(name(block), mcLoc("block/" + name(dummyBlock))); - chest(block, chest); + public void chestMimic(Block block, Block dummyBlock) { + ModelFile chest = this.models().cubeAll(this.name(block), this.mcLoc("block/" + this.name(dummyBlock))); + this.chest(block, chest); } - public void treasureChest(Supplier block, Supplier dummyBlock) { - ModelFile chest = models().cubeAll(name(block), texture(name(dummyBlock), "dungeon/")); - chest(block, chest); + public void treasureChest(Block block, Block dummyBlock) { + ModelFile chest = this.models().cubeAll(this.name(block), this.texture(this.name(dummyBlock), "dungeon/")); + this.chest(block, chest); } - public void chest(Supplier block, ModelFile chest) { - getVariantBuilder(block.get()).forAllStatesExcept(state -> ConfiguredModel.builder().modelFile(chest).build(), + public void chest(Block block, ModelFile chest) { + this.getVariantBuilder(block).forAllStatesExcept(state -> ConfiguredModel.builder().modelFile(chest).build(), ChestBlock.TYPE, ChestBlock.WATERLOGGED); } - public void pillar(Supplier block) { - axisBlock(block.get(), extend(texture(name(block), "dungeon/"), "_side"), extend(texture(name(block), "dungeon/"), "_top")); + public void pillar(RotatedPillarBlock block) { + this.axisBlock(block, this.extend(this.texture(this.name(block), "dungeon/"), "_side"), this.extend(this.texture(this.name(block), "dungeon/"), "_top")); + } + + public void pillarTop(RotatedPillarBlock block) { + this.axisBlock(block, this.texture("pillar_carved", "dungeon/"), this.texture(this.name(block), "dungeon/")); + } + + public void present(Block block) { + ModelFile present = this.cubeBottomTop(this.name(block), + this.extend(this.texture(this.name(block), "miscellaneous/"), "_side"), + this.extend(this.texture(this.name(block), "miscellaneous/"), "_top"), + this.extend(this.texture(this.name(block), "miscellaneous/"), "_top")); + this.getVariantBuilder(block).partialState().addModels(new ConfiguredModel(present)); + } + + public void fence(FenceBlock block, Block baseBlock, String location) { + this.fenceBlock(block, this.texture(this.name(baseBlock), location)); + this.fenceColumn(block, this.name(baseBlock), location); + } + + public void fenceColumn(CrossCollisionBlock block, String side, String location) { + String baseName = this.name(block); + this.fourWayBlock(block, + this.models().fencePost(baseName + "_post", this.texture(side, location)), + this.models().fenceSide(baseName + "_side", this.texture(side, location))); + } + + public void fenceGateBlock(FenceGateBlock block, Block baseBlock, String location) { + this.fenceGateBlockInternal(block, this.name(block), this.texture(this.name(baseBlock), location)); + } + + public void fenceGateBlockInternal(FenceGateBlock block, String baseName, ResourceLocation texture) { + ModelFile gate = this.models().fenceGate(baseName, texture); + ModelFile gateOpen = this.models().fenceGateOpen(baseName + "_open", texture); + ModelFile gateWall = this.models().fenceGateWall(baseName + "_wall", texture); + ModelFile gateWallOpen = this.models().fenceGateWallOpen(baseName + "_wall_open", texture); + this.fenceGateBlock(block, gate, gateOpen, gateWall, gateWallOpen); + } + + public void doorBlock(DoorBlock block, ResourceLocation bottom, ResourceLocation top) { + this.doorBlockWithRenderType(block, bottom, top, "cutout"); + } + + public void trapdoorBlock(TrapDoorBlock block, ResourceLocation texture, boolean orientable) { + this.trapdoorBlockWithRenderType(block, texture, orientable, "cutout"); + } + + public void buttonBlock(ButtonBlock block, ResourceLocation texture) { + ModelFile button = this.models().button(this.name(block), texture); + ModelFile buttonPressed = this.models().buttonPressed(this.name(block) + "_pressed", texture); + this.buttonBlock(block, button, buttonPressed); } - public void pillarTop(Supplier block) { - axisBlock(block.get(), texture("pillar_carved", "dungeon/"), texture(name(block), "dungeon/")); + public void pressurePlateBlock(PressurePlateBlock block, ResourceLocation texture) { + ModelFile pressurePlate = this.models().pressurePlate(this.name(block), texture); + ModelFile pressurePlateDown = this.models().pressurePlateDown(this.name(block) + "_down", texture); + this.pressurePlateBlock(block, pressurePlate, pressurePlateDown); } - public void present(Supplier block) { - ModelFile present = cubeBottomTop(name(block), extend(texture(name(block), "miscellaneous/"), "_side"), extend(texture(name(block), "miscellaneous/"), "_top"), extend(texture(name(block), "miscellaneous/"), "_top")); - getVariantBuilder(block.get()).partialState().addModels(new ConfiguredModel(present)); + public void wallBlock(WallBlock block, Block baseBlock, String location) { + this.wallBlockInternal(block, this.name(block), this.texture(this.name(baseBlock), location)); } - public void sunAltar(Supplier block) { - ModelFile sunAltar = cubeBottomTop(name(block), extend(texture(name(block), "utility/"), "_side"), texture("hellfire_stone", "dungeon/"), extend(texture(name(block), "utility/"), "_top")); - getVariantBuilder(block.get()).partialState().addModels(new ConfiguredModel(sunAltar)); + public void wallBlockInternal(WallBlock block, String baseName, ResourceLocation texture) { + this.wallBlock(block, this.models().wallPost(baseName + "_post", texture), + this.models().wallSide(baseName + "_side", texture), + this.models().wallSideTall(baseName + "_side_tall", texture)); } - public void bookshelf(Supplier block, Supplier endBlock) { - ModelFile bookshelf = models().cubeColumn(name(block), texture(name(block), "construction/"), texture(name(endBlock), "construction/")); - getVariantBuilder(block.get()).partialState().addModels(new ConfiguredModel(bookshelf)); + public void stairs(StairBlock block, Block baseBlock, String location) { + this.stairsBlock(block, this.texture(this.name(baseBlock), location)); } - public void bed(Supplier block, Supplier dummyBlock) { - ModelFile head = models().cubeAll(name(block) + "_head", texture(name(dummyBlock), "construction/")); - ModelFile foot = models().cubeAll(name(block) + "_foot", texture(name(dummyBlock), "construction/")); - getVariantBuilder(block.get()).forAllStatesExcept(state -> { + public void slab(SlabBlock block, Block baseBlock, String location) { + this.slabBlock(block, this.texture(this.name(baseBlock)), this.texture(this.name(baseBlock), location)); + } + + public void translucentSlab(Block block, Block baseBlock, String location) { + ResourceLocation texture = this.texture(this.name(baseBlock), location); + this.translucentSlabBlock(block, models().slab(this.name(block), texture, texture, texture).renderType(new ResourceLocation("translucent")), + this.models().slabTop(this.name(block) + "_top", texture, texture, texture).renderType(new ResourceLocation("translucent")), + this.models().getExistingFile(this.texture(this.name(baseBlock)))); + } + + public void translucentSlabBlock(Block block, ModelFile bottom, ModelFile top, ModelFile doubleSlab) { + this.getVariantBuilder(block) + .partialState().with(SlabBlock.TYPE, SlabType.BOTTOM).addModels(new ConfiguredModel(bottom)) + .partialState().with(SlabBlock.TYPE, SlabType.TOP).addModels(new ConfiguredModel(top)) + .partialState().with(SlabBlock.TYPE, SlabType.DOUBLE).addModels(new ConfiguredModel(doubleSlab)); + } + + public void sunAltar(Block block) { + ModelFile sunAltar = this.cubeBottomTop(name(block), + this.extend(this.texture(this.name(block), "utility/"), "_side"), this.texture("hellfire_stone", "dungeon/"), + this.extend(this.texture(this.name(block), "utility/"), "_top")); + this.getVariantBuilder(block).partialState().addModels(new ConfiguredModel(sunAltar)); + } + + public void bookshelf(Block block, Block endBlock) { + ModelFile bookshelf = this.models().cubeColumn(this.name(block), this.texture(this.name(block), "construction/"), this.texture(this.name(endBlock), "construction/")); + this.getVariantBuilder(block).partialState().addModels(new ConfiguredModel(bookshelf)); + } + + public void bed(Block block, Block dummyBlock) { + ModelFile head = this.models().cubeAll(this.name(block) + "_head", this.texture(this.name(dummyBlock), "construction/")); + ModelFile foot = this.models().cubeAll(this.name(block) + "_foot", this.texture(this.name(dummyBlock), "construction/")); + this.getVariantBuilder(block).forAllStatesExcept(state -> { Direction dir = state.getValue(BlockStateProperties.HORIZONTAL_FACING); BedPart part = state.getValue(BlockStateProperties.BED_PART); return ConfiguredModel.builder() @@ -390,26 +427,22 @@ public void bed(Supplier block, Supplier du }, BedBlock.OCCUPIED); } - public void unstableObsidian(Supplier block) { - getVariantBuilder(block.get()).forAllStates(state -> { + public void unstableObsidian(Block block) { + getVariantBuilder(block).forAllStates(state -> { int age = state.getValue(UnstableObsidianBlock.AGE); - return ConfiguredModel.builder().modelFile(models().cubeAll(name(block) + "_" + age, texture(name(block) + "_" + age, "miscellaneous/"))).build(); + return ConfiguredModel.builder().modelFile(this.models().cubeAll(this.name(block) + "_" + age, this.texture(this.name(block) + "_" + age, "miscellaneous/"))).build(); }); } - public ModelFile cubeAll(Supplier block, String location) { - return models().cubeAll(name(block), texture(name(block), location)); - } - - public ModelFile cubeAllTranslucent(Supplier block, String location) { - return models().cubeAll(name(block), texture(name(block), location)).renderType(new ResourceLocation("translucent")); + public ModelFile cubeAll(Block block, String location) { + return this.models().cubeAll(this.name(block), this.texture(this.name(block), location)); } - private ModelFile cubeBottomTop(String block, ResourceLocation side, ResourceLocation bottom, ResourceLocation top) { - return models().cubeBottomTop(block, side, bottom, top); + public ModelFile cubeAllTranslucent(Block block, String location) { + return this.models().cubeAll(this.name(block), this.texture(this.name(block), location)).renderType(new ResourceLocation("translucent")); } - private ResourceLocation extend(ResourceLocation rl, String suffix) { - return new ResourceLocation(rl.getNamespace(), rl.getPath() + suffix); + public ModelFile cubeBottomTop(String block, ResourceLocation side, ResourceLocation bottom, ResourceLocation top) { + return this.models().cubeBottomTop(block, side, bottom, top); } } diff --git a/src/main/java/com/gildedgames/aether/data/providers/AetherItemModelProvider.java b/src/main/java/com/gildedgames/aether/data/providers/AetherItemModelProvider.java index b3196e6635..cf3c9e8323 100644 --- a/src/main/java/com/gildedgames/aether/data/providers/AetherItemModelProvider.java +++ b/src/main/java/com/gildedgames/aether/data/providers/AetherItemModelProvider.java @@ -3,172 +3,167 @@ import com.gildedgames.aether.Aether; import net.minecraft.client.renderer.block.model.ItemTransforms; import net.minecraft.core.Direction; +import net.minecraft.data.PackOutput; import net.minecraft.world.level.block.Block; -import net.minecraft.data.DataGenerator; import net.minecraft.world.item.Item; import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.level.block.GlassBlock; -import net.minecraft.world.level.block.IronBarsBlock; -import net.minecraftforge.client.model.generators.ItemModelBuilder; import net.minecraftforge.client.model.generators.ItemModelProvider; import net.minecraftforge.common.data.ExistingFileHelper; import net.minecraftforge.registries.ForgeRegistries; -import java.util.function.Supplier; +public abstract class AetherItemModelProvider extends ItemModelProvider { + public AetherItemModelProvider(PackOutput output, String id, ExistingFileHelper helper) { + super(output, id, helper); + } -public abstract class AetherItemModelProvider extends ItemModelProvider -{ - public AetherItemModelProvider(DataGenerator generator, ExistingFileHelper fileHelper) { - super(generator, Aether.MODID, fileHelper); + public String blockName(Block block) { + ResourceLocation location = ForgeRegistries.BLOCKS.getKey(block); + if (location != null) { + return location.getPath(); + } else { + throw new IllegalStateException("Unknown block: " + block.toString()); + } } - public String blockName(Supplier block) { - return ForgeRegistries.BLOCKS.getKey(block.get()).getPath(); + public String itemName(Item item) { + ResourceLocation location = ForgeRegistries.ITEMS.getKey(item); + if (location != null) { + return location.getPath(); + } else { + throw new IllegalStateException("Unknown item: " + item.toString()); + } } protected ResourceLocation texture(String name) { - return modLoc("block/" + name); + return this.modLoc("block/" + name); } protected ResourceLocation texture(String name, String location) { - return modLoc("block/" + location + name); - } - - public ItemModelBuilder item(Supplier item, String location) { - ResourceLocation id = ForgeRegistries.ITEMS.getKey(item.get()); - return withExistingParent(id.getPath(), mcLoc("item/generated")) - .texture("layer0", modLoc("item/" + location + id.getPath())); + return this.modLoc("block/" + location + name); } - public ItemModelBuilder lookalikeBlock(Supplier block, ResourceLocation lookalike) { - return withExistingParent(ForgeRegistries.BLOCKS.getKey(block.get()).getPath(), lookalike); + public void item(Item item, String location) { + this.withExistingParent(this.itemName(item), mcLoc("item/generated")) + .texture("layer0", modLoc("item/" + location + this.itemName(item))); } - public ItemModelBuilder handheldItem(Supplier item, String location) { - ResourceLocation id = ForgeRegistries.ITEMS.getKey(item.get()); - return withExistingParent(id.getPath(), mcLoc("item/handheld")) - .texture("layer0", modLoc("item/" + location + id.getPath())); + public void handheldItem(Item item, String location) { + this.withExistingParent(this.itemName(item), this.mcLoc("item/handheld")) + .texture("layer0", this.modLoc("item/" + location + this.itemName(item))); } - public ItemModelBuilder lanceItem(Supplier item, String location) { - ResourceLocation id = ForgeRegistries.ITEMS.getKey(item.get()); - return withExistingParent(id.getPath(), mcLoc("item/handheld")) - .texture("layer0", modLoc("item/" + location + id.getPath())) + public void lanceItem(Item item, String location) { + this.withExistingParent(this.itemName(item), this.mcLoc("item/handheld")) + .texture("layer0", this.modLoc("item/" + location + this.itemName(item))) .transforms() .transform(ItemTransforms.TransformType.THIRD_PERSON_RIGHT_HAND).rotation(0.0F, -90.0F, 45.0F).translation(0.0F, 1.0F, -5.0F).scale(0.85F, 0.85F, 0.85F).end() .transform(ItemTransforms.TransformType.THIRD_PERSON_LEFT_HAND).rotation(0.0F, 90.0F, -45.0F).translation(0.0F, 1.0F, -5.0F).scale(0.85F, 0.85F, 0.85F).end() .end(); } - public ItemModelBuilder nameableWeapon(Supplier item, String location, String renamedVariant) { - withExistingParent(renamedVariant, mcLoc("item/handheld")).texture("layer0", modLoc("item/" + location + renamedVariant)); - ResourceLocation id = ForgeRegistries.ITEMS.getKey(item.get()); - return withExistingParent(id.getPath(), mcLoc("item/handheld")) - .texture("layer0", modLoc("item/" + location + id.getPath())) - .override().predicate(new ResourceLocation(Aether.MODID, "named"), 1).model(getExistingFile(modLoc("item/" + renamedVariant))).end(); + public void nameableWeapon(Item item, String location, String renamedVariant) { + this.withExistingParent(renamedVariant, this.mcLoc("item/handheld")).texture("layer0", this.modLoc("item/" + location + renamedVariant)); + this.withExistingParent(this.itemName(item), this.mcLoc("item/handheld")) + .texture("layer0", this.modLoc("item/" + location + this.itemName(item))) + .override().predicate(new ResourceLocation(Aether.MODID, "named"), 1).model(this.getExistingFile(modLoc("item/" + renamedVariant))).end(); } - public ItemModelBuilder dartShooterItem(Supplier item, String location) { - ResourceLocation id = ForgeRegistries.ITEMS.getKey(item.get()); - return withExistingParent(id.getPath(), mcLoc("item/handheld")) - .texture("layer0", modLoc("item/" + location + id.getPath())) + public void dartShooterItem(Item item, String location) { + this.withExistingParent(this.itemName(item), this.mcLoc("item/handheld")) + .texture("layer0", this.modLoc("item/" + location + this.itemName(item))) .transforms() .transform(ItemTransforms.TransformType.THIRD_PERSON_RIGHT_HAND).rotation(0.0F, -90.0F, 45.0F).translation(0.0F, 1.5F, -1.0F).scale(0.85F, 0.85F, 0.85F).end() .transform(ItemTransforms.TransformType.THIRD_PERSON_LEFT_HAND).rotation(0.0F, 90.0F, -45.0F).translation(0.0F, 1.5F, -1.0F).scale(0.85F, 0.85F, 0.85F).end() .end(); } - public ItemModelBuilder bowItem(Supplier item, String location) { - ResourceLocation id = ForgeRegistries.ITEMS.getKey(item.get()); - withExistingParent(id.getPath() + "_pulling_0", mcLoc("item/bow")).texture("layer0", modLoc("item/" + location + id.getPath() + "_pulling_0")); - withExistingParent(id.getPath() + "_pulling_1", mcLoc("item/bow")).texture("layer0", modLoc("item/" + location + id.getPath() + "_pulling_1")); - withExistingParent(id.getPath() + "_pulling_2", mcLoc("item/bow")).texture("layer0", modLoc("item/" + location + id.getPath() + "_pulling_2")); - return withExistingParent(id.getPath(), mcLoc("item/bow")) - .texture("layer0", modLoc("item/" + location + id.getPath())) - .override().predicate(new ResourceLocation("pulling"), 1).model(getExistingFile(modLoc("item/" + id.getPath() + "_pulling_0"))).end() - .override().predicate(new ResourceLocation("pulling"), 1).predicate(new ResourceLocation("pull"), 0.65F).model(getExistingFile(modLoc("item/" + id.getPath() + "_pulling_1"))).end() - .override().predicate(new ResourceLocation("pulling"), 1).predicate(new ResourceLocation("pull"), 0.9F).model(getExistingFile(modLoc("item/" + id.getPath() + "_pulling_2"))).end(); + public void bowItem(Item item, String location) { + this.withExistingParent(this.itemName(item) + "_pulling_0", this.mcLoc("item/bow")).texture("layer0", this.modLoc("item/" + location + this.itemName(item) + "_pulling_0")); + this.withExistingParent(this.itemName(item) + "_pulling_1", this.mcLoc("item/bow")).texture("layer0", this.modLoc("item/" + location + this.itemName(item) + "_pulling_1")); + this.withExistingParent(this.itemName(item) + "_pulling_2", this.mcLoc("item/bow")).texture("layer0", this.modLoc("item/" + location + this.itemName(item) + "_pulling_2")); + this.withExistingParent(this.itemName(item), this.mcLoc("item/bow")) + .texture("layer0", this.modLoc("item/" + location + this.itemName(item))) + .override().predicate(new ResourceLocation("pulling"), 1).model(this.getExistingFile(this.modLoc("item/" + this.itemName(item) + "_pulling_0"))).end() + .override().predicate(new ResourceLocation("pulling"), 1).predicate(new ResourceLocation("pull"), 0.65F).model(this.getExistingFile(this.modLoc("item/" + this.itemName(item) + "_pulling_1"))).end() + .override().predicate(new ResourceLocation("pulling"), 1).predicate(new ResourceLocation("pull"), 0.9F).model(this.getExistingFile(this.modLoc("item/" + this.itemName(item) + "_pulling_2"))).end(); } - public ItemModelBuilder dyedItem(Supplier item, String location) { - ResourceLocation id = ForgeRegistries.ITEMS.getKey(item.get()); - return withExistingParent(id.getPath(), mcLoc("item/generated")) - .texture("layer0", modLoc("item/" + location + id.getPath())) - .texture("layer1", modLoc("item/" + location + id.getPath() + "_overlay")); + public void dyedItem(Item item, String location) { + 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")); } - public ItemModelBuilder keyItem(Supplier item, String location) { - ResourceLocation id = ForgeRegistries.ITEMS.getKey(item.get()); - return withExistingParent(id.getPath(), mcLoc("item/generated")) - .texture("layer0", modLoc("item/" + location + id.getPath())) + public void keyItem(Item item, String location) { + this.withExistingParent(this.itemName(item), this.mcLoc("item/generated")) + .texture("layer0", this.modLoc("item/" + location + this.itemName(item))) .transforms() .transform(ItemTransforms.TransformType.FIRST_PERSON_RIGHT_HAND).rotation(90.0F, -90.0F, 25.0F).translation(1.13F, 3.2F, 1.13F).scale(0.68F, 0.68F, 0.68F).end() .transform(ItemTransforms.TransformType.FIRST_PERSON_LEFT_HAND).rotation(90.0F, 90.0F, -25.0F).translation(1.13F, 3.2F, 1.13F).scale(0.68F, 0.68F, 0.68F).end() .end(); } - public ItemModelBuilder moaEggItem(Supplier item, String location) { - return withExistingParent(ForgeRegistries.ITEMS.getKey(item.get()).getPath(), mcLoc("item/generated")) - .texture("layer0", modLoc("item/" + location + "moa_egg")) - .texture("layer1", modLoc("item/" + location + "moa_egg_spot")); + public void moaEggItem(Item item, String location) { + this.withExistingParent(this.itemName(item), this.mcLoc("item/generated")) + .texture("layer0", this.modLoc("item/" + location + "moa_egg")) + .texture("layer1", this.modLoc("item/" + location + "moa_egg_spot")); } - public ItemModelBuilder portalItem(Supplier item, String location) { - ResourceLocation id = ForgeRegistries.ITEMS.getKey(item.get()); - return withExistingParent(id.getPath(), mcLoc("item/generated")) - .texture("layer0", modLoc("item/" + location + id.getPath())) - .texture("layer1", modLoc("item/" + location + id.getPath() + "_inside")); + public void portalItem(Item item, String location) { + 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) + "_inside")); } - public ItemModelBuilder eggItem(Supplier item) { - return withExistingParent(ForgeRegistries.ITEMS.getKey(item.get()).getPath(), mcLoc("item/template_spawn_egg")); + public void eggItem(Item item) { + this.withExistingParent(this.itemName(item), this.mcLoc("item/template_spawn_egg")); } - public ItemModelBuilder itemBlock(Supplier block) { - return withExistingParent(blockName(block), texture(blockName(block))); + public void itemBlock(Block block) { + this.withExistingParent(this.blockName(block), this.texture(this.blockName(block))); } - public ItemModelBuilder itemBlock(Supplier block, String suffix) { - return withExistingParent(blockName(block), texture(blockName(block) + suffix)); + public void itemBlock(Block block, String suffix) { + this.withExistingParent(this.blockName(block), this.texture(this.blockName(block) + suffix)); } - public ItemModelBuilder pane(Supplier block, Supplier glass, String location) { - return withExistingParent(blockName(block), mcLoc("item/generated")) - .texture("layer0", texture(blockName(glass), location)) + public void pane(Block block, Block glass, String location) { + this.withExistingParent(this.blockName(block), this.mcLoc("item/generated")) + .texture("layer0", this.texture(this.blockName(glass), location)) .renderType(new ResourceLocation("translucent")); } - public ItemModelBuilder itemBlockFlat(Supplier block, String location) { - return withExistingParent(blockName(block), mcLoc("item/generated")) - .texture("layer0", texture(blockName(block), location)); + public void itemTorch(Block block, String location) { + this.withExistingParent(this.blockName(block), this.mcLoc("item/generated")) + .texture("layer0", this.texture(this.blockName(block), location)); } - public ItemModelBuilder itemTorch(Supplier block, String location) { - return withExistingParent(blockName(block), mcLoc("item/generated")) - .texture("layer0", texture(blockName(block), location)); + public void itemBlockFlat(Block block, String location) { + this.withExistingParent(this.blockName(block), this.mcLoc("item/generated")) + .texture("layer0", this.texture(this.blockName(block), location)); } - public ItemModelBuilder itemLockedDungeonBlock(Supplier block, Supplier baseBlock) { - return itemOverlayDungeonBlock(block, baseBlock, "lock"); + public void itemLockedDungeonBlock(Block block, Block baseBlock) { + this.itemOverlayDungeonBlock(block, baseBlock, "lock"); } - public ItemModelBuilder itemTrappedDungeonBlock(Supplier block, Supplier baseBlock) { - return itemOverlayDungeonBlock(block, baseBlock, "exclamation"); + public void itemTrappedDungeonBlock(Block block, Block baseBlock) { + this.itemOverlayDungeonBlock(block, baseBlock, "exclamation"); } - public ItemModelBuilder itemInvisibleBlock(Supplier block, Supplier baseBlock) { - return itemOverlayDungeonBlock(block, baseBlock, "door"); + public void itemBossDoorwayDungeonBlock(Block block, Block baseBlock) { + this.itemOverlayDungeonBlock(block, baseBlock, "door"); } - public ItemModelBuilder itemTreasureBlock(Supplier block, Supplier baseBlock) { - return itemOverlayDungeonBlock(block, baseBlock, "treasure"); + public void itemTreasureDoorwayDungeonBlock(Block block, Block baseBlock) { + this.itemOverlayDungeonBlock(block, baseBlock, "treasure"); } - public ItemModelBuilder itemOverlayDungeonBlock(Supplier block, Supplier baseBlock, String overlay) { - return withExistingParent(blockName(block), mcLoc("block/cube")) - .texture("overlay", texture(overlay, "dungeon/")).texture("face", texture(blockName(baseBlock), "dungeon/")) + public void itemOverlayDungeonBlock(Block block, Block baseBlock, String overlay) { + this.withExistingParent(this.blockName(block), this.mcLoc("block/cube")) + .texture("overlay", this.texture(overlay, "dungeon/")).texture("face", this.texture(this.blockName(baseBlock), "dungeon/")) .element().from(0.0F, 0.0F, 0.0F).to(16.0F, 16.0F, 16.0F).allFaces((direction, builder) -> builder.texture("#face").cullface(direction).end()).end() - .element().from(0.0F, 0.0F, -0.1F).to(16.0F, 16.0F, -0.1F).rotation().angle(0.0F).axis(Direction.Axis.Y).origin(8.0F, 8.0F, 6.9F).end().face(Direction.NORTH).texture("#overlay").end().end() + .element().from(0.0F, 0.0F, -0.1F).to(16.0F, 16.0F, -0.1F).rotation().angle(0.0F).axis(Direction.Axis.Y).origin(8.0F, 8.0F, 6.9F).end().face(Direction.NORTH).texture("#overlay").emissive().end().end() .transforms() .transform(ItemTransforms.TransformType.THIRD_PERSON_RIGHT_HAND).rotation(75.0F, 45.0F, 0.0F).translation(0.0F, 2.5F, 0.0F).scale(0.375F, 0.375F, 0.375F).end() .transform(ItemTransforms.TransformType.THIRD_PERSON_LEFT_HAND).rotation(75.0F, 45.0F, 0.0F).translation(0.0F, 2.5F, 0.0F).scale(0.375F, 0.375F, 0.375F).end() @@ -180,21 +175,25 @@ public ItemModelBuilder itemOverlayDungeonBlock(Supplier block, .end(); } - public ItemModelBuilder itemFence(Supplier block, Supplier baseBlock, String location) { - return withExistingParent(blockName(block), mcLoc("block/fence_inventory")) - .texture("texture", texture(blockName(baseBlock), location)); + public void lookalikeBlock(Block block, ResourceLocation lookalike) { + this.withExistingParent(this.blockName(block), lookalike); + } + + public void itemFence(Block block, Block baseBlock, String location) { + this.withExistingParent(this.blockName(block), this.mcLoc("block/fence_inventory")) + .texture("texture", this.texture(this.blockName(baseBlock), location)); } - public ItemModelBuilder itemWallBlock(Supplier block, Supplier baseBlock, String location) { - return wallInventory(blockName(block), texture(blockName(baseBlock), location)); + public void itemButton(Block block, Block baseBlock, String location) { + this.withExistingParent(this.blockName(block), this.mcLoc("block/button_inventory")) + .texture("texture", this.texture(this.blockName(baseBlock), location)); } - public ItemModelBuilder translucentItemWallBlock(Supplier block, Supplier baseBlock, String location) { - return singleTexture(blockName(block), new ResourceLocation(Aether.MODID, BLOCK_FOLDER + "/template_translucent_wall_inventory"), "wall", texture(blockName(baseBlock), location)); + public void itemWallBlock(Block block, Block baseBlock, String location) { + this.wallInventory(this.blockName(block), this.texture(this.blockName(baseBlock), location)); } - public ItemModelBuilder itemButton(Supplier block, Supplier baseBlock, String location) { - return withExistingParent(blockName(block), mcLoc("block/button_inventory")) - .texture("texture", texture(blockName(baseBlock), location)); + public void translucentItemWallBlock(Block block, Block baseBlock, String location) { + this.singleTexture(this.blockName(block), new ResourceLocation(Aether.MODID, BLOCK_FOLDER + "/template_translucent_wall_inventory"), "wall", this.texture(this.blockName(baseBlock), location)); } } diff --git a/src/main/java/com/gildedgames/aether/data/providers/AetherLanguageProvider.java b/src/main/java/com/gildedgames/aether/data/providers/AetherLanguageProvider.java index 2e67f58b25..cc36294c1f 100644 --- a/src/main/java/com/gildedgames/aether/data/providers/AetherLanguageProvider.java +++ b/src/main/java/com/gildedgames/aether/data/providers/AetherLanguageProvider.java @@ -1,7 +1,7 @@ package com.gildedgames.aether.data.providers; -import com.gildedgames.aether.Aether; -import net.minecraft.data.DataGenerator; +import net.minecraft.data.PackOutput; +import net.minecraft.resources.ResourceLocation; import net.minecraft.world.inventory.MenuType; import net.minecraft.world.item.CreativeModeTab; import net.minecraft.world.item.Item; @@ -11,97 +11,99 @@ import java.util.function.Supplier; -public abstract class AetherLanguageProvider extends LanguageProvider -{ - public AetherLanguageProvider(DataGenerator gen) { - super(gen, Aether.MODID, "en_us"); +public abstract class AetherLanguageProvider extends LanguageProvider { + public AetherLanguageProvider(PackOutput output, String id) { + super(output, id, "en_us"); } public void addDiscDesc(Supplier key, String name) { - add(key.get().getDescriptionId() + ".desc", name); - } - - public void addSubtitle(String category, String key, String name) { - add("subtitles." + category + "." + key, name); - } - - public void addDeath(String key, String name) { - add("death.attack." + key, name); + this.add(key.get().getDescriptionId() + ".desc", name); } public void addContainerType(Supplier> key, String name) { - add("menu." + ForgeRegistries.MENU_TYPES.getKey(key.get()).toString().replace(":", "."), name); + ResourceLocation location = ForgeRegistries.MENU_TYPES.getKey(key.get()); + if (location != null) { + this.add("menu." + location.toString().replace(":", "."), name); + } } public void addContainerType(String key, String name) { - add("menu.aether." + key, name); + this.add("menu.aether." + key, name); } - public void addItemGroup(CreativeModeTab group, String name) { - add(group.getDisplayName().getString(), name); + public void addCreativeTab(CreativeModeTab tab, String name) { + this.add(tab.getDisplayName().getString(), name); } public void addAdvancement(String key, String name) { - add("advancement.aether." + key, name); + this.add("advancement.aether." + key, name); } public void addAdvancementDesc(String key, String name) { - add("advancement.aether." + key + ".desc", name); + this.add("advancement.aether." + key + ".desc", name); } - public void addGuiText(String key, String name) { - add("gui.aether." + key, name); + public void addSubtitle(String category, String key, String name) { + this.add("subtitles." + category + "." + key, name); } - public void addCustomizationText(String key, String name) { - addGuiText("customization." + key, name); + public void addDeath(String key, String name) { + this.add("death.attack.aether." + key, name); } public void addMenuText(String key, String name) { - addGuiText("menu." + key, name); + this.addGuiText("menu." + key, name); + } + + public void addGuiText(String key, String name) { + this.add("gui.aether." + key, name); + } + + public void addCustomizationText(String key, String name) { + this.addGuiText("customization." + key, name); } public void addLoreBookText(String key, String name) { - addGuiText("book_of_lore." + key, name); + this.addGuiText("book_of_lore." + key, name); } public void addMessage(String key, String name) { - add("aether." + key, name); + this.add("aether." + key, name); } public void addCommand(String key, String name) { - add("commands.aether." + key, name); + this.add("commands.aether." + key, name); } public void addKeyInfo(String key, String name) { - add("key.aether." + key, name); + this.add("key.aether." + key, name); } public void addCuriosIdentifier(String key, String name) { - add("curios.identifier." + key, name); + this.add("curios.identifier." + key, name); } public void addCuriosModifier(String key, String name) { - add("curios.modifiers." + key, name); + this.add("curios.modifiers." + key, name); } public void addLore(Supplier key, String name) { - add("lore." + key.get().asItem().getDescriptionId(), name); + this.add("lore." + key.get().asItem().getDescriptionId(), name); } public void addLoreUnique(String key, String name) { - add("lore." + key, name); + this.add("lore." + key, name); } public void addProTip(String key, String name) { - add("aether.pro_tips.line.aether." + key, name); + this.add("aether.pro_tips.line.aether." + key, name); } public void addCommonConfig(String prefix, String key, String name) { - add("config.aether.common." + prefix + "." + key, name); + this.add("config.aether.common." + prefix + "." + key, name); } public void addClientConfig(String prefix, String key, String name) { - add("config.aether.client." + prefix + "." + key, name); + this.add("config.aether.client." + prefix + "." + key, name); } } diff --git a/src/main/java/com/gildedgames/aether/data/providers/AetherRecipeProvider.java b/src/main/java/com/gildedgames/aether/data/providers/AetherRecipeProvider.java index 7310d51d5b..179264d182 100644 --- a/src/main/java/com/gildedgames/aether/data/providers/AetherRecipeProvider.java +++ b/src/main/java/com/gildedgames/aether/data/providers/AetherRecipeProvider.java @@ -10,6 +10,7 @@ import com.gildedgames.aether.recipe.conditions.ConfigCondition; import net.minecraft.data.recipes.*; import net.minecraft.nbt.CompoundTag; +import net.minecraft.resources.ResourceLocation; import net.minecraft.tags.TagKey; import net.minecraft.world.entity.EntityType; import net.minecraft.world.level.biome.Biome; @@ -28,440 +29,387 @@ import net.minecraftforge.common.crafting.ConditionalRecipe; import net.minecraftforge.common.crafting.conditions.NotCondition; -import net.minecraftforge.registries.ForgeRegistries; -public abstract class AetherRecipeProvider extends RecipeProvider -{ - public AetherRecipeProvider(DataGenerator generatorIn) { - super(generatorIn); - } +public abstract class AetherRecipeProvider extends RecipeProvider { + private static String ID; - public ShapedRecipeBuilder makeWood(Supplier woodOut, Supplier materialIn) { - return ShapedRecipeBuilder.shaped(woodOut.get(), 3) - .pattern("MM") - .pattern("MM") - .define('M', materialIn.get()) - .unlockedBy("has_" + ForgeRegistries.BLOCKS.getKey(materialIn.get()).getPath(), has(materialIn.get())); + public AetherRecipeProvider(PackOutput output, String id) { + super(output); + ID = id; } - public ShapelessRecipeBuilder makePlanks(Supplier plankOut, Supplier logIn) { - return ShapelessRecipeBuilder.shapeless(plankOut.get(), 4) - .requires(logIn.get()) - .unlockedBy("has_" + ForgeRegistries.BLOCKS.getKey(logIn.get()).getPath(), has(logIn.get())); + protected static ResourceLocation name(String name) { + return new ResourceLocation(ID, name); } - public ShapedRecipeBuilder makeBricks(Supplier bricksOut, Supplier materialIn) { - return ShapedRecipeBuilder.shaped(bricksOut.get(), 4) - .pattern("MM") - .pattern("MM") - .define('M', materialIn.get()) - .unlockedBy("has_" + ForgeRegistries.BLOCKS.getKey(materialIn.get()).getPath(), has(materialIn.get())); + protected static void oreBlockStorageRecipesRecipesWithCustomUnpacking(Consumer consumer, RecipeCategory itemCategory, ItemLike item, RecipeCategory blockCategory, ItemLike block, String itemRecipeName, String itemGroup) { + ShapelessRecipeBuilder.shapeless(itemCategory, item, 9).requires(block).group(itemGroup).unlockedBy(getHasName(block), has(block)).save(consumer, name(itemRecipeName)); + ShapedRecipeBuilder.shaped(blockCategory, block).define('#', item).pattern("###").pattern("###").pattern("###").unlockedBy(getHasName(item), has(item)).save(consumer, name(getSimpleRecipeName(block))); } - public ShapedRecipeBuilder makeOreToBlock(Supplier blockOut, Supplier materialIn) { - return ShapedRecipeBuilder.shaped(blockOut.get()) - .pattern("###") - .pattern("###") - .pattern("###") - .define('#', materialIn.get()) - .unlockedBy("has_" + ForgeRegistries.ITEMS.getKey(materialIn.get()).getPath(), has(materialIn.get())); - } - - public ShapelessRecipeBuilder makeBlockToOre(Supplier materialOut, Supplier blockIn) { - return ShapelessRecipeBuilder.shapeless(materialOut.get(), 9) - .requires(blockIn.get()) - .unlockedBy("has_" + ForgeRegistries.BLOCKS.getKey(blockIn.get()).getPath(), has(blockIn.get())); - } - - public ShapedRecipeBuilder makeFence(Supplier fenceOut, Supplier materialIn) { - return ShapedRecipeBuilder.shaped(fenceOut.get(), 3) + protected static ShapedRecipeBuilder fence(Supplier fence, Supplier material) { + return ShapedRecipeBuilder.shaped(RecipeCategory.DECORATIONS, fence.get(), 3) + .group("wooden_fence") + .define('M', material.get()) + .define('/', AetherTags.Items.SKYROOT_STICKS) .pattern("M/M") .pattern("M/M") - .define('M', materialIn.get()) - .define('/', AetherTags.Items.SKYROOT_STICKS) - .unlockedBy("has_" + ForgeRegistries.BLOCKS.getKey(materialIn.get()).getPath(), has(materialIn.get())); + .unlockedBy(getHasName(material.get()), has(material.get())); } - public ShapedRecipeBuilder makeFenceGate(Supplier fenceGateOut, Supplier materialIn) { - return ShapedRecipeBuilder.shaped(fenceGateOut.get()) + protected static ShapedRecipeBuilder fenceGate(Supplier fenceGate, Supplier material) { + return ShapedRecipeBuilder.shaped(RecipeCategory.REDSTONE, fenceGate.get()) + .group("wooden_fence_gate") + .define('M', material.get()) + .define('/', AetherTags.Items.SKYROOT_STICKS) .pattern("/M/") .pattern("/M/") - .define('M', materialIn.get()) - .define('/', AetherTags.Items.SKYROOT_STICKS) - .unlockedBy("has_" + ForgeRegistries.BLOCKS.getKey(materialIn.get()).getPath(), has(materialIn.get())); - } - - public ShapedRecipeBuilder makeWall(Supplier wallOut, Supplier materialIn) { - return ShapedRecipeBuilder.shaped(wallOut.get(), 6) - .pattern("MMM") - .pattern("MMM") - .define('M', materialIn.get()) - .unlockedBy("has_" + ForgeRegistries.BLOCKS.getKey(materialIn.get()).getPath(), has(materialIn.get())); - } - - public ShapedRecipeBuilder makeStairs(Supplier stairsOut, Supplier materialIn) { - return ShapedRecipeBuilder.shaped(stairsOut.get(), 4) - .pattern("M ") - .pattern("MM ") - .pattern("MMM") - .define('M', materialIn.get()) - .unlockedBy("has_" + ForgeRegistries.BLOCKS.getKey(materialIn.get()).getPath(), has(materialIn.get())); + .unlockedBy(getHasName(material.get()), has(material.get())); } - public ShapedRecipeBuilder makeSlab(Supplier slabOut, Supplier materialIn) { - return ShapedRecipeBuilder.shaped(slabOut.get(), 6) - .pattern("MMM") - .define('M', materialIn.get()) - .unlockedBy("has_" + ForgeRegistries.BLOCKS.getKey(materialIn.get()).getPath(), has(materialIn.get())); + protected static RecipeBuilder stairs(Supplier stairs, Supplier material) { + return stairBuilder(stairs.get(), Ingredient.of(material.get())).unlockedBy(getHasName(material.get()), has(material.get())); } - public ShapedRecipeBuilder makePickaxeWithBlock(Supplier pickaxeOut, Supplier materialIn) { - return ShapedRecipeBuilder.shaped(pickaxeOut.get()) + protected static ShapedRecipeBuilder makePickaxeWithBlock(Supplier pickaxe, Supplier material) { + return ShapedRecipeBuilder.shaped(RecipeCategory.TOOLS, pickaxe.get()) + .define('#', material.get()) + .define('/', AetherTags.Items.SKYROOT_STICKS) .pattern("###") .pattern(" / ") .pattern(" / ") - .define('#', materialIn.get()) - .define('/', AetherTags.Items.SKYROOT_STICKS) - .unlockedBy("has_" + ForgeRegistries.BLOCKS.getKey(materialIn.get()).getPath(), has(materialIn.get())); + .unlockedBy(getHasName(material.get()), has(material.get())); } - public ShapedRecipeBuilder makeAxeWithBlock(Supplier axeOut, Supplier materialIn) { - return ShapedRecipeBuilder.shaped(axeOut.get()) + protected static ShapedRecipeBuilder makeAxeWithBlock(Supplier axe, Supplier material) { + return ShapedRecipeBuilder.shaped(RecipeCategory.TOOLS, axe.get()) + .define('#', material.get()) + .define('/', AetherTags.Items.SKYROOT_STICKS) .pattern("##") .pattern("#/") .pattern(" /") - .define('#', materialIn.get()) - .define('/', AetherTags.Items.SKYROOT_STICKS) - .unlockedBy("has_" + ForgeRegistries.BLOCKS.getKey(materialIn.get()).getPath(), has(materialIn.get())); + .unlockedBy(getHasName(material.get()), has(material.get())); } - public ShapedRecipeBuilder makeShovelWithBlock(Supplier shovelOut, Supplier materialIn) { - return ShapedRecipeBuilder.shaped(shovelOut.get()) + protected static ShapedRecipeBuilder makeShovelWithBlock(Supplier shovel, Supplier material) { + return ShapedRecipeBuilder.shaped(RecipeCategory.TOOLS, shovel.get()) + .define('#', material.get()) + .define('/', AetherTags.Items.SKYROOT_STICKS) .pattern("#") .pattern("/") .pattern("/") - .define('#', materialIn.get()) - .define('/', AetherTags.Items.SKYROOT_STICKS) - .unlockedBy("has_" + ForgeRegistries.BLOCKS.getKey(materialIn.get()).getPath(), has(materialIn.get())); + .unlockedBy(getHasName(material.get()), has(material.get())); } - public ShapedRecipeBuilder makeHoeWithBlock(Supplier hoeOut, Supplier materialIn) { - return ShapedRecipeBuilder.shaped(hoeOut.get()) + protected static ShapedRecipeBuilder makeHoeWithBlock(Supplier hoe, Supplier material) { + return ShapedRecipeBuilder.shaped(RecipeCategory.TOOLS, hoe.get()) + .define('#', material.get()) + .define('/', AetherTags.Items.SKYROOT_STICKS) .pattern("##") .pattern(" /") .pattern(" /") - .define('#', materialIn.get()) - .define('/', AetherTags.Items.SKYROOT_STICKS) - .unlockedBy("has_" + ForgeRegistries.BLOCKS.getKey(materialIn.get()).getPath(), has(materialIn.get())); + .unlockedBy(getHasName(material.get()), has(material.get())); } - public ShapedRecipeBuilder makeSwordWithBlock(Supplier swordOut, Supplier materialIn) { - return ShapedRecipeBuilder.shaped(swordOut.get()) + protected static ShapedRecipeBuilder makeSwordWithBlock(Supplier sword, Supplier material) { + return ShapedRecipeBuilder.shaped(RecipeCategory.COMBAT, sword.get()) + .define('#', material.get()) + .define('/', AetherTags.Items.SKYROOT_STICKS) .pattern("#") .pattern("#") .pattern("/") - .define('#', materialIn.get()) - .define('/', AetherTags.Items.SKYROOT_STICKS) - .unlockedBy("has_" + ForgeRegistries.BLOCKS.getKey(materialIn.get()).getPath(), has(materialIn.get())); + .unlockedBy(getHasName(material.get()), has(material.get())); } - public ShapedRecipeBuilder makePickaxe(Supplier pickaxeOut, Supplier materialIn) { - return ShapedRecipeBuilder.shaped(pickaxeOut.get()) + protected static ShapedRecipeBuilder makePickaxe(Supplier pickaxe, Supplier material) { + return ShapedRecipeBuilder.shaped(RecipeCategory.TOOLS, pickaxe.get()) + .define('#', material.get()) + .define('/', AetherTags.Items.SKYROOT_STICKS) .pattern("###") .pattern(" / ") .pattern(" / ") - .define('#', materialIn.get()) - .define('/', AetherTags.Items.SKYROOT_STICKS) - .unlockedBy("has_" + ForgeRegistries.ITEMS.getKey(materialIn.get()).getPath(), has(materialIn.get())); + .unlockedBy(getHasName(material.get()), has(material.get())); } - public ShapedRecipeBuilder makeAxe(Supplier axeOut, Supplier materialIn) { - return ShapedRecipeBuilder.shaped(axeOut.get()) + protected static ShapedRecipeBuilder makeAxe(Supplier axe, Supplier material) { + return ShapedRecipeBuilder.shaped(RecipeCategory.TOOLS, axe.get()) + .define('#', material.get()) + .define('/', AetherTags.Items.SKYROOT_STICKS) .pattern("##") .pattern("#/") .pattern(" /") - .define('#', materialIn.get()) - .define('/', AetherTags.Items.SKYROOT_STICKS) - .unlockedBy("has_" + ForgeRegistries.ITEMS.getKey(materialIn.get()).getPath(), has(materialIn.get())); + .unlockedBy(getHasName(material.get()), has(material.get())); } - public ShapedRecipeBuilder makeShovel(Supplier shovelOut, Supplier materialIn) { - return ShapedRecipeBuilder.shaped(shovelOut.get()) + protected static ShapedRecipeBuilder makeShovel(Supplier shovel, Supplier material) { + return ShapedRecipeBuilder.shaped(RecipeCategory.TOOLS, shovel.get()) + .define('#', material.get()) + .define('/', AetherTags.Items.SKYROOT_STICKS) .pattern("#") .pattern("/") .pattern("/") - .define('#', materialIn.get()) - .define('/', AetherTags.Items.SKYROOT_STICKS) - .unlockedBy("has_" + ForgeRegistries.ITEMS.getKey(materialIn.get()).getPath(), has(materialIn.get())); + .unlockedBy(getHasName(material.get()), has(material.get())); } - public ShapedRecipeBuilder makeHoe(Supplier shovelOut, Supplier materialIn) { - return ShapedRecipeBuilder.shaped(shovelOut.get()) + protected static ShapedRecipeBuilder makeHoe(Supplier hoe, Supplier material) { + return ShapedRecipeBuilder.shaped(RecipeCategory.TOOLS, hoe.get()) + .define('#', material.get()) + .define('/', AetherTags.Items.SKYROOT_STICKS) .pattern("##") .pattern(" /") .pattern(" /") - .define('#', materialIn.get()) - .define('/', AetherTags.Items.SKYROOT_STICKS) - .unlockedBy("has_" + ForgeRegistries.ITEMS.getKey(materialIn.get()).getPath(), has(materialIn.get())); + .unlockedBy(getHasName(material.get()), has(material.get())); } - public ShapedRecipeBuilder makeSword(Supplier swordOut, Supplier materialIn) { - return ShapedRecipeBuilder.shaped(swordOut.get()) + protected static ShapedRecipeBuilder makeSword(Supplier sword, Supplier material) { + return ShapedRecipeBuilder.shaped(RecipeCategory.COMBAT, sword.get()) + .define('#', material.get()) + .define('/', AetherTags.Items.SKYROOT_STICKS) .pattern("#") .pattern("#") .pattern("/") - .define('#', materialIn.get()) - .define('/', AetherTags.Items.SKYROOT_STICKS) - .unlockedBy("has_" + ForgeRegistries.ITEMS.getKey(materialIn.get()).getPath(), has(materialIn.get())); + .unlockedBy(getHasName(material.get()), has(material.get())); } - public ShapedRecipeBuilder makeHelmet(Supplier helmetOut, Supplier materialIn) { - return ShapedRecipeBuilder.shaped(helmetOut.get()) - .pattern("MMM") - .pattern("M M") - .define('M', materialIn.get()) - .unlockedBy("has_" + ForgeRegistries.ITEMS.getKey(materialIn.get()).getPath(), has(materialIn.get())); + protected static ShapedRecipeBuilder makeHelmetWithBlock(Supplier helmet, Supplier material) { + return ShapedRecipeBuilder.shaped(RecipeCategory.COMBAT, helmet.get()) + .define('#', material.get()) + .pattern("###") + .pattern("# #") + .unlockedBy(getHasName(material.get()), has(material.get())); } - public ShapedRecipeBuilder makeChestplate(Supplier chestplateOut, Supplier materialIn) { - return ShapedRecipeBuilder.shaped(chestplateOut.get()) - .pattern("M M") - .pattern("MMM") - .pattern("MMM") - .define('M', materialIn.get()) - .unlockedBy("has_" + ForgeRegistries.ITEMS.getKey(materialIn.get()).getPath(), has(materialIn.get())); + protected static ShapedRecipeBuilder makeChestplateWithBlock(Supplier chestplate, Supplier material) { + return ShapedRecipeBuilder.shaped(RecipeCategory.COMBAT, chestplate.get()) + .define('#', material.get()) + .pattern("# #") + .pattern("###") + .pattern("###") + .unlockedBy(getHasName(material.get()), has(material.get())); } - public ShapedRecipeBuilder makeLeggings(Supplier leggingsOut, Supplier materialIn) { - return ShapedRecipeBuilder.shaped(leggingsOut.get()) - .pattern("MMM") - .pattern("M M") - .pattern("M M") - .define('M', materialIn.get()) - .unlockedBy("has_" + ForgeRegistries.ITEMS.getKey(materialIn.get()).getPath(), has(materialIn.get())); + protected static ShapedRecipeBuilder makeLeggingsWithBlock(Supplier leggings, Supplier material) { + return ShapedRecipeBuilder.shaped(RecipeCategory.COMBAT, leggings.get()) + .define('#', material.get()) + .pattern("###") + .pattern("# #") + .pattern("# #") + .unlockedBy(getHasName(material.get()), has(material.get())); } - public ShapedRecipeBuilder makeBoots(Supplier bootsOut, Supplier materialIn) { - return ShapedRecipeBuilder.shaped(bootsOut.get()) - .pattern("M M") - .pattern("M M") - .define('M', materialIn.get()) - .unlockedBy("has_" + ForgeRegistries.ITEMS.getKey(materialIn.get()).getPath(), has(materialIn.get())); + protected static ShapedRecipeBuilder makeBootsWithBlock(Supplier boots, Supplier material) { + return ShapedRecipeBuilder.shaped(RecipeCategory.COMBAT, boots.get()) + .define('#', material.get()) + .pattern("# #") + .pattern("# #") + .unlockedBy(getHasName(material.get()), has(material.get())); } - public ShapedRecipeBuilder makeGloves(Supplier glovesOut, Supplier materialIn) { - return ShapedRecipeBuilder.shaped(glovesOut.get()) - .pattern("M M") - .define('M', materialIn.get()) - .unlockedBy("has_" + ForgeRegistries.ITEMS.getKey(materialIn.get()).getPath(), has(materialIn.get())); + protected static ShapedRecipeBuilder makeGlovesWithBlock(Supplier gloves, Supplier material) { + return ShapedRecipeBuilder.shaped(RecipeCategory.COMBAT, gloves.get()) + .define('#', material.get()) + .pattern("# #") + .unlockedBy(getHasName(material.get()), has(material.get())); } - public ShapedRecipeBuilder makeGlovesWithTag(Supplier glovesOut, TagKey materialTag, String advancementName) { - return ShapedRecipeBuilder.shaped(glovesOut.get()) - .pattern("M M") - .define('M', materialTag) - .unlockedBy("has_" + advancementName, has(materialTag)); + protected static ShapedRecipeBuilder makeHelmet(Supplier helmet, Supplier material) { + return ShapedRecipeBuilder.shaped(RecipeCategory.COMBAT, helmet.get()) + .define('#', material.get()) + .pattern("###") + .pattern("# #") + .unlockedBy(getHasName(material.get()), has(material.get())); } - public ShapedRecipeBuilder makeHelmetWithBlock(Supplier helmetOut, Supplier materialIn) { - return ShapedRecipeBuilder.shaped(helmetOut.get()) - .pattern("MMM") - .pattern("M M") - .define('M', materialIn.get()) - .unlockedBy("has_" + ForgeRegistries.BLOCKS.getKey(materialIn.get()).getPath(), has(materialIn.get())); + protected static ShapedRecipeBuilder makeChestplate(Supplier chestplate, Supplier material) { + return ShapedRecipeBuilder.shaped(RecipeCategory.COMBAT, chestplate.get()) + .define('#', material.get()) + .pattern("# #") + .pattern("###") + .pattern("###") + .unlockedBy(getHasName(material.get()), has(material.get())); } - public ShapedRecipeBuilder makeChestplateWithBlock(Supplier chestplateOut, Supplier materialIn) { - return ShapedRecipeBuilder.shaped(chestplateOut.get()) - .pattern("M M") - .pattern("MMM") - .pattern("MMM") - .define('M', materialIn.get()) - .unlockedBy("has_" + ForgeRegistries.BLOCKS.getKey(materialIn.get()).getPath(), has(materialIn.get())); + protected static ShapedRecipeBuilder makeLeggings(Supplier leggings, Supplier material) { + return ShapedRecipeBuilder.shaped(RecipeCategory.COMBAT, leggings.get()) + .define('#', material.get()) + .pattern("###") + .pattern("# #") + .pattern("# #") + .unlockedBy(getHasName(material.get()), has(material.get())); } - public ShapedRecipeBuilder makeLeggingsWithBlock(Supplier leggingsOut, Supplier materialIn) { - return ShapedRecipeBuilder.shaped(leggingsOut.get()) - .pattern("MMM") - .pattern("M M") - .pattern("M M") - .define('M', materialIn.get()) - .unlockedBy("has_" + ForgeRegistries.BLOCKS.getKey(materialIn.get()).getPath(), has(materialIn.get())); + protected static ShapedRecipeBuilder makeBoots(Supplier boots, Supplier material) { + return ShapedRecipeBuilder.shaped(RecipeCategory.COMBAT, boots.get()) + .define('#', material.get()) + .pattern("# #") + .pattern("# #") + .unlockedBy(getHasName(material.get()), has(material.get())); } - public ShapedRecipeBuilder makeBootsWithBlock(Supplier bootsOut, Supplier materialIn) { - return ShapedRecipeBuilder.shaped(bootsOut.get()) - .pattern("M M") - .pattern("M M") - .define('M', materialIn.get()) - .unlockedBy("has_" + ForgeRegistries.BLOCKS.getKey(materialIn.get()).getPath(), has(materialIn.get())); + protected static ShapedRecipeBuilder makeGloves(Supplier gloves, Supplier material) { + return ShapedRecipeBuilder.shaped(RecipeCategory.COMBAT, gloves.get()) + .define('#', material.get()) + .pattern("# #") + .unlockedBy(getHasName(material.get()), has(material.get())); } - public ShapedRecipeBuilder makeGlovesWithBlock(Supplier glovesOut, Supplier materialIn) { - return ShapedRecipeBuilder.shaped(glovesOut.get()) - .pattern("M M") - .define('M', materialIn.get()) - .unlockedBy("has_" + ForgeRegistries.BLOCKS.getKey(materialIn.get()).getPath(), has(materialIn.get())); + protected static ShapedRecipeBuilder makeGlovesWithTag(Supplier gloves, TagKey materialTag, String unlockName) { + return ShapedRecipeBuilder.shaped(RecipeCategory.COMBAT, gloves.get()) + .define('#', materialTag) + .pattern("# #") + .unlockedBy("has_" + unlockName, has(materialTag)); } - public ShapedRecipeBuilder makeRing(Supplier helmetOut, Item materialIn) { - return ShapedRecipeBuilder.shaped(helmetOut.get()) - .pattern(" M ") - .pattern("M M") - .pattern(" M ") - .define('M', materialIn) - .unlockedBy("has_" + ForgeRegistries.ITEMS.getKey(materialIn).getPath(), has(materialIn)); + protected static ShapedRecipeBuilder makeRing(Supplier ring, Item material) { + return ShapedRecipeBuilder.shaped(RecipeCategory.COMBAT, ring.get()) + .define('#', material) + .pattern(" # ") + .pattern("# #") + .pattern(" # ") + .unlockedBy(getHasName(material), has(material)); } - public ShapedRecipeBuilder makePendant(Supplier helmetOut, Item materialIn) { - return ShapedRecipeBuilder.shaped(helmetOut.get()) + protected static ShapedRecipeBuilder makePendant(Supplier pendant, Item material) { + return ShapedRecipeBuilder.shaped(RecipeCategory.COMBAT, pendant.get()) + .define('S', Tags.Items.STRING) + .define('#', material) .pattern("SSS") .pattern("S S") - .pattern(" M ") - .define('S', Tags.Items.STRING) - .define('M', materialIn) - .unlockedBy("has_" + ForgeRegistries.ITEMS.getKey(materialIn).getPath(), has(materialIn)); - } - - public ShapedRecipeBuilder makeCape(Supplier capeOut, Item materialIn) { - return ShapedRecipeBuilder.shaped(capeOut.get()) - .pattern("MM") - .pattern("MM") - .pattern("MM") - .define('M', materialIn) - .unlockedBy("has_" + ForgeRegistries.ITEMS.getKey(materialIn).getPath(), has(materialIn)); + .pattern(" # ") + .unlockedBy(getHasName(material), has(material)); } - public SimpleCookingRecipeBuilder smeltingRecipe(ItemLike result, ItemLike ingredient, float exp) { - return SimpleCookingRecipeBuilder.smelting(Ingredient.of(new ItemStack(ingredient, 1)), result, exp, 200) - .unlockedBy("has_" + ForgeRegistries.ITEMS.getKey(ingredient.asItem()).getPath(), has(ingredient)); + protected static ShapedRecipeBuilder makeCape(Supplier cape, Item material) { + return ShapedRecipeBuilder.shaped(RecipeCategory.COMBAT, cape.get()) + .define('#', material) + .pattern("##") + .pattern("##") + .pattern("##") + .unlockedBy(getHasName(material), has(material)); } - public SimpleCookingRecipeBuilder blastingRecipe(ItemLike result, ItemLike ingredient, float exp) { - return SimpleCookingRecipeBuilder.blasting(Ingredient.of(new ItemStack(ingredient, 1)), result, exp, 100) - .unlockedBy("has_" + ForgeRegistries.ITEMS.getKey(ingredient.asItem()).getPath(), has(ingredient)); + protected static void netheriteSmithingRecipe(Consumer consumer, Item ingredient, RecipeCategory category, Item item) { + UpgradeRecipeBuilder.smithing(Ingredient.of(ingredient), Ingredient.of(Tags.Items.INGOTS_NETHERITE), category, item).unlocks("has_netherite_ingot", has(Tags.Items.INGOTS_NETHERITE)).save(consumer, name(getItemName(item) + "_smithing")); } - public SingleItemRecipeBuilder stonecuttingRecipe(Supplier input, ItemLike result) { - return SingleItemRecipeBuilder.stonecutting(Ingredient.of(input.get()), result) - .unlockedBy("has_" + ForgeRegistries.BLOCKS.getKey(input.get()).getPath(), has(input.get())); + protected static SimpleCookingRecipeBuilder smeltingOreRecipe(ItemLike result, ItemLike ingredient, float experience) { + return SimpleCookingRecipeBuilder.smelting(Ingredient.of(ingredient), RecipeCategory.MISC, result, experience, 200) + .unlockedBy(getHasName(ingredient), has(ingredient)); } - public SingleItemRecipeBuilder stonecuttingRecipe(Supplier input, ItemLike result, int resultAmount) { - return SingleItemRecipeBuilder.stonecutting(Ingredient.of(input.get()), result, resultAmount) - .unlockedBy("has_" + ForgeRegistries.BLOCKS.getKey(input.get()).getPath(), has(input.get())); + protected static SimpleCookingRecipeBuilder blastingOreRecipe(ItemLike result, ItemLike ingredient, float experience) { + return SimpleCookingRecipeBuilder.blasting(Ingredient.of(ingredient), RecipeCategory.MISC, result, experience, 100) + .unlockedBy(getHasName(ingredient), has(ingredient)); } - public UpgradeRecipeBuilder smithingRecipe(Supplier input, Supplier upgradeItem, Supplier result) { - return UpgradeRecipeBuilder.smithing(Ingredient.of(input.get()), Ingredient.of(upgradeItem.get()), result.get()) - .unlocks("has_" + ForgeRegistries.ITEMS.getKey(upgradeItem.get()).getPath(), has(upgradeItem.get())); + protected static void stonecuttingRecipe(Consumer consumer, RecipeCategory category, ItemLike item, ItemLike ingredient) { + stonecuttingRecipe(consumer, category, item, ingredient, 1); } - public UpgradeRecipeBuilder smithingRecipeWithTag(Supplier input, TagKey upgradeTag, Supplier result, String advancementName) { - return UpgradeRecipeBuilder.smithing(Ingredient.of(input.get()), Ingredient.of(upgradeTag), result.get()) - .unlocks("has_" + advancementName, has(upgradeTag)); + protected static void stonecuttingRecipe(Consumer consumer, RecipeCategory category, ItemLike item, ItemLike ingredient, int count) { + SingleItemRecipeBuilder.stonecutting(Ingredient.of(ingredient), category, item, count).unlockedBy(getHasName(ingredient), has(ingredient)).save(consumer, name(getConversionRecipeName(item, ingredient) + "_stonecutting")); } - public AltarRepairBuilder repairingRecipe(ItemLike item, int duration) { - return AltarRepairBuilder.repair(Ingredient.of(new ItemStack(item, 1)), duration, AetherRecipeSerializers.REPAIRING.get()) - .unlockedBy("has_" + ForgeRegistries.ITEMS.getKey(item.asItem()).getPath(), has(item)); + protected static AltarRepairBuilder repairingRecipe(RecipeCategory category, ItemLike item, int duration) { + return AltarRepairBuilder.repair(Ingredient.of(new ItemStack(item, 1)), category, duration, AetherRecipeSerializers.REPAIRING.get()) + .unlockedBy(getHasName(item), has(item)); } - public SimpleCookingRecipeBuilder enchantingRecipe(ItemLike result, ItemLike ingredient, float exp, int duration) { - return SimpleCookingRecipeBuilder.cooking(Ingredient.of(new ItemStack(ingredient, 1)), result, exp, duration, AetherRecipeSerializers.ENCHANTING.get()) - .unlockedBy("has_" + ForgeRegistries.ITEMS.getKey(ingredient.asItem()).getPath(), has(ingredient)); + protected static AetherCookingRecipeBuilder enchantingRecipe(RecipeCategory category, ItemLike result, ItemLike ingredient, float experience, int duration) { + return AetherCookingRecipeBuilder.generic(Ingredient.of(new ItemStack(ingredient, 1)), category, result, experience, duration, AetherRecipeSerializers.ENCHANTING.get()) + .unlockedBy(getHasName(ingredient), has(ingredient)); } - public SimpleCookingRecipeBuilder enchantingRecipe(ItemLike result, TagKey ingredient, float exp, int duration) { - return SimpleCookingRecipeBuilder.cooking(Ingredient.of(ingredient), result, exp, duration, AetherRecipeSerializers.ENCHANTING.get()) - .unlockedBy("has_disc", has(ingredient)); + protected static AetherCookingRecipeBuilder enchantingRecipe(RecipeCategory category, ItemLike result, TagKey ingredient, float experience, int duration, String unlockName) { + return AetherCookingRecipeBuilder.generic(Ingredient.of(ingredient), category, result, experience, duration, AetherRecipeSerializers.ENCHANTING.get()) + .unlockedBy("has_" + unlockName, has(ingredient)); } - public SimpleCookingRecipeBuilder hiddenEnchantingRecipe(ItemLike result, ItemLike ingredient, float exp, int duration) { - return SimpleCookingRecipeBuilder.cooking(Ingredient.of(ingredient), result, exp, duration, AetherRecipeSerializers.ENCHANTING.get()) - .unlockedBy("has_" + ForgeRegistries.ITEMS.getKey(result.asItem()).getPath(), has(result)); + protected static AetherCookingRecipeBuilder hiddenEnchantingRecipe(RecipeCategory category, ItemLike result, ItemLike ingredient, float experience, int duration) { + return AetherCookingRecipeBuilder.generic(Ingredient.of(ingredient), category, result, experience, duration, AetherRecipeSerializers.ENCHANTING.get()) + .unlockedBy(getHasName(result), has(result)); } - public SimpleCookingRecipeBuilder freezingRecipe(ItemLike result, ItemLike ingredient, float exp, int duration) { - return SimpleCookingRecipeBuilder.cooking(Ingredient.of(ingredient), result, exp, duration, AetherRecipeSerializers.FREEZING.get()) - .unlockedBy("has_" + ForgeRegistries.ITEMS.getKey(ingredient.asItem()).getPath(), has(ingredient)); + protected static AetherCookingRecipeBuilder freezingRecipe(RecipeCategory category, ItemLike result, ItemLike ingredient, float experience, int duration) { + return AetherCookingRecipeBuilder.generic(Ingredient.of(ingredient), category, result, experience, duration, AetherRecipeSerializers.FREEZING.get()) + .unlockedBy(getHasName(ingredient), has(ingredient)); } - public SimpleCookingRecipeBuilder freezingRecipeWithTag(ItemLike result, TagKey ingredient, float exp, int duration, String advancementName) { - return SimpleCookingRecipeBuilder.cooking(Ingredient.of(ingredient), result, exp, duration, AetherRecipeSerializers.FREEZING.get()) - .unlockedBy("has_" + advancementName, has(ingredient)); + protected static AetherCookingRecipeBuilder freezingRecipeWithTag(RecipeCategory category, ItemLike result, TagKey ingredient, float experience, int duration, String unlockName) { + return AetherCookingRecipeBuilder.generic(Ingredient.of(ingredient), category, result, experience, duration, AetherRecipeSerializers.FREEZING.get()) + .unlockedBy("has_" + unlockName, has(ingredient)); } - public SimpleCookingRecipeBuilder freezingRecipeWithUnlockTag(ItemLike result, ItemLike ingredient, TagKey unlock, float exp, int duration, String advancementName) { - return SimpleCookingRecipeBuilder.cooking(Ingredient.of(ingredient), result, exp, duration, AetherRecipeSerializers.FREEZING.get()) - .unlockedBy("has_" + advancementName, has(unlock)); + protected static AetherCookingRecipeBuilder freezingRecipeWithUnlockTag(RecipeCategory category, ItemLike result, ItemLike ingredient, TagKey unlock, float experience, int duration, String unlockName) { + return AetherCookingRecipeBuilder.generic(Ingredient.of(ingredient), category, result, experience, duration, AetherRecipeSerializers.FREEZING.get()) + .unlockedBy("has_" + unlockName, has(unlock)); } - public SimpleCookingRecipeBuilder hiddenFreezingRecipe(ItemLike result, ItemLike ingredient, float exp, int duration) { - return SimpleCookingRecipeBuilder.cooking(Ingredient.of(ingredient), result, exp, duration, AetherRecipeSerializers.FREEZING.get()) - .unlockedBy("has_" + ForgeRegistries.ITEMS.getKey(result.asItem()).getPath(), has(result)); + protected static AetherCookingRecipeBuilder hiddenFreezingRecipe(RecipeCategory category, ItemLike result, ItemLike ingredient, float experience, int duration) { + return AetherCookingRecipeBuilder.generic(Ingredient.of(ingredient), category, result, experience, duration, AetherRecipeSerializers.FREEZING.get()) + .unlockedBy(getHasName(result), has(result)); } - public IncubationBuilder moaIncubationRecipe(EntityType entity, Supplier moaType, ItemLike ingredient) { + protected static IncubationBuilder moaIncubationRecipe(EntityType entity, Supplier moaType, ItemLike ingredient) { CompoundTag tag = new CompoundTag(); tag.putBoolean("IsBaby", true); tag.putString("MoaType", moaType.get().toString()); tag.putBoolean("Hungry", true); tag.putBoolean("PlayerGrown", true); return IncubationBuilder.incubation(Ingredient.of(ingredient), entity, tag, 5700, AetherRecipeSerializers.INCUBATION.get()) - .unlockedBy("has_" + ForgeRegistries.ITEMS.getKey(ingredient.asItem()).getPath(), has(ingredient)); + .unlockedBy(getHasName(ingredient), has(ingredient)); } - public BlockStateRecipeBuilder ambrosiumEnchanting(Block result, Block ingredient) { + protected static BlockStateRecipeBuilder ambrosiumEnchanting(Block result, Block ingredient) { return BlockStateRecipeBuilder.recipe(BlockStateIngredient.of(ingredient), result, AetherRecipeSerializers.AMBROSIUM_ENCHANTING.get()); } - public BlockStateRecipeBuilder swetBallConversion(Block result, Block ingredient) { + protected static BlockStateRecipeBuilder swetBallConversion(Block result, Block ingredient) { return BiomeParameterRecipeBuilder.recipe(BlockStateIngredient.of(ingredient), result, AetherRecipeSerializers.SWET_BALL_CONVERSION.get()); } - public BlockStateRecipeBuilder swetBallConversionTag(Block result, Block ingredient, TagKey tagKey) { + protected static BlockStateRecipeBuilder swetBallConversionTag(Block result, Block ingredient, TagKey tagKey) { return BiomeParameterRecipeBuilder.recipe(BlockStateIngredient.of(ingredient), result, tagKey, AetherRecipeSerializers.SWET_BALL_CONVERSION.get()); } - public BlockStateRecipeBuilder icestoneFreezable(Block result, Block ingredient) { + protected static BlockStateRecipeBuilder icestoneFreezable(Block result, Block ingredient) { return BlockStateRecipeBuilder.recipe(BlockStateIngredient.of(ingredient), result, AetherRecipeSerializers.ICESTONE_FREEZABLE.get()); } - public BlockStateRecipeBuilder accessoryFreezable(Block result, Block ingredient) { + protected static BlockStateRecipeBuilder accessoryFreezable(Block result, Block ingredient) { return BlockStateRecipeBuilder.recipe(BlockStateIngredient.of(ingredient), result, AetherRecipeSerializers.ACCESSORY_FREEZABLE.get()); } - public BlockStateRecipeBuilder convertPlacement(Block result, Block ingredient, TagKey biome) { + protected static BlockStateRecipeBuilder convertPlacement(Block result, Block ingredient, TagKey biome) { return BiomeParameterRecipeBuilder.recipe(BlockStateIngredient.of(ingredient), result, biome, AetherRecipeSerializers.PLACEMENT_CONVERSION.get()); } - public BlockStateRecipeBuilder convertPlacementWithProperties(Block result, Map, Comparable> resultProperties, Block ingredient, Map, Comparable> ingredientProperties, TagKey biome) { + protected static BlockStateRecipeBuilder convertPlacementWithProperties(Block result, Map, Comparable> resultProperties, Block ingredient, Map, Comparable> ingredientProperties, TagKey biome) { return BiomeParameterRecipeBuilder.recipe(BlockStateIngredient.of(pair(ingredient, ingredientProperties)), result, resultProperties, biome, AetherRecipeSerializers.PLACEMENT_CONVERSION.get()); } - public PlacementBanBuilder banItemPlacement(ItemLike ingredient, TagKey biome) { + protected static PlacementBanBuilder banItemPlacement(ItemLike ingredient, TagKey biome) { return ItemBanBuilder.recipe(Ingredient.of(ingredient), BlockStateIngredient.EMPTY, biome, AetherRecipeSerializers.ITEM_PLACEMENT_BAN.get()); } - public PlacementBanBuilder banItemPlacementWithBypass(ItemLike ingredient, TagKey bypass, TagKey biome) { + protected static PlacementBanBuilder banItemPlacementWithBypass(ItemLike ingredient, TagKey bypass, TagKey biome) { return ItemBanBuilder.recipe(Ingredient.of(ingredient), BlockStateIngredient.of(bypass), biome, AetherRecipeSerializers.ITEM_PLACEMENT_BAN.get()); } - public PlacementBanBuilder banBlockPlacement(Block ingredient, TagKey biome) { + protected static PlacementBanBuilder banBlockPlacement(Block ingredient, TagKey biome) { return BlockBanBuilder.recipe(BlockStateIngredient.of(ingredient), BlockStateIngredient.EMPTY, biome, AetherRecipeSerializers.BLOCK_PLACEMENT_BAN.get()); } - public PlacementBanBuilder banBlockPlacementWithBypass(Block ingredient, TagKey bypass, TagKey biome) { + protected static PlacementBanBuilder banBlockPlacementWithBypass(Block ingredient, TagKey bypass, TagKey biome) { return BlockBanBuilder.recipe(BlockStateIngredient.of(ingredient), BlockStateIngredient.of(bypass), biome, AetherRecipeSerializers.BLOCK_PLACEMENT_BAN.get()); } - public ConditionalRecipe.Builder conditionalAccessoryFreezing(RecipeBuilder temporary, RecipeBuilder permanent) { + protected static ConditionalRecipe.Builder conditionalAccessoryFreezing(RecipeBuilder temporary, RecipeBuilder permanent) { ConfigCondition configCondition = new ConfigCondition(AetherConfig.COMMON.temporary_ice_accessory_conversion); return ConditionalRecipe.builder().addCondition(configCondition).addRecipe(ConditionalFinishedRecipe.create(temporary)).addCondition(new NotCondition(configCondition)).addRecipe(ConditionalFinishedRecipe.create(permanent)); } - protected BlockPropertyPair pair(Block resultBlock, Map, Comparable> resultProperties) { + protected static BlockPropertyPair pair(Block resultBlock, Map, Comparable> resultProperties) { return BlockPropertyPair.of(resultBlock, resultProperties); } diff --git a/src/main/java/com/gildedgames/aether/data/resources/AetherBiomes.java b/src/main/java/com/gildedgames/aether/data/resources/AetherBiomes.java deleted file mode 100644 index ee71d560a2..0000000000 --- a/src/main/java/com/gildedgames/aether/data/resources/AetherBiomes.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.gildedgames.aether.data.resources; - -import com.gildedgames.aether.Aether; -import com.gildedgames.aether.data.resources.builders.AetherBiomeBuilders; -import net.minecraft.core.Registry; -import net.minecraft.resources.ResourceKey; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.level.biome.Biome; - -import java.util.HashMap; -import java.util.Map; - -public class AetherBiomes { - public static final Map BIOMES = new HashMap<>(); - - public static final ResourceKey SKYROOT_GROVE = register("skyroot_grove", AetherBiomeBuilders.skyrootGroveBiome()); - public static final ResourceKey SKYROOT_FOREST = register("skyroot_forest", AetherBiomeBuilders.skyrootForestBiome()); - public static final ResourceKey SKYROOT_THICKET = register("skyroot_thicket", AetherBiomeBuilders.skyrootThicketBiome()); - public static final ResourceKey GOLDEN_FOREST = register("golden_forest", AetherBiomeBuilders.goldenForestBiome()); - - public static ResourceKey register(String name, Biome biome) { - ResourceLocation location = new ResourceLocation(Aether.MODID, name); - BIOMES.putIfAbsent(location, biome); - return ResourceKey.create(Registry.BIOME_REGISTRY, location); - } -} diff --git a/src/main/java/com/gildedgames/aether/data/resources/AetherConfiguredFeatures.java b/src/main/java/com/gildedgames/aether/data/resources/AetherConfiguredFeatures.java deleted file mode 100644 index 2a6614d3cb..0000000000 --- a/src/main/java/com/gildedgames/aether/data/resources/AetherConfiguredFeatures.java +++ /dev/null @@ -1,156 +0,0 @@ -package com.gildedgames.aether.data.resources; - -import com.gildedgames.aether.Aether; -import com.gildedgames.aether.block.AetherBlocks; -import com.gildedgames.aether.data.resources.builders.AetherFeatureBuilders; -import com.gildedgames.aether.world.foliageplacer.CrystalFoliagePlacer; -import com.gildedgames.aether.world.foliageplacer.HolidayFoliagePlacer; -import com.gildedgames.aether.world.feature.AetherFeatures; -import com.gildedgames.aether.world.configuration.SimpleDiskConfiguration; -import com.gildedgames.aether.world.treedecorator.HolidayTreeDecorator; -import com.gildedgames.aether.data.generators.AetherDataGenerators; -import com.google.common.collect.ImmutableList; -import net.minecraft.core.Holder; -import net.minecraft.core.HolderSet; -import net.minecraft.core.Registry; -import net.minecraft.data.worldgen.placement.PlacementUtils; -import net.minecraft.resources.ResourceKey; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.util.Mth; -import net.minecraft.util.random.SimpleWeightedRandomList; -import net.minecraft.util.valueproviders.ConstantInt; -import net.minecraft.util.valueproviders.UniformFloat; -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.levelgen.feature.ConfiguredFeature; -import net.minecraft.world.level.levelgen.feature.Feature; -import net.minecraft.world.level.levelgen.feature.WeightedPlacedFeature; -import net.minecraft.world.level.levelgen.feature.configurations.*; -import net.minecraft.world.level.levelgen.feature.featuresize.TwoLayersFeatureSize; -import net.minecraft.world.level.levelgen.feature.foliageplacers.BlobFoliagePlacer; -import net.minecraft.world.level.levelgen.feature.foliageplacers.FancyFoliagePlacer; -import net.minecraft.world.level.levelgen.feature.stateproviders.BlockStateProvider; -import net.minecraft.world.level.levelgen.feature.stateproviders.WeightedStateProvider; -import net.minecraft.world.level.levelgen.feature.trunkplacers.FancyTrunkPlacer; -import net.minecraft.world.level.levelgen.feature.trunkplacers.StraightTrunkPlacer; -import net.minecraft.world.level.material.Fluids; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.OptionalInt; - -public class AetherConfiguredFeatures { - public static final Map> CONFIGURED_FEATURES = new HashMap<>(); - - public static final ResourceKey> COLD_AERCLOUD_CONFIGURATION = register("cold_aercloud", AetherFeatures.AERCLOUD.get(), - AetherFeatureBuilders.createAercloudConfig(16, AetherFeatureStates.COLD_AERCLOUD)); - public static final ResourceKey> BLUE_AERCLOUD_CONFIGURATION = register("blue_aercloud", AetherFeatures.AERCLOUD.get(), - AetherFeatureBuilders.createAercloudConfig(8, AetherFeatureStates.BLUE_AERCLOUD)); - public static final ResourceKey> GOLDEN_AERCLOUD_CONFIGURATION = register("golden_aercloud", AetherFeatures.AERCLOUD.get(), - AetherFeatureBuilders.createAercloudConfig(4, AetherFeatureStates.GOLDEN_AERCLOUD)); - public static final ResourceKey> PINK_AERCLOUD_CONFIGURATION = register("pink_aercloud", AetherFeatures.AERCLOUD.get(), - AetherFeatureBuilders.createAercloudConfig(1, AetherFeatureStates.PINK_AERCLOUD)); - - public static final ResourceKey> CRYSTAL_ISLAND_CONFIGURATION = register("crystal_island", AetherFeatures.CRYSTAL_ISLAND.get(), NoneFeatureConfiguration.INSTANCE); - - public static final ResourceKey> SKYROOT_TREE_CONFIGURATION = register("skyroot_tree", Feature.TREE, - new TreeConfiguration.TreeConfigurationBuilder( - BlockStateProvider.simple(AetherFeatureStates.SKYROOT_LOG), - new StraightTrunkPlacer(4, 2, 0), - BlockStateProvider.simple(AetherFeatureStates.SKYROOT_LEAVES), - new BlobFoliagePlacer(ConstantInt.of(2), ConstantInt.of(0), 3), - new TwoLayersFeatureSize(1, 0, 1) - ).ignoreVines().build()); - - public static final ResourceKey> GOLDEN_OAK_TREE_CONFIGURATION = register("golden_oak_tree", Feature.TREE, - new TreeConfiguration.TreeConfigurationBuilder( - BlockStateProvider.simple(AetherFeatureStates.GOLDEN_OAK_LOG), - new FancyTrunkPlacer(9, 5, 0), - BlockStateProvider.simple(AetherFeatureStates.GOLDEN_OAK_LEAVES), - new FancyFoliagePlacer(ConstantInt.of(2), ConstantInt.of(4), 4), - new TwoLayersFeatureSize(0, 0, 0, OptionalInt.of(10)) - ).ignoreVines().build()); - - public static final ResourceKey> CRYSTAL_TREE_CONFIGURATION = register("crystal_tree", Feature.TREE, - new TreeConfiguration.TreeConfigurationBuilder( - BlockStateProvider.simple(AetherFeatureStates.SKYROOT_LOG), - new StraightTrunkPlacer(7, 0, 0), - new WeightedStateProvider(new SimpleWeightedRandomList.Builder().add(AetherFeatureStates.CRYSTAL_LEAVES, 4).add(AetherFeatureStates.CRYSTAL_FRUIT_LEAVES, 1).build()), - new CrystalFoliagePlacer(ConstantInt.of(0), ConstantInt.of(0), ConstantInt.of(6)), - new TwoLayersFeatureSize(1, 0, 1)).ignoreVines().build()); - - public static final ResourceKey> HOLIDAY_TREE_CONFIGURATION = register("holiday_tree", Feature.TREE, - new TreeConfiguration.TreeConfigurationBuilder( - BlockStateProvider.simple(AetherFeatureStates.SKYROOT_LOG), - new StraightTrunkPlacer(9, 0, 0), - new WeightedStateProvider(new SimpleWeightedRandomList.Builder().add(AetherFeatureStates.HOLIDAY_LEAVES, 4).add(AetherFeatureStates.DECORATED_HOLIDAY_LEAVES, 1).build()), - new HolidayFoliagePlacer(ConstantInt.of(0), ConstantInt.of(0), ConstantInt.of(8)), - new TwoLayersFeatureSize(1, 0, 1)).ignoreVines() - .decorators(ImmutableList.of(new HolidayTreeDecorator(new WeightedStateProvider(new SimpleWeightedRandomList.Builder().add(AetherFeatureStates.SNOW, 10).add(AetherFeatureStates.PRESENT, 1).build())))) - .build()); - - public static final ResourceKey> FLOWER_PATCH_CONFIGURATION = register("flower_patch", Feature.FLOWER, - AetherFeatureBuilders.grassPatch(new WeightedStateProvider(SimpleWeightedRandomList.builder() - .add(AetherFeatureStates.PURPLE_FLOWER, 2) - .add(AetherFeatureStates.WHITE_FLOWER, 2) - .add(AetherFeatureStates.BERRY_BUSH, 1)), 64 - )); - - public static final ResourceKey> GRASS_PATCH_CONFIGURATION = register("grass_patch", Feature.RANDOM_PATCH, - AetherFeatureBuilders.grassPatch(BlockStateProvider.simple(Blocks.GRASS), 32)); - - public static final ResourceKey> TALL_GRASS_PATCH_CONFIGURATION = register("tall_grass_patch", Feature.RANDOM_PATCH, - AetherFeatureBuilders.tallGrassPatch(BlockStateProvider.simple(Blocks.TALL_GRASS))); - - public static final ResourceKey> QUICKSOIL_SHELF_CONFIGURATION = register("quicksoil_shelf", AetherFeatures.SIMPLE_DISK.get(), - new SimpleDiskConfiguration( - UniformFloat.of(Mth.sqrt(12), 5), // sqrt(12) is old static value - BlockStateProvider.simple(AetherFeatureStates.QUICKSOIL), - 3 - )); - - public static final ResourceKey> WATER_LAKE_CONFIGURATION = register("water_lake", AetherFeatures.LAKE.get(), - AetherFeatureBuilders.lake(BlockStateProvider.simple(Blocks.WATER), BlockStateProvider.simple(AetherBlocks.AETHER_GRASS_BLOCK.get()))); - - /** - * Warning for "deprecation" is suppressed because vanilla calls {@link Block#builtInRegistryHolder()} just fine. - */ - @SuppressWarnings("deprecation") - public static final ResourceKey> WATER_SPRING_CONFIGURATION = register("water_spring", Feature.SPRING, - AetherFeatureBuilders.spring(Fluids.WATER.defaultFluidState(), true, 4, 1, HolderSet.direct(Block::builtInRegistryHolder, AetherBlocks.HOLYSTONE.get(), AetherBlocks.AETHER_DIRT.get()))); - - public static final ResourceKey> ORE_AETHER_DIRT_CONFIGURATION = register("aether_dirt_ore", Feature.ORE, - new OreConfiguration(AetherFeatureRules.HOLYSTONE, AetherFeatureStates.AETHER_DIRT, 33)); - public static final ResourceKey> ORE_ICESTONE_CONFIGURATION = register("icestone_ore", Feature.ORE, - new OreConfiguration(AetherFeatureRules.HOLYSTONE, AetherFeatureStates.ICESTONE, 16)); - public static final ResourceKey> ORE_AMBROSIUM_CONFIGURATION = register("ambrosium_ore", Feature.ORE, - new OreConfiguration(AetherFeatureRules.HOLYSTONE, AetherFeatureStates.AMBROSIUM_ORE, 16)); - public static final ResourceKey> ORE_ZANITE_CONFIGURATION = register("zanite_ore", Feature.ORE, - new OreConfiguration(AetherFeatureRules.HOLYSTONE, AetherFeatureStates.ZANITE_ORE, 8)); - public static final ResourceKey> ORE_GRAVITITE_COMMON_CONFIGURATION = register("gravitite_ore_common", Feature.ORE, - new OreConfiguration(AetherFeatureRules.HOLYSTONE, AetherFeatureStates.GRAVITITE_ORE, 6, 0.9F)); - public static final ResourceKey> ORE_GRAVITITE_DENSE_CONFIGURATION = register("gravitite_ore_dense", Feature.ORE, - new OreConfiguration(AetherFeatureRules.HOLYSTONE, AetherFeatureStates.GRAVITITE_ORE, 3, 0.5F)); - - public static final ResourceKey> TREES_SKYROOT_AND_GOLDEN_OAK_CONFIGURATION = register("trees_skyroot_and_golden_oak", Feature.RANDOM_SELECTOR, - new RandomFeatureConfiguration(List.of(new WeightedPlacedFeature( - PlacementUtils.inlinePlaced(dataHolder(GOLDEN_OAK_TREE_CONFIGURATION), PlacementUtils.filteredByBlockSurvival(AetherBlocks.GOLDEN_OAK_SAPLING.get())), 0.01F)), - PlacementUtils.inlinePlaced(dataHolder(SKYROOT_TREE_CONFIGURATION), PlacementUtils.filteredByBlockSurvival(AetherBlocks.SKYROOT_SAPLING.get())))); - - public static final ResourceKey> TREES_GOLDEN_OAK_AND_SKYROOT_CONFIGURATION = register("trees_golden_oak_and_skyroot", Feature.RANDOM_SELECTOR, - new RandomFeatureConfiguration(List.of(new WeightedPlacedFeature( - PlacementUtils.inlinePlaced(dataHolder(SKYROOT_TREE_CONFIGURATION), PlacementUtils.filteredByBlockSurvival(AetherBlocks.SKYROOT_SAPLING.get())), 0.1F)), - PlacementUtils.inlinePlaced(dataHolder(GOLDEN_OAK_TREE_CONFIGURATION), PlacementUtils.filteredByBlockSurvival(AetherBlocks.GOLDEN_OAK_SAPLING.get())))); - - public static > ResourceKey> register(String name, F feature, FC configuration) { - ResourceLocation location = new ResourceLocation(Aether.MODID, name); - CONFIGURED_FEATURES.put(location, new ConfiguredFeature<>(feature, configuration)); - return ResourceKey.create(Registry.CONFIGURED_FEATURE_REGISTRY, location); - } - - public static Holder> dataHolder(ResourceKey> resourceKey) { - return AetherDataGenerators.DATA_REGISTRY.registryOrThrow(Registry.CONFIGURED_FEATURE_REGISTRY).getOrCreateHolderOrThrow(resourceKey); - } -} diff --git a/src/main/java/com/gildedgames/aether/data/resources/AetherDimensions.java b/src/main/java/com/gildedgames/aether/data/resources/AetherDimensions.java deleted file mode 100644 index 5fb7d69e93..0000000000 --- a/src/main/java/com/gildedgames/aether/data/resources/AetherDimensions.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.gildedgames.aether.data.resources; - -import com.gildedgames.aether.Aether; -import net.minecraft.resources.ResourceKey; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.core.Registry; -import net.minecraft.tags.BlockTags; -import net.minecraft.util.valueproviders.UniformInt; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.dimension.DimensionType; -import net.minecraft.world.level.dimension.LevelStem; - -import java.util.HashMap; -import java.util.Map; -import java.util.OptionalLong; - -public class AetherDimensions { - // NOT for API - If you are an addon author using this field, expect this field to change without warning! - private final static ResourceLocation AETHER_LEVEL_ID = new ResourceLocation(Aether.MODID, "the_aether"); - - public static final Map DIMENSION_TYPES = new HashMap<>(); - - // Dimension Type - Specifies logic that impacts an entire dimension - public static ResourceKey AETHER_DIMENSION_TYPE = register(AETHER_LEVEL_ID.getPath(), new DimensionType(OptionalLong.empty(), true, false, false, true, 1.0D, true, false, 0, 256, 256, BlockTags.INFINIBURN_OVERWORLD, new ResourceLocation(Aether.MODID, "the_aether"), 0.0F, new DimensionType.MonsterSettings(false, false, UniformInt.of(0, 7), 0))); - // Level - Actual runtime dimension - public static final ResourceKey AETHER_LEVEL = ResourceKey.create(Registry.DIMENSION_REGISTRY, AetherDimensions.AETHER_LEVEL_ID); - // Level Stem - Begins the dimension's lifecycle - public static final ResourceKey AETHER_LEVEL_STEM = ResourceKey.create(Registry.LEVEL_STEM_REGISTRY, AetherDimensions.AETHER_LEVEL_ID); - - public static ResourceKey register(String name, DimensionType dimensionType) { - ResourceLocation location = new ResourceLocation(Aether.MODID, name); - DIMENSION_TYPES.putIfAbsent(location, dimensionType); - return ResourceKey.create(Registry.DIMENSION_TYPE_REGISTRY, location); - } -} \ No newline at end of file diff --git a/src/main/java/com/gildedgames/aether/data/resources/AetherNoiseGeneratorSettings.java b/src/main/java/com/gildedgames/aether/data/resources/AetherNoiseGeneratorSettings.java deleted file mode 100644 index 2a7e21d701..0000000000 --- a/src/main/java/com/gildedgames/aether/data/resources/AetherNoiseGeneratorSettings.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.gildedgames.aether.data.resources; - -import com.gildedgames.aether.Aether; -import com.gildedgames.aether.data.resources.builders.AetherNoiseBuilders; -import net.minecraft.core.Registry; -import net.minecraft.resources.ResourceKey; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.level.levelgen.NoiseGeneratorSettings; - -import java.util.HashMap; -import java.util.Map; - -public class AetherNoiseGeneratorSettings { - public static final Map NOISE_GENERATOR_SETTINGS = new HashMap<>(); - - public static final ResourceKey SKYLANDS = register("skylands", AetherNoiseBuilders.skylandsNoiseSettings()); - - public static ResourceKey register(String name, NoiseGeneratorSettings noiseGeneratorSettings) { - ResourceLocation location = new ResourceLocation(Aether.MODID, name); - NOISE_GENERATOR_SETTINGS.putIfAbsent(location, noiseGeneratorSettings); - return ResourceKey.create(Registry.NOISE_GENERATOR_SETTINGS_REGISTRY, location); - } -} diff --git a/src/main/java/com/gildedgames/aether/data/resources/AetherPlacedFeatures.java b/src/main/java/com/gildedgames/aether/data/resources/AetherPlacedFeatures.java deleted file mode 100644 index 8edc2a81a6..0000000000 --- a/src/main/java/com/gildedgames/aether/data/resources/AetherPlacedFeatures.java +++ /dev/null @@ -1,123 +0,0 @@ -package com.gildedgames.aether.data.resources; - -import com.gildedgames.aether.Aether; -import com.gildedgames.aether.block.AetherBlocks; -import com.gildedgames.aether.AetherTags; -import com.gildedgames.aether.data.resources.builders.AetherFeatureBuilders; -import com.gildedgames.aether.world.placementmodifier.*; -import com.gildedgames.aether.AetherConfig; -import com.gildedgames.aether.data.generators.AetherDataGenerators; -import net.minecraft.core.Holder; -import net.minecraft.core.Registry; -import net.minecraft.data.worldgen.placement.PlacementUtils; -import net.minecraft.resources.ResourceKey; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.util.valueproviders.UniformInt; -import net.minecraft.world.level.levelgen.Heightmap; -import net.minecraft.world.level.levelgen.VerticalAnchor; -import net.minecraft.world.level.levelgen.blockpredicates.BlockPredicate; -import net.minecraft.world.level.levelgen.feature.ConfiguredFeature; -import net.minecraft.world.level.levelgen.placement.*; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -public class AetherPlacedFeatures { - public static final Map PLACED_FEATURES = new HashMap<>(); - - public static final ResourceKey COLD_AERCLOUD_PLACEMENT = register("cold_aercloud", AetherConfiguredFeatures.dataHolder(AetherConfiguredFeatures.COLD_AERCLOUD_CONFIGURATION), AetherFeatureBuilders.createAercloudPlacements(128, 5)); - public static final ResourceKey BLUE_AERCLOUD_PLACEMENT = register("blue_aercloud", AetherConfiguredFeatures.dataHolder(AetherConfiguredFeatures.BLUE_AERCLOUD_CONFIGURATION), AetherFeatureBuilders.createAercloudPlacements(96, 5)); - public static final ResourceKey GOLDEN_AERCLOUD_PLACEMENT = register("golden_aercloud", AetherConfiguredFeatures.dataHolder(AetherConfiguredFeatures.GOLDEN_AERCLOUD_CONFIGURATION), AetherFeatureBuilders.createAercloudPlacements(160, 5)); - public static final ResourceKey PINK_AERCLOUD_PLACEMENT = register("pink_aercloud", AetherConfiguredFeatures.dataHolder(AetherConfiguredFeatures.PINK_AERCLOUD_CONFIGURATION), AetherFeatureBuilders.createPinkAercloudPlacements(160, 7)); - - public static final ResourceKey SKYROOT_GROVE_TREES_PLACEMENT = register("skyroot_grove_trees", AetherConfiguredFeatures.dataHolder(AetherConfiguredFeatures.TREES_SKYROOT_AND_GOLDEN_OAK_CONFIGURATION), - AetherFeatureBuilders.treePlacement(PlacementUtils.countExtra(2, 0.1F, 1))); - - public static final ResourceKey SKYROOT_FOREST_TREES_PLACEMENT = register("skyroot_forest_trees", AetherConfiguredFeatures.dataHolder(AetherConfiguredFeatures.TREES_SKYROOT_AND_GOLDEN_OAK_CONFIGURATION), - AetherFeatureBuilders.treePlacement(PlacementUtils.countExtra(7, 0.1F, 1))); - - public static final ResourceKey SKYROOT_THICKET_TREES_PLACEMENT = register("skyroot_thicket_trees", AetherConfiguredFeatures.dataHolder(AetherConfiguredFeatures.TREES_SKYROOT_AND_GOLDEN_OAK_CONFIGURATION), - AetherFeatureBuilders.treePlacement(PlacementUtils.countExtra(15, 0.1F, 1))); - - public static final ResourceKey GOLDEN_FOREST_TREES_PLACEMENT = register("golden_forest_trees", AetherConfiguredFeatures.dataHolder(AetherConfiguredFeatures.TREES_GOLDEN_OAK_AND_SKYROOT_CONFIGURATION), - AetherFeatureBuilders.treePlacement(PlacementUtils.countExtra(10, 0.1F, 1))); - - public static final ResourceKey CRYSTAL_ISLAND_PLACEMENT = register("crystal_island", AetherConfiguredFeatures.dataHolder(AetherConfiguredFeatures.CRYSTAL_ISLAND_CONFIGURATION), - InSquarePlacement.spread(), - HeightRangePlacement.uniform(VerticalAnchor.absolute(80), VerticalAnchor.absolute(120)), - new DungeonBlacklistFilter(), - RarityFilter.onAverageOnceEvery(16)); - - public static final ResourceKey HOLIDAY_TREE_PLACEMENT = register("holiday_tree", AetherConfiguredFeatures.dataHolder(AetherConfiguredFeatures.HOLIDAY_TREE_CONFIGURATION), - new HolidayFilter(), - ImprovedLayerPlacementModifier.of(Heightmap.Types.OCEAN_FLOOR, UniformInt.of(0, 1), 4), - RarityFilter.onAverageOnceEvery(48), - PlacementUtils.filteredByBlockSurvival(AetherBlocks.SKYROOT_SAPLING.get())); - - public static final ResourceKey FLOWER_PATCH_PLACEMENT = register("flower_patch", AetherConfiguredFeatures.dataHolder(AetherConfiguredFeatures.FLOWER_PATCH_CONFIGURATION), - InSquarePlacement.spread(), PlacementUtils.HEIGHTMAP, BiomeFilter.biome()); - - public static final ResourceKey GRASS_PATCH_PLACEMENT = register("grass_patch", AetherConfiguredFeatures.dataHolder(AetherConfiguredFeatures.GRASS_PATCH_CONFIGURATION), - new ConfigFilter(AetherConfig.COMMON.generate_tall_grass), - CountPlacement.of(2), - InSquarePlacement.spread(), - PlacementUtils.HEIGHTMAP_WORLD_SURFACE, - BiomeFilter.biome()); - - public static final ResourceKey TALL_GRASS_PATCH_PLACEMENT = register("tall_grass_patch", AetherConfiguredFeatures.dataHolder(AetherConfiguredFeatures.TALL_GRASS_PATCH_CONFIGURATION), - new ConfigFilter(AetherConfig.COMMON.generate_tall_grass), - NoiseThresholdCountPlacement.of(-0.8D, 0, 7), - RarityFilter.onAverageOnceEvery(32), - InSquarePlacement.spread(), - PlacementUtils.HEIGHTMAP, - BiomeFilter.biome()); - - public static final ResourceKey QUICKSOIL_SHELF_PLACEMENT = register("quicksoil_shelf", AetherConfiguredFeatures.dataHolder(AetherConfiguredFeatures.QUICKSOIL_SHELF_CONFIGURATION), - InSquarePlacement.spread(), - PlacementUtils.HEIGHTMAP_WORLD_SURFACE, - new ElevationAdjustmentModifier(UniformInt.of(-4, -2)), - new ElevationFilter(47, 70), - new DungeonBlacklistFilter(), - BlockPredicateFilter.forPredicate(BlockPredicate.matchesTag(AetherTags.Blocks.QUICKSOIL_CAN_GENERATE))); - // FIXME once Terrain can go above 63 again, change 47 -> 63 - - public static final ResourceKey WATER_LAKE_PLACEMENT = register("water_lake", AetherConfiguredFeatures.dataHolder(AetherConfiguredFeatures.WATER_LAKE_CONFIGURATION), - RarityFilter.onAverageOnceEvery(40), - InSquarePlacement.spread(), - PlacementUtils.HEIGHTMAP_WORLD_SURFACE, - BiomeFilter.biome()); - - public static final ResourceKey WATER_SPRING_PLACEMENT = register("water_spring", AetherConfiguredFeatures.dataHolder(AetherConfiguredFeatures.WATER_SPRING_CONFIGURATION), - CountPlacement.of(25), - InSquarePlacement.spread(), - new DungeonBlacklistFilter(), - HeightRangePlacement.uniform(VerticalAnchor.bottom(), VerticalAnchor.absolute(192)), BiomeFilter.biome()); - - public static final ResourceKey ORE_AETHER_DIRT_PLACEMENT = register("aether_dirt_ore", AetherConfiguredFeatures.dataHolder(AetherConfiguredFeatures.ORE_AETHER_DIRT_CONFIGURATION), - AetherFeatureBuilders.commonOrePlacement(10, HeightRangePlacement.uniform(VerticalAnchor.aboveBottom(0), VerticalAnchor.belowTop(0)))); - public static final ResourceKey ORE_ICESTONE_PLACEMENT = register("icestone_ore", AetherConfiguredFeatures.dataHolder(AetherConfiguredFeatures.ORE_ICESTONE_CONFIGURATION), - AetherFeatureBuilders.commonOrePlacement(10, HeightRangePlacement.uniform(VerticalAnchor.aboveBottom(0), VerticalAnchor.belowTop(0)))); - public static final ResourceKey ORE_AMBROSIUM_PLACEMENT = register("ambrosium_ore", AetherConfiguredFeatures.dataHolder(AetherConfiguredFeatures.ORE_AMBROSIUM_CONFIGURATION), - AetherFeatureBuilders.commonOrePlacement(10, HeightRangePlacement.uniform(VerticalAnchor.aboveBottom(0), VerticalAnchor.belowTop(0)))); - public static final ResourceKey ORE_ZANITE_PLACEMENT = register("zanite_ore", AetherConfiguredFeatures.dataHolder(AetherConfiguredFeatures.ORE_ZANITE_CONFIGURATION), - AetherFeatureBuilders.commonOrePlacement(10, HeightRangePlacement.uniform(VerticalAnchor.aboveBottom(0), VerticalAnchor.belowTop(0)))); - public static final ResourceKey ORE_GRAVITITE_COMMON_PLACEMENT = register("gravitite_ore_common", AetherConfiguredFeatures.dataHolder(AetherConfiguredFeatures.ORE_GRAVITITE_COMMON_CONFIGURATION), - AetherFeatureBuilders.commonOrePlacement(7, HeightRangePlacement.uniform(VerticalAnchor.aboveBottom(0), VerticalAnchor.belowTop(0)))); - public static final ResourceKey ORE_GRAVITITE_DENSE_PLACEMENT = register("gravitite_ore_dense", AetherConfiguredFeatures.dataHolder(AetherConfiguredFeatures.ORE_GRAVITITE_DENSE_CONFIGURATION), - AetherFeatureBuilders.commonOrePlacement(3, HeightRangePlacement.triangle(VerticalAnchor.aboveBottom(0), VerticalAnchor.belowTop(0)))); - - public static ResourceKey register(String name, Holder> configuredFeature, List placementModifiers) { - ResourceLocation location = new ResourceLocation(Aether.MODID, name); - PLACED_FEATURES.put(location, new PlacedFeature(Holder.hackyErase(configuredFeature), List.copyOf(placementModifiers))); - return ResourceKey.create(Registry.PLACED_FEATURE_REGISTRY, location); - } - - public static ResourceKey register(String name, Holder> configuredFeature, PlacementModifier... placementModifiers) { - return register(name, configuredFeature, List.of(placementModifiers)); - } - - public static Holder dataHolder(ResourceKey resourceKey) { - return AetherDataGenerators.DATA_REGISTRY.registryOrThrow(Registry.PLACED_FEATURE_REGISTRY).getOrCreateHolderOrThrow(resourceKey); - } -} diff --git a/src/main/java/com/gildedgames/aether/data/resources/AetherStructureSets.java b/src/main/java/com/gildedgames/aether/data/resources/AetherStructureSets.java deleted file mode 100644 index 59a84e732f..0000000000 --- a/src/main/java/com/gildedgames/aether/data/resources/AetherStructureSets.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.gildedgames.aether.data.resources; - -import com.gildedgames.aether.Aether; -import net.minecraft.core.Registry; -import net.minecraft.resources.ResourceKey; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.level.levelgen.structure.StructureSet; -import net.minecraft.world.level.levelgen.structure.placement.RandomSpreadStructurePlacement; -import net.minecraft.world.level.levelgen.structure.placement.RandomSpreadType; - -import java.util.HashMap; -import java.util.Map; - -public class AetherStructureSets { - public static final Map STRUCTURE_SETS = new HashMap<>(); - - public static final ResourceKey LARGE_AERCLOUD = register("large_aercloud", new StructureSet(AetherStructures.dataHolder(AetherStructures.LARGE_AERCLOUD), new RandomSpreadStructurePlacement(4, 2, RandomSpreadType.LINEAR, 15536586))); - public static final ResourceKey BRONZE_DUNGEON = register("bronze_dungeon", - new StructureSet( - AetherStructures.dataHolder(AetherStructures.BRONZE_DUNGEON), - new RandomSpreadStructurePlacement(12, 10, RandomSpreadType.LINEAR, 32146754) - ) - ); - public static final ResourceKey SILVER_DUNGEON = register("silver_dungeon", - new StructureSet( - AetherStructures.dataHolder(AetherStructures.SILVER_DUNGEON), - new RandomSpreadStructurePlacement(16, 6, RandomSpreadType.LINEAR, 4325806) - ) - ); - public static final ResourceKey GOLD_DUNGEON = register("gold_dungeon", - new StructureSet( - AetherStructures.dataHolder(AetherStructures.GOLD_DUNGEON), - new RandomSpreadStructurePlacement(20, 6, RandomSpreadType.LINEAR, 15436785) - ) - ); - - public static ResourceKey register(String name, StructureSet structure) { - ResourceLocation location = new ResourceLocation(Aether.MODID, name); - STRUCTURE_SETS.putIfAbsent(location, structure); - return ResourceKey.create(Registry.STRUCTURE_SET_REGISTRY, location); - } -} diff --git a/src/main/java/com/gildedgames/aether/data/resources/AetherStructures.java b/src/main/java/com/gildedgames/aether/data/resources/AetherStructures.java deleted file mode 100644 index 426fdbf956..0000000000 --- a/src/main/java/com/gildedgames/aether/data/resources/AetherStructures.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.gildedgames.aether.data.resources; - -import com.gildedgames.aether.Aether; -import com.gildedgames.aether.AetherTags; -import com.gildedgames.aether.block.AetherBlockStateProperties; -import com.gildedgames.aether.block.AetherBlocks; -import com.gildedgames.aether.data.generators.AetherDataGenerators; -import com.gildedgames.aether.data.resources.builders.AetherStructureBuilders; -import com.gildedgames.aether.world.structure.BronzeDungeonStructure; -import com.gildedgames.aether.world.structure.GoldDungeonStructure; -import com.gildedgames.aether.world.structure.LargeAercloudStructure; -import com.gildedgames.aether.world.structure.SilverDungeonStructure; -import net.minecraft.core.Holder; -import net.minecraft.core.Registry; -import net.minecraft.resources.ResourceKey; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.level.levelgen.GenerationStep; -import net.minecraft.world.level.levelgen.feature.stateproviders.BlockStateProvider; -import net.minecraft.world.level.levelgen.structure.Structure; -import net.minecraft.world.level.levelgen.structure.TerrainAdjustment; - -import java.util.HashMap; -import java.util.Map; - -public class AetherStructures { - public static final Map STRUCTURES = new HashMap<>(); - - public static final ResourceKey LARGE_AERCLOUD = register("large_aercloud", new LargeAercloudStructure(AetherStructureBuilders.structure(AetherTags.Biomes.HAS_LARGE_AERCLOUD, GenerationStep.Decoration.SURFACE_STRUCTURES, TerrainAdjustment.NONE), BlockStateProvider.simple(AetherBlocks.COLD_AERCLOUD.get().defaultBlockState().setValue(AetherBlockStateProperties.DOUBLE_DROPS, true)), 3)); - - public static final ResourceKey BRONZE_DUNGEON = register("bronze_dungeon", - new BronzeDungeonStructure(AetherStructureBuilders.structure( - AetherTags.Biomes.HAS_BRONZE_DUNGEON, - GenerationStep.Decoration.SURFACE_STRUCTURES, - TerrainAdjustment.BURY), - 8 - ) - ); - public static final ResourceKey SILVER_DUNGEON = register("silver_dungeon", - new SilverDungeonStructure(AetherStructureBuilders.structure( - AetherTags.Biomes.HAS_SILVER_DUNGEON, - GenerationStep.Decoration.SURFACE_STRUCTURES, - TerrainAdjustment.NONE) - ) - ); - public static final ResourceKey GOLD_DUNGEON = register("gold_dungeon", - new GoldDungeonStructure(AetherStructureBuilders.structure( - AetherTags.Biomes.HAS_GOLD_DUNGEON, - GenerationStep.Decoration.SURFACE_STRUCTURES, - TerrainAdjustment.NONE) - ) - ); - - public static ResourceKey register(String name, Structure structure) { - ResourceLocation location = new ResourceLocation(Aether.MODID, name); - STRUCTURES.putIfAbsent(location, structure); - return ResourceKey.create(Registry.STRUCTURE_REGISTRY, location); - } - - public static Holder dataHolder(ResourceKey resourceKey) { - return AetherDataGenerators.DATA_REGISTRY.registryOrThrow(Registry.STRUCTURE_REGISTRY).getOrCreateHolderOrThrow(resourceKey); - } -} diff --git a/src/main/java/com/gildedgames/aether/data/resources/builders/AetherBiomeBuilders.java b/src/main/java/com/gildedgames/aether/data/resources/builders/AetherBiomeBuilders.java index 656f85e393..45355d2bee 100644 --- a/src/main/java/com/gildedgames/aether/data/resources/builders/AetherBiomeBuilders.java +++ b/src/main/java/com/gildedgames/aether/data/resources/builders/AetherBiomeBuilders.java @@ -1,54 +1,35 @@ package com.gildedgames.aether.data.resources.builders; import com.gildedgames.aether.client.AetherSoundEvents; +import com.gildedgames.aether.data.resources.registries.AetherBiomes; +import com.gildedgames.aether.data.resources.registries.AetherPlacedFeatures; import com.gildedgames.aether.entity.AetherEntityTypes; -import com.gildedgames.aether.data.resources.AetherBiomes; -import com.gildedgames.aether.data.resources.AetherPlacedFeatures; import com.mojang.datafixers.util.Pair; -import net.minecraft.core.Holder; -import net.minecraft.core.Registry; +import net.minecraft.core.HolderGetter; import net.minecraft.sounds.Music; import net.minecraft.world.entity.MobCategory; import net.minecraft.world.level.biome.*; import net.minecraft.world.level.levelgen.GenerationStep; +import net.minecraft.world.level.levelgen.carver.ConfiguredWorldCarver; +import net.minecraft.world.level.levelgen.placement.PlacedFeature; import java.util.List; public class AetherBiomeBuilders { - public static BiomeSource buildAetherBiomeSource(Registry registry) { - final Climate.Parameter FULL_RANGE = Climate.Parameter.span(-1.0F, 1.0F); - return new MultiNoiseBiomeSource(new Climate.ParameterList<>(List.of( - Pair.of(new Climate.ParameterPoint(FULL_RANGE, FULL_RANGE, FULL_RANGE, FULL_RANGE, FULL_RANGE, Climate.Parameter.span(1.0F, 2.0F), 0), - Holder.Reference.createStandAlone(registry, AetherBiomes.GOLDEN_FOREST)), - Pair.of(new Climate.ParameterPoint(FULL_RANGE, FULL_RANGE, FULL_RANGE, FULL_RANGE, FULL_RANGE, Climate.Parameter.span(0.5F, 1.0F), 0), - Holder.Reference.createStandAlone(registry, AetherBiomes.SKYROOT_FOREST)), - Pair.of(new Climate.ParameterPoint(FULL_RANGE, FULL_RANGE, FULL_RANGE, FULL_RANGE, FULL_RANGE, Climate.Parameter.span(-0.1F, 0.5F), 0), - Holder.Reference.createStandAlone(registry, AetherBiomes.SKYROOT_THICKET)), - Pair.of(new Climate.ParameterPoint(FULL_RANGE, FULL_RANGE, FULL_RANGE, FULL_RANGE, FULL_RANGE, Climate.Parameter.span(-0.7F, -0.1F), 0), - Holder.Reference.createStandAlone(registry, AetherBiomes.SKYROOT_FOREST)), - Pair.of(new Climate.ParameterPoint(FULL_RANGE, FULL_RANGE, FULL_RANGE, FULL_RANGE, FULL_RANGE, Climate.Parameter.span(-2.0F, -0.7F), 0), - Holder.Reference.createStandAlone(registry, AetherBiomes.SKYROOT_GROVE)) - ))); - } - - public static Biome skyrootGroveBiome() { - return makeDefaultBiome(new BiomeGenerationSettings.Builder() - .addFeature(GenerationStep.Decoration.VEGETAL_DECORATION, AetherPlacedFeatures.dataHolder(AetherPlacedFeatures.SKYROOT_GROVE_TREES_PLACEMENT))); + public static Biome skyrootGroveBiome(HolderGetter placedFeatures, HolderGetter> worldCarvers) { + return makeDefaultBiome(new BiomeGenerationSettings.Builder(placedFeatures, worldCarvers).addFeature(GenerationStep.Decoration.VEGETAL_DECORATION, AetherPlacedFeatures.SKYROOT_GROVE_TREES_PLACEMENT)); } - public static Biome skyrootForestBiome() { - return makeDefaultBiome(new BiomeGenerationSettings.Builder() - .addFeature(GenerationStep.Decoration.VEGETAL_DECORATION, AetherPlacedFeatures.dataHolder(AetherPlacedFeatures.SKYROOT_FOREST_TREES_PLACEMENT))); + public static Biome skyrootForestBiome(HolderGetter placedFeatures, HolderGetter> worldCarvers) { + return makeDefaultBiome(new BiomeGenerationSettings.Builder(placedFeatures, worldCarvers).addFeature(GenerationStep.Decoration.VEGETAL_DECORATION, AetherPlacedFeatures.SKYROOT_FOREST_TREES_PLACEMENT)); } - public static Biome skyrootThicketBiome() { - return makeDefaultBiome(new BiomeGenerationSettings.Builder() - .addFeature(GenerationStep.Decoration.VEGETAL_DECORATION, AetherPlacedFeatures.dataHolder(AetherPlacedFeatures.SKYROOT_THICKET_TREES_PLACEMENT))); + public static Biome skyrootThicketBiome(HolderGetter placedFeatures, HolderGetter> worldCarvers) { + return makeDefaultBiome(new BiomeGenerationSettings.Builder(placedFeatures, worldCarvers).addFeature(GenerationStep.Decoration.VEGETAL_DECORATION, AetherPlacedFeatures.SKYROOT_THICKET_TREES_PLACEMENT)); } - public static Biome goldenForestBiome() { - return makeDefaultBiome(new BiomeGenerationSettings.Builder() - .addFeature(GenerationStep.Decoration.VEGETAL_DECORATION, AetherPlacedFeatures.dataHolder(AetherPlacedFeatures.GOLDEN_FOREST_TREES_PLACEMENT))); + public static Biome goldenForestBiome(HolderGetter placedFeatures, HolderGetter> worldCarvers) { + return makeDefaultBiome(new BiomeGenerationSettings.Builder(placedFeatures, worldCarvers).addFeature(GenerationStep.Decoration.VEGETAL_DECORATION, AetherPlacedFeatures.GOLDEN_FOREST_TREES_PLACEMENT)); } public static Biome makeDefaultBiome(BiomeGenerationSettings.Builder builder) { @@ -64,7 +45,7 @@ public static Biome makeDefaultBiome(BiomeGenerationSettings.Builder builder) { .grassColorOverride(0xb1_ff_cb) .foliageColorOverride(0xb1_ff_cb) .grassColorModifier(BiomeSpecialEffects.GrassColorModifier.NONE) - .backgroundMusic(new Music(AetherSoundEvents.MUSIC_AETHER.get(), 12000, 24000, true)) + .backgroundMusic(new Music(AetherSoundEvents.MUSIC_AETHER.getHolder().orElseThrow(), 12000, 24000, true)) .build(), new MobSpawnSettings.Builder() .addSpawn(MobCategory.MONSTER, new MobSpawnSettings.SpawnerData(AetherEntityTypes.WHIRLWIND.get(), 9, 2, 2)) @@ -83,24 +64,24 @@ public static Biome makeDefaultBiome(BiomeGenerationSettings.Builder builder) { .addSpawn(MobCategory.CREATURE, new MobSpawnSettings.SpawnerData(AetherEntityTypes.AERWHALE.get(), 2, 1, 1)) .build(), builder - .addFeature(GenerationStep.Decoration.RAW_GENERATION, AetherPlacedFeatures.dataHolder(AetherPlacedFeatures.QUICKSOIL_SHELF_PLACEMENT)) - .addFeature(GenerationStep.Decoration.LAKES, AetherPlacedFeatures.dataHolder(AetherPlacedFeatures.WATER_LAKE_PLACEMENT)) - .addFeature(GenerationStep.Decoration.UNDERGROUND_ORES, AetherPlacedFeatures.dataHolder(AetherPlacedFeatures.ORE_AETHER_DIRT_PLACEMENT)) - .addFeature(GenerationStep.Decoration.UNDERGROUND_ORES, AetherPlacedFeatures.dataHolder(AetherPlacedFeatures.ORE_ICESTONE_PLACEMENT)) - .addFeature(GenerationStep.Decoration.UNDERGROUND_ORES, AetherPlacedFeatures.dataHolder(AetherPlacedFeatures.ORE_AMBROSIUM_PLACEMENT)) - .addFeature(GenerationStep.Decoration.UNDERGROUND_ORES, AetherPlacedFeatures.dataHolder(AetherPlacedFeatures.ORE_ZANITE_PLACEMENT)) - .addFeature(GenerationStep.Decoration.UNDERGROUND_ORES, AetherPlacedFeatures.dataHolder(AetherPlacedFeatures.ORE_GRAVITITE_COMMON_PLACEMENT)) - .addFeature(GenerationStep.Decoration.UNDERGROUND_ORES, AetherPlacedFeatures.dataHolder(AetherPlacedFeatures.ORE_GRAVITITE_DENSE_PLACEMENT)) - .addFeature(GenerationStep.Decoration.FLUID_SPRINGS, AetherPlacedFeatures.dataHolder(AetherPlacedFeatures.WATER_SPRING_PLACEMENT)) - .addFeature(GenerationStep.Decoration.VEGETAL_DECORATION, AetherPlacedFeatures.dataHolder(AetherPlacedFeatures.GRASS_PATCH_PLACEMENT)) - .addFeature(GenerationStep.Decoration.VEGETAL_DECORATION, AetherPlacedFeatures.dataHolder(AetherPlacedFeatures.TALL_GRASS_PATCH_PLACEMENT)) - .addFeature(GenerationStep.Decoration.VEGETAL_DECORATION, AetherPlacedFeatures.dataHolder(AetherPlacedFeatures.HOLIDAY_TREE_PLACEMENT)) - .addFeature(GenerationStep.Decoration.VEGETAL_DECORATION, AetherPlacedFeatures.dataHolder(AetherPlacedFeatures.FLOWER_PATCH_PLACEMENT)) - .addFeature(GenerationStep.Decoration.TOP_LAYER_MODIFICATION, AetherPlacedFeatures.dataHolder(AetherPlacedFeatures.CRYSTAL_ISLAND_PLACEMENT)) - .addFeature(GenerationStep.Decoration.TOP_LAYER_MODIFICATION, AetherPlacedFeatures.dataHolder(AetherPlacedFeatures.COLD_AERCLOUD_PLACEMENT)) - .addFeature(GenerationStep.Decoration.TOP_LAYER_MODIFICATION, AetherPlacedFeatures.dataHolder(AetherPlacedFeatures.BLUE_AERCLOUD_PLACEMENT)) - .addFeature(GenerationStep.Decoration.TOP_LAYER_MODIFICATION, AetherPlacedFeatures.dataHolder(AetherPlacedFeatures.GOLDEN_AERCLOUD_PLACEMENT)) - .addFeature(GenerationStep.Decoration.TOP_LAYER_MODIFICATION, AetherPlacedFeatures.dataHolder(AetherPlacedFeatures.PINK_AERCLOUD_PLACEMENT)) + .addFeature(GenerationStep.Decoration.RAW_GENERATION, AetherPlacedFeatures.QUICKSOIL_SHELF_PLACEMENT) + .addFeature(GenerationStep.Decoration.LAKES, AetherPlacedFeatures.WATER_LAKE_PLACEMENT) + .addFeature(GenerationStep.Decoration.UNDERGROUND_ORES, AetherPlacedFeatures.ORE_AETHER_DIRT_PLACEMENT) + .addFeature(GenerationStep.Decoration.UNDERGROUND_ORES, AetherPlacedFeatures.ORE_ICESTONE_PLACEMENT) + .addFeature(GenerationStep.Decoration.UNDERGROUND_ORES, AetherPlacedFeatures.ORE_AMBROSIUM_PLACEMENT) + .addFeature(GenerationStep.Decoration.UNDERGROUND_ORES, AetherPlacedFeatures.ORE_ZANITE_PLACEMENT) + .addFeature(GenerationStep.Decoration.UNDERGROUND_ORES, AetherPlacedFeatures.ORE_GRAVITITE_COMMON_PLACEMENT) + .addFeature(GenerationStep.Decoration.UNDERGROUND_ORES, AetherPlacedFeatures.ORE_GRAVITITE_DENSE_PLACEMENT) + .addFeature(GenerationStep.Decoration.FLUID_SPRINGS, AetherPlacedFeatures.WATER_SPRING_PLACEMENT) + .addFeature(GenerationStep.Decoration.VEGETAL_DECORATION, AetherPlacedFeatures.GRASS_PATCH_PLACEMENT) + .addFeature(GenerationStep.Decoration.VEGETAL_DECORATION, AetherPlacedFeatures.TALL_GRASS_PATCH_PLACEMENT) + .addFeature(GenerationStep.Decoration.VEGETAL_DECORATION, AetherPlacedFeatures.HOLIDAY_TREE_PLACEMENT) + .addFeature(GenerationStep.Decoration.VEGETAL_DECORATION, AetherPlacedFeatures.FLOWER_PATCH_PLACEMENT) + .addFeature(GenerationStep.Decoration.TOP_LAYER_MODIFICATION, AetherPlacedFeatures.CRYSTAL_ISLAND_PLACEMENT) + .addFeature(GenerationStep.Decoration.TOP_LAYER_MODIFICATION, AetherPlacedFeatures.COLD_AERCLOUD_PLACEMENT) + .addFeature(GenerationStep.Decoration.TOP_LAYER_MODIFICATION, AetherPlacedFeatures.BLUE_AERCLOUD_PLACEMENT) + .addFeature(GenerationStep.Decoration.TOP_LAYER_MODIFICATION, AetherPlacedFeatures.GOLDEN_AERCLOUD_PLACEMENT) + .addFeature(GenerationStep.Decoration.TOP_LAYER_MODIFICATION, AetherPlacedFeatures.PINK_AERCLOUD_PLACEMENT) .build(), Biome.TemperatureModifier.NONE ); @@ -117,4 +98,20 @@ public static Biome fullDefinition(Biome.Precipitation precipitation, float temp .temperatureAdjustment(temperatureModifier) .build(); } + + public static BiomeSource buildAetherBiomeSource(HolderGetter biomes) { + final Climate.Parameter FULL_RANGE = Climate.Parameter.span(-1.0F, 1.0F); + return new MultiNoiseBiomeSource(new Climate.ParameterList<>(List.of( + Pair.of(new Climate.ParameterPoint(FULL_RANGE, FULL_RANGE, FULL_RANGE, FULL_RANGE, FULL_RANGE, Climate.Parameter.span(1.0F, 2.0F), 0), + biomes.getOrThrow(AetherBiomes.GOLDEN_FOREST)), + Pair.of(new Climate.ParameterPoint(FULL_RANGE, FULL_RANGE, FULL_RANGE, FULL_RANGE, FULL_RANGE, Climate.Parameter.span(0.5F, 1.0F), 0), + biomes.getOrThrow(AetherBiomes.SKYROOT_FOREST)), + Pair.of(new Climate.ParameterPoint(FULL_RANGE, FULL_RANGE, FULL_RANGE, FULL_RANGE, FULL_RANGE, Climate.Parameter.span(-0.1F, 0.5F), 0), + biomes.getOrThrow(AetherBiomes.SKYROOT_THICKET)), + Pair.of(new Climate.ParameterPoint(FULL_RANGE, FULL_RANGE, FULL_RANGE, FULL_RANGE, FULL_RANGE, Climate.Parameter.span(-0.7F, -0.1F), 0), + biomes.getOrThrow(AetherBiomes.SKYROOT_FOREST)), + Pair.of(new Climate.ParameterPoint(FULL_RANGE, FULL_RANGE, FULL_RANGE, FULL_RANGE, FULL_RANGE, Climate.Parameter.span(-2.0F, -0.7F), 0), + biomes.getOrThrow(AetherBiomes.SKYROOT_GROVE)) + ))); + } } \ No newline at end of file diff --git a/src/main/java/com/gildedgames/aether/data/resources/builders/AetherConfiguredFeatureBuilders.java b/src/main/java/com/gildedgames/aether/data/resources/builders/AetherConfiguredFeatureBuilders.java new file mode 100644 index 0000000000..90d8217c55 --- /dev/null +++ b/src/main/java/com/gildedgames/aether/data/resources/builders/AetherConfiguredFeatureBuilders.java @@ -0,0 +1,38 @@ +package com.gildedgames.aether.data.resources.builders; + +import com.gildedgames.aether.block.AetherBlockStateProperties; +import com.gildedgames.aether.world.configuration.AercloudConfiguration; +import com.gildedgames.aether.world.configuration.AetherLakeConfiguration; +import net.minecraft.core.HolderSet; +import net.minecraft.data.worldgen.features.FeatureUtils; +import net.minecraft.data.worldgen.placement.PlacementUtils; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.feature.Feature; +import net.minecraft.world.level.levelgen.feature.configurations.RandomPatchConfiguration; +import net.minecraft.world.level.levelgen.feature.configurations.SimpleBlockConfiguration; +import net.minecraft.world.level.levelgen.feature.configurations.SpringConfiguration; +import net.minecraft.world.level.levelgen.feature.stateproviders.BlockStateProvider; +import net.minecraft.world.level.material.FluidState; + +public class AetherConfiguredFeatureBuilders { + public static AercloudConfiguration aercloud(int bounds, BlockState blockState) { + return new AercloudConfiguration(bounds, BlockStateProvider.simple(blockState.setValue(AetherBlockStateProperties.DOUBLE_DROPS, true))); + } + + public static RandomPatchConfiguration grassPatch(BlockStateProvider block, int p_195204_) { + return FeatureUtils.simpleRandomPatchConfiguration(p_195204_, PlacementUtils.onlyWhenEmpty(Feature.SIMPLE_BLOCK, new SimpleBlockConfiguration(block))); + } + + public static RandomPatchConfiguration tallGrassPatch(BlockStateProvider block) { + return FeatureUtils.simplePatchConfiguration(Feature.SIMPLE_BLOCK, new SimpleBlockConfiguration(block)); + } + + public static AetherLakeConfiguration lake(BlockStateProvider fluid, BlockStateProvider top) { + return new AetherLakeConfiguration(fluid, top); + } + + public static SpringConfiguration spring(FluidState fluid, boolean requiresBlocksBelow, int rockCount, int holeCount, HolderSet validBlocks) { + return new SpringConfiguration(fluid, requiresBlocksBelow, rockCount, holeCount, validBlocks); + } +} diff --git a/src/main/java/com/gildedgames/aether/data/resources/builders/AetherFeatureBuilders.java b/src/main/java/com/gildedgames/aether/data/resources/builders/AetherFeatureBuilders.java deleted file mode 100644 index b4add38044..0000000000 --- a/src/main/java/com/gildedgames/aether/data/resources/builders/AetherFeatureBuilders.java +++ /dev/null @@ -1,85 +0,0 @@ -package com.gildedgames.aether.data.resources.builders; - -import com.gildedgames.aether.block.AetherBlockStateProperties; -import com.gildedgames.aether.world.configuration.AercloudConfiguration; -import com.gildedgames.aether.world.configuration.AetherLakeConfiguration; -import com.gildedgames.aether.world.placementmodifier.ConfigFilter; -import com.gildedgames.aether.world.placementmodifier.DungeonBlacklistFilter; -import com.gildedgames.aether.world.placementmodifier.ImprovedLayerPlacementModifier; -import com.gildedgames.aether.AetherConfig; -import com.google.common.collect.ImmutableList; -import net.minecraft.core.HolderSet; -import net.minecraft.data.worldgen.features.FeatureUtils; -import net.minecraft.data.worldgen.placement.PlacementUtils; -import net.minecraft.util.valueproviders.UniformInt; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.levelgen.Heightmap; -import net.minecraft.world.level.levelgen.VerticalAnchor; -import net.minecraft.world.level.levelgen.feature.Feature; -import net.minecraft.world.level.levelgen.feature.configurations.RandomPatchConfiguration; -import net.minecraft.world.level.levelgen.feature.configurations.SimpleBlockConfiguration; -import net.minecraft.world.level.levelgen.feature.configurations.SpringConfiguration; -import net.minecraft.world.level.levelgen.feature.stateproviders.BlockStateProvider; -import net.minecraft.world.level.levelgen.placement.*; -import net.minecraft.world.level.material.FluidState; - -import java.util.List; - -import static net.minecraft.data.worldgen.placement.VegetationPlacements.TREE_THRESHOLD; - -public class AetherFeatureBuilders { - public static AercloudConfiguration createAercloudConfig(int bounds, BlockState blockState) { - return new AercloudConfiguration(bounds, BlockStateProvider.simple(blockState.setValue(AetherBlockStateProperties.DOUBLE_DROPS, true))); - } - - // TODO investigate changing this to triangle - public static List createAercloudPlacements(int height, int chance) { - return List.of(HeightRangePlacement.uniform(VerticalAnchor.bottom(), VerticalAnchor.absolute(height)), InSquarePlacement.spread(), RarityFilter.onAverageOnceEvery(chance), new DungeonBlacklistFilter()); - } - - public static List createPinkAercloudPlacements(int height, int chance) { - return List.of(HeightRangePlacement.uniform(VerticalAnchor.bottom(), VerticalAnchor.absolute(height)), - InSquarePlacement.spread(), - RarityFilter.onAverageOnceEvery(chance), - new DungeonBlacklistFilter(), - new ConfigFilter(AetherConfig.COMMON.generate_pink_aerclouds)); - } - - private static ImmutableList.Builder treePlacementBase(PlacementModifier p_195485_) { - return ImmutableList.builder() - .add(p_195485_) - .add(ImprovedLayerPlacementModifier.of(Heightmap.Types.OCEAN_FLOOR, UniformInt.of(0, 1), 4)) - .add(TREE_THRESHOLD) - .add(BiomeFilter.biome()) - .add(new DungeonBlacklistFilter()); - } - - public static List treePlacement(PlacementModifier p_195480_) { - return treePlacementBase(p_195480_).build(); - } - - public static RandomPatchConfiguration grassPatch(BlockStateProvider block, int p_195204_) { - return FeatureUtils.simpleRandomPatchConfiguration(p_195204_, PlacementUtils.onlyWhenEmpty(Feature.SIMPLE_BLOCK, new SimpleBlockConfiguration(block))); - } - - public static RandomPatchConfiguration tallGrassPatch(BlockStateProvider block) { - return FeatureUtils.simplePatchConfiguration(Feature.SIMPLE_BLOCK, new SimpleBlockConfiguration(block)); - } - - public static AetherLakeConfiguration lake(BlockStateProvider fluid, BlockStateProvider top) { - return new AetherLakeConfiguration(fluid, top); - } - - public static SpringConfiguration spring(FluidState fluid, boolean requiresBlocksBelow, int rockCount, int holeCount, HolderSet validBlocks) { - return new SpringConfiguration(fluid, requiresBlocksBelow, rockCount, holeCount, validBlocks); - } - - public static List orePlacement(PlacementModifier p_195347_, PlacementModifier p_195348_) { - return List.of(p_195347_, InSquarePlacement.spread(), p_195348_, BiomeFilter.biome()); - } - - public static List commonOrePlacement(int p_195344_, PlacementModifier p_195345_) { - return orePlacement(CountPlacement.of(p_195344_), p_195345_); - } -} diff --git a/src/main/java/com/gildedgames/aether/data/resources/builders/AetherNoiseBuilders.java b/src/main/java/com/gildedgames/aether/data/resources/builders/AetherNoiseBuilders.java index 02efae58e8..0ce005ce98 100644 --- a/src/main/java/com/gildedgames/aether/data/resources/builders/AetherNoiseBuilders.java +++ b/src/main/java/com/gildedgames/aether/data/resources/builders/AetherNoiseBuilders.java @@ -2,9 +2,8 @@ import com.gildedgames.aether.block.AetherBlockStateProperties; import com.gildedgames.aether.block.AetherBlocks; -import net.minecraft.core.Holder; -import net.minecraft.core.Registry; -import net.minecraft.data.BuiltinRegistries; +import net.minecraft.core.HolderGetter; +import net.minecraft.core.registries.Registries; import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.block.Blocks; @@ -15,72 +14,62 @@ import java.util.List; public class AetherNoiseBuilders { - private static final SurfaceRules.RuleSource GRASS_BLOCK = makeStateRule(AetherBlocks.AETHER_GRASS_BLOCK.get().defaultBlockState().setValue(AetherBlockStateProperties.DOUBLE_DROPS, true)); - private static final SurfaceRules.RuleSource DIRT = makeStateRule(AetherBlocks.AETHER_DIRT.get().defaultBlockState().setValue(AetherBlockStateProperties.DOUBLE_DROPS, true)); + private static final SurfaceRules.RuleSource GRASS_BLOCK = SurfaceRules.state(AetherBlocks.AETHER_GRASS_BLOCK.get().defaultBlockState().setValue(AetherBlockStateProperties.DOUBLE_DROPS, true)); + private static final SurfaceRules.RuleSource DIRT = SurfaceRules.state(AetherBlocks.AETHER_DIRT.get().defaultBlockState().setValue(AetherBlockStateProperties.DOUBLE_DROPS, true)); - public static NoiseGeneratorSettings skylandsNoiseSettings() { + public static NoiseGeneratorSettings skylandsNoiseSettings(HolderGetter densityFunctions, HolderGetter noise) { BlockState holystone = AetherBlocks.HOLYSTONE.get().defaultBlockState().setValue(AetherBlockStateProperties.DOUBLE_DROPS, true); return new NoiseGeneratorSettings( - //new StructureSettings(Optional.empty(), Map.of( - // //AetherStructures.BRONZE_DUNGEON_INSTANCE, new StructureFeatureConfiguration(6, 4, 16811681)//, - // //AetherStructures.GOLD_DUNGEON.get(), new StructureFeatureConfiguration(24, 12, 120320420) - //)), - new NoiseSettings(0, 128, 2, 1), - holystone, - Blocks.WATER.defaultBlockState(), - makeNoiseRouter(), - aetherSurfaceRules(), + new NoiseSettings(0, 128, 2, 1), // noiseSettings + holystone, // defaultBlock + Blocks.WATER.defaultBlockState(), // defaultFluid + makeNoiseRouter(densityFunctions, noise), // noiseRouter + aetherSurfaceRules(), // surfaceRule List.of(), // spawnTarget -64, // seaLevel false, // disableMobGeneration false, // aquifersEnabled false, // oreVeinsEnabled - false // We want to use that fancy faster algorithm [Xoroshiro] + false // useLegacyRandomSource ); } - public static SurfaceRules.RuleSource aetherSurfaceRules() { + private static SurfaceRules.RuleSource aetherSurfaceRules() { SurfaceRules.RuleSource surface = SurfaceRules.sequence(SurfaceRules.ifTrue(SurfaceRules.waterBlockCheck(-1, 0), GRASS_BLOCK), DIRT); - return SurfaceRules.sequence( - SurfaceRules.ifTrue(SurfaceRules.ON_FLOOR, surface), - SurfaceRules.ifTrue(SurfaceRules.UNDER_FLOOR, DIRT) - ); - } - - private static SurfaceRules.RuleSource makeStateRule(BlockState block) { - return SurfaceRules.state(block); + return SurfaceRules.sequence(SurfaceRules.ifTrue(SurfaceRules.ON_FLOOR, surface), SurfaceRules.ifTrue(SurfaceRules.UNDER_FLOOR, DIRT)); } - /** - * Everything below is based off of NoiseRouterData - * @see NoiseRouterData - */ - public static NoiseRouter makeNoiseRouter() { - DensityFunction finalDensity = buildFinalDensity(); - return noNewCaves(finalDensity); + private static NoiseRouter makeNoiseRouter(HolderGetter densityFunctions, HolderGetter noise) { + return noNewCaves(densityFunctions, noise, buildFinalDensity(densityFunctions, noise)); } - private static DensityFunction buildFinalDensity() { - DensityFunction density = getFunction(createKey("overworld/base_3d_noise")); - density = DensityFunctions.mul(density, DensityFunctions.noise(getNoise(Noises.JAGGED), 3, 1)); - density = buildSlide(density, 0, 128, 72, -184, -23.4375D, 4, 32, -0.234375D); + private static DensityFunction buildFinalDensity(HolderGetter densityFunctions, HolderGetter noise) { + DensityFunction density = getFunction(densityFunctions, ResourceKey.create(Registries.DENSITY_FUNCTION, new ResourceLocation("overworld/base_3d_noise"))); + density = DensityFunctions.mul(density, DensityFunctions.noise(noise.getOrThrow(Noises.JAGGED), 3, 1)); + density = slide(density, 0, 128, 72, -184, -23.4375D, 4, 32, -0.234375D); // Based on NoiseRouterData#slideEndLike. density = DensityFunctions.blendDensity(density); return DensityFunctions.mul(DensityFunctions.interpolated(density), DensityFunctions.constant(0.64D)).squeeze(); } - private static DensityFunction buildSlide(DensityFunction density, int minY, int maxY, int fromYTop, int toYTop, double offset1, int fromYBottom, int toYBottom, double offset2) { + /** + * Copy of {@link NoiseRouterData#slide(DensityFunction, int, int, int, int, double, int, int, double)}. + */ + private static DensityFunction slide(DensityFunction density, int minY, int maxY, int fromYTop, int toYTop, double offset1, int fromYBottom, int toYBottom, double offset2) { DensityFunction topSlide = DensityFunctions.yClampedGradient(minY + maxY - fromYTop, minY + maxY - toYTop, 1, 0); - DensityFunction bottomSlide = DensityFunctions.yClampedGradient(minY + fromYBottom, minY + toYBottom, 0, 1); density = DensityFunctions.lerp(topSlide, offset1, density); + DensityFunction bottomSlide = DensityFunctions.yClampedGradient(minY + fromYBottom, minY + toYBottom, 0, 1); return DensityFunctions.lerp(bottomSlide, offset2, density); } - // [VANILLA COPY] - NoiseRouterData#noNewCaves() - Moved postProcess() logic to buildFinalDensity() - private static NoiseRouter noNewCaves(DensityFunction finalDensity) { - DensityFunction shiftX = getFunction(createKey("shift_x")); - DensityFunction shiftZ = getFunction(createKey("shift_z")); - DensityFunction temperature = DensityFunctions.shiftedNoise2d(shiftX, shiftZ, 0.25D, getNoise(Noises.TEMPERATURE)); - DensityFunction vegetation = DensityFunctions.shiftedNoise2d(shiftX, shiftZ, 0.25D, getNoise(Noises.VEGETATION)); + /** + * Based on {@link NoiseRouterData#noNewCaves(HolderGetter, HolderGetter, DensityFunction)}.

+ * Logic that called {@link NoiseRouterData#postProcess(DensityFunction)} has been moved to {@link AetherNoiseBuilders#buildFinalDensity(HolderGetter, HolderGetter)}. + */ + private static NoiseRouter noNewCaves(HolderGetter densityFunctions, HolderGetter noise, DensityFunction finalDensity) { + DensityFunction shiftX = getFunction(densityFunctions, ResourceKey.create(Registries.DENSITY_FUNCTION, new ResourceLocation("shift_x"))); + DensityFunction shiftZ = getFunction(densityFunctions, ResourceKey.create(Registries.DENSITY_FUNCTION, new ResourceLocation("shift_z"))); + DensityFunction temperature = DensityFunctions.shiftedNoise2d(shiftX, shiftZ, 0.25D, noise.getOrThrow(Noises.TEMPERATURE)); + DensityFunction vegetation = DensityFunctions.shiftedNoise2d(shiftX, shiftZ, 0.25D, noise.getOrThrow(Noises.VEGETATION)); return new NoiseRouter(DensityFunctions.zero(), DensityFunctions.zero(), DensityFunctions.zero(), @@ -98,15 +87,7 @@ private static NoiseRouter noNewCaves(DensityFunction finalDensity) { DensityFunctions.zero()); } - private static DensityFunction getFunction(ResourceKey p_224466_) { - return new DensityFunctions.HolderHolder(BuiltinRegistries.DENSITY_FUNCTION.getHolderOrThrow(p_224466_)); - } - - private static Holder getNoise(ResourceKey noiseKey) { - return BuiltinRegistries.NOISE.getHolderOrThrow(noiseKey); - } - - private static ResourceKey createKey(String pLocation) { - return ResourceKey.create(Registry.DENSITY_FUNCTION_REGISTRY, new ResourceLocation(pLocation)); + private static DensityFunction getFunction(HolderGetter densityFunctions, ResourceKey key) { + return new DensityFunctions.HolderHolder(densityFunctions.getOrThrow(key)); } } diff --git a/src/main/java/com/gildedgames/aether/data/resources/builders/AetherPlacedFeatureBuilders.java b/src/main/java/com/gildedgames/aether/data/resources/builders/AetherPlacedFeatureBuilders.java new file mode 100644 index 0000000000..97285bb731 --- /dev/null +++ b/src/main/java/com/gildedgames/aether/data/resources/builders/AetherPlacedFeatureBuilders.java @@ -0,0 +1,67 @@ +package com.gildedgames.aether.data.resources.builders; + +import com.gildedgames.aether.world.placementmodifier.ConfigFilter; +import com.gildedgames.aether.world.placementmodifier.DungeonBlacklistFilter; +import com.gildedgames.aether.world.placementmodifier.ImprovedLayerPlacementModifier; +import com.gildedgames.aether.AetherConfig; +import com.google.common.collect.ImmutableList; +import net.minecraft.util.valueproviders.UniformInt; +import net.minecraft.world.level.levelgen.Heightmap; +import net.minecraft.world.level.levelgen.VerticalAnchor; +import net.minecraft.world.level.levelgen.placement.*; + +import java.util.List; + +public class AetherPlacedFeatureBuilders { + public static List aercloudPlacement(int height, int chance) { + return List.of( + HeightRangePlacement.uniform(VerticalAnchor.bottom(), VerticalAnchor.absolute(height)), + InSquarePlacement.spread(), + RarityFilter.onAverageOnceEvery(chance), + BiomeFilter.biome(), + new DungeonBlacklistFilter()); + } + + public static List pinkAercloudPlacement(int height, int chance) { + return List.of( + HeightRangePlacement.uniform(VerticalAnchor.bottom(), VerticalAnchor.absolute(height)), + InSquarePlacement.spread(), + RarityFilter.onAverageOnceEvery(chance), + BiomeFilter.biome(), + new DungeonBlacklistFilter(), + new ConfigFilter(AetherConfig.COMMON.generate_pink_aerclouds)); + } + + /** + * Copy of {@link net.minecraft.data.worldgen.placement.VegetationPlacements#treePlacement(PlacementModifier)} + */ + public static List treePlacement(PlacementModifier count) { + return treePlacementBase(count).build(); + } + + /** + * Based on {@link net.minecraft.data.worldgen.placement.VegetationPlacements#treePlacementBase(PlacementModifier)} + */ + private static ImmutableList.Builder treePlacementBase(PlacementModifier count) { + return ImmutableList.builder() + .add(count) + .add(ImprovedLayerPlacementModifier.of(Heightmap.Types.OCEAN_FLOOR, UniformInt.of(0, 1), 4)) + .add(SurfaceWaterDepthFilter.forMaxDepth(0)) + .add(BiomeFilter.biome()) + .add(new DungeonBlacklistFilter()); + } + + /** + * Copy of {@link net.minecraft.data.worldgen.placement.OrePlacements#commonOrePlacement(int, PlacementModifier)}. + */ + public static List commonOrePlacement(int count, PlacementModifier heightRange) { + return orePlacement(CountPlacement.of(count), heightRange); + } + + /** + * Copy of {@link net.minecraft.data.worldgen.placement.OrePlacements#orePlacement(PlacementModifier, PlacementModifier)}. + */ + private static List orePlacement(PlacementModifier count, PlacementModifier heightRange) { + return List.of(count, InSquarePlacement.spread(), heightRange, BiomeFilter.biome()); + } +} diff --git a/src/main/java/com/gildedgames/aether/data/resources/builders/AetherStructureBuilders.java b/src/main/java/com/gildedgames/aether/data/resources/builders/AetherStructureBuilders.java index 9bc45890f2..26556efe21 100644 --- a/src/main/java/com/gildedgames/aether/data/resources/builders/AetherStructureBuilders.java +++ b/src/main/java/com/gildedgames/aether/data/resources/builders/AetherStructureBuilders.java @@ -1,9 +1,6 @@ package com.gildedgames.aether.data.resources.builders; -import com.gildedgames.aether.data.generators.AetherDataGenerators; import net.minecraft.core.HolderSet; -import net.minecraft.core.Registry; -import net.minecraft.tags.TagKey; import net.minecraft.world.entity.MobCategory; import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.levelgen.GenerationStep; @@ -14,15 +11,11 @@ import java.util.Map; public class AetherStructureBuilders { - public static Structure.StructureSettings structure(TagKey biomeTagKey, Map mobs, GenerationStep.Decoration step, TerrainAdjustment adjustment) { - return new Structure.StructureSettings(biomes(biomeTagKey), mobs, step, adjustment); + public static Structure.StructureSettings structure(HolderSet biomes, GenerationStep.Decoration step, TerrainAdjustment adjustment) { + return structure(biomes, Map.of(), step, adjustment); } - public static Structure.StructureSettings structure(TagKey biomeTagKey, GenerationStep.Decoration step, TerrainAdjustment adjustment) { - return structure(biomeTagKey, Map.of(), step, adjustment); - } - - public static HolderSet biomes(TagKey biomeTagKey) { - return AetherDataGenerators.DATA_REGISTRY.registryOrThrow(Registry.BIOME_REGISTRY).getOrCreateTag(biomeTagKey); + public static Structure.StructureSettings structure(HolderSet biomes, Map mobs, GenerationStep.Decoration step, TerrainAdjustment adjustment) { + return new Structure.StructureSettings(biomes, mobs, step, adjustment); } } diff --git a/src/main/java/com/gildedgames/aether/data/resources/registries/AetherBiomes.java b/src/main/java/com/gildedgames/aether/data/resources/registries/AetherBiomes.java new file mode 100644 index 0000000000..f98e7e1cce --- /dev/null +++ b/src/main/java/com/gildedgames/aether/data/resources/registries/AetherBiomes.java @@ -0,0 +1,32 @@ +package com.gildedgames.aether.data.resources.registries; + +import com.gildedgames.aether.Aether; +import com.gildedgames.aether.data.resources.builders.AetherBiomeBuilders; +import net.minecraft.core.HolderGetter; +import net.minecraft.core.registries.Registries; +import net.minecraft.data.worldgen.BootstapContext; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.biome.Biome; +import net.minecraft.world.level.levelgen.carver.ConfiguredWorldCarver; +import net.minecraft.world.level.levelgen.placement.PlacedFeature; + +public class AetherBiomes { + public static final ResourceKey SKYROOT_GROVE = createKey("skyroot_grove"); + public static final ResourceKey SKYROOT_FOREST = createKey("skyroot_forest"); + public static final ResourceKey SKYROOT_THICKET = createKey("skyroot_thicket"); + public static final ResourceKey GOLDEN_FOREST = createKey("golden_forest"); + + private static ResourceKey createKey(String name) { + return ResourceKey.create(Registries.BIOME, new ResourceLocation(Aether.MODID, name)); + } + + public static void bootstrap(BootstapContext context) { + HolderGetter placedFeatures = context.lookup(Registries.PLACED_FEATURE); + HolderGetter> vanillaConfiguredCarvers = context.lookup(Registries.CONFIGURED_CARVER); + context.register(SKYROOT_GROVE, AetherBiomeBuilders.skyrootGroveBiome(placedFeatures, vanillaConfiguredCarvers)); + context.register(SKYROOT_FOREST, AetherBiomeBuilders.skyrootForestBiome(placedFeatures, vanillaConfiguredCarvers)); + context.register(SKYROOT_THICKET, AetherBiomeBuilders.skyrootThicketBiome(placedFeatures, vanillaConfiguredCarvers)); + context.register(GOLDEN_FOREST, AetherBiomeBuilders.goldenForestBiome(placedFeatures, vanillaConfiguredCarvers)); + } +} diff --git a/src/main/java/com/gildedgames/aether/data/resources/registries/AetherConfiguredFeatures.java b/src/main/java/com/gildedgames/aether/data/resources/registries/AetherConfiguredFeatures.java new file mode 100644 index 0000000000..2f1df5d5f5 --- /dev/null +++ b/src/main/java/com/gildedgames/aether/data/resources/registries/AetherConfiguredFeatures.java @@ -0,0 +1,145 @@ +package com.gildedgames.aether.data.resources.registries; + +import com.gildedgames.aether.Aether; +import com.gildedgames.aether.block.AetherBlocks; +import com.gildedgames.aether.data.resources.AetherFeatureRules; +import com.gildedgames.aether.data.resources.AetherFeatureStates; +import com.gildedgames.aether.data.resources.builders.AetherConfiguredFeatureBuilders; +import com.gildedgames.aether.world.configuration.SimpleDiskConfiguration; +import com.gildedgames.aether.world.feature.AetherFeatures; +import com.gildedgames.aether.world.foliageplacer.CrystalFoliagePlacer; +import com.gildedgames.aether.world.foliageplacer.HolidayFoliagePlacer; +import com.gildedgames.aether.world.treedecorator.HolidayTreeDecorator; +import com.google.common.collect.ImmutableList; +import net.minecraft.core.HolderGetter; +import net.minecraft.core.HolderSet; +import net.minecraft.core.registries.Registries; +import net.minecraft.data.worldgen.BootstapContext; +import net.minecraft.data.worldgen.placement.PlacementUtils; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.Mth; +import net.minecraft.util.random.SimpleWeightedRandomList; +import net.minecraft.util.valueproviders.ConstantInt; +import net.minecraft.util.valueproviders.UniformFloat; +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.levelgen.feature.ConfiguredFeature; +import net.minecraft.world.level.levelgen.feature.Feature; +import net.minecraft.world.level.levelgen.feature.WeightedPlacedFeature; +import net.minecraft.world.level.levelgen.feature.configurations.*; +import net.minecraft.world.level.levelgen.feature.featuresize.TwoLayersFeatureSize; +import net.minecraft.world.level.levelgen.feature.foliageplacers.BlobFoliagePlacer; +import net.minecraft.world.level.levelgen.feature.foliageplacers.FancyFoliagePlacer; +import net.minecraft.world.level.levelgen.feature.stateproviders.BlockStateProvider; +import net.minecraft.world.level.levelgen.feature.stateproviders.WeightedStateProvider; +import net.minecraft.world.level.levelgen.feature.trunkplacers.FancyTrunkPlacer; +import net.minecraft.world.level.levelgen.feature.trunkplacers.StraightTrunkPlacer; +import net.minecraft.world.level.material.Fluids; + +import java.util.List; +import java.util.OptionalInt; + +public class AetherConfiguredFeatures { + public static final ResourceKey> COLD_AERCLOUD_CONFIGURATION = createKey("cold_aercloud"); + public static final ResourceKey> BLUE_AERCLOUD_CONFIGURATION = createKey("blue_aercloud"); + public static final ResourceKey> GOLDEN_AERCLOUD_CONFIGURATION = createKey("golden_aercloud"); + public static final ResourceKey> PINK_AERCLOUD_CONFIGURATION = createKey("pink_aercloud"); + public static final ResourceKey> CRYSTAL_ISLAND_CONFIGURATION = createKey("crystal_island"); + public static final ResourceKey> SKYROOT_TREE_CONFIGURATION = createKey("skyroot_tree"); + public static final ResourceKey> GOLDEN_OAK_TREE_CONFIGURATION = createKey("golden_oak_tree"); + public static final ResourceKey> CRYSTAL_TREE_CONFIGURATION = createKey("crystal_tree"); + public static final ResourceKey> HOLIDAY_TREE_CONFIGURATION = createKey("holiday_tree"); + public static final ResourceKey> FLOWER_PATCH_CONFIGURATION = createKey("flower_patch"); + public static final ResourceKey> GRASS_PATCH_CONFIGURATION = createKey("grass_patch"); + public static final ResourceKey> TALL_GRASS_PATCH_CONFIGURATION = createKey("tall_grass_patch"); + public static final ResourceKey> QUICKSOIL_SHELF_CONFIGURATION = createKey("quicksoil_shelf"); + public static final ResourceKey> WATER_LAKE_CONFIGURATION = createKey("water_lake"); + public static final ResourceKey> WATER_SPRING_CONFIGURATION = createKey("water_spring"); + public static final ResourceKey> ORE_AETHER_DIRT_CONFIGURATION = createKey("aether_dirt_ore"); + public static final ResourceKey> ORE_ICESTONE_CONFIGURATION = createKey("icestone_ore"); + public static final ResourceKey> ORE_AMBROSIUM_CONFIGURATION = createKey("ambrosium_ore"); + public static final ResourceKey> ORE_ZANITE_CONFIGURATION = createKey("zanite_ore"); + public static final ResourceKey> ORE_GRAVITITE_COMMON_CONFIGURATION = createKey("gravitite_ore_common"); + public static final ResourceKey> ORE_GRAVITITE_DENSE_CONFIGURATION = createKey("gravitite_ore_dense"); + public static final ResourceKey> TREES_SKYROOT_AND_GOLDEN_OAK_CONFIGURATION = createKey("trees_skyroot_and_golden_oak"); + public static final ResourceKey> TREES_GOLDEN_OAK_AND_SKYROOT_CONFIGURATION = createKey("trees_golden_oak_and_skyroot"); + + private static ResourceKey> createKey(String name) { + return ResourceKey.create(Registries.CONFIGURED_FEATURE, new ResourceLocation(Aether.MODID, name)); + } + + public static void bootstrap(BootstapContext> context) { + HolderGetter> configuredFeatures = context.lookup(Registries.CONFIGURED_FEATURE); + register(context, COLD_AERCLOUD_CONFIGURATION, AetherFeatures.AERCLOUD.get(), AetherConfiguredFeatureBuilders.aercloud(16, AetherFeatureStates.COLD_AERCLOUD)); + register(context, BLUE_AERCLOUD_CONFIGURATION, AetherFeatures.AERCLOUD.get(), AetherConfiguredFeatureBuilders.aercloud(8, AetherFeatureStates.BLUE_AERCLOUD)); + register(context, GOLDEN_AERCLOUD_CONFIGURATION, AetherFeatures.AERCLOUD.get(), AetherConfiguredFeatureBuilders.aercloud(4, AetherFeatureStates.GOLDEN_AERCLOUD)); + register(context, PINK_AERCLOUD_CONFIGURATION, AetherFeatures.AERCLOUD.get(), AetherConfiguredFeatureBuilders.aercloud(1, AetherFeatureStates.PINK_AERCLOUD)); + register(context, CRYSTAL_ISLAND_CONFIGURATION, AetherFeatures.CRYSTAL_ISLAND.get(), NoneFeatureConfiguration.INSTANCE); + register(context, SKYROOT_TREE_CONFIGURATION, Feature.TREE, + new TreeConfiguration.TreeConfigurationBuilder( + BlockStateProvider.simple(AetherFeatureStates.SKYROOT_LOG), + new StraightTrunkPlacer(4, 2, 0), + BlockStateProvider.simple(AetherFeatureStates.SKYROOT_LEAVES), + new BlobFoliagePlacer(ConstantInt.of(2), ConstantInt.of(0), 3), + new TwoLayersFeatureSize(1, 0, 1) + ).ignoreVines().build()); + register(context, GOLDEN_OAK_TREE_CONFIGURATION, Feature.TREE, + new TreeConfiguration.TreeConfigurationBuilder( + BlockStateProvider.simple(AetherFeatureStates.GOLDEN_OAK_LOG), + new FancyTrunkPlacer(9, 5, 0), + BlockStateProvider.simple(AetherFeatureStates.GOLDEN_OAK_LEAVES), + new FancyFoliagePlacer(ConstantInt.of(2), ConstantInt.of(4), 4), + new TwoLayersFeatureSize(0, 0, 0, OptionalInt.of(10)) + ).ignoreVines().build()); + register(context, CRYSTAL_TREE_CONFIGURATION, Feature.TREE, + new TreeConfiguration.TreeConfigurationBuilder( + BlockStateProvider.simple(AetherFeatureStates.SKYROOT_LOG), + new StraightTrunkPlacer(7, 0, 0), + new WeightedStateProvider(new SimpleWeightedRandomList.Builder().add(AetherFeatureStates.CRYSTAL_LEAVES, 4).add(AetherFeatureStates.CRYSTAL_FRUIT_LEAVES, 1).build()), + new CrystalFoliagePlacer(ConstantInt.of(0), ConstantInt.of(0), ConstantInt.of(6)), + new TwoLayersFeatureSize(1, 0, 1)).ignoreVines().build()); + register(context, HOLIDAY_TREE_CONFIGURATION, Feature.TREE, + new TreeConfiguration.TreeConfigurationBuilder( + BlockStateProvider.simple(AetherFeatureStates.SKYROOT_LOG), + new StraightTrunkPlacer(9, 0, 0), + new WeightedStateProvider(new SimpleWeightedRandomList.Builder().add(AetherFeatureStates.HOLIDAY_LEAVES, 4).add(AetherFeatureStates.DECORATED_HOLIDAY_LEAVES, 1).build()), + new HolidayFoliagePlacer(ConstantInt.of(0), ConstantInt.of(0), ConstantInt.of(8)), + new TwoLayersFeatureSize(1, 0, 1)).ignoreVines() + .decorators(ImmutableList.of(new HolidayTreeDecorator(new WeightedStateProvider(new SimpleWeightedRandomList.Builder().add(AetherFeatureStates.SNOW, 10).add(AetherFeatureStates.PRESENT, 1).build())))) + .build()); + register(context, FLOWER_PATCH_CONFIGURATION, Feature.FLOWER, + AetherConfiguredFeatureBuilders.grassPatch(new WeightedStateProvider(SimpleWeightedRandomList.builder() + .add(AetherFeatureStates.PURPLE_FLOWER, 2) + .add(AetherFeatureStates.WHITE_FLOWER, 2) + .add(AetherFeatureStates.BERRY_BUSH, 1)), 64)); + register(context, GRASS_PATCH_CONFIGURATION, Feature.RANDOM_PATCH, AetherConfiguredFeatureBuilders.grassPatch(BlockStateProvider.simple(Blocks.GRASS), 32)); + register(context, TALL_GRASS_PATCH_CONFIGURATION, Feature.RANDOM_PATCH, AetherConfiguredFeatureBuilders.tallGrassPatch(BlockStateProvider.simple(Blocks.TALL_GRASS))); + register(context, QUICKSOIL_SHELF_CONFIGURATION, AetherFeatures.SIMPLE_DISK.get(), + new SimpleDiskConfiguration( + UniformFloat.of(Mth.sqrt(12), 5), // sqrt(12) was an old static value + BlockStateProvider.simple(AetherFeatureStates.QUICKSOIL), + 3)); + register(context, WATER_LAKE_CONFIGURATION, AetherFeatures.LAKE.get(), AetherConfiguredFeatureBuilders.lake(BlockStateProvider.simple(Blocks.WATER), BlockStateProvider.simple(AetherBlocks.AETHER_GRASS_BLOCK.get()))); + register(context, WATER_SPRING_CONFIGURATION, Feature.SPRING, + AetherConfiguredFeatureBuilders.spring(Fluids.WATER.defaultFluidState(), true, 4, 1, HolderSet.direct(Block::builtInRegistryHolder, AetherBlocks.HOLYSTONE.get(), AetherBlocks.AETHER_DIRT.get()))); + register(context, ORE_AETHER_DIRT_CONFIGURATION, Feature.ORE, new OreConfiguration(AetherFeatureRules.HOLYSTONE, AetherFeatureStates.AETHER_DIRT, 33)); + register(context, ORE_ICESTONE_CONFIGURATION, Feature.ORE, new OreConfiguration(AetherFeatureRules.HOLYSTONE, AetherFeatureStates.ICESTONE, 16)); + register(context, ORE_AMBROSIUM_CONFIGURATION, Feature.ORE, new OreConfiguration(AetherFeatureRules.HOLYSTONE, AetherFeatureStates.AMBROSIUM_ORE, 16)); + register(context, ORE_ZANITE_CONFIGURATION, Feature.ORE, new OreConfiguration(AetherFeatureRules.HOLYSTONE, AetherFeatureStates.ZANITE_ORE, 8)); + register(context, ORE_GRAVITITE_COMMON_CONFIGURATION, Feature.ORE, new OreConfiguration(AetherFeatureRules.HOLYSTONE, AetherFeatureStates.GRAVITITE_ORE, 6, 0.9F)); + register(context, ORE_GRAVITITE_DENSE_CONFIGURATION, Feature.ORE, new OreConfiguration(AetherFeatureRules.HOLYSTONE, AetherFeatureStates.GRAVITITE_ORE, 3, 0.5F)); + register(context, TREES_SKYROOT_AND_GOLDEN_OAK_CONFIGURATION, Feature.RANDOM_SELECTOR, new RandomFeatureConfiguration(List.of(new WeightedPlacedFeature( + PlacementUtils.inlinePlaced(configuredFeatures.getOrThrow(GOLDEN_OAK_TREE_CONFIGURATION), PlacementUtils.filteredByBlockSurvival(AetherBlocks.GOLDEN_OAK_SAPLING.get())), 0.01F)), + PlacementUtils.inlinePlaced(configuredFeatures.getOrThrow(SKYROOT_TREE_CONFIGURATION), PlacementUtils.filteredByBlockSurvival(AetherBlocks.SKYROOT_SAPLING.get())))); + register(context, TREES_GOLDEN_OAK_AND_SKYROOT_CONFIGURATION, Feature.RANDOM_SELECTOR, + new RandomFeatureConfiguration(List.of(new WeightedPlacedFeature( + PlacementUtils.inlinePlaced(configuredFeatures.getOrThrow(SKYROOT_TREE_CONFIGURATION), PlacementUtils.filteredByBlockSurvival(AetherBlocks.SKYROOT_SAPLING.get())), 0.1F)), + PlacementUtils.inlinePlaced(configuredFeatures.getOrThrow(GOLDEN_OAK_TREE_CONFIGURATION), PlacementUtils.filteredByBlockSurvival(AetherBlocks.GOLDEN_OAK_SAPLING.get())))); + } + + private static > void register(BootstapContext> context, ResourceKey> key, F feature, FC configuration) { + context.register(key, new ConfiguredFeature<>(feature, configuration)); + } +} diff --git a/src/main/java/com/gildedgames/aether/data/resources/registries/AetherDimensions.java b/src/main/java/com/gildedgames/aether/data/resources/registries/AetherDimensions.java new file mode 100644 index 0000000000..594f6fe1d0 --- /dev/null +++ b/src/main/java/com/gildedgames/aether/data/resources/registries/AetherDimensions.java @@ -0,0 +1,44 @@ +package com.gildedgames.aether.data.resources.registries; + +import com.gildedgames.aether.Aether; +import net.minecraft.core.registries.Registries; +import net.minecraft.data.worldgen.BootstapContext; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.tags.BlockTags; +import net.minecraft.util.valueproviders.UniformInt; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.dimension.DimensionType; +import net.minecraft.world.level.dimension.LevelStem; + +import java.util.OptionalLong; + +public class AetherDimensions { + private final static ResourceLocation AETHER_LEVEL_ID = new ResourceLocation(Aether.MODID, "the_aether"); + + // DimensionType - Specifies the logic and settings for a dimension. + public static final ResourceKey AETHER_DIMENSION_TYPE = ResourceKey.create(Registries.DIMENSION_TYPE, AETHER_LEVEL_ID); + // Level - The dimension during runtime. + public static final ResourceKey AETHER_LEVEL = ResourceKey.create(Registries.DIMENSION, AETHER_LEVEL_ID); + // LevelStem - The dimension during lifecycle start and datagen. + public static final ResourceKey AETHER_LEVEL_STEM = ResourceKey.create(Registries.LEVEL_STEM, AETHER_LEVEL_ID); + + public static void bootstrap(BootstapContext context) { + context.register(AETHER_DIMENSION_TYPE, new DimensionType( + OptionalLong.empty(), + true, + false, + false, + true, + 1.0D, + true, + false, + 0, + 256, + 256, + BlockTags.INFINIBURN_OVERWORLD, + new ResourceLocation(Aether.MODID, "the_aether"), + 0.0F, + new DimensionType.MonsterSettings(false, false, UniformInt.of(0, 7), 0))); + } +} \ No newline at end of file diff --git a/src/main/java/com/gildedgames/aether/data/resources/registries/AetherNoiseSettings.java b/src/main/java/com/gildedgames/aether/data/resources/registries/AetherNoiseSettings.java new file mode 100644 index 0000000000..c982d69fc3 --- /dev/null +++ b/src/main/java/com/gildedgames/aether/data/resources/registries/AetherNoiseSettings.java @@ -0,0 +1,26 @@ +package com.gildedgames.aether.data.resources.registries; + +import com.gildedgames.aether.Aether; +import com.gildedgames.aether.data.resources.builders.AetherNoiseBuilders; +import net.minecraft.core.HolderGetter; +import net.minecraft.core.registries.Registries; +import net.minecraft.data.worldgen.BootstapContext; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.levelgen.DensityFunction; +import net.minecraft.world.level.levelgen.NoiseGeneratorSettings; +import net.minecraft.world.level.levelgen.synth.NormalNoise; + +public class AetherNoiseSettings { + public static final ResourceKey SKYLANDS = createKey("skylands"); + + private static ResourceKey createKey(String name) { + return ResourceKey.create(Registries.NOISE_SETTINGS, new ResourceLocation(Aether.MODID, name)); + } + + public static void bootstrap(BootstapContext context) { + HolderGetter densityFunctions = context.lookup(Registries.DENSITY_FUNCTION); + HolderGetter noise = context.lookup(Registries.NOISE); + context.register(SKYLANDS, AetherNoiseBuilders.skylandsNoiseSettings(densityFunctions, noise)); + } +} diff --git a/src/main/java/com/gildedgames/aether/data/resources/registries/AetherPlacedFeatures.java b/src/main/java/com/gildedgames/aether/data/resources/registries/AetherPlacedFeatures.java new file mode 100644 index 0000000000..f873b5690b --- /dev/null +++ b/src/main/java/com/gildedgames/aether/data/resources/registries/AetherPlacedFeatures.java @@ -0,0 +1,133 @@ +package com.gildedgames.aether.data.resources.registries; + +import com.gildedgames.aether.Aether; +import com.gildedgames.aether.AetherConfig; +import com.gildedgames.aether.AetherTags; +import com.gildedgames.aether.block.AetherBlocks; +import com.gildedgames.aether.data.resources.builders.AetherPlacedFeatureBuilders; +import com.gildedgames.aether.world.placementmodifier.*; +import net.minecraft.core.Holder; +import net.minecraft.core.HolderGetter; +import net.minecraft.core.registries.Registries; +import net.minecraft.data.worldgen.BootstapContext; +import net.minecraft.data.worldgen.placement.PlacementUtils; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.valueproviders.UniformInt; +import net.minecraft.world.level.levelgen.Heightmap; +import net.minecraft.world.level.levelgen.VerticalAnchor; +import net.minecraft.world.level.levelgen.blockpredicates.BlockPredicate; +import net.minecraft.world.level.levelgen.feature.ConfiguredFeature; +import net.minecraft.world.level.levelgen.placement.*; + +import java.util.List; + +public class AetherPlacedFeatures { + public static final ResourceKey COLD_AERCLOUD_PLACEMENT = createKey("cold_aercloud"); + public static final ResourceKey BLUE_AERCLOUD_PLACEMENT = createKey("blue_aercloud"); + public static final ResourceKey GOLDEN_AERCLOUD_PLACEMENT = createKey("golden_aercloud"); + public static final ResourceKey PINK_AERCLOUD_PLACEMENT = createKey("pink_aercloud"); + public static final ResourceKey SKYROOT_GROVE_TREES_PLACEMENT = createKey("skyroot_grove_trees"); + public static final ResourceKey SKYROOT_FOREST_TREES_PLACEMENT = createKey("skyroot_forest_trees"); + public static final ResourceKey SKYROOT_THICKET_TREES_PLACEMENT = createKey("skyroot_thicket_trees"); + public static final ResourceKey GOLDEN_FOREST_TREES_PLACEMENT = createKey("golden_forest_trees"); + public static final ResourceKey CRYSTAL_ISLAND_PLACEMENT = createKey("crystal_island"); + public static final ResourceKey HOLIDAY_TREE_PLACEMENT = createKey("holiday_tree"); + public static final ResourceKey FLOWER_PATCH_PLACEMENT = createKey("flower_patch"); + public static final ResourceKey GRASS_PATCH_PLACEMENT = createKey("grass_patch"); + public static final ResourceKey TALL_GRASS_PATCH_PLACEMENT = createKey("tall_grass_patch"); + public static final ResourceKey QUICKSOIL_SHELF_PLACEMENT = createKey("quicksoil_shelf"); + public static final ResourceKey WATER_LAKE_PLACEMENT = createKey("water_lake"); + public static final ResourceKey WATER_SPRING_PLACEMENT = createKey("water_spring"); + public static final ResourceKey ORE_AETHER_DIRT_PLACEMENT = createKey("aether_dirt_ore"); + public static final ResourceKey ORE_ICESTONE_PLACEMENT = createKey("icestone_ore"); + public static final ResourceKey ORE_AMBROSIUM_PLACEMENT = createKey("ambrosium_ore"); + public static final ResourceKey ORE_ZANITE_PLACEMENT = createKey("zanite_ore"); + public static final ResourceKey ORE_GRAVITITE_COMMON_PLACEMENT = createKey("gravitite_ore_common"); + public static final ResourceKey ORE_GRAVITITE_DENSE_PLACEMENT = createKey("gravitite_ore_dense"); + + private static ResourceKey createKey(String name) { + return ResourceKey.create(Registries.PLACED_FEATURE, new ResourceLocation(Aether.MODID, name)); + } + + public static void bootstrap(BootstapContext context) { + HolderGetter> configuredFeatures = context.lookup(Registries.CONFIGURED_FEATURE); + register(context, COLD_AERCLOUD_PLACEMENT, configuredFeatures.getOrThrow(AetherConfiguredFeatures.COLD_AERCLOUD_CONFIGURATION), AetherPlacedFeatureBuilders.aercloudPlacement(128, 5)); + register(context, BLUE_AERCLOUD_PLACEMENT, configuredFeatures.getOrThrow(AetherConfiguredFeatures.BLUE_AERCLOUD_CONFIGURATION), AetherPlacedFeatureBuilders.aercloudPlacement(96, 5)); + register(context, GOLDEN_AERCLOUD_PLACEMENT, configuredFeatures.getOrThrow(AetherConfiguredFeatures.GOLDEN_AERCLOUD_CONFIGURATION), AetherPlacedFeatureBuilders.aercloudPlacement(160, 5)); + register(context, PINK_AERCLOUD_PLACEMENT, configuredFeatures.getOrThrow(AetherConfiguredFeatures.PINK_AERCLOUD_CONFIGURATION), AetherPlacedFeatureBuilders.pinkAercloudPlacement(160, 7)); + register(context, SKYROOT_GROVE_TREES_PLACEMENT, configuredFeatures.getOrThrow(AetherConfiguredFeatures.TREES_SKYROOT_AND_GOLDEN_OAK_CONFIGURATION), + AetherPlacedFeatureBuilders.treePlacement(PlacementUtils.countExtra(2, 0.1F, 1))); + register(context, SKYROOT_FOREST_TREES_PLACEMENT, configuredFeatures.getOrThrow(AetherConfiguredFeatures.TREES_SKYROOT_AND_GOLDEN_OAK_CONFIGURATION), + AetherPlacedFeatureBuilders.treePlacement(PlacementUtils.countExtra(7, 0.1F, 1))); + register(context, SKYROOT_THICKET_TREES_PLACEMENT, configuredFeatures.getOrThrow(AetherConfiguredFeatures.TREES_SKYROOT_AND_GOLDEN_OAK_CONFIGURATION), + AetherPlacedFeatureBuilders.treePlacement(PlacementUtils.countExtra(15, 0.1F, 1))); + register(context, GOLDEN_FOREST_TREES_PLACEMENT, configuredFeatures.getOrThrow(AetherConfiguredFeatures.TREES_GOLDEN_OAK_AND_SKYROOT_CONFIGURATION), + AetherPlacedFeatureBuilders.treePlacement(PlacementUtils.countExtra(10, 0.1F, 1))); + register(context, CRYSTAL_ISLAND_PLACEMENT, configuredFeatures.getOrThrow(AetherConfiguredFeatures.CRYSTAL_ISLAND_CONFIGURATION), + InSquarePlacement.spread(), + HeightRangePlacement.uniform(VerticalAnchor.absolute(80), VerticalAnchor.absolute(120)), + RarityFilter.onAverageOnceEvery(16), + BiomeFilter.biome(), + new DungeonBlacklistFilter()); + register(context, HOLIDAY_TREE_PLACEMENT, configuredFeatures.getOrThrow(AetherConfiguredFeatures.HOLIDAY_TREE_CONFIGURATION), + ImprovedLayerPlacementModifier.of(Heightmap.Types.OCEAN_FLOOR, UniformInt.of(0, 1), 4), + PlacementUtils.filteredByBlockSurvival(AetherBlocks.SKYROOT_SAPLING.get()), + RarityFilter.onAverageOnceEvery(48), + BiomeFilter.biome(), + new HolidayFilter()); + register(context, FLOWER_PATCH_PLACEMENT, configuredFeatures.getOrThrow(AetherConfiguredFeatures.FLOWER_PATCH_CONFIGURATION), InSquarePlacement.spread(), PlacementUtils.HEIGHTMAP, BiomeFilter.biome()); + register(context, GRASS_PATCH_PLACEMENT, configuredFeatures.getOrThrow(AetherConfiguredFeatures.GRASS_PATCH_CONFIGURATION), + InSquarePlacement.spread(), + PlacementUtils.HEIGHTMAP_WORLD_SURFACE, + CountPlacement.of(2), + BiomeFilter.biome(), + new ConfigFilter(AetherConfig.COMMON.generate_tall_grass)); + register(context, TALL_GRASS_PATCH_PLACEMENT, configuredFeatures.getOrThrow(AetherConfiguredFeatures.TALL_GRASS_PATCH_CONFIGURATION), + InSquarePlacement.spread(), + PlacementUtils.HEIGHTMAP, + NoiseThresholdCountPlacement.of(-0.8D, 0, 7), + RarityFilter.onAverageOnceEvery(32), + BiomeFilter.biome(), + new ConfigFilter(AetherConfig.COMMON.generate_tall_grass)); + register(context, QUICKSOIL_SHELF_PLACEMENT, configuredFeatures.getOrThrow(AetherConfiguredFeatures.QUICKSOIL_SHELF_CONFIGURATION), + InSquarePlacement.spread(), + PlacementUtils.HEIGHTMAP_WORLD_SURFACE, + BlockPredicateFilter.forPredicate(BlockPredicate.matchesTag(AetherTags.Blocks.QUICKSOIL_CAN_GENERATE)), + new ElevationAdjustmentModifier(UniformInt.of(-4, -2)), + new ElevationFilter(63, 70), + BiomeFilter.biome(), + new DungeonBlacklistFilter()); + register(context, WATER_LAKE_PLACEMENT, configuredFeatures.getOrThrow(AetherConfiguredFeatures.WATER_LAKE_CONFIGURATION), + InSquarePlacement.spread(), + PlacementUtils.HEIGHTMAP_WORLD_SURFACE, + RarityFilter.onAverageOnceEvery(40), + BiomeFilter.biome()); + register(context, WATER_SPRING_PLACEMENT, configuredFeatures.getOrThrow(AetherConfiguredFeatures.WATER_SPRING_CONFIGURATION), + InSquarePlacement.spread(), + HeightRangePlacement.uniform(VerticalAnchor.bottom(), VerticalAnchor.absolute(192)), + CountPlacement.of(25), + BiomeFilter.biome(), + new DungeonBlacklistFilter()); + register(context, ORE_AETHER_DIRT_PLACEMENT, configuredFeatures.getOrThrow(AetherConfiguredFeatures.ORE_AETHER_DIRT_CONFIGURATION), + AetherPlacedFeatureBuilders.commonOrePlacement(10, HeightRangePlacement.uniform(VerticalAnchor.aboveBottom(0), VerticalAnchor.belowTop(0)))); + register(context, ORE_ICESTONE_PLACEMENT, configuredFeatures.getOrThrow(AetherConfiguredFeatures.ORE_ICESTONE_CONFIGURATION), + AetherPlacedFeatureBuilders.commonOrePlacement(10, HeightRangePlacement.uniform(VerticalAnchor.aboveBottom(0), VerticalAnchor.belowTop(0)))); + register(context, ORE_AMBROSIUM_PLACEMENT, configuredFeatures.getOrThrow(AetherConfiguredFeatures.ORE_AMBROSIUM_CONFIGURATION), + AetherPlacedFeatureBuilders.commonOrePlacement(10, HeightRangePlacement.uniform(VerticalAnchor.aboveBottom(0), VerticalAnchor.belowTop(0)))); + register(context, ORE_ZANITE_PLACEMENT, configuredFeatures.getOrThrow(AetherConfiguredFeatures.ORE_ZANITE_CONFIGURATION), + AetherPlacedFeatureBuilders.commonOrePlacement(10, HeightRangePlacement.uniform(VerticalAnchor.aboveBottom(0), VerticalAnchor.belowTop(0)))); + register(context, ORE_GRAVITITE_COMMON_PLACEMENT, configuredFeatures.getOrThrow(AetherConfiguredFeatures.ORE_GRAVITITE_COMMON_CONFIGURATION), + AetherPlacedFeatureBuilders.commonOrePlacement(7, HeightRangePlacement.uniform(VerticalAnchor.aboveBottom(0), VerticalAnchor.belowTop(0)))); + register(context, ORE_GRAVITITE_DENSE_PLACEMENT, configuredFeatures.getOrThrow(AetherConfiguredFeatures.ORE_GRAVITITE_DENSE_CONFIGURATION), + AetherPlacedFeatureBuilders.commonOrePlacement(3, HeightRangePlacement.triangle(VerticalAnchor.aboveBottom(0), VerticalAnchor.belowTop(0)))); + } + + private static void register(BootstapContext context, ResourceKey key, Holder> configuration, List modifiers) { + context.register(key, new PlacedFeature(configuration, List.copyOf(modifiers))); + } + + private static void register(BootstapContext context, ResourceKey key, Holder> configuration, PlacementModifier... modifiers) { + register(context, key, configuration, List.of(modifiers)); + } +} diff --git a/src/main/java/com/gildedgames/aether/data/resources/registries/AetherStructureSets.java b/src/main/java/com/gildedgames/aether/data/resources/registries/AetherStructureSets.java new file mode 100644 index 0000000000..6408043cfe --- /dev/null +++ b/src/main/java/com/gildedgames/aether/data/resources/registries/AetherStructureSets.java @@ -0,0 +1,31 @@ +package com.gildedgames.aether.data.resources.registries; + +import com.gildedgames.aether.Aether; +import net.minecraft.core.HolderGetter; +import net.minecraft.core.registries.Registries; +import net.minecraft.data.worldgen.BootstapContext; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.levelgen.structure.Structure; +import net.minecraft.world.level.levelgen.structure.StructureSet; +import net.minecraft.world.level.levelgen.structure.placement.RandomSpreadStructurePlacement; +import net.minecraft.world.level.levelgen.structure.placement.RandomSpreadType; + +public class AetherStructureSets { + public static final ResourceKey LARGE_AERCLOUD = createKey("large_aercloud"); + public static final ResourceKey BRONZE_DUNGEON = createKey("bronze_dungeon"); + public static final ResourceKey SILVER_DUNGEON = createKey("silver_dungeon"); + public static final ResourceKey GOLD_DUNGEON = createKey("gold_dungeon"); + + private static ResourceKey createKey(String name) { + return ResourceKey.create(Registries.STRUCTURE_SET, new ResourceLocation(Aether.MODID, name)); + } + + public static void bootstrap(BootstapContext context) { + HolderGetter structures = context.lookup(Registries.STRUCTURE); + context.register(LARGE_AERCLOUD, new StructureSet(structures.getOrThrow(AetherStructures.LARGE_AERCLOUD), new RandomSpreadStructurePlacement(4, 2, RandomSpreadType.LINEAR, 15536586))); + context.register(BRONZE_DUNGEON, new StructureSet(structures.getOrThrow(AetherStructures.BRONZE_DUNGEON), new RandomSpreadStructurePlacement(12, 10, RandomSpreadType.LINEAR, 32146754))); + context.register(SILVER_DUNGEON, new StructureSet(structures.getOrThrow(AetherStructures.SILVER_DUNGEON), new RandomSpreadStructurePlacement(16, 6, RandomSpreadType.LINEAR, 4325806))); + context.register(GOLD_DUNGEON, new StructureSet(structures.getOrThrow(AetherStructures.GOLD_DUNGEON), new RandomSpreadStructurePlacement(20, 6, RandomSpreadType.LINEAR, 15436785))); + } +} diff --git a/src/main/java/com/gildedgames/aether/data/resources/registries/AetherStructures.java b/src/main/java/com/gildedgames/aether/data/resources/registries/AetherStructures.java new file mode 100644 index 0000000000..07553b0152 --- /dev/null +++ b/src/main/java/com/gildedgames/aether/data/resources/registries/AetherStructures.java @@ -0,0 +1,52 @@ +package com.gildedgames.aether.data.resources.registries; + +import com.gildedgames.aether.Aether; +import com.gildedgames.aether.AetherTags; +import com.gildedgames.aether.block.AetherBlockStateProperties; +import com.gildedgames.aether.block.AetherBlocks; +import com.gildedgames.aether.data.resources.builders.AetherStructureBuilders; +import com.gildedgames.aether.world.structure.BronzeDungeonStructure; +import com.gildedgames.aether.world.structure.GoldDungeonStructure; +import com.gildedgames.aether.world.structure.LargeAercloudStructure; +import com.gildedgames.aether.world.structure.SilverDungeonStructure; +import net.minecraft.core.HolderGetter; +import net.minecraft.core.registries.Registries; +import net.minecraft.data.worldgen.BootstapContext; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.biome.Biome; +import net.minecraft.world.level.levelgen.GenerationStep; +import net.minecraft.world.level.levelgen.feature.stateproviders.BlockStateProvider; +import net.minecraft.world.level.levelgen.structure.Structure; +import net.minecraft.world.level.levelgen.structure.TerrainAdjustment; + +public class AetherStructures { + public static final ResourceKey LARGE_AERCLOUD = createKey("large_aercloud"); + public static final ResourceKey BRONZE_DUNGEON = createKey("bronze_dungeon"); + public static final ResourceKey SILVER_DUNGEON = createKey("silver_dungeon"); + public static final ResourceKey GOLD_DUNGEON = createKey("gold_dungeon"); + + private static ResourceKey createKey(String name) { + return ResourceKey.create(Registries.STRUCTURE, new ResourceLocation(Aether.MODID, name)); + } + + public static void bootstrap(BootstapContext context) { + HolderGetter biomes = context.lookup(Registries.BIOME); + context.register(LARGE_AERCLOUD, new LargeAercloudStructure( + AetherStructureBuilders.structure(biomes.getOrThrow(AetherTags.Biomes.HAS_LARGE_AERCLOUD), GenerationStep.Decoration.SURFACE_STRUCTURES, TerrainAdjustment.NONE), + BlockStateProvider.simple(AetherBlocks.COLD_AERCLOUD.get().defaultBlockState().setValue(AetherBlockStateProperties.DOUBLE_DROPS, true)), 3)); + context.register(BRONZE_DUNGEON, new BronzeDungeonStructure(AetherStructureBuilders.structure( + biomes.getOrThrow(AetherTags.Biomes.HAS_BRONZE_DUNGEON), + GenerationStep.Decoration.SURFACE_STRUCTURES, + TerrainAdjustment.BURY), + 8)); + context.register(SILVER_DUNGEON, new SilverDungeonStructure(AetherStructureBuilders.structure( + biomes.getOrThrow(AetherTags.Biomes.HAS_SILVER_DUNGEON), + GenerationStep.Decoration.SURFACE_STRUCTURES, + TerrainAdjustment.NONE))); + context.register(GOLD_DUNGEON, new GoldDungeonStructure(AetherStructureBuilders.structure( + biomes.getOrThrow(AetherTags.Biomes.HAS_GOLD_DUNGEON), + GenerationStep.Decoration.SURFACE_STRUCTURES, + TerrainAdjustment.NONE))); + } +} diff --git a/src/main/java/com/gildedgames/aether/effect/InebriationEffect.java b/src/main/java/com/gildedgames/aether/effect/InebriationEffect.java index 2e71327c70..57330b9f25 100644 --- a/src/main/java/com/gildedgames/aether/effect/InebriationEffect.java +++ b/src/main/java/com/gildedgames/aether/effect/InebriationEffect.java @@ -30,7 +30,7 @@ public InebriationEffect() { @Override public void applyEffectTick(LivingEntity livingEntity, int amplifier) { if (this.effectDuration % 50 == 0) { - livingEntity.hurt(new DamageSource("inebriation").bypassArmor(), 1.0F); + livingEntity.hurt(new DamageSource("aether.inebriation").bypassArmor(), 1.0F); } this.distractEntity(livingEntity); } diff --git a/src/main/java/com/gildedgames/aether/entity/block/FloatingBlockEntity.java b/src/main/java/com/gildedgames/aether/entity/block/FloatingBlockEntity.java index d444b6ce17..a635076bae 100644 --- a/src/main/java/com/gildedgames/aether/entity/block/FloatingBlockEntity.java +++ b/src/main/java/com/gildedgames/aether/entity/block/FloatingBlockEntity.java @@ -10,9 +10,11 @@ import net.minecraft.core.Direction; import net.minecraft.core.particles.BlockParticleOption; import net.minecraft.core.particles.ParticleTypes; +import net.minecraft.core.registries.Registries; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.NbtUtils; import net.minecraft.network.protocol.Packet; +import net.minecraft.network.protocol.game.ClientGamePacketListener; import net.minecraft.network.protocol.game.ClientboundAddEntityPacket; import net.minecraft.network.protocol.game.ClientboundBlockUpdatePacket; import net.minecraft.network.syncher.EntityDataAccessor; @@ -23,6 +25,7 @@ import net.minecraft.tags.FluidTags; import net.minecraft.util.Mth; import net.minecraft.world.damagesource.DamageSource; +import net.minecraft.world.damagesource.EntityDamageSource; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntitySelector; import net.minecraft.world.entity.EntityType; @@ -216,10 +219,10 @@ private void causeFallDamage() { DamageSource damageSource; if (this.blockState.getBlock() instanceof Floatable floatable) { predicate = floatable.getHurtsEntitySelector(); - damageSource = floatable.getFallDamageSource(); + damageSource = floatable.getFallDamageSource(this); } else { predicate = EntitySelector.NO_SPECTATORS; - damageSource = DamageSource.FALLING_BLOCK; + damageSource = new EntityDamageSource("aether.floatingBlock", this).damageHelmet(); } float f = (float) Math.min(Mth.floor((float) this.floatDistance * this.fallDamagePerDistance), this.fallDamageMax); @@ -299,7 +302,7 @@ protected void addAdditionalSaveData(CompoundTag tag) { @Override protected void readAdditionalSaveData(CompoundTag tag) { if (tag.contains("BlockState")) { - this.blockState = NbtUtils.readBlockState(tag.getCompound("BlockState")); + this.blockState = NbtUtils.readBlockState(this.level.holderLookup(Registries.BLOCK), tag.getCompound("BlockState")); } if (tag.contains("Time")) { this.time = tag.getInt("Time"); @@ -322,9 +325,8 @@ protected void readAdditionalSaveData(CompoundTag tag) { } } - @Nonnull @Override - public Packet getAddEntityPacket() { + public Packet getAddEntityPacket() { return new ClientboundAddEntityPacket(this, Block.getId(this.getBlockState())); } diff --git a/src/main/java/com/gildedgames/aether/entity/block/TntPresent.java b/src/main/java/com/gildedgames/aether/entity/block/TntPresent.java index e120ad020d..c486f2fff8 100644 --- a/src/main/java/com/gildedgames/aether/entity/block/TntPresent.java +++ b/src/main/java/com/gildedgames/aether/entity/block/TntPresent.java @@ -3,11 +3,11 @@ import com.gildedgames.aether.entity.AetherEntityTypes; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.protocol.Packet; +import net.minecraft.network.protocol.game.ClientGamePacketListener; import net.minecraft.network.syncher.EntityDataAccessor; import net.minecraft.network.syncher.EntityDataSerializers; import net.minecraft.network.syncher.SynchedEntityData; import net.minecraft.core.particles.ParticleTypes; -import net.minecraft.world.level.Explosion; import net.minecraft.world.level.Level; import javax.annotation.Nonnull; @@ -60,7 +60,7 @@ public void tick() { if (i <= 0) { this.discard(); if (!this.level.isClientSide) { - this.level.explode(this, null, null, this.getX(), this.getY(0.0625D), this.getZ(), 1.0F, false, Explosion.BlockInteraction.NONE); + this.level.explode(this, null, null, this.getX(), this.getY(0.0625D), this.getZ(), 1.0F, false, Level.ExplosionInteraction.TNT); } } else { this.updateInWaterStateAndDoFluidPushing(); @@ -108,7 +108,7 @@ protected void readAdditionalSaveData(CompoundTag tag) { @Nonnull @Override - public Packet getAddEntityPacket() { + public Packet getAddEntityPacket() { return NetworkHooks.getEntitySpawningPacket(this); } } diff --git a/src/main/java/com/gildedgames/aether/entity/miscellaneous/CloudMinion.java b/src/main/java/com/gildedgames/aether/entity/miscellaneous/CloudMinion.java index 2afa43dca8..3448f37f3e 100644 --- a/src/main/java/com/gildedgames/aether/entity/miscellaneous/CloudMinion.java +++ b/src/main/java/com/gildedgames/aether/entity/miscellaneous/CloudMinion.java @@ -4,6 +4,7 @@ import com.gildedgames.aether.entity.projectile.crystal.CloudCrystal; import com.gildedgames.aether.entity.AetherEntityTypes; import com.gildedgames.aether.util.EntityUtil; +import net.minecraft.network.protocol.game.ClientGamePacketListener; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.FlyingMob; import net.minecraft.world.entity.ai.attributes.AttributeSupplier; @@ -196,7 +197,7 @@ public void setShouldShoot(boolean shouldShoot) { @Nonnull @Override - public Packet getAddEntityPacket() { + public Packet getAddEntityPacket() { return NetworkHooks.getEntitySpawningPacket(this); } } diff --git a/src/main/java/com/gildedgames/aether/entity/miscellaneous/Parachute.java b/src/main/java/com/gildedgames/aether/entity/miscellaneous/Parachute.java index 28ea98727b..39fed8f805 100644 --- a/src/main/java/com/gildedgames/aether/entity/miscellaneous/Parachute.java +++ b/src/main/java/com/gildedgames/aether/entity/miscellaneous/Parachute.java @@ -5,6 +5,7 @@ import com.gildedgames.aether.network.packet.client.ExplosionParticlePacket; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.protocol.Packet; +import net.minecraft.network.protocol.game.ClientGamePacketListener; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.ai.attributes.AttributeInstance; @@ -153,7 +154,7 @@ protected void readAdditionalSaveData(@Nonnull CompoundTag tag) { } @Nonnull @Override - public Packet getAddEntityPacket() { + public Packet getAddEntityPacket() { return NetworkHooks.getEntitySpawningPacket(this); } } diff --git a/src/main/java/com/gildedgames/aether/entity/miscellaneous/SkyrootBoat.java b/src/main/java/com/gildedgames/aether/entity/miscellaneous/SkyrootBoat.java index bf9cc907c4..cdfad7df81 100644 --- a/src/main/java/com/gildedgames/aether/entity/miscellaneous/SkyrootBoat.java +++ b/src/main/java/com/gildedgames/aether/entity/miscellaneous/SkyrootBoat.java @@ -5,6 +5,7 @@ import com.gildedgames.aether.item.AetherItems; import net.minecraft.core.BlockPos; import net.minecraft.network.protocol.Packet; +import net.minecraft.network.protocol.game.ClientGamePacketListener; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.vehicle.Boat; import net.minecraft.world.item.Item; @@ -40,7 +41,7 @@ protected void checkFallDamage(double y, boolean onGround, @Nonnull BlockState s @Nonnull @Override - public Packet getAddEntityPacket() { + public Packet getAddEntityPacket() { return NetworkHooks.getEntitySpawningPacket(this); } } diff --git a/src/main/java/com/gildedgames/aether/entity/miscellaneous/SkyrootChestBoat.java b/src/main/java/com/gildedgames/aether/entity/miscellaneous/SkyrootChestBoat.java index 5886f46466..49051a321a 100644 --- a/src/main/java/com/gildedgames/aether/entity/miscellaneous/SkyrootChestBoat.java +++ b/src/main/java/com/gildedgames/aether/entity/miscellaneous/SkyrootChestBoat.java @@ -5,6 +5,7 @@ import com.gildedgames.aether.item.AetherItems; import net.minecraft.core.BlockPos; import net.minecraft.network.protocol.Packet; +import net.minecraft.network.protocol.game.ClientGamePacketListener; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.vehicle.ChestBoat; import net.minecraft.world.item.Item; @@ -40,7 +41,7 @@ protected void checkFallDamage(double y, boolean onGround, @Nonnull BlockState s @Nonnull @Override - public Packet getAddEntityPacket() { + public Packet getAddEntityPacket() { return NetworkHooks.getEntitySpawningPacket(this); } } diff --git a/src/main/java/com/gildedgames/aether/entity/monster/dungeon/AbstractValkyrie.java b/src/main/java/com/gildedgames/aether/entity/monster/dungeon/AbstractValkyrie.java index daf0449c45..874b6a629f 100644 --- a/src/main/java/com/gildedgames/aether/entity/monster/dungeon/AbstractValkyrie.java +++ b/src/main/java/com/gildedgames/aether/entity/monster/dungeon/AbstractValkyrie.java @@ -329,13 +329,12 @@ protected boolean canUpdatePath() { * Allows the valkyrie to establish a path through the air while descending. */ public static class ValkyrieNodeEvaluator extends FlyNodeEvaluator { - /** * Returns a mapped point or creates and adds one */ @Override @Nullable - protected Node getNode(int pX, int pY, int pZ) { + protected Node findAcceptedNode(int pX, int pY, int pZ) { Node node = null; FlyNodeEvaluatorAccessor flyNodeEvaluatorAccessor = (FlyNodeEvaluatorAccessor) this; BlockPathTypes blockpathtypes = flyNodeEvaluatorAccessor.callGetCachedBlockPathType(pX, pY, pZ); diff --git a/src/main/java/com/gildedgames/aether/entity/monster/dungeon/Sentry.java b/src/main/java/com/gildedgames/aether/entity/monster/dungeon/Sentry.java index 9c17599037..6b8d7decda 100644 --- a/src/main/java/com/gildedgames/aether/entity/monster/dungeon/Sentry.java +++ b/src/main/java/com/gildedgames/aether/entity/monster/dungeon/Sentry.java @@ -115,7 +115,7 @@ public void playerTouch(@Nonnull Player player) { protected void explodeAt(LivingEntity livingEntity) { if (this.isAwake() && this.hasLineOfSight(livingEntity) && livingEntity.hurt(DamageSource.mobAttack(this), 1.0F) && this.tickCount > 20) { livingEntity.push(0.5, 0.5, 0.5); - this.level.explode(this, this.getX(), this.getY(), this.getZ(), 1.0F, Explosion.BlockInteraction.NONE); + 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.random.nextFloat() - this.random.nextFloat()) + 1); if (this.level instanceof ServerLevel level) { AetherPacketHandler.sendToNear(new SentryExplosionParticlePacket(this.getId()), this.getX(), this.getY(), this.getZ(), 10.0, level.dimension()); diff --git a/src/main/java/com/gildedgames/aether/entity/monster/dungeon/boss/Slider.java b/src/main/java/com/gildedgames/aether/entity/monster/dungeon/boss/Slider.java index d1802cbeac..848ba74e38 100644 --- a/src/main/java/com/gildedgames/aether/entity/monster/dungeon/boss/Slider.java +++ b/src/main/java/com/gildedgames/aether/entity/monster/dungeon/boss/Slider.java @@ -229,7 +229,7 @@ private void collide() { AABB collisionBounds = new AABB(this.getBoundingBox().minX - 0.1, this.getBoundingBox().minY - 0.1, this.getBoundingBox().minZ - 0.1, this.getBoundingBox().maxX + 0.1, this.getBoundingBox().maxY + 0.1, this.getBoundingBox().maxZ + 0.1); for (Entity entity : this.getLevel().getEntities(this, collisionBounds)) { - if (entity instanceof LivingEntity livingEntity && entity.hurt(new EntityDamageSource("crush", this), 6)) { + if (entity instanceof LivingEntity livingEntity && entity.hurt(new EntityDamageSource("aether.crush", this), 6)) { if (livingEntity instanceof Player player && player.getUseItem().is(Items.SHIELD) && player.isBlocking()) { player.getCooldowns().addCooldown(Items.SHIELD, 100); player.stopUsingItem(); diff --git a/src/main/java/com/gildedgames/aether/entity/monster/dungeon/boss/SunSpirit.java b/src/main/java/com/gildedgames/aether/entity/monster/dungeon/boss/SunSpirit.java index 8bcf069930..485a216819 100644 --- a/src/main/java/com/gildedgames/aether/entity/monster/dungeon/boss/SunSpirit.java +++ b/src/main/java/com/gildedgames/aether/entity/monster/dungeon/boss/SunSpirit.java @@ -152,7 +152,7 @@ public void burnEntities() { List entities = this.level.getEntities(this, this.getBoundingBox().expandTowards(0, 4, 0)); for (Entity target : entities) { if (target instanceof LivingEntity) { - target.hurt(new EntityDamageSource("incineration", this), 10); + target.hurt(new EntityDamageSource("aether.incineration", this), 10); target.setSecondsOnFire(15); } } diff --git a/src/main/java/com/gildedgames/aether/entity/passive/Moa.java b/src/main/java/com/gildedgames/aether/entity/passive/Moa.java index e414fe0410..a0f7f52be5 100644 --- a/src/main/java/com/gildedgames/aether/entity/passive/Moa.java +++ b/src/main/java/com/gildedgames/aether/entity/passive/Moa.java @@ -96,11 +96,10 @@ public static AttributeSupplier.Builder createMobAttributes() { @Override protected void defineSynchedData() { super.defineSynchedData(); - MoaType moaType = AetherMoaTypes.random(this.random); - this.entityData.define(DATA_MOA_TYPE_ID, moaType.toString()); + this.entityData.define(DATA_MOA_TYPE_ID, ""); this.entityData.define(DATA_RIDER_UUID, Optional.empty()); this.entityData.define(DATA_LAST_RIDER_UUID, Optional.empty()); - this.entityData.define(DATA_REMAINING_JUMPS_ID, moaType.getMaxJumps()); + this.entityData.define(DATA_REMAINING_JUMPS_ID, 0); this.entityData.define(DATA_HUNGRY_ID, false); this.entityData.define(DATA_AMOUNT_FED_ID, 0); this.entityData.define(DATA_PLAYER_GROWN_ID, false); @@ -122,6 +121,8 @@ public SpawnGroupData finalizeSpawn(@Nonnull ServerLevelAccessor level, @Nonnull if (tag.contains("PlayerGrown")) { this.setPlayerGrown(tag.getBoolean("PlayerGrown")); } + } else { + this.setMoaType(AetherMoaTypes.random(this.random)); } return super.finalizeSpawn(level, difficulty, reason, spawnData, tag); } diff --git a/src/main/java/com/gildedgames/aether/entity/projectile/ZephyrSnowball.java b/src/main/java/com/gildedgames/aether/entity/projectile/ZephyrSnowball.java index 430930c360..9910124977 100644 --- a/src/main/java/com/gildedgames/aether/entity/projectile/ZephyrSnowball.java +++ b/src/main/java/com/gildedgames/aether/entity/projectile/ZephyrSnowball.java @@ -8,6 +8,7 @@ import com.gildedgames.aether.network.packet.client.ZephyrSnowballHitPacket; import com.gildedgames.aether.util.EquipmentUtil; import net.minecraft.core.BlockPos; +import net.minecraft.network.protocol.game.ClientGamePacketListener; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntityType; @@ -126,7 +127,7 @@ public ItemStack getItem() { @Nonnull @Override - public Packet getAddEntityPacket() { + public Packet getAddEntityPacket() { return NetworkHooks.getEntitySpawningPacket(this); } } \ No newline at end of file diff --git a/src/main/java/com/gildedgames/aether/entity/projectile/crystal/AbstractCrystal.java b/src/main/java/com/gildedgames/aether/entity/projectile/crystal/AbstractCrystal.java index 405ca81efa..3aef34bca1 100644 --- a/src/main/java/com/gildedgames/aether/entity/projectile/crystal/AbstractCrystal.java +++ b/src/main/java/com/gildedgames/aether/entity/projectile/crystal/AbstractCrystal.java @@ -2,6 +2,7 @@ import net.minecraft.core.particles.ParticleOptions; import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.protocol.game.ClientGamePacketListener; import net.minecraft.server.level.ServerLevel; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.Blocks; @@ -110,7 +111,7 @@ public void readAdditionalSaveData(@Nonnull CompoundTag tag) { @Nonnull @Override - public Packet getAddEntityPacket() { + public Packet getAddEntityPacket() { return NetworkHooks.getEntitySpawningPacket(this); } } diff --git a/src/main/java/com/gildedgames/aether/entity/projectile/crystal/CloudCrystal.java b/src/main/java/com/gildedgames/aether/entity/projectile/crystal/CloudCrystal.java index 694be4498a..0aeee885f4 100644 --- a/src/main/java/com/gildedgames/aether/entity/projectile/crystal/CloudCrystal.java +++ b/src/main/java/com/gildedgames/aether/entity/projectile/crystal/CloudCrystal.java @@ -34,7 +34,7 @@ protected void onHitEntity(EntityHitResult result) { Entity entity = result.getEntity(); if (entity instanceof LivingEntity livingEntity) { float bonus = entity instanceof Blaze ? 3.0F : 0.0F; - if (livingEntity.hurt(new IndirectEntityDamageSource("cloud_crystal", this, this.getOwner()).setProjectile(), 5.0F + bonus)) { + if (livingEntity.hurt(new IndirectEntityDamageSource("aether.cloud_crystal", this, this.getOwner()).setProjectile(), 5.0F + bonus)) { livingEntity.addEffect(new MobEffectInstance(MobEffects.WEAKNESS, 10)); 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); this.spawnExplosionParticles(); diff --git a/src/main/java/com/gildedgames/aether/entity/projectile/crystal/FireCrystal.java b/src/main/java/com/gildedgames/aether/entity/projectile/crystal/FireCrystal.java index a1c08592b9..5d8d2c28bc 100644 --- a/src/main/java/com/gildedgames/aether/entity/projectile/crystal/FireCrystal.java +++ b/src/main/java/com/gildedgames/aether/entity/projectile/crystal/FireCrystal.java @@ -57,7 +57,7 @@ public FireCrystal(Level level, Entity shooter) { protected void onHitEntity(EntityHitResult result) { Entity entity = result.getEntity(); if (entity instanceof LivingEntity livingEntity) { - if (livingEntity.hurt(new IndirectEntityDamageSource("fire_crystal", this, this.getOwner()).setProjectile(), 5.0F)) { + if (livingEntity.hurt(new IndirectEntityDamageSource("aether.fire_crystal", this, this.getOwner()).setProjectile(), 5.0F)) { livingEntity.setSecondsOnFire(5); 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); this.spawnExplosionParticles(); diff --git a/src/main/java/com/gildedgames/aether/entity/projectile/crystal/IceCrystal.java b/src/main/java/com/gildedgames/aether/entity/projectile/crystal/IceCrystal.java index c5de884387..e2195e575e 100644 --- a/src/main/java/com/gildedgames/aether/entity/projectile/crystal/IceCrystal.java +++ b/src/main/java/com/gildedgames/aether/entity/projectile/crystal/IceCrystal.java @@ -59,7 +59,7 @@ protected void onHitEntity(EntityHitResult result) { public void doDamage(Entity entity) { if (this.getOwner() != entity) { if (entity instanceof LivingEntity livingEntity) { - if (livingEntity.hurt(new IndirectEntityDamageSource("ice_crystal", this, this.getOwner()).setProjectile(), 5.0F)) { + if (livingEntity.hurt(new IndirectEntityDamageSource("aether.ice_crystal", this, this.getOwner()).setProjectile(), 5.0F)) { livingEntity.addEffect(new MobEffectInstance(MobEffects.WEAKNESS, 10)); 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); this.spawnExplosionParticles(); diff --git a/src/main/java/com/gildedgames/aether/entity/projectile/crystal/ThunderCrystal.java b/src/main/java/com/gildedgames/aether/entity/projectile/crystal/ThunderCrystal.java index 2290e7a8f4..fde4a4bbb0 100644 --- a/src/main/java/com/gildedgames/aether/entity/projectile/crystal/ThunderCrystal.java +++ b/src/main/java/com/gildedgames/aether/entity/projectile/crystal/ThunderCrystal.java @@ -5,7 +5,6 @@ import net.minecraft.core.particles.ParticleOptions; import net.minecraft.core.particles.ParticleTypes; import net.minecraft.nbt.CompoundTag; -import net.minecraft.network.protocol.Packet; import net.minecraft.server.level.ServerLevel; import net.minecraft.world.Difficulty; import net.minecraft.world.damagesource.DamageSource; @@ -17,7 +16,6 @@ import net.minecraft.world.level.Level; import net.minecraft.world.phys.EntityHitResult; import net.minecraft.world.phys.Vec3; -import net.minecraftforge.network.NetworkHooks; import javax.annotation.Nonnull; @@ -77,7 +75,7 @@ protected ParticleOptions getExplosionParticle() { @Override protected void onHitEntity(EntityHitResult pResult) { if (pResult.getEntity() instanceof LivingEntity target && target != this.getOwner()) { - target.hurt(new IndirectEntityDamageSource("thunder_crystal", this, this.getOwner()).setProjectile(), 5.0F); + target.hurt(new IndirectEntityDamageSource("aether.thunder_crystal", this, this.getOwner()).setProjectile(), 5.0F); this.knockback(0.1, this.position().subtract(target.position())); target.knockback(0.25, this.getX() - target.getX(), this.getZ() - target.getZ()); } @@ -141,10 +139,4 @@ public void readAdditionalSaveData(@Nonnull CompoundTag tag) { this.target = this.level.getEntity(tag.getInt("Target")); } } - - @Nonnull - @Override - public Packet getAddEntityPacket() { - return NetworkHooks.getEntitySpawningPacket(this); - } } diff --git a/src/main/java/com/gildedgames/aether/entity/projectile/dart/AbstractDart.java b/src/main/java/com/gildedgames/aether/entity/projectile/dart/AbstractDart.java index 18ab1168e2..214360681d 100644 --- a/src/main/java/com/gildedgames/aether/entity/projectile/dart/AbstractDart.java +++ b/src/main/java/com/gildedgames/aether/entity/projectile/dart/AbstractDart.java @@ -1,6 +1,7 @@ package com.gildedgames.aether.entity.projectile.dart; import com.gildedgames.aether.client.AetherSoundEvents; +import net.minecraft.network.protocol.game.ClientGamePacketListener; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.projectile.AbstractArrow; @@ -55,7 +56,7 @@ protected SoundEvent getDefaultHitGroundSoundEvent() { @Nonnull @Override - public Packet getAddEntityPacket() { + public Packet getAddEntityPacket() { return NetworkHooks.getEntitySpawningPacket(this); } } diff --git a/src/main/java/com/gildedgames/aether/entity/projectile/weapon/HammerProjectile.java b/src/main/java/com/gildedgames/aether/entity/projectile/weapon/HammerProjectile.java index ecfaa61166..9f69889061 100644 --- a/src/main/java/com/gildedgames/aether/entity/projectile/weapon/HammerProjectile.java +++ b/src/main/java/com/gildedgames/aether/entity/projectile/weapon/HammerProjectile.java @@ -1,7 +1,7 @@ package com.gildedgames.aether.entity.projectile.weapon; -import com.gildedgames.aether.AetherTags; import com.gildedgames.aether.entity.AetherEntityTypes; +import net.minecraft.network.protocol.game.ClientGamePacketListener; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.LivingEntity; @@ -130,7 +130,7 @@ public boolean getIsJeb() { @Nonnull @Override - public Packet getAddEntityPacket() { + public Packet getAddEntityPacket() { return NetworkHooks.getEntitySpawningPacket(this); } } diff --git a/src/main/java/com/gildedgames/aether/entity/projectile/weapon/ThrownLightningKnife.java b/src/main/java/com/gildedgames/aether/entity/projectile/weapon/ThrownLightningKnife.java index d52bec7c16..fe0ef152f8 100644 --- a/src/main/java/com/gildedgames/aether/entity/projectile/weapon/ThrownLightningKnife.java +++ b/src/main/java/com/gildedgames/aether/entity/projectile/weapon/ThrownLightningKnife.java @@ -4,12 +4,13 @@ import com.gildedgames.aether.item.AetherItems; import com.gildedgames.aether.capability.lightning.LightningTracker; +import net.minecraft.network.protocol.Packet; +import net.minecraft.network.protocol.game.ClientGamePacketListener; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.LightningBolt; import net.minecraft.world.entity.projectile.ThrowableItemProjectile; import net.minecraft.world.item.Item; -import net.minecraft.network.protocol.Packet; import net.minecraft.world.phys.HitResult; import net.minecraft.world.level.Level; import net.minecraft.server.level.ServerLevel; @@ -50,11 +51,11 @@ protected void onHit(@Nonnull HitResult result) { @Override protected Item getDefaultItem() { return AetherItems.LIGHTNING_KNIFE.get(); - } - + } + @Nonnull @Override - public Packet getAddEntityPacket() { + public Packet getAddEntityPacket() { return NetworkHooks.getEntitySpawningPacket(this); } } diff --git a/src/main/java/com/gildedgames/aether/event/AetherGameEvents.java b/src/main/java/com/gildedgames/aether/event/AetherGameEvents.java index 344c75ec8c..c23e34ae2d 100644 --- a/src/main/java/com/gildedgames/aether/event/AetherGameEvents.java +++ b/src/main/java/com/gildedgames/aether/event/AetherGameEvents.java @@ -1,13 +1,13 @@ package com.gildedgames.aether.event; import com.gildedgames.aether.Aether; -import net.minecraft.core.Registry; +import net.minecraft.core.registries.Registries; import net.minecraft.world.level.gameevent.GameEvent; import net.minecraftforge.registries.DeferredRegister; import net.minecraftforge.registries.RegistryObject; public class AetherGameEvents { - public static final DeferredRegister GAME_EVENTS = DeferredRegister.create(Registry.GAME_EVENT_REGISTRY, Aether.MODID); + public static final DeferredRegister GAME_EVENTS = DeferredRegister.create(Registries.GAME_EVENT, Aether.MODID); public static final RegistryObject ICESTONE_FREEZABLE_UPDATE = GAME_EVENTS.register("icestone_freezable_update", () -> new GameEvent("icestone_freezable_update", 4)); } diff --git a/src/main/java/com/gildedgames/aether/event/hooks/AbilityHooks.java b/src/main/java/com/gildedgames/aether/event/hooks/AbilityHooks.java index dd66b0b3e4..f4e220634a 100644 --- a/src/main/java/com/gildedgames/aether/event/hooks/AbilityHooks.java +++ b/src/main/java/com/gildedgames/aether/event/hooks/AbilityHooks.java @@ -1,6 +1,7 @@ package com.gildedgames.aether.event.hooks; import com.gildedgames.aether.capability.lightning.LightningTrackerCapability; +import com.gildedgames.aether.data.generators.loot.AetherStrippingLoot; import com.gildedgames.aether.entity.projectile.PoisonNeedle; import com.gildedgames.aether.entity.projectile.dart.EnchantedDart; import com.gildedgames.aether.entity.projectile.dart.GoldenDart; @@ -38,6 +39,7 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.LootTable; +import net.minecraft.world.level.storage.loot.parameters.LootContextParams; import net.minecraft.world.phys.EntityHitResult; import net.minecraft.world.phys.HitResult; import net.minecraft.world.phys.Vec3; @@ -217,7 +219,7 @@ public static float reduceToolEffectiveness(BlockState state, ItemStack stack, f /** * Spawns Golden Amber at the user's click position when stripping Golden Oak Logs ({@link AetherTags.Blocks#GOLDEN_OAK_LOGS}), as long as the tool in usage can harvest Golden Amber ({@link AetherTags.Items#GOLDEN_AMBER_HARVESTERS}).

- * The drops are handled using a special loot context type {@link AetherLootContexts#STRIPPING}, used for a loot table found in {@link com.gildedgames.aether.data.generators.loot.AetherStrippingLootData}. + * The drops are handled using a special loot context type {@link AetherLootContexts#STRIPPING}, used for a loot table found in {@link AetherStrippingLoot}. * @param accessor The {@link LevelAccessor} of the level. * @param state The {@link BlockState} an action is being performed on. * @param stack The {@link ItemStack} performing an action. @@ -231,9 +233,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); - LootTable loottable = level.getServer().getLootTables().get(AetherLoot.STRIP_GOLDEN_OAK); - List list = loottable.getRandomItems(lootContext.create(AetherLootContexts.STRIPPING)); + 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)); for (ItemStack itemStack : list) { ItemEntity itemEntity = new ItemEntity(level, vector.x(), vector.y(), vector.z(), itemStack); itemEntity.setDefaultPickUpDelay(); diff --git a/src/main/java/com/gildedgames/aether/event/hooks/CapabilityHooks.java b/src/main/java/com/gildedgames/aether/event/hooks/CapabilityHooks.java index 461aab8c11..37721c0b6a 100644 --- a/src/main/java/com/gildedgames/aether/event/hooks/CapabilityHooks.java +++ b/src/main/java/com/gildedgames/aether/event/hooks/CapabilityHooks.java @@ -1,7 +1,7 @@ package com.gildedgames.aether.event.hooks; import com.gildedgames.aether.api.CustomizationsOptions; -import com.gildedgames.aether.data.resources.AetherDimensions; +import com.gildedgames.aether.data.resources.registries.AetherDimensions; import com.gildedgames.aether.capability.player.AetherPlayer; import com.gildedgames.aether.capability.player.AetherPlayerCapability; import com.gildedgames.aether.capability.rankings.AetherRankings; diff --git a/src/main/java/com/gildedgames/aether/event/hooks/DimensionHooks.java b/src/main/java/com/gildedgames/aether/event/hooks/DimensionHooks.java index db53bc6c6f..32762aeb61 100644 --- a/src/main/java/com/gildedgames/aether/event/hooks/DimensionHooks.java +++ b/src/main/java/com/gildedgames/aether/event/hooks/DimensionHooks.java @@ -13,7 +13,7 @@ import com.gildedgames.aether.recipe.recipes.ban.ItemBanRecipe; import com.gildedgames.aether.recipe.recipes.block.PlacementConversionRecipe; import com.gildedgames.aether.util.LevelUtil; -import com.gildedgames.aether.data.resources.AetherDimensions; +import com.gildedgames.aether.data.resources.registries.AetherDimensions; import com.gildedgames.aether.AetherConfig; import com.gildedgames.aether.capability.time.AetherTime; import com.gildedgames.aether.network.AetherPacketHandler; @@ -37,7 +37,6 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.item.crafting.Recipe; -import net.minecraft.world.level.Explosion; import net.minecraft.world.level.GameRules; import net.minecraft.world.level.Level; import net.minecraft.world.level.LevelAccessor; @@ -49,6 +48,7 @@ import net.minecraft.world.level.entity.EntityTypeTest; import net.minecraft.world.level.material.FluidState; import net.minecraft.world.level.material.Fluids; +import net.minecraft.world.phys.Vec3; import javax.annotation.Nullable; import java.util.List; @@ -118,7 +118,8 @@ public static boolean checkInteractionBanned(Player player, Level level, BlockPo if (level.getBlockState(blockpos).is(BlockTags.BEDS) && level.getBlockState(blockpos).getBlock() != AetherBlocks.SKYROOT_BED.get()) { level.removeBlock(blockpos, false); } - level.explode(null, DamageSource.badRespawnPointExplosion(), null, (double) pos.getX() + 0.5, (double) pos.getY() + 0.5, (double) pos.getZ() + 0.5, 5.0F, true, Explosion.BlockInteraction.DESTROY); + Vec3 vec3 = pos.getCenter(); + level.explode(null, DamageSource.badRespawnPointExplosion(vec3), null, (double) pos.getX() + 0.5, (double) pos.getY() + 0.5, (double) pos.getZ() + 0.5, 5.0F, true, Level.ExplosionInteraction.BLOCK); } player.swing(InteractionHand.MAIN_HAND); return true; diff --git a/src/main/java/com/gildedgames/aether/event/listeners/DimensionListener.java b/src/main/java/com/gildedgames/aether/event/listeners/DimensionListener.java index 1047bdbd8b..de951c1337 100644 --- a/src/main/java/com/gildedgames/aether/event/listeners/DimensionListener.java +++ b/src/main/java/com/gildedgames/aether/event/listeners/DimensionListener.java @@ -3,7 +3,7 @@ import com.gildedgames.aether.event.events.PlacementBanEvent; import com.gildedgames.aether.event.events.PlacementConvertEvent; import com.gildedgames.aether.event.hooks.DimensionHooks; -import com.gildedgames.aether.data.resources.AetherDimensions; +import com.gildedgames.aether.data.resources.registries.AetherDimensions; import com.gildedgames.aether.mixin.mixins.common.accessor.ServerLevelAccessor; import com.gildedgames.aether.world.AetherLevelData; import com.gildedgames.aether.capability.time.AetherTime; diff --git a/src/main/java/com/gildedgames/aether/integration/jei/AetherJEIPlugin.java b/src/main/java/com/gildedgames/aether/integration/jei/AetherJEIPlugin.java index edc39adeaa..a781bad609 100644 --- a/src/main/java/com/gildedgames/aether/integration/jei/AetherJEIPlugin.java +++ b/src/main/java/com/gildedgames/aether/integration/jei/AetherJEIPlugin.java @@ -1,71 +1,71 @@ -package com.gildedgames.aether.integration.jei; - -import com.gildedgames.aether.Aether; -import com.gildedgames.aether.block.AetherBlocks; -import com.gildedgames.aether.integration.jei.categories.AltarRepairRecipeCategory; -import com.gildedgames.aether.integration.jei.categories.EnchantingCookingRecipeCategory; -import com.gildedgames.aether.integration.jei.categories.FreezingRecipeCategory; -import com.gildedgames.aether.integration.jei.categories.IncubationRecipeCategory; -import com.gildedgames.aether.integration.jei.categories.fuel.AetherFuelCategory; -import com.gildedgames.aether.integration.jei.categories.fuel.AetherFuelRecipeMaker; -import com.gildedgames.aether.recipe.AetherRecipeTypes; -import com.gildedgames.aether.recipe.recipes.item.AltarRepairRecipe; -import com.gildedgames.aether.recipe.recipes.item.EnchantingRecipe; -import mezz.jei.api.IModPlugin; -import mezz.jei.api.JeiPlugin; -import mezz.jei.api.registration.IRecipeCatalystRegistration; -import mezz.jei.api.registration.IRecipeCategoryRegistration; -import mezz.jei.api.registration.IRecipeRegistration; -import net.minecraft.client.Minecraft; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.crafting.RecipeManager; - -import javax.annotation.Nonnull; -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; - -@JeiPlugin -public class AetherJEIPlugin implements IModPlugin { - @Nonnull - @Override - public ResourceLocation getPluginUid() { - return new ResourceLocation(Aether.MODID, "jei"); - } - - @Override - public void registerCategories(IRecipeCategoryRegistration registration) { - registration.addRecipeCategories(new EnchantingCookingRecipeCategory(registration.getJeiHelpers().getGuiHelper())); - registration.addRecipeCategories(new AltarRepairRecipeCategory(registration.getJeiHelpers().getGuiHelper())); - registration.addRecipeCategories(new FreezingRecipeCategory(registration.getJeiHelpers().getGuiHelper())); - registration.addRecipeCategories(new IncubationRecipeCategory((registration.getJeiHelpers().getGuiHelper()))); - registration.addRecipeCategories(new AetherFuelCategory((registration.getJeiHelpers().getGuiHelper()))); - } - - @Override - public void registerRecipes(IRecipeRegistration registration) { - RecipeManager rm = Objects.requireNonNull(Minecraft.getInstance().level).getRecipeManager(); - - List unfilteredRecipes = rm.getAllRecipesFor(AetherRecipeTypes.ENCHANTING.get()); - List repairRecipes = new ArrayList<>(); - List enchantingRecipes = new ArrayList<>(); - unfilteredRecipes.stream().filter(recipe -> recipe instanceof AltarRepairRecipe) //filters altar repair and regular altar recipes. - .forEach(recipe -> repairRecipes.add((AltarRepairRecipe) recipe)); - unfilteredRecipes.stream().filter(recipe -> recipe instanceof EnchantingRecipe) - .forEach(recipe -> enchantingRecipes.add((EnchantingRecipe) recipe)); - - registration.addRecipes(EnchantingCookingRecipeCategory.RECIPE_TYPE, enchantingRecipes); - registration.addRecipes(AltarRepairRecipeCategory.RECIPE_TYPE, repairRecipes); - registration.addRecipes(FreezingRecipeCategory.RECIPE_TYPE, rm.getAllRecipesFor(AetherRecipeTypes.FREEZING.get())); - registration.addRecipes(IncubationRecipeCategory.RECIPE_TYPE, rm.getAllRecipesFor(AetherRecipeTypes.INCUBATION.get())); - registration.addRecipes(AetherFuelCategory.RECIPE_TYPE, AetherFuelRecipeMaker.getFuelRecipes()); - } - - @Override - public void registerRecipeCatalysts(IRecipeCatalystRegistration registration) { - registration.addRecipeCatalyst(new ItemStack(AetherBlocks.ALTAR.get().asItem()), EnchantingCookingRecipeCategory.RECIPE_TYPE, AltarRepairRecipeCategory.RECIPE_TYPE, AetherFuelCategory.RECIPE_TYPE); - registration.addRecipeCatalyst(new ItemStack(AetherBlocks.FREEZER.get().asItem()), FreezingRecipeCategory.RECIPE_TYPE, AetherFuelCategory.RECIPE_TYPE); - registration.addRecipeCatalyst(new ItemStack(AetherBlocks.INCUBATOR.get().asItem()), IncubationRecipeCategory.RECIPE_TYPE, AetherFuelCategory.RECIPE_TYPE); - } -} +//package com.gildedgames.aether.integration.jei; +// +//import com.gildedgames.aether.Aether; +//import com.gildedgames.aether.block.AetherBlocks; +//import com.gildedgames.aether.integration.jei.categories.AltarRepairRecipeCategory; +//import com.gildedgames.aether.integration.jei.categories.EnchantingCookingRecipeCategory; +//import com.gildedgames.aether.integration.jei.categories.FreezingRecipeCategory; +//import com.gildedgames.aether.integration.jei.categories.IncubationRecipeCategory; +//import com.gildedgames.aether.integration.jei.categories.fuel.AetherFuelCategory; +//import com.gildedgames.aether.integration.jei.categories.fuel.AetherFuelRecipeMaker; +//import com.gildedgames.aether.recipe.AetherRecipeTypes; +//import com.gildedgames.aether.recipe.recipes.item.AltarRepairRecipe; +//import com.gildedgames.aether.recipe.recipes.item.EnchantingRecipe; +//import mezz.jei.api.IModPlugin; +//import mezz.jei.api.JeiPlugin; +//import mezz.jei.api.registration.IRecipeCatalystRegistration; +//import mezz.jei.api.registration.IRecipeCategoryRegistration; +//import mezz.jei.api.registration.IRecipeRegistration; +//import net.minecraft.client.Minecraft; +//import net.minecraft.resources.ResourceLocation; +//import net.minecraft.world.item.ItemStack; +//import net.minecraft.world.item.crafting.RecipeManager; +// +//import javax.annotation.Nonnull; +//import java.util.ArrayList; +//import java.util.List; +//import java.util.Objects; +// +//@JeiPlugin +//public class AetherJEIPlugin implements IModPlugin { +// @Nonnull +// @Override +// public ResourceLocation getPluginUid() { +// return new ResourceLocation(Aether.MODID, "jei"); +// } +// +// @Override +// public void registerCategories(IRecipeCategoryRegistration registration) { +// registration.addRecipeCategories(new EnchantingCookingRecipeCategory(registration.getJeiHelpers().getGuiHelper())); +// registration.addRecipeCategories(new AltarRepairRecipeCategory(registration.getJeiHelpers().getGuiHelper())); +// registration.addRecipeCategories(new FreezingRecipeCategory(registration.getJeiHelpers().getGuiHelper())); +// registration.addRecipeCategories(new IncubationRecipeCategory((registration.getJeiHelpers().getGuiHelper()))); +// registration.addRecipeCategories(new AetherFuelCategory((registration.getJeiHelpers().getGuiHelper()))); +// } +// +// @Override +// public void registerRecipes(IRecipeRegistration registration) { +// RecipeManager rm = Objects.requireNonNull(Minecraft.getInstance().level).getRecipeManager(); +// +// List unfilteredRecipes = rm.getAllRecipesFor(AetherRecipeTypes.ENCHANTING.get()); +// List repairRecipes = new ArrayList<>(); +// List enchantingRecipes = new ArrayList<>(); +// unfilteredRecipes.stream().filter(recipe -> recipe instanceof AltarRepairRecipe) //filters altar repair and regular altar recipes. +// .forEach(recipe -> repairRecipes.add((AltarRepairRecipe) recipe)); +// unfilteredRecipes.stream().filter(recipe -> recipe instanceof EnchantingRecipe) +// .forEach(recipe -> enchantingRecipes.add((EnchantingRecipe) recipe)); +// +// registration.addRecipes(EnchantingCookingRecipeCategory.RECIPE_TYPE, enchantingRecipes); +// registration.addRecipes(AltarRepairRecipeCategory.RECIPE_TYPE, repairRecipes); +// registration.addRecipes(FreezingRecipeCategory.RECIPE_TYPE, rm.getAllRecipesFor(AetherRecipeTypes.FREEZING.get())); +// registration.addRecipes(IncubationRecipeCategory.RECIPE_TYPE, rm.getAllRecipesFor(AetherRecipeTypes.INCUBATION.get())); +// registration.addRecipes(AetherFuelCategory.RECIPE_TYPE, AetherFuelRecipeMaker.getFuelRecipes()); +// } +// +// @Override +// public void registerRecipeCatalysts(IRecipeCatalystRegistration registration) { +// registration.addRecipeCatalyst(new ItemStack(AetherBlocks.ALTAR.get().asItem()), EnchantingCookingRecipeCategory.RECIPE_TYPE, AltarRepairRecipeCategory.RECIPE_TYPE, AetherFuelCategory.RECIPE_TYPE); +// registration.addRecipeCatalyst(new ItemStack(AetherBlocks.FREEZER.get().asItem()), FreezingRecipeCategory.RECIPE_TYPE, AetherFuelCategory.RECIPE_TYPE); +// registration.addRecipeCatalyst(new ItemStack(AetherBlocks.INCUBATOR.get().asItem()), IncubationRecipeCategory.RECIPE_TYPE, AetherFuelCategory.RECIPE_TYPE); +// } +//} diff --git a/src/main/java/com/gildedgames/aether/integration/jei/categories/AbstractAetherCookingRecipeCategory.java b/src/main/java/com/gildedgames/aether/integration/jei/categories/AbstractAetherCookingRecipeCategory.java index 578ef4e905..c3ff09cc95 100644 --- a/src/main/java/com/gildedgames/aether/integration/jei/categories/AbstractAetherCookingRecipeCategory.java +++ b/src/main/java/com/gildedgames/aether/integration/jei/categories/AbstractAetherCookingRecipeCategory.java @@ -1,33 +1,33 @@ -package com.gildedgames.aether.integration.jei.categories; - -import com.mojang.blaze3d.vertex.PoseStack; -import mezz.jei.api.gui.drawable.IDrawable; -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.Font; -import net.minecraft.network.chat.Component; -import net.minecraft.world.item.crafting.AbstractCookingRecipe; - -public abstract class AbstractAetherCookingRecipeCategory { - protected void drawExperience(AbstractCookingRecipe recipe, PoseStack poseStack, int y, IDrawable background) { - float experience = recipe.getExperience(); - if (experience > 0) { - Component experienceString = Component.translatable("gui.jei.category.smelting.experience", experience); - Minecraft minecraft = Minecraft.getInstance(); - Font fontRenderer = minecraft.font; - int stringWidth = fontRenderer.width(experienceString); - fontRenderer.draw(poseStack, experienceString, background.getWidth() - stringWidth, y, 0xFF808080); - } - } - - protected void drawCookTime(AbstractCookingRecipe recipe, PoseStack poseStack, int y, IDrawable background) { - int cookTime = recipe.getCookingTime(); - if (cookTime > 0) { - int cookTimeSeconds = cookTime / 20; - Component timeString = Component.translatable("gui.jei.category.smelting.time.seconds", cookTimeSeconds); - Minecraft minecraft = Minecraft.getInstance(); - Font fontRenderer = minecraft.font; - int stringWidth = fontRenderer.width(timeString); - fontRenderer.draw(poseStack, timeString, background.getWidth() - stringWidth, y, 0xFF808080); - } - } -} +//package com.gildedgames.aether.integration.jei.categories; +// +//import com.mojang.blaze3d.vertex.PoseStack; +//import mezz.jei.api.gui.drawable.IDrawable; +//import net.minecraft.client.Minecraft; +//import net.minecraft.client.gui.Font; +//import net.minecraft.network.chat.Component; +//import net.minecraft.world.item.crafting.AbstractCookingRecipe; +// +//public abstract class AbstractAetherCookingRecipeCategory { +// protected void drawExperience(AbstractCookingRecipe recipe, PoseStack poseStack, int y, IDrawable background) { +// float experience = recipe.getExperience(); +// if (experience > 0) { +// Component experienceString = Component.translatable("gui.jei.category.smelting.experience", experience); +// Minecraft minecraft = Minecraft.getInstance(); +// Font fontRenderer = minecraft.font; +// int stringWidth = fontRenderer.width(experienceString); +// fontRenderer.draw(poseStack, experienceString, background.getWidth() - stringWidth, y, 0xFF808080); +// } +// } +// +// protected void drawCookTime(AbstractCookingRecipe recipe, PoseStack poseStack, int y, IDrawable background) { +// int cookTime = recipe.getCookingTime(); +// if (cookTime > 0) { +// int cookTimeSeconds = cookTime / 20; +// Component timeString = Component.translatable("gui.jei.category.smelting.time.seconds", cookTimeSeconds); +// Minecraft minecraft = Minecraft.getInstance(); +// Font fontRenderer = minecraft.font; +// int stringWidth = fontRenderer.width(timeString); +// fontRenderer.draw(poseStack, timeString, background.getWidth() - stringWidth, y, 0xFF808080); +// } +// } +//} diff --git a/src/main/java/com/gildedgames/aether/integration/jei/categories/AltarRepairRecipeCategory.java b/src/main/java/com/gildedgames/aether/integration/jei/categories/AltarRepairRecipeCategory.java index 2f8eb89535..5b078dde7f 100644 --- a/src/main/java/com/gildedgames/aether/integration/jei/categories/AltarRepairRecipeCategory.java +++ b/src/main/java/com/gildedgames/aether/integration/jei/categories/AltarRepairRecipeCategory.java @@ -1,84 +1,84 @@ -package com.gildedgames.aether.integration.jei.categories; - -import com.gildedgames.aether.Aether; -import com.gildedgames.aether.block.AetherBlocks; -import com.gildedgames.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.IDrawable; -import mezz.jei.api.gui.drawable.IDrawableAnimated; -import mezz.jei.api.gui.drawable.IDrawableStatic; -import mezz.jei.api.gui.ingredient.IRecipeSlotsView; -import mezz.jei.api.helpers.IGuiHelper; -import mezz.jei.api.recipe.IFocusGroup; -import mezz.jei.api.recipe.RecipeIngredientRole; -import mezz.jei.api.recipe.RecipeType; -import mezz.jei.api.recipe.category.IRecipeCategory; -import net.minecraft.core.NonNullList; -import net.minecraft.network.chat.Component; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.crafting.Ingredient; - -public class AltarRepairRecipeCategory extends AbstractAetherCookingRecipeCategory implements IRecipeCategory { - public static final ResourceLocation UID = new ResourceLocation(Aether.MODID, "repairing"); - public static final ResourceLocation TEXTURE = new ResourceLocation(Aether.MODID, "textures/gui/menu/altar.png"); - public static final RecipeType RECIPE_TYPE = RecipeType.create(Aether.MODID, "repairing", AltarRepairRecipe.class); - - private final IDrawable background; - private final IDrawable fuelIndicator; - private final IDrawable icon; - private final IDrawableAnimated animatedProgressArrow; - - public AltarRepairRecipeCategory(IGuiHelper helper) { - this.background = helper.createDrawable(TEXTURE, 55, 16, 82, 54); - this.fuelIndicator = helper.createDrawable(TEXTURE, 176, 0, 14, 13); - this.icon = helper.createDrawableIngredient(VanillaTypes.ITEM_STACK, new ItemStack(AetherBlocks.ALTAR.get())); - IDrawableStatic progressArrow = helper.createDrawable(TEXTURE, 176, 14, 23, 16 ); - this.animatedProgressArrow = helper.createAnimatedDrawable(progressArrow, 100, IDrawableAnimated.StartDirection.LEFT, false); - } - - @Override - public Component getTitle() { - return Component.translatable("gui." + Aether.MODID + ".jei.altar.repairing"); - } - - @Override - public IDrawable getBackground() { - return this.background; - } - - @Override - public IDrawable getIcon() { - return this.icon; - } - - public ResourceLocation getUid() { - return UID; - } - - @Override - public RecipeType getRecipeType() { - return RECIPE_TYPE; - } - - @Override - public void setRecipe(IRecipeLayoutBuilder builder, AltarRepairRecipe recipe, IFocusGroup focusGroup) { - NonNullList recipeIngredients = recipe.getIngredients(); - - ItemStack damagedItem = recipeIngredients.get(0).getItems()[0].copy(); - damagedItem.setDamageValue(damagedItem.getMaxDamage() * 3 / 4); - - builder.addSlot(RecipeIngredientRole.INPUT, 1, 1).addIngredients(Ingredient.of(damagedItem)); - builder.addSlot(RecipeIngredientRole.OUTPUT, 61, 19).addItemStack(recipe.getResultItem()); - } - - @Override - public void draw(AltarRepairRecipe recipe, IRecipeSlotsView recipeSlotsView, PoseStack stack, double mouseX, double mouseY) { - animatedProgressArrow.draw(stack, 24, 18); - fuelIndicator.draw(stack, 1, 20); - drawExperience(recipe, stack, 1, background); - drawCookTime(recipe, stack, 45, background); - } -} +//package com.gildedgames.aether.integration.jei.categories; +// +//import com.gildedgames.aether.Aether; +//import com.gildedgames.aether.block.AetherBlocks; +//import com.gildedgames.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.IDrawable; +//import mezz.jei.api.gui.drawable.IDrawableAnimated; +//import mezz.jei.api.gui.drawable.IDrawableStatic; +//import mezz.jei.api.gui.ingredient.IRecipeSlotsView; +//import mezz.jei.api.helpers.IGuiHelper; +//import mezz.jei.api.recipe.IFocusGroup; +//import mezz.jei.api.recipe.RecipeIngredientRole; +//import mezz.jei.api.recipe.RecipeType; +//import mezz.jei.api.recipe.category.IRecipeCategory; +//import net.minecraft.core.NonNullList; +//import net.minecraft.network.chat.Component; +//import net.minecraft.resources.ResourceLocation; +//import net.minecraft.world.item.ItemStack; +//import net.minecraft.world.item.crafting.Ingredient; +// +//public class AltarRepairRecipeCategory extends AbstractAetherCookingRecipeCategory implements IRecipeCategory { +// public static final ResourceLocation UID = new ResourceLocation(Aether.MODID, "repairing"); +// public static final ResourceLocation TEXTURE = new ResourceLocation(Aether.MODID, "textures/gui/menu/altar.png"); +// public static final RecipeType RECIPE_TYPE = RecipeType.create(Aether.MODID, "repairing", AltarRepairRecipe.class); +// +// private final IDrawable background; +// private final IDrawable fuelIndicator; +// private final IDrawable icon; +// private final IDrawableAnimated animatedProgressArrow; +// +// public AltarRepairRecipeCategory(IGuiHelper helper) { +// this.background = helper.createDrawable(TEXTURE, 55, 16, 82, 54); +// this.fuelIndicator = helper.createDrawable(TEXTURE, 176, 0, 14, 13); +// this.icon = helper.createDrawableIngredient(VanillaTypes.ITEM_STACK, new ItemStack(AetherBlocks.ALTAR.get())); +// IDrawableStatic progressArrow = helper.createDrawable(TEXTURE, 176, 14, 23, 16 ); +// this.animatedProgressArrow = helper.createAnimatedDrawable(progressArrow, 100, IDrawableAnimated.StartDirection.LEFT, false); +// } +// +// @Override +// public Component getTitle() { +// return Component.translatable("gui." + Aether.MODID + ".jei.altar.repairing"); +// } +// +// @Override +// public IDrawable getBackground() { +// return this.background; +// } +// +// @Override +// public IDrawable getIcon() { +// return this.icon; +// } +// +// public ResourceLocation getUid() { +// return UID; +// } +// +// @Override +// public RecipeType getRecipeType() { +// return RECIPE_TYPE; +// } +// +// @Override +// public void setRecipe(IRecipeLayoutBuilder builder, AltarRepairRecipe recipe, IFocusGroup focusGroup) { +// NonNullList recipeIngredients = recipe.getIngredients(); +// +// ItemStack damagedItem = recipeIngredients.get(0).getItems()[0].copy(); +// damagedItem.setDamageValue(damagedItem.getMaxDamage() * 3 / 4); +// +// builder.addSlot(RecipeIngredientRole.INPUT, 1, 1).addIngredients(Ingredient.of(damagedItem)); +// builder.addSlot(RecipeIngredientRole.OUTPUT, 61, 19).addItemStack(recipe.getResultItem()); +// } +// +// @Override +// public void draw(AltarRepairRecipe recipe, IRecipeSlotsView recipeSlotsView, PoseStack stack, double mouseX, double mouseY) { +// animatedProgressArrow.draw(stack, 24, 18); +// fuelIndicator.draw(stack, 1, 20); +// drawExperience(recipe, stack, 1, background); +// drawCookTime(recipe, stack, 45, background); +// } +//} diff --git a/src/main/java/com/gildedgames/aether/integration/jei/categories/EnchantingCookingRecipeCategory.java b/src/main/java/com/gildedgames/aether/integration/jei/categories/EnchantingCookingRecipeCategory.java index 4969807c35..ae148519f9 100644 --- a/src/main/java/com/gildedgames/aether/integration/jei/categories/EnchantingCookingRecipeCategory.java +++ b/src/main/java/com/gildedgames/aether/integration/jei/categories/EnchantingCookingRecipeCategory.java @@ -1,81 +1,81 @@ -package com.gildedgames.aether.integration.jei.categories; - -import com.gildedgames.aether.Aether; -import com.gildedgames.aether.block.AetherBlocks; -import com.gildedgames.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.IDrawable; -import mezz.jei.api.gui.drawable.IDrawableAnimated; -import mezz.jei.api.gui.drawable.IDrawableStatic; -import mezz.jei.api.gui.ingredient.IRecipeSlotsView; -import mezz.jei.api.helpers.IGuiHelper; -import mezz.jei.api.recipe.IFocusGroup; -import mezz.jei.api.recipe.RecipeIngredientRole; -import mezz.jei.api.recipe.RecipeType; -import mezz.jei.api.recipe.category.IRecipeCategory; -import net.minecraft.core.NonNullList; -import net.minecraft.network.chat.Component; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.crafting.Ingredient; - -public class EnchantingCookingRecipeCategory extends AbstractAetherCookingRecipeCategory implements IRecipeCategory { - public static final ResourceLocation UID = new ResourceLocation(Aether.MODID, "enchanting"); - public static final ResourceLocation TEXTURE = new ResourceLocation(Aether.MODID, "textures/gui/menu/altar.png"); - public static final RecipeType RECIPE_TYPE = RecipeType.create(Aether.MODID, "enchanting", EnchantingRecipe.class); - - private final IDrawable background; - private final IDrawable fuelIndicator; - private final IDrawable icon; - private final IDrawableAnimated animatedProgressArrow; - - public EnchantingCookingRecipeCategory(IGuiHelper helper) { - this.background = helper.createDrawable(TEXTURE, 55, 16, 82, 54); - this.fuelIndicator = helper.createDrawable(TEXTURE, 176, 0, 14, 13); - this.icon = helper.createDrawableIngredient(VanillaTypes.ITEM_STACK, new ItemStack(AetherBlocks.ALTAR.get())); - IDrawableStatic progressArrow = helper.createDrawable(TEXTURE, 176, 14, 23, 16 ); - this.animatedProgressArrow = helper.createAnimatedDrawable(progressArrow, 100, IDrawableAnimated.StartDirection.LEFT, false); - } - - @Override - public Component getTitle() { - return Component.translatable("gui." + Aether.MODID + ".jei.altar.enchanting"); - } - - @Override - public IDrawable getBackground() { - return this.background; - } - - @Override - public IDrawable getIcon() { - return this.icon; - } - - public ResourceLocation getUid() { - return UID; - } - - @Override - public RecipeType getRecipeType() { - return RECIPE_TYPE; - } - - @Override - public void setRecipe(IRecipeLayoutBuilder builder, EnchantingRecipe recipe, IFocusGroup focusGroup) { - NonNullList recipeIngredients = recipe.getIngredients(); - - builder.addSlot(RecipeIngredientRole.INPUT, 1, 1).addIngredients(recipeIngredients.get(0)); - builder.addSlot(RecipeIngredientRole.OUTPUT, 61, 19).addItemStack(recipe.getResultItem()); - } - - @Override - public void draw(EnchantingRecipe recipe, IRecipeSlotsView recipeSlotsView, PoseStack stack, double mouseX, double mouseY) { - animatedProgressArrow.draw(stack, 24, 18); - fuelIndicator.draw(stack, 1, 20); - drawExperience(recipe, stack, 1, background); - drawCookTime(recipe, stack, 45, background); - } -} +//package com.gildedgames.aether.integration.jei.categories; +// +//import com.gildedgames.aether.Aether; +//import com.gildedgames.aether.block.AetherBlocks; +//import com.gildedgames.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.IDrawable; +//import mezz.jei.api.gui.drawable.IDrawableAnimated; +//import mezz.jei.api.gui.drawable.IDrawableStatic; +//import mezz.jei.api.gui.ingredient.IRecipeSlotsView; +//import mezz.jei.api.helpers.IGuiHelper; +//import mezz.jei.api.recipe.IFocusGroup; +//import mezz.jei.api.recipe.RecipeIngredientRole; +//import mezz.jei.api.recipe.RecipeType; +//import mezz.jei.api.recipe.category.IRecipeCategory; +//import net.minecraft.core.NonNullList; +//import net.minecraft.network.chat.Component; +//import net.minecraft.resources.ResourceLocation; +//import net.minecraft.world.item.ItemStack; +//import net.minecraft.world.item.crafting.Ingredient; +// +//public class EnchantingCookingRecipeCategory extends AbstractAetherCookingRecipeCategory implements IRecipeCategory { +// public static final ResourceLocation UID = new ResourceLocation(Aether.MODID, "enchanting"); +// public static final ResourceLocation TEXTURE = new ResourceLocation(Aether.MODID, "textures/gui/menu/altar.png"); +// public static final RecipeType RECIPE_TYPE = RecipeType.create(Aether.MODID, "enchanting", EnchantingRecipe.class); +// +// private final IDrawable background; +// private final IDrawable fuelIndicator; +// private final IDrawable icon; +// private final IDrawableAnimated animatedProgressArrow; +// +// public EnchantingCookingRecipeCategory(IGuiHelper helper) { +// this.background = helper.createDrawable(TEXTURE, 55, 16, 82, 54); +// this.fuelIndicator = helper.createDrawable(TEXTURE, 176, 0, 14, 13); +// this.icon = helper.createDrawableIngredient(VanillaTypes.ITEM_STACK, new ItemStack(AetherBlocks.ALTAR.get())); +// IDrawableStatic progressArrow = helper.createDrawable(TEXTURE, 176, 14, 23, 16 ); +// this.animatedProgressArrow = helper.createAnimatedDrawable(progressArrow, 100, IDrawableAnimated.StartDirection.LEFT, false); +// } +// +// @Override +// public Component getTitle() { +// return Component.translatable("gui." + Aether.MODID + ".jei.altar.enchanting"); +// } +// +// @Override +// public IDrawable getBackground() { +// return this.background; +// } +// +// @Override +// public IDrawable getIcon() { +// return this.icon; +// } +// +// public ResourceLocation getUid() { +// return UID; +// } +// +// @Override +// public RecipeType getRecipeType() { +// return RECIPE_TYPE; +// } +// +// @Override +// public void setRecipe(IRecipeLayoutBuilder builder, EnchantingRecipe recipe, IFocusGroup focusGroup) { +// NonNullList recipeIngredients = recipe.getIngredients(); +// +// builder.addSlot(RecipeIngredientRole.INPUT, 1, 1).addIngredients(recipeIngredients.get(0)); +// builder.addSlot(RecipeIngredientRole.OUTPUT, 61, 19).addItemStack(recipe.getResultItem()); +// } +// +// @Override +// public void draw(EnchantingRecipe recipe, IRecipeSlotsView recipeSlotsView, PoseStack stack, double mouseX, double mouseY) { +// animatedProgressArrow.draw(stack, 24, 18); +// fuelIndicator.draw(stack, 1, 20); +// drawExperience(recipe, stack, 1, background); +// drawCookTime(recipe, stack, 45, background); +// } +//} diff --git a/src/main/java/com/gildedgames/aether/integration/jei/categories/FreezingRecipeCategory.java b/src/main/java/com/gildedgames/aether/integration/jei/categories/FreezingRecipeCategory.java index 6ca7070245..1c8c368e0f 100644 --- a/src/main/java/com/gildedgames/aether/integration/jei/categories/FreezingRecipeCategory.java +++ b/src/main/java/com/gildedgames/aether/integration/jei/categories/FreezingRecipeCategory.java @@ -1,81 +1,81 @@ -package com.gildedgames.aether.integration.jei.categories; - -import com.gildedgames.aether.Aether; -import com.gildedgames.aether.block.AetherBlocks; -import com.gildedgames.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.IDrawable; -import mezz.jei.api.gui.drawable.IDrawableAnimated; -import mezz.jei.api.gui.drawable.IDrawableStatic; -import mezz.jei.api.gui.ingredient.IRecipeSlotsView; -import mezz.jei.api.helpers.IGuiHelper; -import mezz.jei.api.recipe.IFocusGroup; -import mezz.jei.api.recipe.RecipeIngredientRole; -import mezz.jei.api.recipe.RecipeType; -import mezz.jei.api.recipe.category.IRecipeCategory; -import net.minecraft.core.NonNullList; -import net.minecraft.network.chat.Component; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.crafting.Ingredient; - -public class FreezingRecipeCategory extends AbstractAetherCookingRecipeCategory implements IRecipeCategory { - public static final ResourceLocation UID = new ResourceLocation(Aether.MODID, "freezing"); - public static final ResourceLocation TEXTURE = new ResourceLocation(Aether.MODID, "textures/gui/menu/freezer.png"); - public static final RecipeType RECIPE_TYPE = RecipeType.create(Aether.MODID, "freezing", FreezingRecipe.class); - - private final IDrawable background; - private final IDrawable fuelIndicator; - private final IDrawable icon; - private final IDrawableAnimated animatedProgressArrow; - - public FreezingRecipeCategory(IGuiHelper helper) { - this.background = helper.createDrawable(TEXTURE, 55, 16, 82, 54); - this.fuelIndicator = helper.createDrawable(TEXTURE, 176, 0, 14, 13); - this.icon = helper.createDrawableIngredient(VanillaTypes.ITEM_STACK, new ItemStack(AetherBlocks.FREEZER.get())); - IDrawableStatic progressArrow = helper.createDrawable(TEXTURE, 176, 14, 23, 16 ); - this.animatedProgressArrow = helper.createAnimatedDrawable(progressArrow, 100, IDrawableAnimated.StartDirection.LEFT, false); - } - - @Override - public Component getTitle() { - return Component.translatable("gui." + Aether.MODID + ".jei.freezing"); - } - - @Override - public IDrawable getBackground() { - return this.background; - } - - @Override - public IDrawable getIcon() { - return this.icon; - } - - public ResourceLocation getUid() { - return UID; - } - - @Override - public RecipeType getRecipeType() { - return RECIPE_TYPE; - } - - @Override - public void setRecipe(IRecipeLayoutBuilder builder, FreezingRecipe recipe, IFocusGroup focusGroup) { - NonNullList recipeIngredients = recipe.getIngredients(); - - builder.addSlot(RecipeIngredientRole.INPUT, 1, 1).addIngredients(recipeIngredients.get(0)); - builder.addSlot(RecipeIngredientRole.OUTPUT, 61, 19).addItemStack(recipe.getResultItem()); - } - - @Override - public void draw(FreezingRecipe recipe, IRecipeSlotsView recipeSlotsView, PoseStack stack, double mouseX, double mouseY) { - animatedProgressArrow.draw(stack, 24, 18); - fuelIndicator.draw(stack, 1, 20); - drawExperience(recipe, stack, 1, background); - drawCookTime(recipe, stack, 45, background); - } -} +//package com.gildedgames.aether.integration.jei.categories; +// +//import com.gildedgames.aether.Aether; +//import com.gildedgames.aether.block.AetherBlocks; +//import com.gildedgames.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.IDrawable; +//import mezz.jei.api.gui.drawable.IDrawableAnimated; +//import mezz.jei.api.gui.drawable.IDrawableStatic; +//import mezz.jei.api.gui.ingredient.IRecipeSlotsView; +//import mezz.jei.api.helpers.IGuiHelper; +//import mezz.jei.api.recipe.IFocusGroup; +//import mezz.jei.api.recipe.RecipeIngredientRole; +//import mezz.jei.api.recipe.RecipeType; +//import mezz.jei.api.recipe.category.IRecipeCategory; +//import net.minecraft.core.NonNullList; +//import net.minecraft.network.chat.Component; +//import net.minecraft.resources.ResourceLocation; +//import net.minecraft.world.item.ItemStack; +//import net.minecraft.world.item.crafting.Ingredient; +// +//public class FreezingRecipeCategory extends AbstractAetherCookingRecipeCategory implements IRecipeCategory { +// public static final ResourceLocation UID = new ResourceLocation(Aether.MODID, "freezing"); +// public static final ResourceLocation TEXTURE = new ResourceLocation(Aether.MODID, "textures/gui/menu/freezer.png"); +// public static final RecipeType RECIPE_TYPE = RecipeType.create(Aether.MODID, "freezing", FreezingRecipe.class); +// +// private final IDrawable background; +// private final IDrawable fuelIndicator; +// private final IDrawable icon; +// private final IDrawableAnimated animatedProgressArrow; +// +// public FreezingRecipeCategory(IGuiHelper helper) { +// this.background = helper.createDrawable(TEXTURE, 55, 16, 82, 54); +// this.fuelIndicator = helper.createDrawable(TEXTURE, 176, 0, 14, 13); +// this.icon = helper.createDrawableIngredient(VanillaTypes.ITEM_STACK, new ItemStack(AetherBlocks.FREEZER.get())); +// IDrawableStatic progressArrow = helper.createDrawable(TEXTURE, 176, 14, 23, 16 ); +// this.animatedProgressArrow = helper.createAnimatedDrawable(progressArrow, 100, IDrawableAnimated.StartDirection.LEFT, false); +// } +// +// @Override +// public Component getTitle() { +// return Component.translatable("gui." + Aether.MODID + ".jei.freezing"); +// } +// +// @Override +// public IDrawable getBackground() { +// return this.background; +// } +// +// @Override +// public IDrawable getIcon() { +// return this.icon; +// } +// +// public ResourceLocation getUid() { +// return UID; +// } +// +// @Override +// public RecipeType getRecipeType() { +// return RECIPE_TYPE; +// } +// +// @Override +// public void setRecipe(IRecipeLayoutBuilder builder, FreezingRecipe recipe, IFocusGroup focusGroup) { +// NonNullList recipeIngredients = recipe.getIngredients(); +// +// builder.addSlot(RecipeIngredientRole.INPUT, 1, 1).addIngredients(recipeIngredients.get(0)); +// builder.addSlot(RecipeIngredientRole.OUTPUT, 61, 19).addItemStack(recipe.getResultItem()); +// } +// +// @Override +// public void draw(FreezingRecipe recipe, IRecipeSlotsView recipeSlotsView, PoseStack stack, double mouseX, double mouseY) { +// animatedProgressArrow.draw(stack, 24, 18); +// fuelIndicator.draw(stack, 1, 20); +// drawExperience(recipe, stack, 1, background); +// drawCookTime(recipe, stack, 45, background); +// } +//} diff --git a/src/main/java/com/gildedgames/aether/integration/jei/categories/IncubationRecipeCategory.java b/src/main/java/com/gildedgames/aether/integration/jei/categories/IncubationRecipeCategory.java index dd0b44dd4a..fc6db4f2d6 100644 --- a/src/main/java/com/gildedgames/aether/integration/jei/categories/IncubationRecipeCategory.java +++ b/src/main/java/com/gildedgames/aether/integration/jei/categories/IncubationRecipeCategory.java @@ -1,93 +1,93 @@ -package com.gildedgames.aether.integration.jei.categories; - -import com.gildedgames.aether.Aether; -import com.gildedgames.aether.block.AetherBlocks; -import com.gildedgames.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.IDrawable; -import mezz.jei.api.gui.drawable.IDrawableAnimated; -import mezz.jei.api.gui.drawable.IDrawableStatic; -import mezz.jei.api.gui.ingredient.IRecipeSlotsView; -import mezz.jei.api.helpers.IGuiHelper; -import mezz.jei.api.recipe.IFocusGroup; -import mezz.jei.api.recipe.RecipeIngredientRole; -import mezz.jei.api.recipe.RecipeType; -import mezz.jei.api.recipe.category.IRecipeCategory; -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.Font; -import net.minecraft.core.NonNullList; -import net.minecraft.network.chat.Component; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.crafting.Ingredient; - -public class IncubationRecipeCategory implements IRecipeCategory { - public static final ResourceLocation UID = new ResourceLocation(Aether.MODID, "incubation"); - public static final ResourceLocation TEXTURE = new ResourceLocation(Aether.MODID, "textures/gui/menu/incubator.png"); - public static final RecipeType RECIPE_TYPE = RecipeType.create(Aether.MODID, "incubation", IncubationRecipe.class); - - private final IDrawable background; - private final IDrawable fuelIndicator; - private final IDrawable icon; - private final IDrawableAnimated animatedProgressArrow; - - public IncubationRecipeCategory(IGuiHelper helper) { - this.background = helper.createDrawable(TEXTURE, 72, 16, 70, 54); - this.fuelIndicator = helper.createDrawable(TEXTURE, 176, 0, 14, 13); - this.icon = helper.createDrawableIngredient(VanillaTypes.ITEM_STACK, new ItemStack(AetherBlocks.INCUBATOR.get())); - IDrawableStatic progressArrow = helper.createDrawable(TEXTURE, 179, 16, 10, 54 ); - this.animatedProgressArrow = helper.createAnimatedDrawable(progressArrow, 5700, IDrawableAnimated.StartDirection.BOTTOM, false); - } - - @Override - public Component getTitle() { - return Component.translatable("gui." + Aether.MODID + ".jei.incubating"); - } - - @Override - public IDrawable getBackground() { - return this.background; - } - - @Override - public IDrawable getIcon() { - return this.icon; - } - - public ResourceLocation getUid() { - return UID; - } - - @Override - public RecipeType getRecipeType() { - return RECIPE_TYPE; - } - - @Override - public void setRecipe(IRecipeLayoutBuilder builder, IncubationRecipe recipe, IFocusGroup focusGroup) { - NonNullList recipeIngredients = recipe.getIngredients(); - - builder.addSlot(RecipeIngredientRole.INPUT, 1, 1).addIngredients(recipeIngredients.get(0)); - } - - @Override - public void draw(IncubationRecipe recipe, IRecipeSlotsView recipeSlotsView, PoseStack stack, double mouseX, double mouseY) { - animatedProgressArrow.draw(stack, 31, 0); - fuelIndicator.draw(stack, 1, 20); - drawIncubationTime(recipe, stack, 45); - } - - protected void drawIncubationTime(IncubationRecipe recipe, PoseStack poseStack, int y) { - int incubationTime = recipe.getIncubationTime(); - if (incubationTime > 0) { - int incubationTimeSeconds = incubationTime / 20; - Component timeString = Component.translatable("gui.jei.category.smelting.time.seconds", incubationTimeSeconds); - Minecraft minecraft = Minecraft.getInstance(); - Font fontRenderer = minecraft.font; - int stringWidth = fontRenderer.width(timeString); - fontRenderer.draw(poseStack, timeString, background.getWidth() - stringWidth, y, 0xFF808080); - } - } -} +//package com.gildedgames.aether.integration.jei.categories; +// +//import com.gildedgames.aether.Aether; +//import com.gildedgames.aether.block.AetherBlocks; +//import com.gildedgames.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.IDrawable; +//import mezz.jei.api.gui.drawable.IDrawableAnimated; +//import mezz.jei.api.gui.drawable.IDrawableStatic; +//import mezz.jei.api.gui.ingredient.IRecipeSlotsView; +//import mezz.jei.api.helpers.IGuiHelper; +//import mezz.jei.api.recipe.IFocusGroup; +//import mezz.jei.api.recipe.RecipeIngredientRole; +//import mezz.jei.api.recipe.RecipeType; +//import mezz.jei.api.recipe.category.IRecipeCategory; +//import net.minecraft.client.Minecraft; +//import net.minecraft.client.gui.Font; +//import net.minecraft.core.NonNullList; +//import net.minecraft.network.chat.Component; +//import net.minecraft.resources.ResourceLocation; +//import net.minecraft.world.item.ItemStack; +//import net.minecraft.world.item.crafting.Ingredient; +// +//public class IncubationRecipeCategory implements IRecipeCategory { +// public static final ResourceLocation UID = new ResourceLocation(Aether.MODID, "incubation"); +// public static final ResourceLocation TEXTURE = new ResourceLocation(Aether.MODID, "textures/gui/menu/incubator.png"); +// public static final RecipeType RECIPE_TYPE = RecipeType.create(Aether.MODID, "incubation", IncubationRecipe.class); +// +// private final IDrawable background; +// private final IDrawable fuelIndicator; +// private final IDrawable icon; +// private final IDrawableAnimated animatedProgressArrow; +// +// public IncubationRecipeCategory(IGuiHelper helper) { +// this.background = helper.createDrawable(TEXTURE, 72, 16, 70, 54); +// this.fuelIndicator = helper.createDrawable(TEXTURE, 176, 0, 14, 13); +// this.icon = helper.createDrawableIngredient(VanillaTypes.ITEM_STACK, new ItemStack(AetherBlocks.INCUBATOR.get())); +// IDrawableStatic progressArrow = helper.createDrawable(TEXTURE, 179, 16, 10, 54 ); +// this.animatedProgressArrow = helper.createAnimatedDrawable(progressArrow, 5700, IDrawableAnimated.StartDirection.BOTTOM, false); +// } +// +// @Override +// public Component getTitle() { +// return Component.translatable("gui." + Aether.MODID + ".jei.incubating"); +// } +// +// @Override +// public IDrawable getBackground() { +// return this.background; +// } +// +// @Override +// public IDrawable getIcon() { +// return this.icon; +// } +// +// public ResourceLocation getUid() { +// return UID; +// } +// +// @Override +// public RecipeType getRecipeType() { +// return RECIPE_TYPE; +// } +// +// @Override +// public void setRecipe(IRecipeLayoutBuilder builder, IncubationRecipe recipe, IFocusGroup focusGroup) { +// NonNullList recipeIngredients = recipe.getIngredients(); +// +// builder.addSlot(RecipeIngredientRole.INPUT, 1, 1).addIngredients(recipeIngredients.get(0)); +// } +// +// @Override +// public void draw(IncubationRecipe recipe, IRecipeSlotsView recipeSlotsView, PoseStack stack, double mouseX, double mouseY) { +// animatedProgressArrow.draw(stack, 31, 0); +// fuelIndicator.draw(stack, 1, 20); +// drawIncubationTime(recipe, stack, 45); +// } +// +// protected void drawIncubationTime(IncubationRecipe recipe, PoseStack poseStack, int y) { +// int incubationTime = recipe.getIncubationTime(); +// if (incubationTime > 0) { +// int incubationTimeSeconds = incubationTime / 20; +// Component timeString = Component.translatable("gui.jei.category.smelting.time.seconds", incubationTimeSeconds); +// Minecraft minecraft = Minecraft.getInstance(); +// Font fontRenderer = minecraft.font; +// int stringWidth = fontRenderer.width(timeString); +// fontRenderer.draw(poseStack, timeString, background.getWidth() - stringWidth, y, 0xFF808080); +// } +// } +//} diff --git a/src/main/java/com/gildedgames/aether/integration/jei/categories/fuel/AetherFuelCategory.java b/src/main/java/com/gildedgames/aether/integration/jei/categories/fuel/AetherFuelCategory.java index dfd1bbd9c8..fbf0cbaec6 100644 --- a/src/main/java/com/gildedgames/aether/integration/jei/categories/fuel/AetherFuelCategory.java +++ b/src/main/java/com/gildedgames/aether/integration/jei/categories/fuel/AetherFuelCategory.java @@ -1,111 +1,111 @@ -package com.gildedgames.aether.integration.jei.categories.fuel; - -import com.gildedgames.aether.Aether; -import com.gildedgames.aether.block.AetherBlocks; -import com.google.common.cache.CacheBuilder; -import com.google.common.cache.CacheLoader; -import com.google.common.cache.LoadingCache; -import com.mojang.blaze3d.vertex.PoseStack; -import mezz.jei.api.gui.builder.IRecipeLayoutBuilder; -import mezz.jei.api.gui.drawable.IDrawable; -import mezz.jei.api.gui.drawable.IDrawableAnimated; -import mezz.jei.api.gui.ingredient.IRecipeSlotsView; -import mezz.jei.api.helpers.IGuiHelper; -import mezz.jei.api.recipe.IFocusGroup; -import mezz.jei.api.recipe.RecipeIngredientRole; -import mezz.jei.api.recipe.RecipeType; -import mezz.jei.api.recipe.category.IRecipeCategory; -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.Font; -import net.minecraft.network.chat.Component; -import net.minecraft.resources.ResourceLocation; - -import java.util.Comparator; -import java.util.List; - -public class AetherFuelCategory implements IRecipeCategory { - public static final ResourceLocation TEXTURE = new ResourceLocation(Aether.MODID, "textures/gui/menu/altar.png"); - public static final RecipeType RECIPE_TYPE = RecipeType.create(Aether.MODID, "fueling", AetherFuelRecipe.class); - - private final IDrawable background; - private final IDrawable icon; - private final LoadingCache cachedFuelIndicator; - - public AetherFuelCategory(IGuiHelper helper) { - - List craftingStations = List.of( - AetherBlocks.ALTAR.get().getName().getString(), - AetherBlocks.FREEZER.get().getName().getString(), - AetherBlocks.INCUBATOR.get().getName().getString() - ); - String longestString = craftingStations.stream().max(Comparator.comparingInt(String::length)).get(); - Component longestStationName = Component.literal(longestString); - - Minecraft minecraft = Minecraft.getInstance(); - Font fontRenderer = minecraft.font; - Component maxBurnTimeText = createBurnTimeText(10000, longestStationName); - int maxStringWidth = fontRenderer.width(maxBurnTimeText.getString()); - int backgroundHeight = 34; - int textPadding = 20; - - this.background = helper.drawableBuilder(TEXTURE, 55, 36, 18, backgroundHeight) - .addPadding(0, 0, 0, textPadding + maxStringWidth) - .build(); - this.icon = helper.createDrawable(TEXTURE, 176, 0, 14, 13); - - this.cachedFuelIndicator = CacheBuilder.newBuilder() - .maximumSize(25) - .build(new CacheLoader<>() { - @Override - public IDrawableAnimated load(Integer burnTime) { - return helper.drawableBuilder(TEXTURE, 176, 0, 14, 13) - .buildAnimated(burnTime, IDrawableAnimated.StartDirection.TOP, true); - } - }); - } - - @Override - public RecipeType getRecipeType() { - return RECIPE_TYPE; - } - - @Override - public Component getTitle() { - return Component.translatable("gui." + Aether.MODID + ".jei.fuel"); - } - - @Override - public IDrawable getBackground() { - return this.background; - } - - @Override - public IDrawable getIcon() { - return this.icon; - } - - public void setRecipe(IRecipeLayoutBuilder builder, AetherFuelRecipe recipe, IFocusGroup focuses) { - builder.addSlot(RecipeIngredientRole.INPUT, 1, 17) - .addItemStacks(recipe.getInput()); - } - - @Override - public void draw(AetherFuelRecipe recipe, IRecipeSlotsView recipeSlotsView, PoseStack stack, double mouseX, double mouseY) { - int burnTime = recipe.getBurnTime(); - IDrawableAnimated fuelIndicator = cachedFuelIndicator.getUnchecked(burnTime); - fuelIndicator.draw(stack, 1, 0); - - Minecraft minecraft = Minecraft.getInstance(); - Font font = minecraft.font; - Component burnTimeText = createBurnTimeText(recipe.getBurnTime(), recipe.getUsage().getName()); - int stringWidth = font.width(burnTimeText); - font.draw(stack, burnTimeText, background.getWidth() - stringWidth, 14, 0xFF808080); - } - - private static Component createBurnTimeText(int burnTime, Component usage) { - return Component.translatable("gui.jei.category.smelting.time.seconds", burnTime / 20) - .append(" (") - .append(usage) - .append(")"); - } -} +//package com.gildedgames.aether.integration.jei.categories.fuel; +// +//import com.gildedgames.aether.Aether; +//import com.gildedgames.aether.block.AetherBlocks; +//import com.google.common.cache.CacheBuilder; +//import com.google.common.cache.CacheLoader; +//import com.google.common.cache.LoadingCache; +//import com.mojang.blaze3d.vertex.PoseStack; +//import mezz.jei.api.gui.builder.IRecipeLayoutBuilder; +//import mezz.jei.api.gui.drawable.IDrawable; +//import mezz.jei.api.gui.drawable.IDrawableAnimated; +//import mezz.jei.api.gui.ingredient.IRecipeSlotsView; +//import mezz.jei.api.helpers.IGuiHelper; +//import mezz.jei.api.recipe.IFocusGroup; +//import mezz.jei.api.recipe.RecipeIngredientRole; +//import mezz.jei.api.recipe.RecipeType; +//import mezz.jei.api.recipe.category.IRecipeCategory; +//import net.minecraft.client.Minecraft; +//import net.minecraft.client.gui.Font; +//import net.minecraft.network.chat.Component; +//import net.minecraft.resources.ResourceLocation; +// +//import java.util.Comparator; +//import java.util.List; +// +//public class AetherFuelCategory implements IRecipeCategory { +// public static final ResourceLocation TEXTURE = new ResourceLocation(Aether.MODID, "textures/gui/menu/altar.png"); +// public static final RecipeType RECIPE_TYPE = RecipeType.create(Aether.MODID, "fueling", AetherFuelRecipe.class); +// +// private final IDrawable background; +// private final IDrawable icon; +// private final LoadingCache cachedFuelIndicator; +// +// public AetherFuelCategory(IGuiHelper helper) { +// +// List craftingStations = List.of( +// AetherBlocks.ALTAR.get().getName().getString(), +// AetherBlocks.FREEZER.get().getName().getString(), +// AetherBlocks.INCUBATOR.get().getName().getString() +// ); +// String longestString = craftingStations.stream().max(Comparator.comparingInt(String::length)).get(); +// Component longestStationName = Component.literal(longestString); +// +// Minecraft minecraft = Minecraft.getInstance(); +// Font fontRenderer = minecraft.font; +// Component maxBurnTimeText = createBurnTimeText(10000, longestStationName); +// int maxStringWidth = fontRenderer.width(maxBurnTimeText.getString()); +// int backgroundHeight = 34; +// int textPadding = 20; +// +// this.background = helper.drawableBuilder(TEXTURE, 55, 36, 18, backgroundHeight) +// .addPadding(0, 0, 0, textPadding + maxStringWidth) +// .build(); +// this.icon = helper.createDrawable(TEXTURE, 176, 0, 14, 13); +// +// this.cachedFuelIndicator = CacheBuilder.newBuilder() +// .maximumSize(25) +// .build(new CacheLoader<>() { +// @Override +// public IDrawableAnimated load(Integer burnTime) { +// return helper.drawableBuilder(TEXTURE, 176, 0, 14, 13) +// .buildAnimated(burnTime, IDrawableAnimated.StartDirection.TOP, true); +// } +// }); +// } +// +// @Override +// public RecipeType getRecipeType() { +// return RECIPE_TYPE; +// } +// +// @Override +// public Component getTitle() { +// return Component.translatable("gui." + Aether.MODID + ".jei.fuel"); +// } +// +// @Override +// public IDrawable getBackground() { +// return this.background; +// } +// +// @Override +// public IDrawable getIcon() { +// return this.icon; +// } +// +// public void setRecipe(IRecipeLayoutBuilder builder, AetherFuelRecipe recipe, IFocusGroup focuses) { +// builder.addSlot(RecipeIngredientRole.INPUT, 1, 17) +// .addItemStacks(recipe.getInput()); +// } +// +// @Override +// public void draw(AetherFuelRecipe recipe, IRecipeSlotsView recipeSlotsView, PoseStack stack, double mouseX, double mouseY) { +// int burnTime = recipe.getBurnTime(); +// IDrawableAnimated fuelIndicator = cachedFuelIndicator.getUnchecked(burnTime); +// fuelIndicator.draw(stack, 1, 0); +// +// Minecraft minecraft = Minecraft.getInstance(); +// Font font = minecraft.font; +// Component burnTimeText = createBurnTimeText(recipe.getBurnTime(), recipe.getUsage().getName()); +// int stringWidth = font.width(burnTimeText); +// font.draw(stack, burnTimeText, background.getWidth() - stringWidth, 14, 0xFF808080); +// } +// +// private static Component createBurnTimeText(int burnTime, Component usage) { +// return Component.translatable("gui.jei.category.smelting.time.seconds", burnTime / 20) +// .append(" (") +// .append(usage) +// .append(")"); +// } +//} diff --git a/src/main/java/com/gildedgames/aether/integration/jei/categories/fuel/AetherFuelRecipe.java b/src/main/java/com/gildedgames/aether/integration/jei/categories/fuel/AetherFuelRecipe.java index 73f78ea317..cc609b7f46 100644 --- a/src/main/java/com/gildedgames/aether/integration/jei/categories/fuel/AetherFuelRecipe.java +++ b/src/main/java/com/gildedgames/aether/integration/jei/categories/fuel/AetherFuelRecipe.java @@ -1,33 +1,33 @@ -package com.gildedgames.aether.integration.jei.categories.fuel; - -import com.google.common.base.Preconditions; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.level.block.Block; - -import java.util.Collection; -import java.util.List; - -public class AetherFuelRecipe { - private final List inputs; - private final int burnTime; - private final Block usage; - - public AetherFuelRecipe(Collection input, int burnTime, Block usage) { - Preconditions.checkArgument(burnTime > 0, "burn time must be greater than 0"); - this.inputs = List.copyOf(input); - this.burnTime = burnTime; - this.usage = usage; - } - - public List getInput() { - return inputs; - } - - public int getBurnTime() { - return burnTime; - } - - public Block getUsage() { - return usage; - } -} +//package com.gildedgames.aether.integration.jei.categories.fuel; +// +//import com.google.common.base.Preconditions; +//import net.minecraft.world.item.ItemStack; +//import net.minecraft.world.level.block.Block; +// +//import java.util.Collection; +//import java.util.List; +// +//public class AetherFuelRecipe { +// private final List inputs; +// private final int burnTime; +// private final Block usage; +// +// public AetherFuelRecipe(Collection input, int burnTime, Block usage) { +// Preconditions.checkArgument(burnTime > 0, "burn time must be greater than 0"); +// this.inputs = List.copyOf(input); +// this.burnTime = burnTime; +// this.usage = usage; +// } +// +// public List getInput() { +// return inputs; +// } +// +// public int getBurnTime() { +// return burnTime; +// } +// +// public Block getUsage() { +// return usage; +// } +//} diff --git a/src/main/java/com/gildedgames/aether/integration/jei/categories/fuel/AetherFuelRecipeMaker.java b/src/main/java/com/gildedgames/aether/integration/jei/categories/fuel/AetherFuelRecipeMaker.java index 14be68bc23..933b398e8e 100644 --- a/src/main/java/com/gildedgames/aether/integration/jei/categories/fuel/AetherFuelRecipeMaker.java +++ b/src/main/java/com/gildedgames/aether/integration/jei/categories/fuel/AetherFuelRecipeMaker.java @@ -1,29 +1,29 @@ -package com.gildedgames.aether.integration.jei.categories.fuel; - -import com.gildedgames.aether.block.AetherBlocks; -import com.gildedgames.aether.blockentity.AltarBlockEntity; -import com.gildedgames.aether.blockentity.FreezerBlockEntity; -import com.gildedgames.aether.blockentity.IncubatorBlockEntity; -import net.minecraft.world.item.ItemStack; - -import java.util.ArrayList; -import java.util.List; - -public final class AetherFuelRecipeMaker { - - private AetherFuelRecipeMaker() { - } - - public static List getFuelRecipes() { - List fuelRecipes = new ArrayList<>(); - - AltarBlockEntity.getEnchantingMap().forEach((item, burnTime) -> - fuelRecipes.add(new AetherFuelRecipe(List.of(new ItemStack(item)), burnTime, AetherBlocks.ALTAR.get()))); - FreezerBlockEntity.getFreezingMap().forEach((item, burnTime) -> - fuelRecipes.add(new AetherFuelRecipe(List.of(new ItemStack(item)), burnTime, AetherBlocks.FREEZER.get()))); - IncubatorBlockEntity.getIncubatingMap().forEach((item, burnTime) -> - fuelRecipes.add(new AetherFuelRecipe(List.of(new ItemStack(item)), burnTime, AetherBlocks.INCUBATOR.get()))); - - return fuelRecipes; - } -} +//package com.gildedgames.aether.integration.jei.categories.fuel; +// +//import com.gildedgames.aether.block.AetherBlocks; +//import com.gildedgames.aether.blockentity.AltarBlockEntity; +//import com.gildedgames.aether.blockentity.FreezerBlockEntity; +//import com.gildedgames.aether.blockentity.IncubatorBlockEntity; +//import net.minecraft.world.item.ItemStack; +// +//import java.util.ArrayList; +//import java.util.List; +// +//public final class AetherFuelRecipeMaker { +// +// private AetherFuelRecipeMaker() { +// } +// +// public static List getFuelRecipes() { +// List fuelRecipes = new ArrayList<>(); +// +// AltarBlockEntity.getEnchantingMap().forEach((item, burnTime) -> +// fuelRecipes.add(new AetherFuelRecipe(List.of(new ItemStack(item)), burnTime, AetherBlocks.ALTAR.get()))); +// FreezerBlockEntity.getFreezingMap().forEach((item, burnTime) -> +// fuelRecipes.add(new AetherFuelRecipe(List.of(new ItemStack(item)), burnTime, AetherBlocks.FREEZER.get()))); +// IncubatorBlockEntity.getIncubatingMap().forEach((item, burnTime) -> +// fuelRecipes.add(new AetherFuelRecipe(List.of(new ItemStack(item)), burnTime, AetherBlocks.INCUBATOR.get()))); +// +// return fuelRecipes; +// } +//} diff --git a/src/main/java/com/gildedgames/aether/inventory/menu/AccessoriesMenu.java b/src/main/java/com/gildedgames/aether/inventory/menu/AccessoriesMenu.java index 7b5949aa25..66a61c93a3 100644 --- a/src/main/java/com/gildedgames/aether/inventory/menu/AccessoriesMenu.java +++ b/src/main/java/com/gildedgames/aether/inventory/menu/AccessoriesMenu.java @@ -66,7 +66,7 @@ public class AccessoriesMenu extends InventoryMenu { private final CraftingContainer craftMatrix = new CraftingContainer(this, 2, 2); private final ResultContainer craftResult = new ResultContainer(); - public boolean hasButton; + public final boolean hasButton; public AccessoriesMenu(int containerId, Inventory playerInventory) { this(containerId, playerInventory, true); diff --git a/src/main/java/com/gildedgames/aether/inventory/menu/IncubatorMenu.java b/src/main/java/com/gildedgames/aether/inventory/menu/IncubatorMenu.java index 33e1714d35..e49d982d20 100644 --- a/src/main/java/com/gildedgames/aether/inventory/menu/IncubatorMenu.java +++ b/src/main/java/com/gildedgames/aether/inventory/menu/IncubatorMenu.java @@ -4,7 +4,9 @@ import com.gildedgames.aether.inventory.AetherRecipeBookTypes; import com.gildedgames.aether.inventory.menu.slot.IncubatorFuelSlot; +import com.gildedgames.aether.inventory.menu.slot.IncubatorItemSlot; import com.gildedgames.aether.recipe.AetherRecipeTypes; +import net.minecraft.core.BlockPos; import net.minecraft.world.entity.player.Player; import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.Container; @@ -21,17 +23,17 @@ public class IncubatorMenu extends RecipeBookMenu { public final Level level; public IncubatorMenu(int containerId, Inventory playerInventory) { - this(containerId, playerInventory, new SimpleContainer(2), new SimpleContainerData(4)); + this(containerId, playerInventory, new SimpleContainer(2), new SimpleContainerData(7)); } public IncubatorMenu(int containerId, Inventory playerInventory, Container container, ContainerData data) { super(AetherMenuTypes.INCUBATOR.get(), containerId); checkContainerSize(container, 2); - checkContainerDataCount(data, 4); + checkContainerDataCount(data, 7); this.container = container; this.data = data; this.level = playerInventory.player.getLevel(); - this.addSlot(new Slot(container, 0, 73, 17)); + 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) { for (int j = 0; j < 9; ++j) { @@ -150,6 +152,13 @@ public int getIncubationTimeRemaining() { return (this.data.get(0) * 11) / i; } + public BlockPos getIncubatorPos() { + int x = this.data.get(4); + int y = this.data.get(5); + int z = this.data.get(6); + return new BlockPos(x, y, z); + } + @Override public RecipeBookType getRecipeBookType() { return AetherRecipeBookTypes.INCUBATOR; diff --git a/src/main/java/com/gildedgames/aether/inventory/menu/slot/IncubatorItemSlot.java b/src/main/java/com/gildedgames/aether/inventory/menu/slot/IncubatorItemSlot.java new file mode 100644 index 0000000000..afb2bcf8d0 --- /dev/null +++ b/src/main/java/com/gildedgames/aether/inventory/menu/slot/IncubatorItemSlot.java @@ -0,0 +1,38 @@ +package com.gildedgames.aether.inventory.menu.slot; + +import com.gildedgames.aether.blockentity.IncubatorBlockEntity; +import com.gildedgames.aether.inventory.menu.IncubatorMenu; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.Container; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.inventory.Slot; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.block.entity.BlockEntity; + +public class IncubatorItemSlot extends Slot { + private final IncubatorMenu menu; + private final Player player; + + public IncubatorItemSlot(IncubatorMenu menu, Container container, int slot, int x, int y, Player player) { + super(container, slot, x, y); + this.menu = menu; + this.player = player; + } + + /** + * Stores the player who deposits an item to this slot to a value within the Incubator. + * @param stack The {@link ItemStack} being put in the slot. + */ + @Override + 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()); + if (blockEntity instanceof IncubatorBlockEntity incubator) { + incubator.setPlayer(serverPlayer); + } + } + } + super.set(stack); + } +} diff --git a/src/main/java/com/gildedgames/aether/item/AetherCreativeTabs.java b/src/main/java/com/gildedgames/aether/item/AetherCreativeTabs.java new file mode 100644 index 0000000000..61e02e74b3 --- /dev/null +++ b/src/main/java/com/gildedgames/aether/item/AetherCreativeTabs.java @@ -0,0 +1,437 @@ +package com.gildedgames.aether.item; + +import com.gildedgames.aether.Aether; +import com.gildedgames.aether.AetherConfig; +import com.gildedgames.aether.block.AetherBlocks; +import net.minecraft.network.chat.Component; +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.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; + +import java.util.List; + +@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; + + @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, hasPermissions) -> { + 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, hasPermissions) -> { + 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, hasPermissions) -> { + 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.PINK_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, hasPermissions) -> { + 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, hasPermissions) -> { + 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, hasPermissions) -> { + 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_NOTCH.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.ORANGE_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.MUSIC_DISC_WELCOMING_SKIES.get()); + output.accept(AetherItems.MUSIC_DISC_LEGACY.get()); + output.accept(AetherItems.MUSIC_DISC_CHINCHILLA.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, hasPermissions) -> { + 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()); + output.accept(AetherItems.VALKYRIE_CAPE.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, hasPermissions) -> { + output.accept(AetherItems.BLUE_BERRY.get()); + output.accept(AetherItems.ENCHANTED_BERRY.get()); + output.accept(AetherItems.WHITE_APPLE.get()); + if (AetherConfig.COMMON.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, hasPermissions) -> { + 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, hasPermissions) -> { + output.accept(AetherItems.BLUE_MOA_EGG.get()); + output.accept(AetherItems.WHITE_MOA_EGG.get()); + output.accept(AetherItems.BLACK_MOA_EGG.get()); + output.accept(AetherItems.ORANGE_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()); + })); + } + + @SubscribeEvent + public static void buildCreativeModeTabs(CreativeModeTabEvent.BuildContents event) { + CreativeModeTab tab = event.getTab(); + 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); + event.getEntries().putAfter(new ItemStack(Items.IRON_BOOTS), new ItemStack(AetherItems.IRON_GLOVES.get()), CreativeModeTab.TabVisibility.PARENT_AND_SEARCH_TABS); + event.getEntries().putAfter(new ItemStack(Items.GOLDEN_BOOTS), new ItemStack(AetherItems.GOLDEN_GLOVES.get()), CreativeModeTab.TabVisibility.PARENT_AND_SEARCH_TABS); + event.getEntries().putAfter(new ItemStack(Items.DIAMOND_BOOTS), new ItemStack(AetherItems.DIAMOND_GLOVES.get()), CreativeModeTab.TabVisibility.PARENT_AND_SEARCH_TABS); + event.getEntries().putAfter(new ItemStack(Items.NETHERITE_BOOTS), new ItemStack(AetherItems.NETHERITE_GLOVES.get()), CreativeModeTab.TabVisibility.PARENT_AND_SEARCH_TABS); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/gildedgames/aether/item/AetherItemGroups.java b/src/main/java/com/gildedgames/aether/item/AetherItemGroups.java deleted file mode 100644 index c1e8dd1662..0000000000 --- a/src/main/java/com/gildedgames/aether/item/AetherItemGroups.java +++ /dev/null @@ -1,66 +0,0 @@ -package com.gildedgames.aether.item; - -import com.gildedgames.aether.block.AetherBlocks; -import net.minecraft.world.item.CreativeModeTab; -import net.minecraft.world.item.ItemStack; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; - -public class AetherItemGroups { - public static final CreativeModeTab AETHER_BLOCKS = new CreativeModeTab("aether_blocks") { - @Override - @OnlyIn(Dist.CLIENT) - public ItemStack makeIcon() { - return new ItemStack(AetherBlocks.AETHER_GRASS_BLOCK.get()); - } - }; - public static final CreativeModeTab AETHER_TOOLS = new CreativeModeTab("aether_tools") { - @Override - @OnlyIn(Dist.CLIENT) - public ItemStack makeIcon() { - return new ItemStack(AetherItems.GRAVITITE_PICKAXE.get()); - } - }; - public static final CreativeModeTab AETHER_WEAPONS = new CreativeModeTab("aether_weapons") { - @Override - @OnlyIn(Dist.CLIENT) - public ItemStack makeIcon() { - return new ItemStack(AetherItems.GRAVITITE_SWORD.get()); - } - }; - public static final CreativeModeTab AETHER_ARMOR = new CreativeModeTab("aether_armor") { - @Override - @OnlyIn(Dist.CLIENT) - public ItemStack makeIcon() { - return new ItemStack(AetherItems.GRAVITITE_HELMET.get()); - } - }; - public static final CreativeModeTab AETHER_FOOD = new CreativeModeTab("aether_food") { - @Override - @OnlyIn(Dist.CLIENT) - public ItemStack makeIcon() { - return new ItemStack(AetherItems.BLUE_BERRY.get()); - } - }; - public static final CreativeModeTab AETHER_ACCESSORIES = new CreativeModeTab("aether_accessories") { - @Override - @OnlyIn(Dist.CLIENT) - public ItemStack makeIcon() { - return new ItemStack(AetherItems.GRAVITITE_GLOVES.get()); - } - }; - public static final CreativeModeTab AETHER_MATERIALS = new CreativeModeTab("aether_materials") { - @Override - @OnlyIn(Dist.CLIENT) - public ItemStack makeIcon() { - return new ItemStack(AetherItems.AMBROSIUM_SHARD.get()); - } - }; - public static final CreativeModeTab AETHER_MISC = new CreativeModeTab("aether_misc") { - @Override - @OnlyIn(Dist.CLIENT) - public ItemStack makeIcon() { - return new ItemStack(AetherItems.BRONZE_DUNGEON_KEY.get()); - } - }; -} \ No newline at end of file diff --git a/src/main/java/com/gildedgames/aether/item/AetherItems.java b/src/main/java/com/gildedgames/aether/item/AetherItems.java index d76c9a62a0..19e2d19b6f 100644 --- a/src/main/java/com/gildedgames/aether/item/AetherItems.java +++ b/src/main/java/com/gildedgames/aether/item/AetherItems.java @@ -2,6 +2,9 @@ import com.gildedgames.aether.client.AetherSoundEvents; import com.gildedgames.aether.Aether; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.Style; +import net.minecraft.network.chat.TextColor; import net.minecraft.world.item.*; import com.gildedgames.aether.item.food.*; import com.gildedgames.aether.item.accessories.ring.*; @@ -39,6 +42,10 @@ public class AetherItems { public static final Rarity AETHER_LOOT = Rarity.create("AETHER_LOOT", ChatFormatting.GREEN); + public static final Component BRONZE_DUNGEON_TOOLTIP = Component.translatable("aether.dungeon.bronze_dungeon").withStyle(Style.EMPTY.withItalic(true).withColor(TextColor.parseColor("#D9AB7E"))); + public static final Component SILVER_DUNGEON_TOOLTIP = Component.translatable("aether.dungeon.silver_dungeon").withStyle(Style.EMPTY.withItalic(true).withColor(TextColor.parseColor("#E0E0E0"))); + public static final Component GOLD_DUNGEON_TOOLTIP = Component.translatable("aether.dungeon.gold_dungeon").withStyle(Style.EMPTY.withItalic(true).withColor(TextColor.parseColor("#FDF55F"))); + // Tools public static final RegistryObject SKYROOT_PICKAXE = ITEMS.register("skyroot_pickaxe", SkyrootPickaxeItem::new); public static final RegistryObject SKYROOT_AXE = ITEMS.register("skyroot_axe", SkyrootAxeItem::new); @@ -71,182 +78,182 @@ public class AetherItems { public static final RegistryObject ZANITE_SWORD = ITEMS.register("zanite_sword", ZaniteSwordItem::new); public static final RegistryObject GRAVITITE_SWORD = ITEMS.register("gravitite_sword", GravititeSwordItem::new); - public static final RegistryObject VALKYRIE_LANCE = ITEMS.register("valkyrie_lance", ValkyrieLanceItem::new); + public static final RegistryObject VALKYRIE_LANCE = ITEMS.register("valkyrie_lance", () -> new ValkyrieLanceItem().addDungeonTooltip(BRONZE_DUNGEON_TOOLTIP)); - public static final RegistryObject FLAMING_SWORD = ITEMS.register("flaming_sword", FlamingSwordItem::new); - public static final RegistryObject LIGHTNING_SWORD = ITEMS.register("lightning_sword", LightningSwordItem::new); - public static final RegistryObject HOLY_SWORD = ITEMS.register("holy_sword", HolySwordItem::new); - public static final RegistryObject VAMPIRE_BLADE = ITEMS.register("vampire_blade", VampireBladeItem::new); - public static final RegistryObject PIG_SLAYER = ITEMS.register("pig_slayer", PigSlayerItem::new); + public static final RegistryObject FLAMING_SWORD = ITEMS.register("flaming_sword", () -> new FlamingSwordItem().addDungeonTooltip(BRONZE_DUNGEON_TOOLTIP)); + public static final RegistryObject LIGHTNING_SWORD = ITEMS.register("lightning_sword", () -> new LightningSwordItem().addDungeonTooltip(SILVER_DUNGEON_TOOLTIP)); + public static final RegistryObject HOLY_SWORD = ITEMS.register("holy_sword", () -> new HolySwordItem().addDungeonTooltip(SILVER_DUNGEON_TOOLTIP)); + public static final RegistryObject VAMPIRE_BLADE = ITEMS.register("vampire_blade", () -> new VampireBladeItem().addDungeonTooltip(GOLD_DUNGEON_TOOLTIP)); + public static final RegistryObject PIG_SLAYER = ITEMS.register("pig_slayer", () -> new PigSlayerItem().addDungeonTooltip(GOLD_DUNGEON_TOOLTIP)); public static final RegistryObject CANDY_CANE_SWORD = ITEMS.register("candy_cane_sword", CandyCaneSwordItem::new); - public static final RegistryObject HAMMER_OF_NOTCH = ITEMS.register("hammer_of_notch", HammerOfNotchItem::new); + public static final RegistryObject HAMMER_OF_NOTCH = ITEMS.register("hammer_of_notch", () -> new HammerOfNotchItem().addDungeonTooltip(BRONZE_DUNGEON_TOOLTIP)); public static final RegistryObject LIGHTNING_KNIFE = ITEMS.register("lightning_knife", LightningKnifeItem::new); - public static final RegistryObject GOLDEN_DART = ITEMS.register("golden_dart", () -> new DartItem(AetherEntityTypes.GOLDEN_DART, new Item.Properties().tab(AetherItemGroups.AETHER_WEAPONS))); - public static final RegistryObject POISON_DART = ITEMS.register("poison_dart", () -> new DartItem(AetherEntityTypes.POISON_DART, new Item.Properties().tab(AetherItemGroups.AETHER_WEAPONS))); - public static final RegistryObject ENCHANTED_DART = ITEMS.register("enchanted_dart", () -> new DartItem(AetherEntityTypes.ENCHANTED_DART, new Item.Properties().rarity(Rarity.RARE).tab(AetherItemGroups.AETHER_WEAPONS))); + public static final RegistryObject GOLDEN_DART = ITEMS.register("golden_dart", () -> new DartItem(AetherEntityTypes.GOLDEN_DART, new Item.Properties())); + public static final RegistryObject POISON_DART = ITEMS.register("poison_dart", () -> new DartItem(AetherEntityTypes.POISON_DART, new Item.Properties())); + public static final RegistryObject ENCHANTED_DART = ITEMS.register("enchanted_dart", () -> new DartItem(AetherEntityTypes.ENCHANTED_DART, new Item.Properties().rarity(Rarity.RARE))); - public static final RegistryObject GOLDEN_DART_SHOOTER = ITEMS.register("golden_dart_shooter", () -> new DartShooterItem(GOLDEN_DART, new Item.Properties().stacksTo(1).tab(AetherItemGroups.AETHER_WEAPONS))); - public static final RegistryObject POISON_DART_SHOOTER = ITEMS.register("poison_dart_shooter", () -> new DartShooterItem(POISON_DART, new Item.Properties().stacksTo(1).tab(AetherItemGroups.AETHER_WEAPONS))); - public static final RegistryObject ENCHANTED_DART_SHOOTER = ITEMS.register("enchanted_dart_shooter", () -> new DartShooterItem(ENCHANTED_DART, new Item.Properties().stacksTo(1).rarity(Rarity.RARE).tab(AetherItemGroups.AETHER_WEAPONS))); + public static final RegistryObject GOLDEN_DART_SHOOTER = ITEMS.register("golden_dart_shooter", () -> new DartShooterItem(GOLDEN_DART, new Item.Properties().stacksTo(1))); + public static final RegistryObject POISON_DART_SHOOTER = ITEMS.register("poison_dart_shooter", () -> new DartShooterItem(POISON_DART, new Item.Properties().stacksTo(1))); + public static final RegistryObject ENCHANTED_DART_SHOOTER = ITEMS.register("enchanted_dart_shooter", () -> new DartShooterItem(ENCHANTED_DART, new Item.Properties().stacksTo(1).rarity(Rarity.RARE))); public static final RegistryObject PHOENIX_BOW = ITEMS.register("phoenix_bow", PhoenixBowItem::new); // Armor - public static final RegistryObject ZANITE_HELMET = ITEMS.register("zanite_helmet", () -> new AetherArmorItem(AetherArmorMaterials.ZANITE, EquipmentSlot.HEAD, new Item.Properties().tab(AetherItemGroups.AETHER_ARMOR))); - public static final RegistryObject ZANITE_CHESTPLATE = ITEMS.register("zanite_chestplate", () -> new AetherArmorItem(AetherArmorMaterials.ZANITE, EquipmentSlot.CHEST, new Item.Properties().tab(AetherItemGroups.AETHER_ARMOR))); - public static final RegistryObject ZANITE_LEGGINGS = ITEMS.register("zanite_leggings", () -> new AetherArmorItem(AetherArmorMaterials.ZANITE, EquipmentSlot.LEGS, new Item.Properties().tab(AetherItemGroups.AETHER_ARMOR))); - public static final RegistryObject ZANITE_BOOTS = ITEMS.register("zanite_boots", () -> new AetherArmorItem(AetherArmorMaterials.ZANITE, EquipmentSlot.FEET, new Item.Properties().tab(AetherItemGroups.AETHER_ARMOR))); - - public static final RegistryObject GRAVITITE_HELMET = ITEMS.register("gravitite_helmet", () -> new AetherArmorItem(AetherArmorMaterials.GRAVITITE, EquipmentSlot.HEAD, new Item.Properties().tab(AetherItemGroups.AETHER_ARMOR))); - public static final RegistryObject GRAVITITE_CHESTPLATE = ITEMS.register("gravitite_chestplate", () -> new AetherArmorItem(AetherArmorMaterials.GRAVITITE, EquipmentSlot.CHEST, new Item.Properties().tab(AetherItemGroups.AETHER_ARMOR))); - public static final RegistryObject GRAVITITE_LEGGINGS = ITEMS.register("gravitite_leggings", () -> new AetherArmorItem(AetherArmorMaterials.GRAVITITE, EquipmentSlot.LEGS, new Item.Properties().tab(AetherItemGroups.AETHER_ARMOR))); - public static final RegistryObject GRAVITITE_BOOTS = ITEMS.register("gravitite_boots", () -> new AetherArmorItem(AetherArmorMaterials.GRAVITITE, EquipmentSlot.FEET, new Item.Properties().tab(AetherItemGroups.AETHER_ARMOR))); - - public static final RegistryObject NEPTUNE_HELMET = ITEMS.register("neptune_helmet", () -> new AetherArmorItem(AetherArmorMaterials.NEPTUNE, EquipmentSlot.HEAD, new Item.Properties().rarity(AETHER_LOOT).tab(AetherItemGroups.AETHER_ARMOR))); - public static final RegistryObject NEPTUNE_CHESTPLATE = ITEMS.register("neptune_chestplate", () -> new AetherArmorItem(AetherArmorMaterials.NEPTUNE, EquipmentSlot.CHEST, new Item.Properties().rarity(AETHER_LOOT).tab(AetherItemGroups.AETHER_ARMOR))); - public static final RegistryObject NEPTUNE_LEGGINGS = ITEMS.register("neptune_leggings", () -> new AetherArmorItem(AetherArmorMaterials.NEPTUNE, EquipmentSlot.LEGS, new Item.Properties().rarity(AETHER_LOOT).tab(AetherItemGroups.AETHER_ARMOR))); - public static final RegistryObject NEPTUNE_BOOTS = ITEMS.register("neptune_boots", () -> new AetherArmorItem(AetherArmorMaterials.NEPTUNE, EquipmentSlot.FEET, new Item.Properties().rarity(AETHER_LOOT).tab(AetherItemGroups.AETHER_ARMOR))); - - public static final RegistryObject PHOENIX_HELMET = ITEMS.register("phoenix_helmet", () -> new AetherArmorItem(AetherArmorMaterials.PHOENIX, EquipmentSlot.HEAD, new Item.Properties().rarity(AETHER_LOOT).fireResistant().tab(AetherItemGroups.AETHER_ARMOR))); - public static final RegistryObject PHOENIX_CHESTPLATE = ITEMS.register("phoenix_chestplate", () -> new AetherArmorItem(AetherArmorMaterials.PHOENIX, EquipmentSlot.CHEST, new Item.Properties().rarity(AETHER_LOOT).fireResistant().tab(AetherItemGroups.AETHER_ARMOR))); - public static final RegistryObject PHOENIX_LEGGINGS = ITEMS.register("phoenix_leggings", () -> new AetherArmorItem(AetherArmorMaterials.PHOENIX, EquipmentSlot.LEGS, new Item.Properties().rarity(AETHER_LOOT).fireResistant().tab(AetherItemGroups.AETHER_ARMOR))); - public static final RegistryObject PHOENIX_BOOTS = ITEMS.register("phoenix_boots", () -> new AetherArmorItem(AetherArmorMaterials.PHOENIX, EquipmentSlot.FEET, new Item.Properties().rarity(AETHER_LOOT).fireResistant().tab(AetherItemGroups.AETHER_ARMOR))); - - public static final RegistryObject OBSIDIAN_HELMET = ITEMS.register("obsidian_helmet", () -> new AetherArmorItem(AetherArmorMaterials.OBSIDIAN, EquipmentSlot.HEAD, new Item.Properties().rarity(AETHER_LOOT).tab(AetherItemGroups.AETHER_ARMOR))); - public static final RegistryObject OBSIDIAN_CHESTPLATE = ITEMS.register("obsidian_chestplate", () -> new AetherArmorItem(AetherArmorMaterials.OBSIDIAN, EquipmentSlot.CHEST, new Item.Properties().rarity(AETHER_LOOT).tab(AetherItemGroups.AETHER_ARMOR))); - public static final RegistryObject OBSIDIAN_LEGGINGS = ITEMS.register("obsidian_leggings", () -> new AetherArmorItem(AetherArmorMaterials.OBSIDIAN, EquipmentSlot.LEGS, new Item.Properties().rarity(AETHER_LOOT).tab(AetherItemGroups.AETHER_ARMOR))); - public static final RegistryObject OBSIDIAN_BOOTS = ITEMS.register("obsidian_boots", () -> new AetherArmorItem(AetherArmorMaterials.OBSIDIAN, EquipmentSlot.FEET, new Item.Properties().rarity(AETHER_LOOT).tab(AetherItemGroups.AETHER_ARMOR))); - - public static final RegistryObject VALKYRIE_HELMET = ITEMS.register("valkyrie_helmet", () -> new AetherArmorItem(AetherArmorMaterials.VALKYRIE, EquipmentSlot.HEAD, new Item.Properties().rarity(AETHER_LOOT).tab(AetherItemGroups.AETHER_ARMOR))); - public static final RegistryObject VALKYRIE_CHESTPLATE = ITEMS.register("valkyrie_chestplate", () -> new AetherArmorItem(AetherArmorMaterials.VALKYRIE, EquipmentSlot.CHEST, new Item.Properties().rarity(AETHER_LOOT).tab(AetherItemGroups.AETHER_ARMOR))); - public static final RegistryObject VALKYRIE_LEGGINGS = ITEMS.register("valkyrie_leggings", () -> new AetherArmorItem(AetherArmorMaterials.VALKYRIE, EquipmentSlot.LEGS, new Item.Properties().rarity(AETHER_LOOT).tab(AetherItemGroups.AETHER_ARMOR))); - public static final RegistryObject VALKYRIE_BOOTS = ITEMS.register("valkyrie_boots", () -> new AetherArmorItem(AetherArmorMaterials.VALKYRIE, EquipmentSlot.FEET, new Item.Properties().rarity(AETHER_LOOT).tab(AetherItemGroups.AETHER_ARMOR))); - - public static final RegistryObject SENTRY_BOOTS = ITEMS.register("sentry_boots", () -> new AetherArmorItem(AetherArmorMaterials.SENTRY, EquipmentSlot.FEET, new Item.Properties().rarity(AETHER_LOOT).tab(AetherItemGroups.AETHER_ARMOR))); + public static final RegistryObject ZANITE_HELMET = ITEMS.register("zanite_helmet", () -> new AetherArmorItem(AetherArmorMaterials.ZANITE, EquipmentSlot.HEAD, new Item.Properties())); + public static final RegistryObject ZANITE_CHESTPLATE = ITEMS.register("zanite_chestplate", () -> new AetherArmorItem(AetherArmorMaterials.ZANITE, EquipmentSlot.CHEST, new Item.Properties())); + public static final RegistryObject ZANITE_LEGGINGS = ITEMS.register("zanite_leggings", () -> new AetherArmorItem(AetherArmorMaterials.ZANITE, EquipmentSlot.LEGS, new Item.Properties())); + public static final RegistryObject ZANITE_BOOTS = ITEMS.register("zanite_boots", () -> new AetherArmorItem(AetherArmorMaterials.ZANITE, EquipmentSlot.FEET, new Item.Properties())); + + public static final RegistryObject GRAVITITE_HELMET = ITEMS.register("gravitite_helmet", () -> new AetherArmorItem(AetherArmorMaterials.GRAVITITE, EquipmentSlot.HEAD, new Item.Properties())); + public static final RegistryObject GRAVITITE_CHESTPLATE = ITEMS.register("gravitite_chestplate", () -> new AetherArmorItem(AetherArmorMaterials.GRAVITITE, EquipmentSlot.CHEST, new Item.Properties())); + public static final RegistryObject GRAVITITE_LEGGINGS = ITEMS.register("gravitite_leggings", () -> new AetherArmorItem(AetherArmorMaterials.GRAVITITE, EquipmentSlot.LEGS, new Item.Properties())); + public static final RegistryObject GRAVITITE_BOOTS = ITEMS.register("gravitite_boots", () -> new AetherArmorItem(AetherArmorMaterials.GRAVITITE, EquipmentSlot.FEET, new Item.Properties())); + + public static final RegistryObject VALKYRIE_HELMET = ITEMS.register("valkyrie_helmet", () -> new AetherArmorItem(AetherArmorMaterials.VALKYRIE, EquipmentSlot.HEAD, new Item.Properties().rarity(AETHER_LOOT)).addDungeonTooltip(SILVER_DUNGEON_TOOLTIP)); + public static final RegistryObject VALKYRIE_CHESTPLATE = ITEMS.register("valkyrie_chestplate", () -> new AetherArmorItem(AetherArmorMaterials.VALKYRIE, EquipmentSlot.CHEST, new Item.Properties().rarity(AETHER_LOOT)).addDungeonTooltip(SILVER_DUNGEON_TOOLTIP)); + public static final RegistryObject VALKYRIE_LEGGINGS = ITEMS.register("valkyrie_leggings", () -> new AetherArmorItem(AetherArmorMaterials.VALKYRIE, EquipmentSlot.LEGS, new Item.Properties().rarity(AETHER_LOOT)).addDungeonTooltip(SILVER_DUNGEON_TOOLTIP)); + public static final RegistryObject VALKYRIE_BOOTS = ITEMS.register("valkyrie_boots", () -> new AetherArmorItem(AetherArmorMaterials.VALKYRIE, EquipmentSlot.FEET, new Item.Properties().rarity(AETHER_LOOT)).addDungeonTooltip(SILVER_DUNGEON_TOOLTIP)); + + public static final RegistryObject NEPTUNE_HELMET = ITEMS.register("neptune_helmet", () -> new AetherArmorItem(AetherArmorMaterials.NEPTUNE, EquipmentSlot.HEAD, new Item.Properties().rarity(AETHER_LOOT)).addDungeonTooltip(SILVER_DUNGEON_TOOLTIP)); + public static final RegistryObject NEPTUNE_CHESTPLATE = ITEMS.register("neptune_chestplate", () -> new AetherArmorItem(AetherArmorMaterials.NEPTUNE, EquipmentSlot.CHEST, new Item.Properties().rarity(AETHER_LOOT)).addDungeonTooltip(SILVER_DUNGEON_TOOLTIP)); + public static final RegistryObject NEPTUNE_LEGGINGS = ITEMS.register("neptune_leggings", () -> new AetherArmorItem(AetherArmorMaterials.NEPTUNE, EquipmentSlot.LEGS, new Item.Properties().rarity(AETHER_LOOT)).addDungeonTooltip(SILVER_DUNGEON_TOOLTIP)); + public static final RegistryObject NEPTUNE_BOOTS = ITEMS.register("neptune_boots", () -> new AetherArmorItem(AetherArmorMaterials.NEPTUNE, EquipmentSlot.FEET, new Item.Properties().rarity(AETHER_LOOT)).addDungeonTooltip(SILVER_DUNGEON_TOOLTIP)); + + public static final RegistryObject PHOENIX_HELMET = ITEMS.register("phoenix_helmet", () -> new AetherArmorItem(AetherArmorMaterials.PHOENIX, EquipmentSlot.HEAD, new Item.Properties().rarity(AETHER_LOOT).fireResistant()).addDungeonTooltip(GOLD_DUNGEON_TOOLTIP)); + public static final RegistryObject PHOENIX_CHESTPLATE = ITEMS.register("phoenix_chestplate", () -> new AetherArmorItem(AetherArmorMaterials.PHOENIX, EquipmentSlot.CHEST, new Item.Properties().rarity(AETHER_LOOT).fireResistant()).addDungeonTooltip(GOLD_DUNGEON_TOOLTIP)); + public static final RegistryObject PHOENIX_LEGGINGS = ITEMS.register("phoenix_leggings", () -> new AetherArmorItem(AetherArmorMaterials.PHOENIX, EquipmentSlot.LEGS, new Item.Properties().rarity(AETHER_LOOT).fireResistant()).addDungeonTooltip(GOLD_DUNGEON_TOOLTIP)); + public static final RegistryObject PHOENIX_BOOTS = ITEMS.register("phoenix_boots", () -> new AetherArmorItem(AetherArmorMaterials.PHOENIX, EquipmentSlot.FEET, new Item.Properties().rarity(AETHER_LOOT).fireResistant()).addDungeonTooltip(GOLD_DUNGEON_TOOLTIP)); + + public static final RegistryObject OBSIDIAN_HELMET = ITEMS.register("obsidian_helmet", () -> new AetherArmorItem(AetherArmorMaterials.OBSIDIAN, EquipmentSlot.HEAD, new Item.Properties().rarity(AETHER_LOOT))); + public static final RegistryObject OBSIDIAN_CHESTPLATE = ITEMS.register("obsidian_chestplate", () -> new AetherArmorItem(AetherArmorMaterials.OBSIDIAN, EquipmentSlot.CHEST, new Item.Properties().rarity(AETHER_LOOT))); + public static final RegistryObject OBSIDIAN_LEGGINGS = ITEMS.register("obsidian_leggings", () -> new AetherArmorItem(AetherArmorMaterials.OBSIDIAN, EquipmentSlot.LEGS, new Item.Properties().rarity(AETHER_LOOT))); + public static final RegistryObject OBSIDIAN_BOOTS = ITEMS.register("obsidian_boots", () -> new AetherArmorItem(AetherArmorMaterials.OBSIDIAN, EquipmentSlot.FEET, new Item.Properties().rarity(AETHER_LOOT))); + + public static final RegistryObject SENTRY_BOOTS = ITEMS.register("sentry_boots", () -> new AetherArmorItem(AetherArmorMaterials.SENTRY, EquipmentSlot.FEET, new Item.Properties().rarity(AETHER_LOOT)).addDungeonTooltip(BRONZE_DUNGEON_TOOLTIP)); // Food - public static final RegistryObject BLUE_BERRY = ITEMS.register("blue_berry", () -> new Item(new Item.Properties().food(AetherFoods.BLUE_BERRY).tab(AetherItemGroups.AETHER_FOOD))); - public static final RegistryObject ENCHANTED_BERRY = ITEMS.register("enchanted_berry", () -> new Item(new Item.Properties().rarity(Rarity.RARE).food(AetherFoods.ENCHANTED_BERRY).tab(AetherItemGroups.AETHER_FOOD))); + public static final RegistryObject BLUE_BERRY = ITEMS.register("blue_berry", () -> new Item(new Item.Properties().food(AetherFoods.BLUE_BERRY))); + public static final RegistryObject ENCHANTED_BERRY = ITEMS.register("enchanted_berry", () -> new Item(new Item.Properties().rarity(Rarity.RARE).food(AetherFoods.ENCHANTED_BERRY))); public static final RegistryObject WHITE_APPLE = ITEMS.register("white_apple", WhiteAppleItem::new); public static final RegistryObject BLUE_GUMMY_SWET = ITEMS.register("blue_gummy_swet", GummySwetItem::new); public static final RegistryObject GOLDEN_GUMMY_SWET = ITEMS.register("golden_gummy_swet", GummySwetItem::new); public static final RegistryObject HEALING_STONE = ITEMS.register("healing_stone", HealingStoneItem::new); - public static final RegistryObject CANDY_CANE = ITEMS.register("candy_cane", () -> new Item(new Item.Properties().food(AetherFoods.CANDY_CANE).tab(AetherItemGroups.AETHER_FOOD))); - public static final RegistryObject GINGERBREAD_MAN = ITEMS.register("gingerbread_man", () -> new Item(new Item.Properties().food(AetherFoods.GINGERBREAD_MAN).tab(AetherItemGroups.AETHER_FOOD))); + public static final RegistryObject CANDY_CANE = ITEMS.register("candy_cane", () -> new Item(new Item.Properties().food(AetherFoods.CANDY_CANE))); + public static final RegistryObject GINGERBREAD_MAN = ITEMS.register("gingerbread_man", () -> new Item(new Item.Properties().food(AetherFoods.GINGERBREAD_MAN))); // Accessories - public static final RegistryObject IRON_RING = ITEMS.register("iron_ring", () -> new RingItem(AetherSoundEvents.ITEM_ACCESSORY_EQUIP_IRON_RING, new Item.Properties().stacksTo(1).tab(AetherItemGroups.AETHER_ACCESSORIES))); - public static final RegistryObject GOLDEN_RING = ITEMS.register("golden_ring", () -> new RingItem(AetherSoundEvents.ITEM_ACCESSORY_EQUIP_GOLD_RING, new Item.Properties().stacksTo(1).tab(AetherItemGroups.AETHER_ACCESSORIES))); - public static final RegistryObject ZANITE_RING = ITEMS.register("zanite_ring", () -> new ZaniteRingItem(new Item.Properties().durability(49).tab(AetherItemGroups.AETHER_ACCESSORIES))); - public static final RegistryObject ICE_RING = ITEMS.register("ice_ring", () -> new IceRingItem(new Item.Properties().durability(125).tab(AetherItemGroups.AETHER_ACCESSORIES))); - - public static final RegistryObject IRON_PENDANT = ITEMS.register("iron_pendant", () -> new PendantItem("iron_pendant", AetherSoundEvents.ITEM_ACCESSORY_EQUIP_IRON_PENDANT, new Item.Properties().stacksTo(1).tab(AetherItemGroups.AETHER_ACCESSORIES))); - public static final RegistryObject GOLDEN_PENDANT = ITEMS.register("golden_pendant", () -> new PendantItem("golden_pendant", AetherSoundEvents.ITEM_ACCESSORY_EQUIP_GOLD_PENDANT, new Item.Properties().stacksTo(1).tab(AetherItemGroups.AETHER_ACCESSORIES))); - public static final RegistryObject ZANITE_PENDANT = ITEMS.register("zanite_pendant", () -> new ZanitePendantItem(new Item.Properties().durability(98).tab(AetherItemGroups.AETHER_ACCESSORIES))); - public static final RegistryObject ICE_PENDANT = ITEMS.register("ice_pendant", () -> new IcePendantItem(new Item.Properties().durability(250).tab(AetherItemGroups.AETHER_ACCESSORIES))); - - public static final RegistryObject LEATHER_GLOVES = ITEMS.register("leather_gloves", () -> new LeatherGlovesItem(0.25, new Item.Properties().durability(59).tab(AetherItemGroups.AETHER_ACCESSORIES))); - 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).tab(AetherItemGroups.AETHER_ACCESSORIES))); - 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).tab(AetherItemGroups.AETHER_ACCESSORIES))); - public static final RegistryObject GOLDEN_GLOVES = ITEMS.register("golden_gloves", () -> new GoldGlovesItem(0.25, new Item.Properties().durability(32).tab(AetherItemGroups.AETHER_ACCESSORIES))); - 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).tab(AetherItemGroups.AETHER_ACCESSORIES))); - 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().tab(AetherItemGroups.AETHER_ACCESSORIES))); - public static final RegistryObject ZANITE_GLOVES = ITEMS.register("zanite_gloves", () -> new ZaniteGlovesItem(0.5, new Item.Properties().durability(250).tab(AetherItemGroups.AETHER_ACCESSORIES))); - 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).tab(AetherItemGroups.AETHER_ACCESSORIES))); - public static final RegistryObject NEPTUNE_GLOVES = ITEMS.register("neptune_gloves", () -> new GlovesItem(1.0, "neptune_gloves", AetherSoundEvents.ITEM_ARMOR_EQUIP_NEPTUNE, new Item.Properties().stacksTo(1).rarity(AETHER_LOOT).durability(2031).tab(AetherItemGroups.AETHER_ACCESSORIES))); - 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(2031).tab(AetherItemGroups.AETHER_ACCESSORIES))); - 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).tab(AetherItemGroups.AETHER_ACCESSORIES))); - 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(2031).tab(AetherItemGroups.AETHER_ACCESSORIES))); - - public static final RegistryObject RED_CAPE = ITEMS.register("red_cape", () -> new CapeItem("red_cape", new Item.Properties().stacksTo(1).tab(AetherItemGroups.AETHER_ACCESSORIES))); - public static final RegistryObject BLUE_CAPE = ITEMS.register("blue_cape", () -> new CapeItem("blue_cape", new Item.Properties().stacksTo(1).tab(AetherItemGroups.AETHER_ACCESSORIES))); - public static final RegistryObject YELLOW_CAPE = ITEMS.register("yellow_cape", () -> new CapeItem("yellow_cape", new Item.Properties().stacksTo(1).tab(AetherItemGroups.AETHER_ACCESSORIES))); - public static final RegistryObject WHITE_CAPE = ITEMS.register("white_cape", () -> new CapeItem("white_cape", new Item.Properties().stacksTo(1).tab(AetherItemGroups.AETHER_ACCESSORIES))); - public static final RegistryObject SWET_CAPE = ITEMS.register("swet_cape", () -> new CapeItem("swet_cape", new Item.Properties().stacksTo(1).tab(AetherItemGroups.AETHER_ACCESSORIES))); - public static final RegistryObject INVISIBILITY_CLOAK = ITEMS.register("invisibility_cloak", () -> new InvisibilityCloakItem(new Item.Properties().stacksTo(1).rarity(AETHER_LOOT).tab(AetherItemGroups.AETHER_ACCESSORIES))); - public static final RegistryObject AGILITY_CAPE = ITEMS.register("agility_cape", () -> new AgilityCapeItem("agility_cape", new Item.Properties().stacksTo(1).rarity(AETHER_LOOT).tab(AetherItemGroups.AETHER_ACCESSORIES))); - public static final RegistryObject VALKYRIE_CAPE = ITEMS.register("valkyrie_cape", () -> new ValkyrieCapeItem(new Item.Properties().stacksTo(1).rarity(AETHER_LOOT).tab(AetherItemGroups.AETHER_ACCESSORIES))); - - public static final RegistryObject GOLDEN_FEATHER = ITEMS.register("golden_feather", () -> new GoldenFeatherItem(new Item.Properties().stacksTo(1).rarity(AETHER_LOOT).tab(AetherItemGroups.AETHER_ACCESSORIES))); - public static final RegistryObject REGENERATION_STONE = ITEMS.register("regeneration_stone", () -> new RegenerationStoneItem(new Item.Properties().stacksTo(1).rarity(AETHER_LOOT).tab(AetherItemGroups.AETHER_ACCESSORIES))); - public static final RegistryObject IRON_BUBBLE = ITEMS.register("iron_bubble", () -> new IronBubbleItem(new Item.Properties().stacksTo(1).rarity(AETHER_LOOT).tab(AetherItemGroups.AETHER_ACCESSORIES))); - public static final RegistryObject SHIELD_OF_REPULSION = ITEMS.register("shield_of_repulsion", () -> new ShieldOfRepulsionItem(new Item.Properties().durability(512).rarity(AETHER_LOOT).tab(AetherItemGroups.AETHER_ACCESSORIES))); + public static final RegistryObject IRON_RING = ITEMS.register("iron_ring", () -> new RingItem(AetherSoundEvents.ITEM_ACCESSORY_EQUIP_IRON_RING, new Item.Properties().stacksTo(1))); + public static final RegistryObject GOLDEN_RING = ITEMS.register("golden_ring", () -> new RingItem(AetherSoundEvents.ITEM_ACCESSORY_EQUIP_GOLD_RING, new Item.Properties().stacksTo(1))); + public static final RegistryObject ZANITE_RING = ITEMS.register("zanite_ring", () -> new ZaniteRingItem(new Item.Properties().durability(49))); + public static final RegistryObject ICE_RING = ITEMS.register("ice_ring", () -> new IceRingItem(new Item.Properties().durability(125))); + + public static final RegistryObject IRON_PENDANT = ITEMS.register("iron_pendant", () -> new PendantItem("iron_pendant", AetherSoundEvents.ITEM_ACCESSORY_EQUIP_IRON_PENDANT, new Item.Properties().stacksTo(1))); + public static final RegistryObject GOLDEN_PENDANT = ITEMS.register("golden_pendant", () -> new PendantItem("golden_pendant", AetherSoundEvents.ITEM_ACCESSORY_EQUIP_GOLD_PENDANT, new Item.Properties().stacksTo(1))); + public static final RegistryObject ZANITE_PENDANT = ITEMS.register("zanite_pendant", () -> new ZanitePendantItem(new Item.Properties().durability(98))); + 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 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 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(2031)).addDungeonTooltip(SILVER_DUNGEON_TOOLTIP)); + public static final RegistryObject NEPTUNE_GLOVES = ITEMS.register("neptune_gloves", () -> new GlovesItem(1.0, "neptune_gloves", AetherSoundEvents.ITEM_ARMOR_EQUIP_NEPTUNE, new Item.Properties().stacksTo(1).rarity(AETHER_LOOT).durability(2031)).addDungeonTooltip(SILVER_DUNGEON_TOOLTIP)); + 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(2031)).addDungeonTooltip(GOLD_DUNGEON_TOOLTIP)); + 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 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))); + public static final RegistryObject YELLOW_CAPE = ITEMS.register("yellow_cape", () -> new CapeItem("yellow_cape", new Item.Properties().stacksTo(1))); + public static final RegistryObject WHITE_CAPE = ITEMS.register("white_cape", () -> new CapeItem("white_cape", new Item.Properties().stacksTo(1))); + public static final RegistryObject AGILITY_CAPE = ITEMS.register("agility_cape", () -> new AgilityCapeItem("agility_cape", new Item.Properties().stacksTo(1).rarity(AETHER_LOOT)).addDungeonTooltip(BRONZE_DUNGEON_TOOLTIP)); + public static final RegistryObject SWET_CAPE = ITEMS.register("swet_cape", () -> new CapeItem("swet_cape", new Item.Properties().stacksTo(1)).addDungeonTooltip(BRONZE_DUNGEON_TOOLTIP)); + public static final RegistryObject INVISIBILITY_CLOAK = ITEMS.register("invisibility_cloak", () -> new InvisibilityCloakItem(new Item.Properties().stacksTo(1).rarity(AETHER_LOOT)).addDungeonTooltip(SILVER_DUNGEON_TOOLTIP)); + public static final RegistryObject VALKYRIE_CAPE = ITEMS.register("valkyrie_cape", () -> new ValkyrieCapeItem(new Item.Properties().stacksTo(1).rarity(AETHER_LOOT)).addDungeonTooltip(SILVER_DUNGEON_TOOLTIP)); + + public static final RegistryObject GOLDEN_FEATHER = ITEMS.register("golden_feather", () -> new GoldenFeatherItem(new Item.Properties().stacksTo(1).rarity(AETHER_LOOT)).addDungeonTooltip(SILVER_DUNGEON_TOOLTIP)); + public static final RegistryObject REGENERATION_STONE = ITEMS.register("regeneration_stone", () -> new RegenerationStoneItem(new Item.Properties().stacksTo(1).rarity(AETHER_LOOT)).addDungeonTooltip(SILVER_DUNGEON_TOOLTIP)); + public static final RegistryObject IRON_BUBBLE = ITEMS.register("iron_bubble", () -> new IronBubbleItem(new Item.Properties().stacksTo(1).rarity(AETHER_LOOT)).addDungeonTooltip(GOLD_DUNGEON_TOOLTIP)); + public static final RegistryObject SHIELD_OF_REPULSION = ITEMS.register("shield_of_repulsion", () -> new ShieldOfRepulsionItem(new Item.Properties().durability(512).rarity(AETHER_LOOT)).addDungeonTooltip(BRONZE_DUNGEON_TOOLTIP)); // Materials - public static final RegistryObject SKYROOT_STICK = ITEMS.register("skyroot_stick", () -> new SkyrootStickItem(new Item.Properties().tab(AetherItemGroups.AETHER_MATERIALS))); - public static final RegistryObject GOLDEN_AMBER = ITEMS.register("golden_amber", () -> new Item(new Item.Properties().tab(AetherItemGroups.AETHER_MATERIALS))); - public static final RegistryObject SWET_BALL = ITEMS.register("swet_ball", () -> new SwetBallItem(new Item.Properties().tab(AetherItemGroups.AETHER_MATERIALS))); - public static final RegistryObject AECHOR_PETAL = ITEMS.register("aechor_petal", () -> new Item(new Item.Properties().tab(AetherItemGroups.AETHER_MATERIALS))); - public static final RegistryObject AMBROSIUM_SHARD = ITEMS.register("ambrosium_shard", () -> new AmbrosiumShardItem(new Item.Properties().tab(AetherItemGroups.AETHER_MATERIALS))); - public static final RegistryObject ZANITE_GEMSTONE = ITEMS.register("zanite_gemstone", () -> new Item(new Item.Properties().tab(AetherItemGroups.AETHER_MATERIALS))); + public static final RegistryObject SKYROOT_STICK = ITEMS.register("skyroot_stick", () -> new SkyrootStickItem(new Item.Properties())); + public static final RegistryObject GOLDEN_AMBER = ITEMS.register("golden_amber", () -> new Item(new Item.Properties())); + public static final RegistryObject SWET_BALL = ITEMS.register("swet_ball", () -> new SwetBallItem(new Item.Properties())); + public static final RegistryObject AECHOR_PETAL = ITEMS.register("aechor_petal", () -> new Item(new Item.Properties())); + public static final RegistryObject AMBROSIUM_SHARD = ITEMS.register("ambrosium_shard", () -> new AmbrosiumShardItem(new Item.Properties())); + public static final RegistryObject ZANITE_GEMSTONE = ITEMS.register("zanite_gemstone", () -> new Item(new Item.Properties())); // Misc - public static final RegistryObject VICTORY_MEDAL = ITEMS.register("victory_medal", () -> new Item(new Item.Properties().stacksTo(10).rarity(AETHER_LOOT).tab(AetherItemGroups.AETHER_MISC))); - - public static final RegistryObject BRONZE_DUNGEON_KEY = ITEMS.register("bronze_dungeon_key", () -> new DungeonKeyItem(new ResourceLocation(Aether.MODID, "bronze"), new Item.Properties().stacksTo(1).rarity(AETHER_LOOT).fireResistant().tab(AetherItemGroups.AETHER_MISC))); - public static final RegistryObject SILVER_DUNGEON_KEY = ITEMS.register("silver_dungeon_key", () -> new DungeonKeyItem(new ResourceLocation(Aether.MODID, "silver"), new Item.Properties().stacksTo(1).rarity(AETHER_LOOT).fireResistant().tab(AetherItemGroups.AETHER_MISC))); - public static final RegistryObject GOLD_DUNGEON_KEY = ITEMS.register("gold_dungeon_key", () -> new DungeonKeyItem(new ResourceLocation(Aether.MODID, "gold"), new Item.Properties().stacksTo(1).rarity(AETHER_LOOT).fireResistant().tab(AetherItemGroups.AETHER_MISC))); - - public static final RegistryObject MUSIC_DISC_AETHER_TUNE = ITEMS.register("music_disc_aether_tune", () -> new RecordItem(1, AetherSoundEvents.ITEM_MUSIC_DISC_AETHER_TUNE, new Item.Properties().stacksTo(1).rarity(Rarity.RARE).tab(AetherItemGroups.AETHER_MISC), 2980)); - public static final RegistryObject MUSIC_DISC_ASCENDING_DAWN = ITEMS.register("music_disc_ascending_dawn", () -> new RecordItem(2, AetherSoundEvents.ITEM_MUSIC_DISC_ASCENDING_DAWN, new Item.Properties().stacksTo(1).rarity(Rarity.RARE).tab(AetherItemGroups.AETHER_MISC), 7000)); - public static final RegistryObject MUSIC_DISC_WELCOMING_SKIES = ITEMS.register("music_disc_welcoming_skies", () -> new RecordItem(3, AetherSoundEvents.ITEM_MUSIC_DISC_WELCOMING_SKIES, new Item.Properties().stacksTo(1).rarity(AETHER_LOOT).tab(AetherItemGroups.AETHER_MISC), 4400)); - public static final RegistryObject MUSIC_DISC_LEGACY = ITEMS.register("music_disc_legacy", () -> new RecordItem(4, AetherSoundEvents.ITEM_MUSIC_DISC_LEGACY, new Item.Properties().stacksTo(1).rarity(Rarity.RARE).tab(AetherItemGroups.AETHER_MISC), 6040)); - public static final RegistryObject MUSIC_DISC_CHINCHILLA = ITEMS.register("music_disc_chinchilla", () -> new RecordItem(5, AetherSoundEvents.ITEM_MUSIC_DISC_CHINCHILLA, new Item.Properties().stacksTo(1).rarity(Rarity.RARE).tab(AetherItemGroups.AETHER_MISC), 3260)); - - public static final RegistryObject SKYROOT_BUCKET = ITEMS.register("skyroot_bucket", () -> new SkyrootBucketItem(() -> Fluids.EMPTY, new Item.Properties().stacksTo(16).tab(AetherItemGroups.AETHER_MISC))); - public static final RegistryObject SKYROOT_WATER_BUCKET = ITEMS.register("skyroot_water_bucket", () -> new SkyrootBucketItem(() -> Fluids.WATER, new Item.Properties().craftRemainder(SKYROOT_BUCKET.get()).stacksTo(1).tab(AetherItemGroups.AETHER_MISC))); - public static final RegistryObject SKYROOT_POISON_BUCKET = ITEMS.register("skyroot_poison_bucket", () -> new SkyrootPoisonBucketItem(new Item.Properties().craftRemainder(SKYROOT_BUCKET.get()).stacksTo(1).tab(AetherItemGroups.AETHER_MISC))); - public static final RegistryObject SKYROOT_REMEDY_BUCKET = ITEMS.register("skyroot_remedy_bucket", () -> new SkyrootRemedyBucketItem(new Item.Properties().craftRemainder(SKYROOT_BUCKET.get()).stacksTo(1).rarity(Rarity.RARE).tab(AetherItemGroups.AETHER_MISC))); - public static final RegistryObject SKYROOT_MILK_BUCKET = ITEMS.register("skyroot_milk_bucket", () -> new SkyrootMilkBucketItem(new Item.Properties().craftRemainder(SKYROOT_BUCKET.get()).stacksTo(1).tab(AetherItemGroups.AETHER_MISC))); - public static final RegistryObject SKYROOT_POWDER_SNOW_BUCKET = ITEMS.register("skyroot_powder_snow_bucket", () -> new SkyrootSolidBucketItem(Blocks.POWDER_SNOW, SoundEvents.BUCKET_EMPTY_POWDER_SNOW, new Item.Properties().craftRemainder(SKYROOT_BUCKET.get()).stacksTo(1).tab(AetherItemGroups.AETHER_MISC))); - public static final RegistryObject SKYROOT_COD_BUCKET = ITEMS.register("skyroot_cod_bucket", () -> new SkyrootMobBucketItem(() -> EntityType.COD, () -> Fluids.WATER, () -> SoundEvents.BUCKET_EMPTY_FISH, new Item.Properties().craftRemainder(SKYROOT_BUCKET.get()).stacksTo(1).tab(AetherItemGroups.AETHER_MISC))); - public static final RegistryObject SKYROOT_SALMON_BUCKET = ITEMS.register("skyroot_salmon_bucket", () -> new SkyrootMobBucketItem(() -> EntityType.SALMON, () -> Fluids.WATER, () -> SoundEvents.BUCKET_EMPTY_FISH, new Item.Properties().craftRemainder(SKYROOT_BUCKET.get()).stacksTo(1).tab(AetherItemGroups.AETHER_MISC))); - public static final RegistryObject SKYROOT_PUFFERFISH_BUCKET = ITEMS.register("skyroot_pufferfish_bucket", () -> new SkyrootMobBucketItem(() -> EntityType.PUFFERFISH, () -> Fluids.WATER, () -> SoundEvents.BUCKET_EMPTY_FISH, new Item.Properties().craftRemainder(SKYROOT_BUCKET.get()).stacksTo(1).tab(AetherItemGroups.AETHER_MISC))); - public static final RegistryObject SKYROOT_TROPICAL_FISH_BUCKET = ITEMS.register("skyroot_tropical_fish_bucket", () -> new SkyrootMobBucketItem(() -> EntityType.TROPICAL_FISH, () -> Fluids.WATER, () -> SoundEvents.BUCKET_EMPTY_FISH, new Item.Properties().craftRemainder(SKYROOT_BUCKET.get()).stacksTo(1).tab(AetherItemGroups.AETHER_MISC))); - public static final RegistryObject SKYROOT_AXOLOTL_BUCKET = ITEMS.register("skyroot_axolotl_bucket", () -> new SkyrootMobBucketItem(() -> EntityType.AXOLOTL, () -> Fluids.WATER, () -> SoundEvents.BUCKET_EMPTY_AXOLOTL, new Item.Properties().craftRemainder(SKYROOT_BUCKET.get()).stacksTo(1).tab(AetherItemGroups.AETHER_MISC))); - public static final RegistryObject SKYROOT_TADPOLE_BUCKET = ITEMS.register("skyroot_tadpole_bucket", () -> new SkyrootMobBucketItem(() -> EntityType.TADPOLE, () -> Fluids.WATER, () -> SoundEvents.BUCKET_EMPTY_TADPOLE, new Item.Properties().craftRemainder(SKYROOT_BUCKET.get()).stacksTo(1).tab(AetherItemGroups.AETHER_MISC))); - - public static final RegistryObject SKYROOT_BOAT = ITEMS.register("skyroot_boat", () -> new SkyrootBoatItem(false, new Item.Properties().stacksTo(1).tab(AetherItemGroups.AETHER_MISC))); - public static final RegistryObject SKYROOT_CHEST_BOAT = ITEMS.register("skyroot_chest_boat", () -> new SkyrootBoatItem(true, new Item.Properties().stacksTo(1).tab(AetherItemGroups.AETHER_MISC))); - - public static final RegistryObject COLD_PARACHUTE = ITEMS.register("cold_parachute", () -> new ParachuteItem(AetherEntityTypes.COLD_PARACHUTE, new Item.Properties().durability(1).tab(AetherItemGroups.AETHER_MISC))); - public static final RegistryObject GOLDEN_PARACHUTE = ITEMS.register("golden_parachute", () -> new ParachuteItem(AetherEntityTypes.GOLDEN_PARACHUTE, new Item.Properties().durability(20).tab(AetherItemGroups.AETHER_MISC))); - - public static final RegistryObject BLUE_MOA_EGG = ITEMS.register("blue_moa_egg", () -> new MoaEggItem(AetherMoaTypes.BLUE, 0x7777FF, new Item.Properties().stacksTo(1).tab(AetherItemGroups.AETHER_MISC))); - public static final RegistryObject WHITE_MOA_EGG = ITEMS.register("white_moa_egg", () -> new MoaEggItem(AetherMoaTypes.WHITE, 0xFFFFFF, new Item.Properties().stacksTo(1).tab(AetherItemGroups.AETHER_MISC))); - public static final RegistryObject BLACK_MOA_EGG = ITEMS.register("black_moa_egg", () -> new MoaEggItem(AetherMoaTypes.BLACK, 0x222222, new Item.Properties().stacksTo(1).tab(AetherItemGroups.AETHER_MISC))); - public static final RegistryObject ORANGE_MOA_EGG = ITEMS.register("orange_moa_egg", () -> new MoaEggItem(AetherMoaTypes.ORANGE, 0xF3C288, new Item.Properties().stacksTo(1).tab(AetherItemGroups.AETHER_MISC))); - - public static final RegistryObject NATURE_STAFF = ITEMS.register("nature_staff", () -> new Item(new Item.Properties().durability(100).rarity(AETHER_LOOT).tab(AetherItemGroups.AETHER_MISC))); + public static final RegistryObject VICTORY_MEDAL = ITEMS.register("victory_medal", () -> new Item(new Item.Properties().stacksTo(10).rarity(AETHER_LOOT))); + + public static final RegistryObject BRONZE_DUNGEON_KEY = ITEMS.register("bronze_dungeon_key", () -> new DungeonKeyItem(new ResourceLocation(Aether.MODID, "bronze"), new Item.Properties().stacksTo(1).rarity(AETHER_LOOT).fireResistant())); + public static final RegistryObject SILVER_DUNGEON_KEY = ITEMS.register("silver_dungeon_key", () -> new DungeonKeyItem(new ResourceLocation(Aether.MODID, "silver"), new Item.Properties().stacksTo(1).rarity(AETHER_LOOT).fireResistant())); + public static final RegistryObject GOLD_DUNGEON_KEY = ITEMS.register("gold_dungeon_key", () -> new DungeonKeyItem(new ResourceLocation(Aether.MODID, "gold"), new Item.Properties().stacksTo(1).rarity(AETHER_LOOT).fireResistant())); + + public static final RegistryObject MUSIC_DISC_AETHER_TUNE = ITEMS.register("music_disc_aether_tune", () -> new AetherRecordItem(1, AetherSoundEvents.ITEM_MUSIC_DISC_AETHER_TUNE, new Item.Properties().stacksTo(1).rarity(Rarity.RARE), 2980).addDungeonTooltip(BRONZE_DUNGEON_TOOLTIP).addDungeonTooltip(SILVER_DUNGEON_TOOLTIP)); + public static final RegistryObject MUSIC_DISC_ASCENDING_DAWN = ITEMS.register("music_disc_ascending_dawn", () -> new AetherRecordItem(2, AetherSoundEvents.ITEM_MUSIC_DISC_ASCENDING_DAWN, new Item.Properties().stacksTo(1).rarity(Rarity.RARE), 7000).addDungeonTooltip(SILVER_DUNGEON_TOOLTIP)); + public static final RegistryObject MUSIC_DISC_WELCOMING_SKIES = ITEMS.register("music_disc_welcoming_skies", () -> new RecordItem(3, AetherSoundEvents.ITEM_MUSIC_DISC_WELCOMING_SKIES, new Item.Properties().stacksTo(1).rarity(AETHER_LOOT), 4400)); + public static final RegistryObject MUSIC_DISC_LEGACY = ITEMS.register("music_disc_legacy", () -> new RecordItem(4, AetherSoundEvents.ITEM_MUSIC_DISC_LEGACY, new Item.Properties().stacksTo(1).rarity(Rarity.RARE), 6040)); + public static final RegistryObject MUSIC_DISC_CHINCHILLA = ITEMS.register("music_disc_chinchilla", () -> new RecordItem(5, AetherSoundEvents.ITEM_MUSIC_DISC_CHINCHILLA, new Item.Properties().stacksTo(1).rarity(Rarity.RARE), 3260)); + + public static final RegistryObject SKYROOT_BUCKET = ITEMS.register("skyroot_bucket", () -> new SkyrootBucketItem(() -> Fluids.EMPTY, new Item.Properties().stacksTo(16))); + public static final RegistryObject SKYROOT_WATER_BUCKET = ITEMS.register("skyroot_water_bucket", () -> new SkyrootBucketItem(() -> Fluids.WATER, new Item.Properties().craftRemainder(SKYROOT_BUCKET.get()).stacksTo(1))); + public static final RegistryObject SKYROOT_POISON_BUCKET = ITEMS.register("skyroot_poison_bucket", () -> new SkyrootPoisonBucketItem(new Item.Properties().craftRemainder(SKYROOT_BUCKET.get()).stacksTo(1))); + public static final RegistryObject SKYROOT_REMEDY_BUCKET = ITEMS.register("skyroot_remedy_bucket", () -> new SkyrootRemedyBucketItem(new Item.Properties().craftRemainder(SKYROOT_BUCKET.get()).stacksTo(1).rarity(Rarity.RARE))); + public static final RegistryObject SKYROOT_MILK_BUCKET = ITEMS.register("skyroot_milk_bucket", () -> new SkyrootMilkBucketItem(new Item.Properties().craftRemainder(SKYROOT_BUCKET.get()).stacksTo(1))); + public static final RegistryObject SKYROOT_POWDER_SNOW_BUCKET = ITEMS.register("skyroot_powder_snow_bucket", () -> new SkyrootSolidBucketItem(Blocks.POWDER_SNOW, SoundEvents.BUCKET_EMPTY_POWDER_SNOW, new Item.Properties().craftRemainder(SKYROOT_BUCKET.get()).stacksTo(1))); + public static final RegistryObject SKYROOT_COD_BUCKET = ITEMS.register("skyroot_cod_bucket", () -> new SkyrootMobBucketItem(() -> EntityType.COD, () -> Fluids.WATER, () -> SoundEvents.BUCKET_EMPTY_FISH, new Item.Properties().craftRemainder(SKYROOT_BUCKET.get()).stacksTo(1))); + public static final RegistryObject SKYROOT_SALMON_BUCKET = ITEMS.register("skyroot_salmon_bucket", () -> new SkyrootMobBucketItem(() -> EntityType.SALMON, () -> Fluids.WATER, () -> SoundEvents.BUCKET_EMPTY_FISH, new Item.Properties().craftRemainder(SKYROOT_BUCKET.get()).stacksTo(1))); + public static final RegistryObject SKYROOT_PUFFERFISH_BUCKET = ITEMS.register("skyroot_pufferfish_bucket", () -> new SkyrootMobBucketItem(() -> EntityType.PUFFERFISH, () -> Fluids.WATER, () -> SoundEvents.BUCKET_EMPTY_FISH, new Item.Properties().craftRemainder(SKYROOT_BUCKET.get()).stacksTo(1))); + public static final RegistryObject SKYROOT_TROPICAL_FISH_BUCKET = ITEMS.register("skyroot_tropical_fish_bucket", () -> new SkyrootMobBucketItem(() -> EntityType.TROPICAL_FISH, () -> Fluids.WATER, () -> SoundEvents.BUCKET_EMPTY_FISH, new Item.Properties().craftRemainder(SKYROOT_BUCKET.get()).stacksTo(1))); + public static final RegistryObject SKYROOT_AXOLOTL_BUCKET = ITEMS.register("skyroot_axolotl_bucket", () -> new SkyrootMobBucketItem(() -> EntityType.AXOLOTL, () -> Fluids.WATER, () -> SoundEvents.BUCKET_EMPTY_AXOLOTL, new Item.Properties().craftRemainder(SKYROOT_BUCKET.get()).stacksTo(1))); + public static final RegistryObject SKYROOT_TADPOLE_BUCKET = ITEMS.register("skyroot_tadpole_bucket", () -> new SkyrootMobBucketItem(() -> EntityType.TADPOLE, () -> Fluids.WATER, () -> SoundEvents.BUCKET_EMPTY_TADPOLE, new Item.Properties().craftRemainder(SKYROOT_BUCKET.get()).stacksTo(1))); + + public static final RegistryObject SKYROOT_BOAT = ITEMS.register("skyroot_boat", () -> new SkyrootBoatItem(false, new Item.Properties().stacksTo(1))); + public static final RegistryObject SKYROOT_CHEST_BOAT = ITEMS.register("skyroot_chest_boat", () -> new SkyrootBoatItem(true, new Item.Properties().stacksTo(1))); + + public static final RegistryObject COLD_PARACHUTE = ITEMS.register("cold_parachute", () -> new ParachuteItem(AetherEntityTypes.COLD_PARACHUTE, new Item.Properties().durability(1))); + public static final RegistryObject GOLDEN_PARACHUTE = ITEMS.register("golden_parachute", () -> new ParachuteItem(AetherEntityTypes.GOLDEN_PARACHUTE, new Item.Properties().durability(20))); + + public static final RegistryObject BLUE_MOA_EGG = ITEMS.register("blue_moa_egg", () -> new MoaEggItem(AetherMoaTypes.BLUE, 0x7777FF, new Item.Properties().stacksTo(1))); + public static final RegistryObject WHITE_MOA_EGG = ITEMS.register("white_moa_egg", () -> new MoaEggItem(AetherMoaTypes.WHITE, 0xFFFFFF, new Item.Properties().stacksTo(1))); + public static final RegistryObject BLACK_MOA_EGG = ITEMS.register("black_moa_egg", () -> new MoaEggItem(AetherMoaTypes.BLACK, 0x222222, new Item.Properties().stacksTo(1))); + public static final RegistryObject ORANGE_MOA_EGG = ITEMS.register("orange_moa_egg", () -> new MoaEggItem(AetherMoaTypes.ORANGE, 0xF3C288, new Item.Properties().stacksTo(1))); + + public static final RegistryObject NATURE_STAFF = ITEMS.register("nature_staff", () -> new Item(new Item.Properties().durability(100).rarity(AETHER_LOOT))); public static final RegistryObject CLOUD_STAFF = ITEMS.register("cloud_staff", CloudStaffItem::new); - public static final RegistryObject LIFE_SHARD = ITEMS.register("life_shard", () -> new LifeShardItem(new Item.Properties().stacksTo(1).rarity(AETHER_LOOT).tab(AetherItemGroups.AETHER_MISC))); - - public static final RegistryObject BOOK_OF_LORE = ITEMS.register("book_of_lore", () -> new LoreBookItem(new Item.Properties().stacksTo(1).rarity(AETHER_LOOT).tab(AetherItemGroups.AETHER_MISC))); - - public static final RegistryObject AETHER_PORTAL_FRAME = ITEMS.register("aether_portal_frame", () -> new AetherPortalItem(new Item.Properties().stacksTo(1).tab(AetherItemGroups.AETHER_MISC))); - - public static final RegistryObject AECHOR_PLANT_SPAWN_EGG = ITEMS.register("aechor_plant_spawn_egg", () -> new ForgeSpawnEggItem(AetherEntityTypes.AECHOR_PLANT, 0x076178, 0x4BC69E, new Item.Properties().tab(AetherItemGroups.AETHER_MISC))); - public static final RegistryObject AERBUNNY_SPAWN_EGG = ITEMS.register("aerbunny_spawn_egg", () -> new ForgeSpawnEggItem(AetherEntityTypes.AERBUNNY, 0xE2FCFF, 0xFFDFF9, new Item.Properties().tab(AetherItemGroups.AETHER_MISC))); - public static final RegistryObject AERWHALE_SPAWN_EGG = ITEMS.register("aerwhale_spawn_egg", () -> new ForgeSpawnEggItem(AetherEntityTypes.AERWHALE, 0xC0E7FD, 0x879EAA, new Item.Properties().tab(AetherItemGroups.AETHER_MISC))); - public static final RegistryObject COCKATRICE_SPAWN_EGG = ITEMS.register("cockatrice_spawn_egg", () -> new ForgeSpawnEggItem(AetherEntityTypes.COCKATRICE, 0x6CB15C, 0x6C579D, new Item.Properties().tab(AetherItemGroups.AETHER_MISC))); - public static final RegistryObject FIRE_MINION_SPAWN_EGG = ITEMS.register("fire_minion_spawn_egg", () -> new ForgeSpawnEggItem(AetherEntityTypes.FIRE_MINION, 0xFF6D01, 0xFEF500, new Item.Properties().tab(AetherItemGroups.AETHER_MISC))); - public static final RegistryObject FLYING_COW_SPAWN_EGG = ITEMS.register("flying_cow_spawn_egg", () -> new ForgeSpawnEggItem(AetherEntityTypes.FLYING_COW, 0xD8D8D8, 0xFFD939, new Item.Properties().tab(AetherItemGroups.AETHER_MISC))); - public static final RegistryObject MIMIC_SPAWN_EGG = ITEMS.register("mimic_spawn_egg", () -> new ForgeSpawnEggItem(AetherEntityTypes.MIMIC, 0xB18132,0x605A4E, new Item.Properties().tab(AetherItemGroups.AETHER_MISC))); - public static final RegistryObject MOA_SPAWN_EGG = ITEMS.register("moa_spawn_egg", () -> new ForgeSpawnEggItem(AetherEntityTypes.MOA, 0x87BFEF, 0x7A7A7A, new Item.Properties().tab(AetherItemGroups.AETHER_MISC))); - public static final RegistryObject PHYG_SPAWN_EGG = ITEMS.register("phyg_spawn_egg", () -> new ForgeSpawnEggItem(AetherEntityTypes.PHYG, 0xFFC1D0, 0xFFD939, new Item.Properties().tab(AetherItemGroups.AETHER_MISC))); - public static final RegistryObject SENTRY_SPAWN_EGG = ITEMS.register("sentry_spawn_egg", () -> new ForgeSpawnEggItem(AetherEntityTypes.SENTRY, 0x808080,0x3A8AEC, new Item.Properties().tab(AetherItemGroups.AETHER_MISC))); - public static final RegistryObject SHEEPUFF_SPAWN_EGG = ITEMS.register("sheepuff_spawn_egg", () -> new ForgeSpawnEggItem(AetherEntityTypes.SHEEPUFF, 0xE2FCFF, 0xCB9090, new Item.Properties().tab(AetherItemGroups.AETHER_MISC))); - public static final RegistryObject BLUE_SWET_SPAWN_EGG = ITEMS.register("blue_swet_spawn_egg", () -> new ForgeSpawnEggItem(AetherEntityTypes.BLUE_SWET, 0x4FB1DA, 0xCDDA4F, new Item.Properties().tab(AetherItemGroups.AETHER_MISC))); - public static final RegistryObject GOLDEN_SWET_SPAWN_EGG = ITEMS.register("golden_swet_spawn_egg", () -> new ForgeSpawnEggItem(AetherEntityTypes.GOLDEN_SWET, 0xCDDA4F, 0x4FB1DA, new Item.Properties().tab(AetherItemGroups.AETHER_MISC))); - public static final RegistryObject WHIRLWIND_SPAWN_EGG = ITEMS.register("whirlwind_spawn_egg", () -> new ForgeSpawnEggItem(AetherEntityTypes.WHIRLWIND, 0x9FC3F7, 0xFFFFFF, new Item.Properties().tab(AetherItemGroups.AETHER_MISC))); - public static final RegistryObject EVIL_WHIRLWIND_SPAWN_EGG = ITEMS.register("evil_whirlwind_spawn_egg", () -> new ForgeSpawnEggItem(AetherEntityTypes.EVIL_WHIRLWIND, 0x9FC3F7, 0x111111, new Item.Properties().tab(AetherItemGroups.AETHER_MISC))); - public static final RegistryObject VALKYRIE_SPAWN_EGG = ITEMS.register("valkyrie_spawn_egg", () -> new ForgeSpawnEggItem(AetherEntityTypes.VALKYRIE, 0xF9F5E3, 0xF2D200, new Item.Properties().tab(AetherItemGroups.AETHER_MISC))); - public static final RegistryObject VALKYRIE_QUEEN_SPAWN_EGG = ITEMS.register("valkyrie_queen_spawn_egg", () -> new ForgeSpawnEggItem(AetherEntityTypes.VALKYRIE_QUEEN, 0xF2D200, 0xF9F5E3, new Item.Properties().tab(AetherItemGroups.AETHER_MISC))); - public static final RegistryObject SLIDER_SPAWN_EGG = ITEMS.register("slider_spawn_egg", () -> new SliderSpawnEggItem(AetherEntityTypes.SLIDER, 0xA7A7A7, 0x5C9FF2, new Item.Properties().tab(AetherItemGroups.AETHER_MISC))); - public static final RegistryObject SUN_SPIRIT_SPAWN_EGG = ITEMS.register("sun_spirit_spawn_egg", () -> new ForgeSpawnEggItem(AetherEntityTypes.SUN_SPIRIT, 0xFEF500, 0xFF6D01, new Item.Properties().tab(AetherItemGroups.AETHER_MISC))); - public static final RegistryObject ZEPHYR_SPAWN_EGG = ITEMS.register("zephyr_spawn_egg", () -> new ForgeSpawnEggItem(AetherEntityTypes.ZEPHYR, 0xDFDFDF, 0x99CFE8, new Item.Properties().tab(AetherItemGroups.AETHER_MISC))); + public static final RegistryObject LIFE_SHARD = ITEMS.register("life_shard", () -> new LifeShardItem(new Item.Properties().stacksTo(1).rarity(AETHER_LOOT))); + + public static final RegistryObject BOOK_OF_LORE = ITEMS.register("book_of_lore", () -> new LoreBookItem(new Item.Properties().stacksTo(1).rarity(AETHER_LOOT))); + + public static final RegistryObject AETHER_PORTAL_FRAME = ITEMS.register("aether_portal_frame", () -> new AetherPortalItem(new Item.Properties().stacksTo(1))); + + public static final RegistryObject AECHOR_PLANT_SPAWN_EGG = ITEMS.register("aechor_plant_spawn_egg", () -> new ForgeSpawnEggItem(AetherEntityTypes.AECHOR_PLANT, 0x076178, 0x4BC69E, new Item.Properties())); + public static final RegistryObject AERBUNNY_SPAWN_EGG = ITEMS.register("aerbunny_spawn_egg", () -> new ForgeSpawnEggItem(AetherEntityTypes.AERBUNNY, 0xE2FCFF, 0xFFDFF9, new Item.Properties())); + public static final RegistryObject AERWHALE_SPAWN_EGG = ITEMS.register("aerwhale_spawn_egg", () -> new ForgeSpawnEggItem(AetherEntityTypes.AERWHALE, 0xC0E7FD, 0x879EAA, new Item.Properties())); + public static final RegistryObject COCKATRICE_SPAWN_EGG = ITEMS.register("cockatrice_spawn_egg", () -> new ForgeSpawnEggItem(AetherEntityTypes.COCKATRICE, 0x6CB15C, 0x6C579D, new Item.Properties())); + public static final RegistryObject FIRE_MINION_SPAWN_EGG = ITEMS.register("fire_minion_spawn_egg", () -> new ForgeSpawnEggItem(AetherEntityTypes.FIRE_MINION, 0xFF6D01, 0xFEF500, new Item.Properties())); + public static final RegistryObject FLYING_COW_SPAWN_EGG = ITEMS.register("flying_cow_spawn_egg", () -> new ForgeSpawnEggItem(AetherEntityTypes.FLYING_COW, 0xD8D8D8, 0xFFD939, new Item.Properties())); + public static final RegistryObject MIMIC_SPAWN_EGG = ITEMS.register("mimic_spawn_egg", () -> new ForgeSpawnEggItem(AetherEntityTypes.MIMIC, 0xB18132,0x605A4E, new Item.Properties())); + public static final RegistryObject MOA_SPAWN_EGG = ITEMS.register("moa_spawn_egg", () -> new ForgeSpawnEggItem(AetherEntityTypes.MOA, 0x87BFEF, 0x7A7A7A, new Item.Properties())); + public static final RegistryObject PHYG_SPAWN_EGG = ITEMS.register("phyg_spawn_egg", () -> new ForgeSpawnEggItem(AetherEntityTypes.PHYG, 0xFFC1D0, 0xFFD939, new Item.Properties())); + public static final RegistryObject SENTRY_SPAWN_EGG = ITEMS.register("sentry_spawn_egg", () -> new ForgeSpawnEggItem(AetherEntityTypes.SENTRY, 0x808080,0x3A8AEC, new Item.Properties())); + public static final RegistryObject SHEEPUFF_SPAWN_EGG = ITEMS.register("sheepuff_spawn_egg", () -> new ForgeSpawnEggItem(AetherEntityTypes.SHEEPUFF, 0xE2FCFF, 0xCB9090, new Item.Properties())); + public static final RegistryObject BLUE_SWET_SPAWN_EGG = ITEMS.register("blue_swet_spawn_egg", () -> new ForgeSpawnEggItem(AetherEntityTypes.BLUE_SWET, 0x4FB1DA, 0xCDDA4F, new Item.Properties())); + public static final RegistryObject GOLDEN_SWET_SPAWN_EGG = ITEMS.register("golden_swet_spawn_egg", () -> new ForgeSpawnEggItem(AetherEntityTypes.GOLDEN_SWET, 0xCDDA4F, 0x4FB1DA, new Item.Properties())); + public static final RegistryObject WHIRLWIND_SPAWN_EGG = ITEMS.register("whirlwind_spawn_egg", () -> new ForgeSpawnEggItem(AetherEntityTypes.WHIRLWIND, 0x9FC3F7, 0xFFFFFF, new Item.Properties())); + public static final RegistryObject EVIL_WHIRLWIND_SPAWN_EGG = ITEMS.register("evil_whirlwind_spawn_egg", () -> new ForgeSpawnEggItem(AetherEntityTypes.EVIL_WHIRLWIND, 0x9FC3F7, 0x111111, new Item.Properties())); + public static final RegistryObject VALKYRIE_SPAWN_EGG = ITEMS.register("valkyrie_spawn_egg", () -> new ForgeSpawnEggItem(AetherEntityTypes.VALKYRIE, 0xF9F5E3, 0xF2D200, new Item.Properties())); + public static final RegistryObject VALKYRIE_QUEEN_SPAWN_EGG = ITEMS.register("valkyrie_queen_spawn_egg", () -> new ForgeSpawnEggItem(AetherEntityTypes.VALKYRIE_QUEEN, 0xF2D200, 0xF9F5E3, new Item.Properties())); + public static final RegistryObject SLIDER_SPAWN_EGG = ITEMS.register("slider_spawn_egg", () -> new SliderSpawnEggItem(AetherEntityTypes.SLIDER, 0xA7A7A7, 0x5C9FF2, new Item.Properties())); + public static final RegistryObject SUN_SPIRIT_SPAWN_EGG = ITEMS.register("sun_spirit_spawn_egg", () -> new ForgeSpawnEggItem(AetherEntityTypes.SUN_SPIRIT, 0xFEF500, 0xFF6D01, new Item.Properties())); + public static final RegistryObject ZEPHYR_SPAWN_EGG = ITEMS.register("zephyr_spawn_egg", () -> new ForgeSpawnEggItem(AetherEntityTypes.ZEPHYR, 0xDFDFDF, 0x99CFE8, new Item.Properties())); } \ No newline at end of file diff --git a/src/main/java/com/gildedgames/aether/item/accessories/AccessoryItem.java b/src/main/java/com/gildedgames/aether/item/accessories/AccessoryItem.java index 4d51c45ea6..0d08482ba1 100644 --- a/src/main/java/com/gildedgames/aether/item/accessories/AccessoryItem.java +++ b/src/main/java/com/gildedgames/aether/item/accessories/AccessoryItem.java @@ -2,6 +2,9 @@ import com.gildedgames.aether.client.AetherSoundEvents; import com.gildedgames.aether.block.dispenser.AetherDispenseBehaviors; +import net.minecraft.network.chat.Component; +import net.minecraft.world.item.TooltipFlag; +import net.minecraft.world.level.Level; import net.minecraft.world.level.block.DispenserBlock; import net.minecraft.world.item.enchantment.Enchantment; import net.minecraft.world.item.enchantment.Enchantments; @@ -12,7 +15,13 @@ import top.theillusivec4.curios.api.type.capability.ICurio; import top.theillusivec4.curios.api.type.capability.ICurioItem; +import javax.annotation.Nullable; +import java.util.ArrayList; +import java.util.List; + public class AccessoryItem extends Item implements ICurioItem, Vanishable { + private final List dungeonTooltips = new ArrayList<>(); + public AccessoryItem(Properties properties) { super(properties); DispenserBlock.registerBehavior(this, AetherDispenseBehaviors.DISPENSE_ACCESSORY_BEHAVIOR); // Behavior to allow accessories to be equipped from a Dispenser. @@ -32,4 +41,24 @@ public ICurio.SoundInfo getEquipSound(SlotContext slotContext, ItemStack stack) public boolean canApplyAtEnchantingTable(ItemStack stack, Enchantment enchantment) { return super.canApplyAtEnchantingTable(stack, enchantment) || enchantment == Enchantments.BINDING_CURSE; } + + /** + * When in a creative tab, this adds a tooltip to an item indicating what dungeon it can be found in. + * @param stack The {@link ItemStack} with the tooltip. + * @param level The {@link Level} the item is rendered in. + * @param components A {@link List} of {@link Component}s making up this item's tooltip. + * @param flag A {@link TooltipFlag} for the tooltip type. + */ + @Override + public void appendHoverText(ItemStack stack, @Nullable Level level, List components, TooltipFlag flag) { + super.appendHoverText(stack, level, components, flag); + if (flag.isCreative()) { + components.addAll(this.dungeonTooltips); + } + } + + public AccessoryItem addDungeonTooltip(Component dungeonTooltip) { + this.dungeonTooltips.add(dungeonTooltip); + return this; + } } \ No newline at end of file diff --git a/src/main/java/com/gildedgames/aether/item/combat/AetherArmorItem.java b/src/main/java/com/gildedgames/aether/item/combat/AetherArmorItem.java index e399d84019..25d0a35657 100644 --- a/src/main/java/com/gildedgames/aether/item/combat/AetherArmorItem.java +++ b/src/main/java/com/gildedgames/aether/item/combat/AetherArmorItem.java @@ -1,15 +1,22 @@ package com.gildedgames.aether.item.combat; import com.gildedgames.aether.Aether; +import net.minecraft.network.chat.Component; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EquipmentSlot; import net.minecraft.world.item.ArmorItem; import net.minecraft.world.item.ArmorMaterial; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.TooltipFlag; +import net.minecraft.world.level.Level; import javax.annotation.Nullable; +import java.util.ArrayList; +import java.util.List; public class AetherArmorItem extends ArmorItem { + private final List dungeonTooltips = new ArrayList<>(); + public AetherArmorItem(ArmorMaterial material, EquipmentSlot slot, Properties properties) { super(material, slot, properties); } @@ -27,4 +34,24 @@ public AetherArmorItem(ArmorMaterial material, EquipmentSlot slot, Properties pr public String getArmorTexture(ItemStack stack, Entity entity, EquipmentSlot slot, String type) { return String.format("%s:textures/models/armor/%s_layer_%s.png", Aether.MODID, this.getMaterial().getName(), slot == EquipmentSlot.LEGS ? 2 : 1); } + + /** + * When in a creative tab, this adds a tooltip to an item indicating what dungeon it can be found in. + * @param stack The {@link ItemStack} with the tooltip. + * @param level The {@link Level} the item is rendered in. + * @param components A {@link List} of {@link Component}s making up this item's tooltip. + * @param flag A {@link TooltipFlag} for the tooltip type. + */ + @Override + public void appendHoverText(ItemStack stack, @Nullable Level level, List components, TooltipFlag flag) { + super.appendHoverText(stack, level, components, flag); + if (flag.isCreative()) { + components.addAll(this.dungeonTooltips); + } + } + + public AetherArmorItem addDungeonTooltip(Component dungeonTooltip) { + this.dungeonTooltips.add(dungeonTooltip); + return this; + } } diff --git a/src/main/java/com/gildedgames/aether/item/combat/AetherSwordItem.java b/src/main/java/com/gildedgames/aether/item/combat/AetherSwordItem.java new file mode 100644 index 0000000000..fc890d722a --- /dev/null +++ b/src/main/java/com/gildedgames/aether/item/combat/AetherSwordItem.java @@ -0,0 +1,40 @@ +package com.gildedgames.aether.item.combat; + +import net.minecraft.network.chat.Component; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.SwordItem; +import net.minecraft.world.item.Tier; +import net.minecraft.world.item.TooltipFlag; +import net.minecraft.world.level.Level; + +import javax.annotation.Nullable; +import java.util.ArrayList; +import java.util.List; + +public class AetherSwordItem extends SwordItem { + private final List dungeonTooltips = new ArrayList<>(); + + public AetherSwordItem(Tier tier, int attackDamageModifier, float attackSpeedModifier, Properties properties) { + super(tier, attackDamageModifier, attackSpeedModifier, properties); + } + + /** + * When in a creative tab, this adds a tooltip to an item indicating what dungeon it can be found in. + * @param stack The {@link ItemStack} with the tooltip. + * @param level The {@link Level} the item is rendered in. + * @param components A {@link List} of {@link Component}s making up this item's tooltip. + * @param flag A {@link TooltipFlag} for the tooltip type. + */ + @Override + public void appendHoverText(ItemStack stack, @Nullable Level level, List components, TooltipFlag flag) { + super.appendHoverText(stack, level, components, flag); + if (flag.isCreative()) { + components.addAll(this.dungeonTooltips); + } + } + + public AetherSwordItem addDungeonTooltip(Component dungeonTooltip) { + this.dungeonTooltips.add(dungeonTooltip); + return this; + } +} diff --git a/src/main/java/com/gildedgames/aether/item/combat/GravititeSwordItem.java b/src/main/java/com/gildedgames/aether/item/combat/GravititeSwordItem.java index c873356db4..dacfa69951 100644 --- a/src/main/java/com/gildedgames/aether/item/combat/GravititeSwordItem.java +++ b/src/main/java/com/gildedgames/aether/item/combat/GravititeSwordItem.java @@ -1,6 +1,5 @@ package com.gildedgames.aether.item.combat; -import com.gildedgames.aether.item.AetherItemGroups; import com.gildedgames.aether.item.combat.abilities.weapon.GravititeWeapon; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.item.Item; @@ -9,7 +8,7 @@ public class GravititeSwordItem extends SwordItem implements GravititeWeapon { public GravititeSwordItem() { - super(AetherItemTiers.GRAVITITE, 3, -2.4F, new Item.Properties().tab(AetherItemGroups.AETHER_WEAPONS)); + super(AetherItemTiers.GRAVITITE, 3, -2.4F, new Item.Properties()); } @Override diff --git a/src/main/java/com/gildedgames/aether/item/combat/HolystoneSwordItem.java b/src/main/java/com/gildedgames/aether/item/combat/HolystoneSwordItem.java index fdf5546108..d3e4471656 100644 --- a/src/main/java/com/gildedgames/aether/item/combat/HolystoneSwordItem.java +++ b/src/main/java/com/gildedgames/aether/item/combat/HolystoneSwordItem.java @@ -1,6 +1,5 @@ package com.gildedgames.aether.item.combat; -import com.gildedgames.aether.item.AetherItemGroups; import com.gildedgames.aether.item.combat.abilities.weapon.HolystoneWeapon; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.item.Item; @@ -9,7 +8,7 @@ public class HolystoneSwordItem extends SwordItem implements HolystoneWeapon { public HolystoneSwordItem() { - super(AetherItemTiers.HOLYSTONE, 3, -2.4F, new Item.Properties().tab(AetherItemGroups.AETHER_WEAPONS)); + super(AetherItemTiers.HOLYSTONE, 3, -2.4F, new Item.Properties()); } @Override diff --git a/src/main/java/com/gildedgames/aether/item/combat/SkyrootSwordItem.java b/src/main/java/com/gildedgames/aether/item/combat/SkyrootSwordItem.java index ec9927cf19..8f4c44f822 100644 --- a/src/main/java/com/gildedgames/aether/item/combat/SkyrootSwordItem.java +++ b/src/main/java/com/gildedgames/aether/item/combat/SkyrootSwordItem.java @@ -2,7 +2,6 @@ import com.gildedgames.aether.Aether; import com.gildedgames.aether.AetherTags; -import com.gildedgames.aether.item.AetherItemGroups; import com.gildedgames.aether.item.combat.abilities.weapon.SkyrootWeapon; import com.gildedgames.aether.util.EquipmentUtil; import net.minecraft.world.damagesource.DamageSource; @@ -23,7 +22,7 @@ @Mod.EventBusSubscriber(modid = Aether.MODID) public class SkyrootSwordItem extends SwordItem implements SkyrootWeapon { public SkyrootSwordItem() { - super(AetherItemTiers.SKYROOT, 3, -2.4F, new Item.Properties().tab(AetherItemGroups.AETHER_WEAPONS)); + super(AetherItemTiers.SKYROOT, 3, -2.4F, new Item.Properties()); } @Override diff --git a/src/main/java/com/gildedgames/aether/item/combat/ZaniteSwordItem.java b/src/main/java/com/gildedgames/aether/item/combat/ZaniteSwordItem.java index ecc3cc8faf..0ce69250d9 100644 --- a/src/main/java/com/gildedgames/aether/item/combat/ZaniteSwordItem.java +++ b/src/main/java/com/gildedgames/aether/item/combat/ZaniteSwordItem.java @@ -1,6 +1,5 @@ package com.gildedgames.aether.item.combat; -import com.gildedgames.aether.item.AetherItemGroups; import com.gildedgames.aether.item.combat.abilities.weapon.ZaniteWeapon; import com.google.common.collect.Multimap; import net.minecraft.world.entity.EquipmentSlot; @@ -12,7 +11,7 @@ public class ZaniteSwordItem extends SwordItem implements ZaniteWeapon { public ZaniteSwordItem() { - super(AetherItemTiers.ZANITE, 3, -2.4F, new Item.Properties().tab(AetherItemGroups.AETHER_WEAPONS)); + super(AetherItemTiers.ZANITE, 3, -2.4F, new Item.Properties()); } @Override diff --git a/src/main/java/com/gildedgames/aether/item/combat/loot/CandyCaneSwordItem.java b/src/main/java/com/gildedgames/aether/item/combat/loot/CandyCaneSwordItem.java index b0e8f957ff..cb7e7caa89 100644 --- a/src/main/java/com/gildedgames/aether/item/combat/loot/CandyCaneSwordItem.java +++ b/src/main/java/com/gildedgames/aether/item/combat/loot/CandyCaneSwordItem.java @@ -1,7 +1,6 @@ package com.gildedgames.aether.item.combat.loot; import com.gildedgames.aether.AetherTags; -import com.gildedgames.aether.item.AetherItemGroups; import com.gildedgames.aether.item.AetherItems; import com.gildedgames.aether.item.combat.AetherItemTiers; import com.gildedgames.aether.util.EquipmentUtil; @@ -13,7 +12,7 @@ public class CandyCaneSwordItem extends SwordItem { public CandyCaneSwordItem() { - super(AetherItemTiers.CANDY_CANE, 3, -2.4F, new Item.Properties().tab(AetherItemGroups.AETHER_WEAPONS)); + super(AetherItemTiers.CANDY_CANE, 3, -2.4F, new Item.Properties()); } /** diff --git a/src/main/java/com/gildedgames/aether/item/combat/loot/CloudStaffItem.java b/src/main/java/com/gildedgames/aether/item/combat/loot/CloudStaffItem.java index 247ddc3fdb..ab7264673c 100644 --- a/src/main/java/com/gildedgames/aether/item/combat/loot/CloudStaffItem.java +++ b/src/main/java/com/gildedgames/aether/item/combat/loot/CloudStaffItem.java @@ -3,11 +3,12 @@ import com.gildedgames.aether.AetherConfig; import com.gildedgames.aether.capability.player.AetherPlayerCapability; import com.gildedgames.aether.entity.miscellaneous.CloudMinion; -import com.gildedgames.aether.item.AetherItemGroups; import com.gildedgames.aether.item.AetherItems; import com.gildedgames.aether.capability.player.AetherPlayer; import com.gildedgames.aether.util.EntityUtil; +import net.minecraft.network.chat.Component; import net.minecraft.world.entity.Entity; +import net.minecraft.world.item.TooltipFlag; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.player.Player; @@ -19,9 +20,12 @@ import net.minecraft.core.BlockPos; import net.minecraft.world.level.Level; +import javax.annotation.Nullable; +import java.util.List; + public class CloudStaffItem extends Item { public CloudStaffItem() { - super(new Item.Properties().durability(60).rarity(AetherItems.AETHER_LOOT).tab(AetherItemGroups.AETHER_MISC)); + super(new Item.Properties().durability(60).rarity(AetherItems.AETHER_LOOT)); } /** @@ -104,4 +108,19 @@ private void spawnExplosionParticles(Player player) { public boolean canAttackBlock(BlockState state, Level level, BlockPos pos, Player player) { return !player.isCreative(); } + + /** + * When in a creative tab, this adds a tooltip to an item indicating what dungeon it can be found in. + * @param stack The {@link ItemStack} with the tooltip. + * @param level The {@link Level} the item is rendered in. + * @param components A {@link List} of {@link Component}s making up this item's tooltip. + * @param flag A {@link TooltipFlag} for the tooltip type. + */ + @Override + public void appendHoverText(ItemStack stack, @Nullable Level level, List components, TooltipFlag flag) { + super.appendHoverText(stack, level, components, flag); + if (flag.isCreative()) { + components.add(AetherItems.BRONZE_DUNGEON_TOOLTIP); + } + } } diff --git a/src/main/java/com/gildedgames/aether/item/combat/loot/FlamingSwordItem.java b/src/main/java/com/gildedgames/aether/item/combat/loot/FlamingSwordItem.java index 9f13538e37..f28b4f9811 100644 --- a/src/main/java/com/gildedgames/aether/item/combat/loot/FlamingSwordItem.java +++ b/src/main/java/com/gildedgames/aether/item/combat/loot/FlamingSwordItem.java @@ -1,9 +1,9 @@ package com.gildedgames.aether.item.combat.loot; import com.gildedgames.aether.Aether; -import com.gildedgames.aether.item.AetherItemGroups; import com.gildedgames.aether.item.combat.AetherItemTiers; import com.gildedgames.aether.item.AetherItems; +import com.gildedgames.aether.item.combat.AetherSwordItem; import com.gildedgames.aether.util.EquipmentUtil; import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.item.ItemStack; @@ -14,12 +14,11 @@ import net.minecraftforge.fml.common.Mod; import net.minecraft.world.item.Item; -import net.minecraft.world.item.SwordItem; @Mod.EventBusSubscriber(modid = Aether.MODID) -public class FlamingSwordItem extends SwordItem { +public class FlamingSwordItem extends AetherSwordItem { public FlamingSwordItem() { - super(AetherItemTiers.FLAMING, 3, -2.4F, new Item.Properties().rarity(AetherItems.AETHER_LOOT).tab(AetherItemGroups.AETHER_WEAPONS)); + super(AetherItemTiers.FLAMING, 3, -2.4F, new Item.Properties().rarity(AetherItems.AETHER_LOOT)); } /** diff --git a/src/main/java/com/gildedgames/aether/item/combat/loot/HammerOfNotchItem.java b/src/main/java/com/gildedgames/aether/item/combat/loot/HammerOfNotchItem.java index a29b2d0509..a4c399526e 100644 --- a/src/main/java/com/gildedgames/aether/item/combat/loot/HammerOfNotchItem.java +++ b/src/main/java/com/gildedgames/aether/item/combat/loot/HammerOfNotchItem.java @@ -3,22 +3,21 @@ import com.gildedgames.aether.AetherConfig; import com.gildedgames.aether.client.AetherSoundEvents; import com.gildedgames.aether.entity.projectile.weapon.HammerProjectile; -import com.gildedgames.aether.item.AetherItemGroups; import com.gildedgames.aether.item.combat.AetherItemTiers; import com.gildedgames.aether.item.AetherItems; +import com.gildedgames.aether.item.combat.AetherSwordItem; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.SwordItem; import net.minecraft.stats.Stats; import net.minecraft.world.InteractionResultHolder; import net.minecraft.world.InteractionHand; import net.minecraft.sounds.SoundSource; import net.minecraft.world.level.Level; -public class HammerOfNotchItem extends SwordItem { +public class HammerOfNotchItem extends AetherSwordItem { public HammerOfNotchItem() { - super(AetherItemTiers.HAMMER_OF_NOTCH, 3, -2.4F, new Item.Properties().rarity(AetherItems.AETHER_LOOT).tab(AetherItemGroups.AETHER_WEAPONS)); + super(AetherItemTiers.HAMMER_OF_NOTCH, 3, -2.4F, new Item.Properties().rarity(AetherItems.AETHER_LOOT)); } /** diff --git a/src/main/java/com/gildedgames/aether/item/combat/loot/HolySwordItem.java b/src/main/java/com/gildedgames/aether/item/combat/loot/HolySwordItem.java index 7cbbbc5c74..72c4b71c81 100644 --- a/src/main/java/com/gildedgames/aether/item/combat/loot/HolySwordItem.java +++ b/src/main/java/com/gildedgames/aether/item/combat/loot/HolySwordItem.java @@ -1,8 +1,8 @@ package com.gildedgames.aether.item.combat.loot; -import com.gildedgames.aether.item.AetherItemGroups; import com.gildedgames.aether.item.combat.AetherItemTiers; import com.gildedgames.aether.item.AetherItems; +import com.gildedgames.aether.item.combat.AetherSwordItem; import com.gildedgames.aether.util.EquipmentUtil; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.enchantment.Enchantments; @@ -13,11 +13,10 @@ import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.SwordItem; -public class HolySwordItem extends SwordItem { +public class HolySwordItem extends AetherSwordItem { public HolySwordItem() { - super(AetherItemTiers.HOLY, 3, -2.4F, new Item.Properties().rarity(AetherItems.AETHER_LOOT).tab(AetherItemGroups.AETHER_WEAPONS)); + super(AetherItemTiers.HOLY, 3, -2.4F, new Item.Properties().rarity(AetherItems.AETHER_LOOT)); } /** diff --git a/src/main/java/com/gildedgames/aether/item/combat/loot/LightningKnifeItem.java b/src/main/java/com/gildedgames/aether/item/combat/loot/LightningKnifeItem.java index 699d646a18..49b8db0cee 100644 --- a/src/main/java/com/gildedgames/aether/item/combat/loot/LightningKnifeItem.java +++ b/src/main/java/com/gildedgames/aether/item/combat/loot/LightningKnifeItem.java @@ -1,10 +1,11 @@ package com.gildedgames.aether.item.combat.loot; import com.gildedgames.aether.entity.projectile.weapon.ThrownLightningKnife; -import com.gildedgames.aether.item.AetherItemGroups; import com.gildedgames.aether.item.AetherItems; import com.gildedgames.aether.client.AetherSoundEvents; +import net.minecraft.network.chat.Component; +import net.minecraft.world.item.TooltipFlag; import net.minecraft.world.item.enchantment.Enchantments; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.Item; @@ -16,9 +17,12 @@ import net.minecraft.world.level.Level; import net.minecraftforge.event.entity.EntityStruckByLightningEvent; +import javax.annotation.Nullable; +import java.util.List; + public class LightningKnifeItem extends Item { public LightningKnifeItem() { - super(new Item.Properties().rarity(AetherItems.AETHER_LOOT).stacksTo(16).tab(AetherItemGroups.AETHER_WEAPONS)); + super(new Item.Properties().rarity(AetherItems.AETHER_LOOT).stacksTo(16)); } /** @@ -44,4 +48,19 @@ public InteractionResultHolder use(Level level, Player player, Intera player.awardStat(Stats.ITEM_USED.get(this)); return InteractionResultHolder.success(heldStack); } + + /** + * When in a creative tab, this adds a tooltip to an item indicating what dungeon it can be found in. + * @param stack The {@link ItemStack} with the tooltip. + * @param level The {@link Level} the item is rendered in. + * @param components A {@link List} of {@link Component}s making up this item's tooltip. + * @param flag A {@link TooltipFlag} for the tooltip type. + */ + @Override + public void appendHoverText(ItemStack stack, @Nullable Level level, List components, TooltipFlag flag) { + super.appendHoverText(stack, level, components, flag); + if (flag.isCreative()) { + components.add(AetherItems.BRONZE_DUNGEON_TOOLTIP); + } + } } diff --git a/src/main/java/com/gildedgames/aether/item/combat/loot/LightningSwordItem.java b/src/main/java/com/gildedgames/aether/item/combat/loot/LightningSwordItem.java index a13eab8461..aceed79842 100644 --- a/src/main/java/com/gildedgames/aether/item/combat/loot/LightningSwordItem.java +++ b/src/main/java/com/gildedgames/aether/item/combat/loot/LightningSwordItem.java @@ -1,9 +1,9 @@ package com.gildedgames.aether.item.combat.loot; -import com.gildedgames.aether.item.AetherItemGroups; import com.gildedgames.aether.item.combat.AetherItemTiers; import com.gildedgames.aether.item.AetherItems; import com.gildedgames.aether.capability.lightning.LightningTracker; +import com.gildedgames.aether.item.combat.AetherSwordItem; import com.gildedgames.aether.util.EquipmentUtil; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.LivingEntity; @@ -11,12 +11,11 @@ import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.SwordItem; import net.minecraftforge.event.entity.EntityStruckByLightningEvent; -public class LightningSwordItem extends SwordItem { +public class LightningSwordItem extends AetherSwordItem { public LightningSwordItem() { - super(AetherItemTiers.LIGHTNING, 3, -2.4F, new Item.Properties().rarity(AetherItems.AETHER_LOOT).tab(AetherItemGroups.AETHER_WEAPONS)); + super(AetherItemTiers.LIGHTNING, 3, -2.4F, new Item.Properties().rarity(AetherItems.AETHER_LOOT)); } /** diff --git a/src/main/java/com/gildedgames/aether/item/combat/loot/PhoenixBowItem.java b/src/main/java/com/gildedgames/aether/item/combat/loot/PhoenixBowItem.java index dc6782e16c..43eb3dc5d9 100644 --- a/src/main/java/com/gildedgames/aether/item/combat/loot/PhoenixBowItem.java +++ b/src/main/java/com/gildedgames/aether/item/combat/loot/PhoenixBowItem.java @@ -1,8 +1,10 @@ package com.gildedgames.aether.item.combat.loot; -import com.gildedgames.aether.item.AetherItemGroups; import com.gildedgames.aether.item.AetherItems; import com.gildedgames.aether.capability.arrow.PhoenixArrow; +import net.minecraft.network.chat.Component; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.TooltipFlag; import net.minecraft.world.item.enchantment.EnchantmentHelper; import net.minecraft.world.item.enchantment.Enchantments; import net.minecraft.world.entity.LivingEntity; @@ -10,10 +12,14 @@ import net.minecraft.world.item.BowItem; import net.minecraft.world.item.Item; +import net.minecraft.world.level.Level; + +import javax.annotation.Nullable; +import java.util.List; public class PhoenixBowItem extends BowItem { public PhoenixBowItem() { - super(new Item.Properties().durability(384).rarity(AetherItems.AETHER_LOOT).tab(AetherItemGroups.AETHER_WEAPONS)); + super(new Item.Properties().durability(384).rarity(AetherItems.AETHER_LOOT)); } /** @@ -34,4 +40,19 @@ public AbstractArrow customArrow(AbstractArrow arrow) { }); return super.customArrow(arrow); } + + /** + * When in a creative tab, this adds a tooltip to an item indicating what dungeon it can be found in. + * @param stack The {@link ItemStack} with the tooltip. + * @param level The {@link Level} the item is rendered in. + * @param components A {@link List} of {@link Component}s making up this item's tooltip. + * @param flag A {@link TooltipFlag} for the tooltip type. + */ + @Override + public void appendHoverText(ItemStack stack, @Nullable Level level, List components, TooltipFlag flag) { + super.appendHoverText(stack, level, components, flag); + if (flag.isCreative()) { + components.add(AetherItems.BRONZE_DUNGEON_TOOLTIP); + } + } } diff --git a/src/main/java/com/gildedgames/aether/item/combat/loot/PigSlayerItem.java b/src/main/java/com/gildedgames/aether/item/combat/loot/PigSlayerItem.java index 5d84be8648..4ea778c844 100644 --- a/src/main/java/com/gildedgames/aether/item/combat/loot/PigSlayerItem.java +++ b/src/main/java/com/gildedgames/aether/item/combat/loot/PigSlayerItem.java @@ -1,11 +1,11 @@ package com.gildedgames.aether.item.combat.loot; import com.gildedgames.aether.Aether; -import com.gildedgames.aether.item.AetherItemGroups; import com.gildedgames.aether.item.combat.AetherItemTiers; import com.gildedgames.aether.item.AetherItems; import com.gildedgames.aether.AetherTags; +import com.gildedgames.aether.item.combat.AetherSwordItem; import com.gildedgames.aether.mixin.mixins.common.accessor.ZombifiedPiglinAccessor; import com.gildedgames.aether.util.EquipmentUtil; import net.minecraft.world.entity.LivingEntity; @@ -25,12 +25,11 @@ import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.SwordItem; @Mod.EventBusSubscriber(modid = Aether.MODID) -public class PigSlayerItem extends SwordItem { +public class PigSlayerItem extends AetherSwordItem { public PigSlayerItem() { - super(AetherItemTiers.PIG_SLAYER, 3, -2.4F, new Item.Properties().rarity(AetherItems.AETHER_LOOT).tab(AetherItemGroups.AETHER_WEAPONS)); + super(AetherItemTiers.PIG_SLAYER, 3, -2.4F, new Item.Properties().rarity(AetherItems.AETHER_LOOT)); } /** diff --git a/src/main/java/com/gildedgames/aether/item/combat/loot/ValkyrieLanceItem.java b/src/main/java/com/gildedgames/aether/item/combat/loot/ValkyrieLanceItem.java index 49537c62d0..ea282da883 100644 --- a/src/main/java/com/gildedgames/aether/item/combat/loot/ValkyrieLanceItem.java +++ b/src/main/java/com/gildedgames/aether/item/combat/loot/ValkyrieLanceItem.java @@ -1,8 +1,8 @@ package com.gildedgames.aether.item.combat.loot; -import com.gildedgames.aether.item.AetherItemGroups; import com.gildedgames.aether.item.AetherItems; import com.gildedgames.aether.item.combat.AetherItemTiers; +import com.gildedgames.aether.item.combat.AetherSwordItem; import com.gildedgames.aether.item.tools.abilities.ValkyrieTool; import com.google.common.collect.Multimap; import net.minecraft.world.item.*; @@ -15,9 +15,9 @@ import net.minecraftforge.common.ToolAction; import net.minecraftforge.common.ToolActions; -public class ValkyrieLanceItem extends SwordItem implements ValkyrieTool { +public class ValkyrieLanceItem extends AetherSwordItem implements ValkyrieTool { public ValkyrieLanceItem() { - super(AetherItemTiers.VALKYRIE, 3, -2.7F, new Item.Properties().rarity(AetherItems.AETHER_LOOT).tab(AetherItemGroups.AETHER_WEAPONS)); + super(AetherItemTiers.VALKYRIE, 3, -2.7F, new Item.Properties().rarity(AetherItems.AETHER_LOOT)); } @Override diff --git a/src/main/java/com/gildedgames/aether/item/combat/loot/VampireBladeItem.java b/src/main/java/com/gildedgames/aether/item/combat/loot/VampireBladeItem.java index f40346052d..b51f6d97a3 100644 --- a/src/main/java/com/gildedgames/aether/item/combat/loot/VampireBladeItem.java +++ b/src/main/java/com/gildedgames/aether/item/combat/loot/VampireBladeItem.java @@ -2,20 +2,19 @@ import com.gildedgames.aether.capability.player.AetherPlayer; import com.gildedgames.aether.capability.player.AetherPlayerCapability; -import com.gildedgames.aether.item.AetherItemGroups; import com.gildedgames.aether.item.combat.AetherItemTiers; import com.gildedgames.aether.item.AetherItems; +import com.gildedgames.aether.item.combat.AetherSwordItem; import com.gildedgames.aether.util.EquipmentUtil; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.SwordItem; -public class VampireBladeItem extends SwordItem { +public class VampireBladeItem extends AetherSwordItem { public VampireBladeItem() { - super(AetherItemTiers.VAMPIRE, 3, -2.4F, new Item.Properties().rarity(AetherItems.AETHER_LOOT).tab(AetherItemGroups.AETHER_WEAPONS)); + super(AetherItemTiers.VAMPIRE, 3, -2.4F, new Item.Properties().rarity(AetherItems.AETHER_LOOT)); } /** diff --git a/src/main/java/com/gildedgames/aether/item/food/GummySwetItem.java b/src/main/java/com/gildedgames/aether/item/food/GummySwetItem.java index d5842293b1..af02b4fc87 100644 --- a/src/main/java/com/gildedgames/aether/item/food/GummySwetItem.java +++ b/src/main/java/com/gildedgames/aether/item/food/GummySwetItem.java @@ -1,22 +1,26 @@ package com.gildedgames.aether.item.food; -import com.gildedgames.aether.item.AetherItemGroups; import com.gildedgames.aether.item.AetherItems; import com.gildedgames.aether.AetherConfig; import com.gildedgames.aether.item.miscellaneous.ConsumableItem; +import net.minecraft.network.chat.Component; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.player.Player; import net.minecraft.world.food.FoodProperties; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.TooltipFlag; import net.minecraft.world.item.UseAnim; import net.minecraft.world.InteractionResultHolder; import net.minecraft.world.InteractionHand; import net.minecraft.world.level.Level; +import javax.annotation.Nullable; +import java.util.List; + public class GummySwetItem extends Item implements ConsumableItem { public GummySwetItem() { - super(new Item.Properties().rarity(AetherItems.AETHER_LOOT).food(AetherFoods.GUMMY_SWET).tab(AetherItemGroups.AETHER_FOOD)); + super(new Item.Properties().rarity(AetherItems.AETHER_LOOT).food(AetherFoods.GUMMY_SWET)); } /** @@ -85,4 +89,20 @@ public int getUseDuration(ItemStack stack) { public boolean isEdible() { return !AetherConfig.COMMON.healing_gummy_swets.get(); } + + /** + * When in a creative tab, this adds a tooltip to an item indicating what dungeon it can be found in. + * @param stack The {@link ItemStack} with the tooltip. + * @param level The {@link Level} the item is rendered in. + * @param components A {@link List} of {@link Component}s making up this item's tooltip. + * @param flag A {@link TooltipFlag} for the tooltip type. + */ + @Override + public void appendHoverText(ItemStack stack, @Nullable Level level, List components, TooltipFlag flag) { + super.appendHoverText(stack, level, components, flag); + if (flag.isCreative()) { + components.add(AetherItems.BRONZE_DUNGEON_TOOLTIP); + components.add(AetherItems.SILVER_DUNGEON_TOOLTIP); + } + } } diff --git a/src/main/java/com/gildedgames/aether/item/food/HealingStoneItem.java b/src/main/java/com/gildedgames/aether/item/food/HealingStoneItem.java index 8ffe31bbbb..61d2f2d703 100644 --- a/src/main/java/com/gildedgames/aether/item/food/HealingStoneItem.java +++ b/src/main/java/com/gildedgames/aether/item/food/HealingStoneItem.java @@ -1,13 +1,12 @@ package com.gildedgames.aether.item.food; -import com.gildedgames.aether.item.AetherItemGroups; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Rarity; public class HealingStoneItem extends Item { public HealingStoneItem() { - super(new Item.Properties().rarity(Rarity.RARE).food(AetherFoods.HEALING_STONE).tab(AetherItemGroups.AETHER_FOOD)); + super(new Item.Properties().rarity(Rarity.RARE).food(AetherFoods.HEALING_STONE)); } /** diff --git a/src/main/java/com/gildedgames/aether/item/food/WhiteAppleItem.java b/src/main/java/com/gildedgames/aether/item/food/WhiteAppleItem.java index 4132196ae1..db8300e4ce 100644 --- a/src/main/java/com/gildedgames/aether/item/food/WhiteAppleItem.java +++ b/src/main/java/com/gildedgames/aether/item/food/WhiteAppleItem.java @@ -1,6 +1,5 @@ package com.gildedgames.aether.item.food; -import com.gildedgames.aether.item.AetherItemGroups; import com.gildedgames.aether.item.AetherItems; import com.gildedgames.aether.capability.player.AetherPlayer; import net.minecraft.advancements.CriteriaTriggers; @@ -14,7 +13,7 @@ public class WhiteAppleItem extends Item { public WhiteAppleItem() { - super(new Item.Properties().food(AetherFoods.WHITE_APPLE).tab(AetherItemGroups.AETHER_FOOD)); + super(new Item.Properties().food(AetherFoods.WHITE_APPLE)); } /** diff --git a/src/main/java/com/gildedgames/aether/item/miscellaneous/AetherRecordItem.java b/src/main/java/com/gildedgames/aether/item/miscellaneous/AetherRecordItem.java new file mode 100644 index 0000000000..ba7f6d3814 --- /dev/null +++ b/src/main/java/com/gildedgames/aether/item/miscellaneous/AetherRecordItem.java @@ -0,0 +1,41 @@ +package com.gildedgames.aether.item.miscellaneous; + +import net.minecraft.network.chat.Component; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.RecordItem; +import net.minecraft.world.item.TooltipFlag; +import net.minecraft.world.level.Level; + +import javax.annotation.Nullable; +import java.util.ArrayList; +import java.util.List; +import java.util.function.Supplier; + +public class AetherRecordItem extends RecordItem { + private final List dungeonTooltips = new ArrayList<>(); + + public AetherRecordItem(int comparatorValue, Supplier soundSupplier, Properties properties, int lengthInTicks) { + super(comparatorValue, soundSupplier, properties, lengthInTicks); + } + + /** + * When in a creative tab, this adds a tooltip to an item indicating what dungeon it can be found in. + * @param stack The {@link ItemStack} with the tooltip. + * @param level The {@link Level} the item is rendered in. + * @param components A {@link List} of {@link Component}s making up this item's tooltip. + * @param flag A {@link TooltipFlag} for the tooltip type. + */ + @Override + public void appendHoverText(ItemStack stack, @Nullable Level level, List components, TooltipFlag flag) { + super.appendHoverText(stack, level, components, flag); + if (flag.isCreative()) { + components.addAll(this.dungeonTooltips); + } + } + + public AetherRecordItem addDungeonTooltip(Component dungeonTooltip) { + this.dungeonTooltips.add(dungeonTooltip); + return this; + } +} diff --git a/src/main/java/com/gildedgames/aether/item/miscellaneous/LifeShardItem.java b/src/main/java/com/gildedgames/aether/item/miscellaneous/LifeShardItem.java index ab16c2f96f..a05f24d833 100644 --- a/src/main/java/com/gildedgames/aether/item/miscellaneous/LifeShardItem.java +++ b/src/main/java/com/gildedgames/aether/item/miscellaneous/LifeShardItem.java @@ -1,6 +1,7 @@ package com.gildedgames.aether.item.miscellaneous; import com.gildedgames.aether.capability.player.AetherPlayer; +import com.gildedgames.aether.item.AetherItems; import net.minecraft.network.chat.Component; import net.minecraft.world.InteractionResult; import net.minecraft.world.entity.player.Player; @@ -8,8 +9,11 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.InteractionResultHolder; import net.minecraft.world.InteractionHand; +import net.minecraft.world.item.TooltipFlag; import net.minecraft.world.level.Level; +import javax.annotation.Nullable; +import java.util.List; import java.util.Optional; public class LifeShardItem extends Item implements ConsumableItem { @@ -47,4 +51,19 @@ public InteractionResultHolder use(Level level, Player player, Intera } return InteractionResultHolder.pass(heldStack); } + + /** + * When in a creative tab, this adds a tooltip to an item indicating what dungeon it can be found in. + * @param stack The {@link ItemStack} with the tooltip. + * @param level The {@link Level} the item is rendered in. + * @param components A {@link List} of {@link Component}s making up this item's tooltip. + * @param flag A {@link TooltipFlag} for the tooltip type. + */ + @Override + public void appendHoverText(ItemStack stack, @Nullable Level level, List components, TooltipFlag flag) { + super.appendHoverText(stack, level, components, flag); + if (flag.isCreative()) { + components.add(AetherItems.GOLD_DUNGEON_TOOLTIP); + } + } } diff --git a/src/main/java/com/gildedgames/aether/item/miscellaneous/MoaEggItem.java b/src/main/java/com/gildedgames/aether/item/miscellaneous/MoaEggItem.java index eaef0c0510..047bd4e0e6 100644 --- a/src/main/java/com/gildedgames/aether/item/miscellaneous/MoaEggItem.java +++ b/src/main/java/com/gildedgames/aether/item/miscellaneous/MoaEggItem.java @@ -21,7 +21,6 @@ import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.context.UseOnContext; -import net.minecraft.world.level.BaseSpawner; import net.minecraft.world.level.ClipContext; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Blocks; @@ -79,10 +78,9 @@ public InteractionResult useOn(UseOnContext context) { if (blockState.is(Blocks.SPAWNER)) { BlockEntity blockEntity = level.getBlockEntity(blockPos); if (blockEntity instanceof SpawnerBlockEntity spawnerBlockEntity) { - BaseSpawner baseSpawner = spawnerBlockEntity.getSpawner(); - BaseSpawnerAccessor baseSpawnerAccessor = (BaseSpawnerAccessor) baseSpawner; + BaseSpawnerAccessor baseSpawnerAccessor = (BaseSpawnerAccessor) spawnerBlockEntity.getSpawner(); EntityType entityType = AetherEntityTypes.MOA.get(); - baseSpawner.setEntityId(entityType); + spawnerBlockEntity.setEntityId(entityType, level.getRandom()); baseSpawnerAccessor.getNextSpawnData().getEntityToSpawn().putString("MoaType", this.getMoaTypeId().toString()); baseSpawnerAccessor.getNextSpawnData().getEntityToSpawn().putBoolean("PlayerGrown", true); // Moas spawned from a Mob Spawner as set by a Moa Egg will always be tamed. blockEntity.setChanged(); @@ -101,7 +99,7 @@ public InteractionResult useOn(UseOnContext context) { ItemStack spawnStack = this.getStackWithTags(itemStack, false, this.getMoaType(), false, true); // Setup tags for spawning entity. Entity entity = AetherEntityTypes.MOA.get().spawn(serverLevel, spawnStack, player, relativePos, MobSpawnType.SPAWN_EGG, true, !Objects.equals(blockPos, relativePos) && direction == Direction.UP); - if (entity instanceof Moa) { + if (entity != null) { level.gameEvent(player, GameEvent.ENTITY_PLACE, blockPos); } return InteractionResult.CONSUME; @@ -125,7 +123,7 @@ public InteractionResultHolder use(Level level, Player player, Intera if (hitResult.getType() != HitResult.Type.BLOCK) { return InteractionResultHolder.pass(heldStack); } else if (!(level instanceof ServerLevel serverLevel)) { - return InteractionResultHolder.success(heldStack); + return InteractionResultHolder.fail(heldStack); } else { BlockPos blockpos = hitResult.getBlockPos(); if (!(level.getBlockState(blockpos).getBlock() instanceof LiquidBlock)) { diff --git a/src/main/java/com/gildedgames/aether/item/miscellaneous/SliderSpawnEggItem.java b/src/main/java/com/gildedgames/aether/item/miscellaneous/SliderSpawnEggItem.java index d4e3472548..ce3a419b2c 100644 --- a/src/main/java/com/gildedgames/aether/item/miscellaneous/SliderSpawnEggItem.java +++ b/src/main/java/com/gildedgames/aether/item/miscellaneous/SliderSpawnEggItem.java @@ -9,7 +9,6 @@ import net.minecraft.world.entity.MobSpawnType; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.context.UseOnContext; -import net.minecraft.world.level.BaseSpawner; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.entity.BlockEntity; @@ -44,10 +43,9 @@ public InteractionResult useOn(UseOnContext context) { BlockState blockState = level.getBlockState(blockPos); if (blockState.is(Blocks.SPAWNER)) { BlockEntity blockEntity = level.getBlockEntity(blockPos); - if (blockEntity instanceof SpawnerBlockEntity) { - BaseSpawner baseSpawner = ((SpawnerBlockEntity)blockEntity).getSpawner(); + if (blockEntity instanceof SpawnerBlockEntity spawnerBlockEntity) { EntityType entityType = this.getType(itemStack.getTag()); - baseSpawner.setEntityId(entityType); + spawnerBlockEntity.setEntityId(entityType, level.getRandom()); blockEntity.setChanged(); level.sendBlockUpdated(blockPos, blockState, blockState, 3); level.gameEvent(context.getPlayer(), GameEvent.BLOCK_CHANGE, blockPos); diff --git a/src/main/java/com/gildedgames/aether/item/miscellaneous/bucket/SkyrootSolidBucketItem.java b/src/main/java/com/gildedgames/aether/item/miscellaneous/bucket/SkyrootSolidBucketItem.java index 724b9452c0..73b2b401ad 100644 --- a/src/main/java/com/gildedgames/aether/item/miscellaneous/bucket/SkyrootSolidBucketItem.java +++ b/src/main/java/com/gildedgames/aether/item/miscellaneous/bucket/SkyrootSolidBucketItem.java @@ -1,12 +1,10 @@ package com.gildedgames.aether.item.miscellaneous.bucket; import com.gildedgames.aether.item.AetherItems; -import net.minecraft.core.NonNullList; import net.minecraft.sounds.SoundEvent; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; import net.minecraft.world.entity.player.Player; -import net.minecraft.world.item.CreativeModeTab; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.SolidBucketItem; @@ -36,20 +34,6 @@ public InteractionResult useOn(UseOnContext context) { return interactionResult; } - /** - * Normally, anything extending {@link net.minecraft.world.item.BlockItem} calls {@link Block#fillItemCategory(CreativeModeTab, NonNullList)} for this, - * meaning in the creative tab it'll fill whatever item corresponds to the block in the registry, and not this item itself. So, we override that and instead perform the - * default behavior for adding an item to a creative tab (as seen in {@link Item#fillItemCategory(CreativeModeTab, NonNullList)}) so that it doesn't conflict with vanilla solid bucket items (like the Powder Snow Bucket). - * @param category The {@link CreativeModeTab} the item is trying to be added to. - * @param items The {@link NonNullList} for all the items that have been added to the tabs. - */ - @Override - public void fillItemCategory(CreativeModeTab category, NonNullList items) { - if (this.allowedIn(category)) { - items.add(new ItemStack(this)); - } - } - /** * This is used to pair a {@link net.minecraft.world.item.BlockItem} to a block, which we don't want to do because we don't want to pair our solid bucket items in place of vanilla's. * @param blockToItemMap The {@link Map} pairing {@link Block}s to {@link Item}s. diff --git a/src/main/java/com/gildedgames/aether/item/tools/gravitite/GravititeAxeItem.java b/src/main/java/com/gildedgames/aether/item/tools/gravitite/GravititeAxeItem.java index fd26d32a55..4f472fb3d2 100644 --- a/src/main/java/com/gildedgames/aether/item/tools/gravitite/GravititeAxeItem.java +++ b/src/main/java/com/gildedgames/aether/item/tools/gravitite/GravititeAxeItem.java @@ -1,6 +1,5 @@ package com.gildedgames.aether.item.tools.gravitite; -import com.gildedgames.aether.item.AetherItemGroups; import com.gildedgames.aether.item.combat.AetherItemTiers; import com.gildedgames.aether.item.tools.abilities.GravititeTool; import net.minecraft.core.BlockPos; @@ -16,7 +15,7 @@ public class GravititeAxeItem extends AxeItem implements GravititeTool { public GravititeAxeItem() { - super(AetherItemTiers.GRAVITITE, 5.0F, -3.0F, new Item.Properties().tab(AetherItemGroups.AETHER_TOOLS)); + super(AetherItemTiers.GRAVITITE, 5.0F, -3.0F, new Item.Properties()); } /** diff --git a/src/main/java/com/gildedgames/aether/item/tools/gravitite/GravititeHoeItem.java b/src/main/java/com/gildedgames/aether/item/tools/gravitite/GravititeHoeItem.java index de625c9217..3fe18d7f30 100644 --- a/src/main/java/com/gildedgames/aether/item/tools/gravitite/GravititeHoeItem.java +++ b/src/main/java/com/gildedgames/aether/item/tools/gravitite/GravititeHoeItem.java @@ -1,6 +1,5 @@ package com.gildedgames.aether.item.tools.gravitite; -import com.gildedgames.aether.item.AetherItemGroups; import com.gildedgames.aether.item.combat.AetherItemTiers; import com.gildedgames.aether.item.tools.abilities.GravititeTool; import net.minecraft.core.BlockPos; @@ -16,7 +15,7 @@ public class GravititeHoeItem extends HoeItem implements GravititeTool { public GravititeHoeItem() { - super(AetherItemTiers.GRAVITITE, -3, 0, new Item.Properties().tab(AetherItemGroups.AETHER_TOOLS)); + super(AetherItemTiers.GRAVITITE, -3, 0, new Item.Properties()); } /** diff --git a/src/main/java/com/gildedgames/aether/item/tools/gravitite/GravititePickaxeItem.java b/src/main/java/com/gildedgames/aether/item/tools/gravitite/GravititePickaxeItem.java index 99db05d686..45acf8d2a3 100644 --- a/src/main/java/com/gildedgames/aether/item/tools/gravitite/GravititePickaxeItem.java +++ b/src/main/java/com/gildedgames/aether/item/tools/gravitite/GravititePickaxeItem.java @@ -1,6 +1,5 @@ package com.gildedgames.aether.item.tools.gravitite; -import com.gildedgames.aether.item.AetherItemGroups; import com.gildedgames.aether.item.combat.AetherItemTiers; import com.gildedgames.aether.item.tools.abilities.GravititeTool; import net.minecraft.core.BlockPos; @@ -16,7 +15,7 @@ public class GravititePickaxeItem extends PickaxeItem implements GravititeTool { public GravititePickaxeItem() { - super(AetherItemTiers.GRAVITITE, 1, -2.8F, new Item.Properties().tab(AetherItemGroups.AETHER_TOOLS)); + super(AetherItemTiers.GRAVITITE, 1, -2.8F, new Item.Properties()); } /** diff --git a/src/main/java/com/gildedgames/aether/item/tools/gravitite/GravititeShovelItem.java b/src/main/java/com/gildedgames/aether/item/tools/gravitite/GravititeShovelItem.java index 0b5e8d8ab0..178952c1c5 100644 --- a/src/main/java/com/gildedgames/aether/item/tools/gravitite/GravititeShovelItem.java +++ b/src/main/java/com/gildedgames/aether/item/tools/gravitite/GravititeShovelItem.java @@ -1,6 +1,5 @@ package com.gildedgames.aether.item.tools.gravitite; -import com.gildedgames.aether.item.AetherItemGroups; import com.gildedgames.aether.item.combat.AetherItemTiers; import com.gildedgames.aether.item.tools.abilities.GravititeTool; import net.minecraft.core.BlockPos; @@ -16,7 +15,7 @@ public class GravititeShovelItem extends ShovelItem implements GravititeTool { public GravititeShovelItem() { - super(AetherItemTiers.GRAVITITE, 1.5F, -3.0F, new Item.Properties().tab(AetherItemGroups.AETHER_TOOLS)); + super(AetherItemTiers.GRAVITITE, 1.5F, -3.0F, new Item.Properties()); } /** diff --git a/src/main/java/com/gildedgames/aether/item/tools/holystone/HolystoneAxeItem.java b/src/main/java/com/gildedgames/aether/item/tools/holystone/HolystoneAxeItem.java index 0b2eec1a2e..43f61d4e38 100644 --- a/src/main/java/com/gildedgames/aether/item/tools/holystone/HolystoneAxeItem.java +++ b/src/main/java/com/gildedgames/aether/item/tools/holystone/HolystoneAxeItem.java @@ -1,6 +1,5 @@ package com.gildedgames.aether.item.tools.holystone; -import com.gildedgames.aether.item.AetherItemGroups; import com.gildedgames.aether.item.combat.AetherItemTiers; import com.gildedgames.aether.item.tools.abilities.HolystoneTool; import net.minecraft.world.item.AxeItem; @@ -12,6 +11,6 @@ */ public class HolystoneAxeItem extends AxeItem implements HolystoneTool { public HolystoneAxeItem() { - super(AetherItemTiers.HOLYSTONE, 7.0F, -3.2F, new Item.Properties().tab(AetherItemGroups.AETHER_TOOLS)); + super(AetherItemTiers.HOLYSTONE, 7.0F, -3.2F, new Item.Properties()); } } diff --git a/src/main/java/com/gildedgames/aether/item/tools/holystone/HolystoneHoeItem.java b/src/main/java/com/gildedgames/aether/item/tools/holystone/HolystoneHoeItem.java index 82ac8ffd3d..869d8f8c89 100644 --- a/src/main/java/com/gildedgames/aether/item/tools/holystone/HolystoneHoeItem.java +++ b/src/main/java/com/gildedgames/aether/item/tools/holystone/HolystoneHoeItem.java @@ -1,6 +1,5 @@ package com.gildedgames.aether.item.tools.holystone; -import com.gildedgames.aether.item.AetherItemGroups; import com.gildedgames.aether.item.combat.AetherItemTiers; import com.gildedgames.aether.item.tools.abilities.HolystoneTool; import net.minecraft.world.item.HoeItem; @@ -12,6 +11,6 @@ */ public class HolystoneHoeItem extends HoeItem implements HolystoneTool { public HolystoneHoeItem() { - super(AetherItemTiers.HOLYSTONE, -1, -2.0F, new Item.Properties().tab(AetherItemGroups.AETHER_TOOLS)); + super(AetherItemTiers.HOLYSTONE, -1, -2.0F, new Item.Properties()); } } diff --git a/src/main/java/com/gildedgames/aether/item/tools/holystone/HolystonePickaxeItem.java b/src/main/java/com/gildedgames/aether/item/tools/holystone/HolystonePickaxeItem.java index 0f4cbc53e0..0944910488 100644 --- a/src/main/java/com/gildedgames/aether/item/tools/holystone/HolystonePickaxeItem.java +++ b/src/main/java/com/gildedgames/aether/item/tools/holystone/HolystonePickaxeItem.java @@ -1,6 +1,5 @@ package com.gildedgames.aether.item.tools.holystone; -import com.gildedgames.aether.item.AetherItemGroups; import com.gildedgames.aether.item.combat.AetherItemTiers; import com.gildedgames.aether.item.tools.abilities.HolystoneTool; import net.minecraft.world.item.Item; @@ -12,6 +11,6 @@ */ public class HolystonePickaxeItem extends PickaxeItem implements HolystoneTool { public HolystonePickaxeItem() { - super(AetherItemTiers.HOLYSTONE, 1, -2.8F, new Item.Properties().tab(AetherItemGroups.AETHER_TOOLS)); + super(AetherItemTiers.HOLYSTONE, 1, -2.8F, new Item.Properties()); } } diff --git a/src/main/java/com/gildedgames/aether/item/tools/holystone/HolystoneShovelItem.java b/src/main/java/com/gildedgames/aether/item/tools/holystone/HolystoneShovelItem.java index 6538208eea..380d2eba5c 100644 --- a/src/main/java/com/gildedgames/aether/item/tools/holystone/HolystoneShovelItem.java +++ b/src/main/java/com/gildedgames/aether/item/tools/holystone/HolystoneShovelItem.java @@ -1,6 +1,5 @@ package com.gildedgames.aether.item.tools.holystone; -import com.gildedgames.aether.item.AetherItemGroups; import com.gildedgames.aether.item.combat.AetherItemTiers; import com.gildedgames.aether.item.tools.abilities.HolystoneTool; import net.minecraft.world.item.Item; @@ -12,6 +11,6 @@ */ public class HolystoneShovelItem extends ShovelItem implements HolystoneTool { public HolystoneShovelItem() { - super(AetherItemTiers.HOLYSTONE, 1.5F, -3.0F, new Item.Properties().tab(AetherItemGroups.AETHER_TOOLS)); + super(AetherItemTiers.HOLYSTONE, 1.5F, -3.0F, new Item.Properties()); } } diff --git a/src/main/java/com/gildedgames/aether/item/tools/skyroot/SkyrootAxeItem.java b/src/main/java/com/gildedgames/aether/item/tools/skyroot/SkyrootAxeItem.java index c8188491c3..166168f3a2 100644 --- a/src/main/java/com/gildedgames/aether/item/tools/skyroot/SkyrootAxeItem.java +++ b/src/main/java/com/gildedgames/aether/item/tools/skyroot/SkyrootAxeItem.java @@ -1,6 +1,5 @@ package com.gildedgames.aether.item.tools.skyroot; -import com.gildedgames.aether.item.AetherItemGroups; import com.gildedgames.aether.item.combat.AetherItemTiers; import com.gildedgames.aether.item.tools.abilities.SkyrootTool; import net.minecraft.world.item.AxeItem; @@ -15,7 +14,7 @@ */ public class SkyrootAxeItem extends AxeItem implements SkyrootTool { public SkyrootAxeItem() { - super(AetherItemTiers.SKYROOT, 6.0F, -3.2F, new Item.Properties().tab(AetherItemGroups.AETHER_TOOLS)); + super(AetherItemTiers.SKYROOT, 6.0F, -3.2F, new Item.Properties()); } @Override diff --git a/src/main/java/com/gildedgames/aether/item/tools/skyroot/SkyrootHoeItem.java b/src/main/java/com/gildedgames/aether/item/tools/skyroot/SkyrootHoeItem.java index 9ba94ba791..9da57b5935 100644 --- a/src/main/java/com/gildedgames/aether/item/tools/skyroot/SkyrootHoeItem.java +++ b/src/main/java/com/gildedgames/aether/item/tools/skyroot/SkyrootHoeItem.java @@ -1,6 +1,5 @@ package com.gildedgames.aether.item.tools.skyroot; -import com.gildedgames.aether.item.AetherItemGroups; import com.gildedgames.aether.item.combat.AetherItemTiers; import com.gildedgames.aether.item.tools.abilities.SkyrootTool; import net.minecraft.world.item.Item; @@ -15,7 +14,7 @@ */ public class SkyrootHoeItem extends HoeItem implements SkyrootTool { public SkyrootHoeItem() { - super(AetherItemTiers.SKYROOT, 0, -3.0F, new Item.Properties().tab(AetherItemGroups.AETHER_TOOLS)); + super(AetherItemTiers.SKYROOT, 0, -3.0F, new Item.Properties()); } @Override diff --git a/src/main/java/com/gildedgames/aether/item/tools/skyroot/SkyrootPickaxeItem.java b/src/main/java/com/gildedgames/aether/item/tools/skyroot/SkyrootPickaxeItem.java index cd113bfd55..8f1ebec507 100644 --- a/src/main/java/com/gildedgames/aether/item/tools/skyroot/SkyrootPickaxeItem.java +++ b/src/main/java/com/gildedgames/aether/item/tools/skyroot/SkyrootPickaxeItem.java @@ -1,6 +1,5 @@ package com.gildedgames.aether.item.tools.skyroot; -import com.gildedgames.aether.item.AetherItemGroups; import com.gildedgames.aether.item.combat.AetherItemTiers; import com.gildedgames.aether.item.tools.abilities.SkyrootTool; import net.minecraft.world.item.Item; @@ -15,7 +14,7 @@ */ public class SkyrootPickaxeItem extends PickaxeItem implements SkyrootTool { public SkyrootPickaxeItem() { - super(AetherItemTiers.SKYROOT, 1, -2.8F, new Item.Properties().tab(AetherItemGroups.AETHER_TOOLS)); + super(AetherItemTiers.SKYROOT, 1, -2.8F, new Item.Properties()); } @Override diff --git a/src/main/java/com/gildedgames/aether/item/tools/skyroot/SkyrootShovelItem.java b/src/main/java/com/gildedgames/aether/item/tools/skyroot/SkyrootShovelItem.java index 2c63779521..7c9038edf2 100644 --- a/src/main/java/com/gildedgames/aether/item/tools/skyroot/SkyrootShovelItem.java +++ b/src/main/java/com/gildedgames/aether/item/tools/skyroot/SkyrootShovelItem.java @@ -1,6 +1,5 @@ package com.gildedgames.aether.item.tools.skyroot; -import com.gildedgames.aether.item.AetherItemGroups; import com.gildedgames.aether.item.combat.AetherItemTiers; import com.gildedgames.aether.item.tools.abilities.SkyrootTool; import net.minecraft.world.item.Item; @@ -15,7 +14,7 @@ */ public class SkyrootShovelItem extends ShovelItem implements SkyrootTool { public SkyrootShovelItem() { - super(AetherItemTiers.SKYROOT, 1.5F, -3.0F, new Item.Properties().tab(AetherItemGroups.AETHER_TOOLS)); + super(AetherItemTiers.SKYROOT, 1.5F, -3.0F, new Item.Properties()); } @Override diff --git a/src/main/java/com/gildedgames/aether/item/tools/valkyrie/ValkyrieAxeItem.java b/src/main/java/com/gildedgames/aether/item/tools/valkyrie/ValkyrieAxeItem.java index 24cb63f272..b1ad5ef01e 100644 --- a/src/main/java/com/gildedgames/aether/item/tools/valkyrie/ValkyrieAxeItem.java +++ b/src/main/java/com/gildedgames/aether/item/tools/valkyrie/ValkyrieAxeItem.java @@ -1,24 +1,44 @@ package com.gildedgames.aether.item.tools.valkyrie; -import com.gildedgames.aether.item.AetherItemGroups; import com.gildedgames.aether.item.AetherItems; import com.gildedgames.aether.item.combat.AetherItemTiers; import com.gildedgames.aether.item.tools.abilities.ValkyrieTool; import com.google.common.collect.Multimap; +import net.minecraft.network.chat.Component; import net.minecraft.world.entity.EquipmentSlot; import net.minecraft.world.entity.ai.attributes.Attribute; import net.minecraft.world.entity.ai.attributes.AttributeModifier; import net.minecraft.world.item.AxeItem; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.TooltipFlag; +import net.minecraft.world.level.Level; + +import javax.annotation.Nullable; +import java.util.List; public class ValkyrieAxeItem extends AxeItem implements ValkyrieTool { public ValkyrieAxeItem() { - super(AetherItemTiers.VALKYRIE, 5.0F, -3.3F, new Item.Properties().rarity(AetherItems.AETHER_LOOT).tab(AetherItemGroups.AETHER_TOOLS)); + super(AetherItemTiers.VALKYRIE, 5.0F, -3.3F, new Item.Properties().rarity(AetherItems.AETHER_LOOT)); } @Override public Multimap getAttributeModifiers(EquipmentSlot slot, ItemStack stack) { return this.extendReachModifier(super.getAttributeModifiers(slot, stack), slot); } + + /** + * When in a creative tab, this adds a tooltip to an item indicating what dungeon it can be found in. + * @param stack The {@link ItemStack} with the tooltip. + * @param level The {@link Level} the item is rendered in. + * @param components A {@link List} of {@link Component}s making up this item's tooltip. + * @param flag A {@link TooltipFlag} for the tooltip type. + */ + @Override + public void appendHoverText(ItemStack stack, @Nullable Level level, List components, TooltipFlag flag) { + super.appendHoverText(stack, level, components, flag); + if (flag.isCreative()) { + components.add(AetherItems.SILVER_DUNGEON_TOOLTIP); + } + } } diff --git a/src/main/java/com/gildedgames/aether/item/tools/valkyrie/ValkyrieHoeItem.java b/src/main/java/com/gildedgames/aether/item/tools/valkyrie/ValkyrieHoeItem.java index 49e4338995..fa4839a808 100644 --- a/src/main/java/com/gildedgames/aether/item/tools/valkyrie/ValkyrieHoeItem.java +++ b/src/main/java/com/gildedgames/aether/item/tools/valkyrie/ValkyrieHoeItem.java @@ -1,24 +1,44 @@ package com.gildedgames.aether.item.tools.valkyrie; -import com.gildedgames.aether.item.AetherItemGroups; import com.gildedgames.aether.item.AetherItems; import com.gildedgames.aether.item.combat.AetherItemTiers; import com.gildedgames.aether.item.tools.abilities.ValkyrieTool; import com.google.common.collect.Multimap; +import net.minecraft.network.chat.Component; import net.minecraft.world.entity.EquipmentSlot; import net.minecraft.world.entity.ai.attributes.Attribute; import net.minecraft.world.entity.ai.attributes.AttributeModifier; import net.minecraft.world.item.HoeItem; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.TooltipFlag; +import net.minecraft.world.level.Level; + +import javax.annotation.Nullable; +import java.util.List; public class ValkyrieHoeItem extends HoeItem implements ValkyrieTool { public ValkyrieHoeItem() { - super(AetherItemTiers.VALKYRIE, -4, -0.3F, new Item.Properties().rarity(AetherItems.AETHER_LOOT).tab(AetherItemGroups.AETHER_TOOLS)); + super(AetherItemTiers.VALKYRIE, -4, -0.3F, new Item.Properties().rarity(AetherItems.AETHER_LOOT)); } @Override public Multimap getAttributeModifiers(EquipmentSlot slot, ItemStack stack) { return this.extendReachModifier(super.getAttributeModifiers(slot, stack), slot); } + + /** + * When in a creative tab, this adds a tooltip to an item indicating what dungeon it can be found in. + * @param stack The {@link ItemStack} with the tooltip. + * @param level The {@link Level} the item is rendered in. + * @param components A {@link List} of {@link Component}s making up this item's tooltip. + * @param flag A {@link TooltipFlag} for the tooltip type. + */ + @Override + public void appendHoverText(ItemStack stack, @Nullable Level level, List components, TooltipFlag flag) { + super.appendHoverText(stack, level, components, flag); + if (flag.isCreative()) { + components.add(AetherItems.SILVER_DUNGEON_TOOLTIP); + } + } } diff --git a/src/main/java/com/gildedgames/aether/item/tools/valkyrie/ValkyriePickaxeItem.java b/src/main/java/com/gildedgames/aether/item/tools/valkyrie/ValkyriePickaxeItem.java index 3bb7123b0c..a6dcf74120 100644 --- a/src/main/java/com/gildedgames/aether/item/tools/valkyrie/ValkyriePickaxeItem.java +++ b/src/main/java/com/gildedgames/aether/item/tools/valkyrie/ValkyriePickaxeItem.java @@ -1,24 +1,44 @@ package com.gildedgames.aether.item.tools.valkyrie; -import com.gildedgames.aether.item.AetherItemGroups; import com.gildedgames.aether.item.AetherItems; import com.gildedgames.aether.item.combat.AetherItemTiers; import com.gildedgames.aether.item.tools.abilities.ValkyrieTool; import com.google.common.collect.Multimap; +import net.minecraft.network.chat.Component; import net.minecraft.world.entity.EquipmentSlot; import net.minecraft.world.entity.ai.attributes.Attribute; import net.minecraft.world.entity.ai.attributes.AttributeModifier; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.PickaxeItem; +import net.minecraft.world.item.TooltipFlag; +import net.minecraft.world.level.Level; + +import javax.annotation.Nullable; +import java.util.List; public class ValkyriePickaxeItem extends PickaxeItem implements ValkyrieTool { public ValkyriePickaxeItem() { - super(AetherItemTiers.VALKYRIE, 1, -3.1F, new Item.Properties().rarity(AetherItems.AETHER_LOOT).tab(AetherItemGroups.AETHER_TOOLS)); + super(AetherItemTiers.VALKYRIE, 1, -3.1F, new Item.Properties().rarity(AetherItems.AETHER_LOOT)); } @Override public Multimap getAttributeModifiers(EquipmentSlot slot, ItemStack stack) { return this.extendReachModifier(super.getAttributeModifiers(slot, stack), slot); } + + /** + * When in a creative tab, this adds a tooltip to an item indicating what dungeon it can be found in. + * @param stack The {@link ItemStack} with the tooltip. + * @param level The {@link Level} the item is rendered in. + * @param components A {@link List} of {@link Component}s making up this item's tooltip. + * @param flag A {@link TooltipFlag} for the tooltip type. + */ + @Override + public void appendHoverText(ItemStack stack, @Nullable Level level, List components, TooltipFlag flag) { + super.appendHoverText(stack, level, components, flag); + if (flag.isCreative()) { + components.add(AetherItems.SILVER_DUNGEON_TOOLTIP); + } + } } diff --git a/src/main/java/com/gildedgames/aether/item/tools/valkyrie/ValkyrieShovelItem.java b/src/main/java/com/gildedgames/aether/item/tools/valkyrie/ValkyrieShovelItem.java index 2583b1e45a..218ae423fd 100644 --- a/src/main/java/com/gildedgames/aether/item/tools/valkyrie/ValkyrieShovelItem.java +++ b/src/main/java/com/gildedgames/aether/item/tools/valkyrie/ValkyrieShovelItem.java @@ -1,24 +1,44 @@ package com.gildedgames.aether.item.tools.valkyrie; -import com.gildedgames.aether.item.AetherItemGroups; import com.gildedgames.aether.item.AetherItems; import com.gildedgames.aether.item.combat.AetherItemTiers; import com.gildedgames.aether.item.tools.abilities.ValkyrieTool; import com.google.common.collect.Multimap; +import net.minecraft.network.chat.Component; import net.minecraft.world.entity.EquipmentSlot; import net.minecraft.world.entity.ai.attributes.Attribute; import net.minecraft.world.entity.ai.attributes.AttributeModifier; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ShovelItem; +import net.minecraft.world.item.TooltipFlag; +import net.minecraft.world.level.Level; + +import javax.annotation.Nullable; +import java.util.List; public class ValkyrieShovelItem extends ShovelItem implements ValkyrieTool { public ValkyrieShovelItem() { - super(AetherItemTiers.VALKYRIE, 1.5F, -3.3F, new Item.Properties().rarity(AetherItems.AETHER_LOOT).tab(AetherItemGroups.AETHER_TOOLS)); + super(AetherItemTiers.VALKYRIE, 1.5F, -3.3F, new Item.Properties().rarity(AetherItems.AETHER_LOOT)); } @Override public Multimap getAttributeModifiers(EquipmentSlot slot, ItemStack stack) { return this.extendReachModifier(super.getAttributeModifiers(slot, stack), slot); } + + /** + * When in a creative tab, this adds a tooltip to an item indicating what dungeon it can be found in. + * @param stack The {@link ItemStack} with the tooltip. + * @param level The {@link Level} the item is rendered in. + * @param components A {@link List} of {@link Component}s making up this item's tooltip. + * @param flag A {@link TooltipFlag} for the tooltip type. + */ + @Override + public void appendHoverText(ItemStack stack, @Nullable Level level, List components, TooltipFlag flag) { + super.appendHoverText(stack, level, components, flag); + if (flag.isCreative()) { + components.add(AetherItems.SILVER_DUNGEON_TOOLTIP); + } + } } diff --git a/src/main/java/com/gildedgames/aether/item/tools/zanite/ZaniteAxeItem.java b/src/main/java/com/gildedgames/aether/item/tools/zanite/ZaniteAxeItem.java index d69783dc8e..c2033e2688 100644 --- a/src/main/java/com/gildedgames/aether/item/tools/zanite/ZaniteAxeItem.java +++ b/src/main/java/com/gildedgames/aether/item/tools/zanite/ZaniteAxeItem.java @@ -1,6 +1,5 @@ package com.gildedgames.aether.item.tools.zanite; -import com.gildedgames.aether.item.AetherItemGroups; import com.gildedgames.aether.item.combat.AetherItemTiers; import com.gildedgames.aether.item.tools.abilities.ZaniteTool; import net.minecraft.world.item.AxeItem; @@ -12,6 +11,6 @@ */ public class ZaniteAxeItem extends AxeItem implements ZaniteTool { public ZaniteAxeItem() { - super(AetherItemTiers.ZANITE, 6.0F, -3.1F, new Item.Properties().tab(AetherItemGroups.AETHER_TOOLS)); + super(AetherItemTiers.ZANITE, 6.0F, -3.1F, new Item.Properties()); } } diff --git a/src/main/java/com/gildedgames/aether/item/tools/zanite/ZaniteHoeItem.java b/src/main/java/com/gildedgames/aether/item/tools/zanite/ZaniteHoeItem.java index b1392b4190..055e5b68fd 100644 --- a/src/main/java/com/gildedgames/aether/item/tools/zanite/ZaniteHoeItem.java +++ b/src/main/java/com/gildedgames/aether/item/tools/zanite/ZaniteHoeItem.java @@ -1,6 +1,5 @@ package com.gildedgames.aether.item.tools.zanite; -import com.gildedgames.aether.item.AetherItemGroups; import com.gildedgames.aether.item.combat.AetherItemTiers; import com.gildedgames.aether.item.tools.abilities.ZaniteTool; import net.minecraft.world.item.HoeItem; @@ -12,6 +11,6 @@ */ public class ZaniteHoeItem extends HoeItem implements ZaniteTool { public ZaniteHoeItem() { - super(AetherItemTiers.ZANITE, -2, -1.0F, new Item.Properties().tab(AetherItemGroups.AETHER_TOOLS)); + super(AetherItemTiers.ZANITE, -2, -1.0F, new Item.Properties()); } } diff --git a/src/main/java/com/gildedgames/aether/item/tools/zanite/ZanitePickaxeItem.java b/src/main/java/com/gildedgames/aether/item/tools/zanite/ZanitePickaxeItem.java index 48adc295f0..8474e71bbf 100644 --- a/src/main/java/com/gildedgames/aether/item/tools/zanite/ZanitePickaxeItem.java +++ b/src/main/java/com/gildedgames/aether/item/tools/zanite/ZanitePickaxeItem.java @@ -1,6 +1,5 @@ package com.gildedgames.aether.item.tools.zanite; -import com.gildedgames.aether.item.AetherItemGroups; import com.gildedgames.aether.item.combat.AetherItemTiers; import com.gildedgames.aether.item.tools.abilities.ZaniteTool; import net.minecraft.world.item.Item; @@ -12,6 +11,6 @@ */ public class ZanitePickaxeItem extends PickaxeItem implements ZaniteTool { public ZanitePickaxeItem() { - super(AetherItemTiers.ZANITE, 1, -2.8F, new Item.Properties().tab(AetherItemGroups.AETHER_TOOLS)); + super(AetherItemTiers.ZANITE, 1, -2.8F, new Item.Properties()); } } diff --git a/src/main/java/com/gildedgames/aether/item/tools/zanite/ZaniteShovelItem.java b/src/main/java/com/gildedgames/aether/item/tools/zanite/ZaniteShovelItem.java index b11eb169a5..e607049904 100644 --- a/src/main/java/com/gildedgames/aether/item/tools/zanite/ZaniteShovelItem.java +++ b/src/main/java/com/gildedgames/aether/item/tools/zanite/ZaniteShovelItem.java @@ -1,6 +1,5 @@ package com.gildedgames.aether.item.tools.zanite; -import com.gildedgames.aether.item.AetherItemGroups; import com.gildedgames.aether.item.combat.AetherItemTiers; import com.gildedgames.aether.item.tools.abilities.ZaniteTool; import net.minecraft.world.item.Item; @@ -12,6 +11,6 @@ */ public class ZaniteShovelItem extends ShovelItem implements ZaniteTool { public ZaniteShovelItem() { - super(AetherItemTiers.ZANITE, 1.5F, -3.0F, new Item.Properties().tab(AetherItemGroups.AETHER_TOOLS)); + super(AetherItemTiers.ZANITE, 1.5F, -3.0F, new Item.Properties()); } } diff --git a/src/main/java/com/gildedgames/aether/loot/AetherLoot.java b/src/main/java/com/gildedgames/aether/loot/AetherLoot.java index 410457de5e..c4c5e7b10e 100644 --- a/src/main/java/com/gildedgames/aether/loot/AetherLoot.java +++ b/src/main/java/com/gildedgames/aether/loot/AetherLoot.java @@ -1,5 +1,6 @@ package com.gildedgames.aether.loot; +import java.util.Collections; import java.util.HashSet; import java.util.Set; @@ -9,6 +10,7 @@ public class AetherLoot { private static final Set LOOT_TABLES = new HashSet<>(); + public static final Set IMMUTABLE_LOOT_TABLES = Collections.unmodifiableSet(LOOT_TABLES); public static final ResourceLocation ENTITIES_SHEEPUFF_WHITE = register("entities/sheepuff/white"); public static final ResourceLocation ENTITIES_SHEEPUFF_ORANGE = register("entities/sheepuff/orange"); diff --git a/src/main/java/com/gildedgames/aether/loot/AetherLootContexts.java b/src/main/java/com/gildedgames/aether/loot/AetherLootContexts.java index f7fd46b5ca..43cc3550e0 100644 --- a/src/main/java/com/gildedgames/aether/loot/AetherLootContexts.java +++ b/src/main/java/com/gildedgames/aether/loot/AetherLootContexts.java @@ -2,7 +2,8 @@ import com.gildedgames.aether.mixin.mixins.common.accessor.LootContextParamSetsAccessor; import net.minecraft.world.level.storage.loot.parameters.LootContextParamSet; +import net.minecraft.world.level.storage.loot.parameters.LootContextParams; public class AetherLootContexts { - public static final LootContextParamSet STRIPPING = LootContextParamSetsAccessor.callRegister("aether:stripping", LootContextParamSet.Builder::build); + public static final LootContextParamSet STRIPPING = LootContextParamSetsAccessor.callRegister("aether:stripping", (builder) -> builder.required(LootContextParams.TOOL).build()); } diff --git a/src/main/java/com/gildedgames/aether/loot/conditions/AetherLootConditions.java b/src/main/java/com/gildedgames/aether/loot/conditions/AetherLootConditions.java index 9c4cfbc061..d800444d3b 100644 --- a/src/main/java/com/gildedgames/aether/loot/conditions/AetherLootConditions.java +++ b/src/main/java/com/gildedgames/aether/loot/conditions/AetherLootConditions.java @@ -1,13 +1,13 @@ package com.gildedgames.aether.loot.conditions; import com.gildedgames.aether.Aether; -import net.minecraft.core.Registry; +import net.minecraft.core.registries.Registries; import net.minecraft.world.level.storage.loot.predicates.LootItemConditionType; import net.minecraftforge.registries.DeferredRegister; import net.minecraftforge.registries.RegistryObject; public class AetherLootConditions { - public static final DeferredRegister LOOT_CONDITION_TYPES = DeferredRegister.create(Registry.LOOT_ITEM_REGISTRY, Aether.MODID); + public static final DeferredRegister LOOT_CONDITION_TYPES = DeferredRegister.create(Registries.LOOT_CONDITION_TYPE, Aether.MODID); public static final RegistryObject CONFIG_ENABLED = LOOT_CONDITION_TYPES.register("config_enabled", () -> new LootItemConditionType(new ConfigEnabled.Serializer())); } diff --git a/src/main/java/com/gildedgames/aether/loot/functions/AetherLootFunctions.java b/src/main/java/com/gildedgames/aether/loot/functions/AetherLootFunctions.java index 0177d43aba..3b71942e7e 100644 --- a/src/main/java/com/gildedgames/aether/loot/functions/AetherLootFunctions.java +++ b/src/main/java/com/gildedgames/aether/loot/functions/AetherLootFunctions.java @@ -1,13 +1,13 @@ package com.gildedgames.aether.loot.functions; import com.gildedgames.aether.Aether; -import net.minecraft.core.Registry; +import net.minecraft.core.registries.Registries; import net.minecraft.world.level.storage.loot.functions.LootItemFunctionType; import net.minecraftforge.registries.DeferredRegister; import net.minecraftforge.registries.RegistryObject; public class AetherLootFunctions { - public static final DeferredRegister LOOT_FUNCTION_TYPES = DeferredRegister.create(Registry.LOOT_FUNCTION_REGISTRY, Aether.MODID); + public static final DeferredRegister LOOT_FUNCTION_TYPES = DeferredRegister.create(Registries.LOOT_FUNCTION_TYPE, Aether.MODID); public static final RegistryObject DOUBLE_DROPS = LOOT_FUNCTION_TYPES.register("double_drops", () -> new LootItemFunctionType(new DoubleDrops.Serializer())); public static final RegistryObject SPAWN_TNT = LOOT_FUNCTION_TYPES.register("spawn_tnt", () -> new LootItemFunctionType(new SpawnTNT.Serializer())); diff --git a/src/main/java/com/gildedgames/aether/mixin/mixins/client/accessor/ButtonAccessor.java b/src/main/java/com/gildedgames/aether/mixin/mixins/client/accessor/ButtonAccessor.java new file mode 100644 index 0000000000..22ddd4595a --- /dev/null +++ b/src/main/java/com/gildedgames/aether/mixin/mixins/client/accessor/ButtonAccessor.java @@ -0,0 +1,12 @@ +package com.gildedgames.aether.mixin.mixins.client.accessor; + +import net.minecraft.client.gui.components.Button; +import net.minecraft.network.chat.MutableComponent; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Invoker; + +@Mixin(Button.class) +public interface ButtonAccessor { + @Invoker + MutableComponent callCreateNarrationMessage(); +} \ No newline at end of file diff --git a/src/main/java/com/gildedgames/aether/mixin/mixins/common/DimensionTypeMixin.java b/src/main/java/com/gildedgames/aether/mixin/mixins/common/DimensionTypeMixin.java index 3d2f2be5c2..4d645692b1 100644 --- a/src/main/java/com/gildedgames/aether/mixin/mixins/common/DimensionTypeMixin.java +++ b/src/main/java/com/gildedgames/aether/mixin/mixins/common/DimensionTypeMixin.java @@ -1,6 +1,6 @@ package com.gildedgames.aether.mixin.mixins.common; -import com.gildedgames.aether.data.resources.AetherDimensions; +import com.gildedgames.aether.data.resources.registries.AetherDimensions; import net.minecraft.resources.ResourceLocation; import net.minecraft.util.Mth; import net.minecraft.world.level.dimension.DimensionType; diff --git a/src/main/java/com/gildedgames/aether/mixin/mixins/common/accessor/BlockLootAccessor.java b/src/main/java/com/gildedgames/aether/mixin/mixins/common/accessor/BlockLootAccessor.java index 72e65cded9..8a7b1bba42 100644 --- a/src/main/java/com/gildedgames/aether/mixin/mixins/common/accessor/BlockLootAccessor.java +++ b/src/main/java/com/gildedgames/aether/mixin/mixins/common/accessor/BlockLootAccessor.java @@ -1,11 +1,11 @@ package com.gildedgames.aether.mixin.mixins.common.accessor; -import net.minecraft.data.loot.BlockLoot; +import net.minecraft.data.loot.BlockLootSubProvider; import net.minecraft.world.level.storage.loot.predicates.LootItemCondition; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.gen.Accessor; -@Mixin(BlockLoot.class) +@Mixin(BlockLootSubProvider.class) public interface BlockLootAccessor { @Accessor("HAS_SILK_TOUCH") static LootItemCondition.Builder hasSilkTouch() { diff --git a/src/main/java/com/gildedgames/aether/network/packet/client/ClientGrabItemPacket.java b/src/main/java/com/gildedgames/aether/network/packet/client/ClientGrabItemPacket.java index a8db82c494..6cb1331bf8 100644 --- a/src/main/java/com/gildedgames/aether/network/packet/client/ClientGrabItemPacket.java +++ b/src/main/java/com/gildedgames/aether/network/packet/client/ClientGrabItemPacket.java @@ -2,28 +2,25 @@ import com.gildedgames.aether.network.AetherPacket; import net.minecraft.client.Minecraft; -import net.minecraft.client.player.LocalPlayer; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraft.network.FriendlyByteBuf; -public record ClientGrabItemPacket(int playerID, ItemStack stack) implements AetherPacket { +public record ClientGrabItemPacket(ItemStack stack) implements AetherPacket { @Override public void encode(FriendlyByteBuf buf) { - buf.writeInt(this.playerID); buf.writeItem(this.stack); } public static ClientGrabItemPacket decode(FriendlyByteBuf buf) { - int playerID = buf.readInt(); ItemStack stack = buf.readItem(); - return new ClientGrabItemPacket(playerID, stack); + return new ClientGrabItemPacket(stack); } @Override public void execute(Player playerEntity) { - if (Minecraft.getInstance().player != null && Minecraft.getInstance().level != null && Minecraft.getInstance().player.level.getEntity(this.playerID) instanceof LocalPlayer localPlayer) { - localPlayer.containerMenu.setCarried(this.stack); + if (Minecraft.getInstance().player != null && Minecraft.getInstance().level != null) { + Minecraft.getInstance().player.containerMenu.setCarried(this.stack); } } } diff --git a/src/main/java/com/gildedgames/aether/network/packet/server/OpenAccessoriesPacket.java b/src/main/java/com/gildedgames/aether/network/packet/server/OpenAccessoriesPacket.java index 6bb78bfb23..74c318c5ca 100644 --- a/src/main/java/com/gildedgames/aether/network/packet/server/OpenAccessoriesPacket.java +++ b/src/main/java/com/gildedgames/aether/network/packet/server/OpenAccessoriesPacket.java @@ -12,28 +12,26 @@ import net.minecraft.network.FriendlyByteBuf; import net.minecraftforge.network.NetworkHooks; -public record OpenAccessoriesPacket(int playerID, ItemStack carryStack) implements AetherPacket { +public record OpenAccessoriesPacket(ItemStack carryStack) implements AetherPacket { @Override public void encode(FriendlyByteBuf buf) { - buf.writeInt(this.playerID); buf.writeItem(this.carryStack); } public static OpenAccessoriesPacket decode(FriendlyByteBuf buf) { - int playerID = buf.readInt(); ItemStack carryStack = buf.readItem(); - return new OpenAccessoriesPacket(playerID, carryStack); + return new OpenAccessoriesPacket(carryStack); } @Override public void execute(Player player) { - if (player != null && player.getServer() != null && player.level.getEntity(this.playerID) instanceof ServerPlayer serverPlayer) { + if (player != null && player.getServer() != null && player instanceof ServerPlayer serverPlayer) { ItemStack itemStack = serverPlayer.isCreative() ? this.carryStack : serverPlayer.containerMenu.getCarried(); serverPlayer.containerMenu.setCarried(ItemStack.EMPTY); NetworkHooks.openScreen(serverPlayer, new SimpleMenuProvider((id, inventory, playerEntity) -> new AccessoriesMenu(id, inventory), Component.translatable("container.crafting"))); if (!itemStack.isEmpty()) { serverPlayer.containerMenu.setCarried(itemStack); - AetherPacketHandler.sendToPlayer(new ClientGrabItemPacket(serverPlayer.getId(), itemStack), serverPlayer); + AetherPacketHandler.sendToPlayer(new ClientGrabItemPacket(itemStack), serverPlayer); } } } diff --git a/src/main/java/com/gildedgames/aether/network/packet/server/OpenInventoryPacket.java b/src/main/java/com/gildedgames/aether/network/packet/server/OpenInventoryPacket.java index 680dd254d1..e27e5944d2 100644 --- a/src/main/java/com/gildedgames/aether/network/packet/server/OpenInventoryPacket.java +++ b/src/main/java/com/gildedgames/aether/network/packet/server/OpenInventoryPacket.java @@ -8,28 +8,28 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.network.FriendlyByteBuf; -public record OpenInventoryPacket(int playerID, ItemStack carryStack) implements AetherPacket { +public record OpenInventoryPacket(ItemStack carryStack) implements AetherPacket { @Override public void encode(FriendlyByteBuf buf) { - buf.writeInt(this.playerID); buf.writeItem(this.carryStack); } public static OpenInventoryPacket decode(FriendlyByteBuf buf) { - int playerID = buf.readInt(); ItemStack carryStack = buf.readItem(); - return new OpenInventoryPacket(playerID, carryStack); + return new OpenInventoryPacket(carryStack); } @Override public void execute(Player playerEntity) { - if (playerEntity != null && playerEntity.getServer() != null && playerEntity.level.getEntity(this.playerID) instanceof ServerPlayer serverPlayer) { + if (playerEntity != null && playerEntity.getServer() != null && playerEntity instanceof ServerPlayer serverPlayer) { ItemStack itemStack = serverPlayer.isCreative() ? this.carryStack : serverPlayer.containerMenu.getCarried(); serverPlayer.containerMenu.setCarried(ItemStack.EMPTY); serverPlayer.doCloseContainer(); if (!itemStack.isEmpty()) { - serverPlayer.containerMenu.setCarried(itemStack); - AetherPacketHandler.sendToPlayer(new ClientGrabItemPacket(serverPlayer.getId(), itemStack), serverPlayer); + if (!serverPlayer.isCreative()) { + serverPlayer.containerMenu.setCarried(itemStack); + AetherPacketHandler.sendToPlayer(new ClientGrabItemPacket(itemStack), serverPlayer); + } } } } diff --git a/src/main/java/com/gildedgames/aether/recipe/AetherBookCategory.java b/src/main/java/com/gildedgames/aether/recipe/AetherBookCategory.java new file mode 100644 index 0000000000..1230eb525c --- /dev/null +++ b/src/main/java/com/gildedgames/aether/recipe/AetherBookCategory.java @@ -0,0 +1,24 @@ +package com.gildedgames.aether.recipe; + +import net.minecraft.util.StringRepresentable; + +public enum AetherBookCategory implements StringRepresentable { + ENCHANTING_FOOD("enchanting_food"), + ENCHANTING_BLOCKS("enchanting_blocks"), + ENCHANTING_MISC("enchanting_misc"), + ENCHANTING_REPAIR("enchanting_repair"), + FREEZABLE_BLOCKS("freezable_blocks"), + FREEZABLE_MISC("freezable_misc"), + UNKNOWN("unknown"); + + public static final StringRepresentable.EnumCodec CODEC = StringRepresentable.fromEnum(AetherBookCategory::values); + private final String name; + + AetherBookCategory(String name) { + this.name = name; + } + + public String getSerializedName() { + return this.name; + } +} diff --git a/src/main/java/com/gildedgames/aether/recipe/AetherRecipeSerializers.java b/src/main/java/com/gildedgames/aether/recipe/AetherRecipeSerializers.java index 563a993ba7..2459bf1080 100644 --- a/src/main/java/com/gildedgames/aether/recipe/AetherRecipeSerializers.java +++ b/src/main/java/com/gildedgames/aether/recipe/AetherRecipeSerializers.java @@ -5,6 +5,7 @@ import com.gildedgames.aether.recipe.recipes.ban.*; import com.gildedgames.aether.recipe.recipes.block.*; import com.gildedgames.aether.recipe.recipes.item.*; +import com.gildedgames.aether.recipe.serializer.AetherCookingSerializer; import com.gildedgames.aether.recipe.serializer.BiomeParameterRecipeSerializer; import com.gildedgames.aether.recipe.serializer.BlockStateRecipeSerializer; import com.gildedgames.aether.recipe.serializer.PlacementBanRecipeSerializer; @@ -15,15 +16,14 @@ import net.minecraftforge.registries.ForgeRegistries; import net.minecraft.world.item.crafting.RecipeSerializer; -import net.minecraft.world.item.crafting.SimpleCookingSerializer; import net.minecraftforge.registries.RegistryObject; public class AetherRecipeSerializers { public static final DeferredRegister> RECIPE_SERIALIZERS = DeferredRegister.create(ForgeRegistries.RECIPE_SERIALIZERS, Aether.MODID); public static final RegistryObject> REPAIRING = RECIPE_SERIALIZERS.register("repairing", AltarRepairRecipe.Serializer::new); - public static final RegistryObject> ENCHANTING = RECIPE_SERIALIZERS.register("enchanting", EnchantingRecipe.Serializer::new); - public static final RegistryObject> FREEZING = RECIPE_SERIALIZERS.register("freezing", FreezingRecipe.Serializer::new); + public static final RegistryObject> ENCHANTING = RECIPE_SERIALIZERS.register("enchanting", EnchantingRecipe.Serializer::new); + public static final RegistryObject> FREEZING = RECIPE_SERIALIZERS.register("freezing", FreezingRecipe.Serializer::new); public static final RegistryObject> INCUBATION = RECIPE_SERIALIZERS.register("incubation", IncubationRecipe.Serializer::new); public static final RegistryObject> AMBROSIUM_ENCHANTING = RECIPE_SERIALIZERS.register("ambrosium_enchanting", AmbrosiumRecipe.Serializer::new); public static final RegistryObject> SWET_BALL_CONVERSION = RECIPE_SERIALIZERS.register("swet_ball_conversion", SwetBallRecipe.Serializer::new); diff --git a/src/main/java/com/gildedgames/aether/recipe/AetherRecipeTypes.java b/src/main/java/com/gildedgames/aether/recipe/AetherRecipeTypes.java index ba5ce72acc..e6cab8d144 100644 --- a/src/main/java/com/gildedgames/aether/recipe/AetherRecipeTypes.java +++ b/src/main/java/com/gildedgames/aether/recipe/AetherRecipeTypes.java @@ -13,14 +13,14 @@ public class AetherRecipeTypes { public static final DeferredRegister> RECIPE_TYPES = DeferredRegister.create(ForgeRegistries.RECIPE_TYPES, Aether.MODID); - public static RegistryObject> ENCHANTING = RECIPE_TYPES.register("enchanting", () -> RecipeType.simple(new ResourceLocation(Aether.MODID, "enchanting"))); - public static RegistryObject> FREEZING = RECIPE_TYPES.register("freezing", () -> RecipeType.simple(new ResourceLocation(Aether.MODID, "freezing"))); - public static RegistryObject> INCUBATION = RECIPE_TYPES.register("incubation", () -> RecipeType.simple(new ResourceLocation(Aether.MODID, "incubation"))); - public static RegistryObject> AMBROSIUM_ENCHANTING = RECIPE_TYPES.register("ambrosium_enchanting", () -> RecipeType.simple(new ResourceLocation(Aether.MODID, "ambrosium_enchanting"))); - public static RegistryObject> SWET_BALL_CONVERSION = RECIPE_TYPES.register("swet_ball_conversion", () -> RecipeType.simple(new ResourceLocation(Aether.MODID, "swet_ball_conversion"))); - public static RegistryObject> ICESTONE_FREEZABLE = RECIPE_TYPES.register("icestone_freezable", () -> RecipeType.simple(new ResourceLocation(Aether.MODID, "icestone_freezable"))); - public static RegistryObject> ACCESSORY_FREEZABLE = RECIPE_TYPES.register("accessory_freezable", () -> RecipeType.simple(new ResourceLocation(Aether.MODID, "accessory_freezable"))); - public static RegistryObject> PLACEMENT_CONVERSION = RECIPE_TYPES.register("placement_conversion", () -> RecipeType.simple(new ResourceLocation(Aether.MODID, "placement_conversion"))); - public static RegistryObject> ITEM_PLACEMENT_BAN = RECIPE_TYPES.register("item_placement_ban", () -> RecipeType.simple(new ResourceLocation(Aether.MODID, "item_placement_ban"))); - public static RegistryObject> BLOCK_PLACEMENT_BAN = RECIPE_TYPES.register("block_placement_ban", () -> RecipeType.simple(new ResourceLocation(Aether.MODID, "block_placement_ban"))); + public static final RegistryObject> ENCHANTING = RECIPE_TYPES.register("enchanting", () -> RecipeType.simple(new ResourceLocation(Aether.MODID, "enchanting"))); + public static final RegistryObject> FREEZING = RECIPE_TYPES.register("freezing", () -> RecipeType.simple(new ResourceLocation(Aether.MODID, "freezing"))); + public static final RegistryObject> INCUBATION = RECIPE_TYPES.register("incubation", () -> RecipeType.simple(new ResourceLocation(Aether.MODID, "incubation"))); + public static final RegistryObject> AMBROSIUM_ENCHANTING = RECIPE_TYPES.register("ambrosium_enchanting", () -> RecipeType.simple(new ResourceLocation(Aether.MODID, "ambrosium_enchanting"))); + public static final RegistryObject> SWET_BALL_CONVERSION = RECIPE_TYPES.register("swet_ball_conversion", () -> RecipeType.simple(new ResourceLocation(Aether.MODID, "swet_ball_conversion"))); + public static final RegistryObject> ICESTONE_FREEZABLE = RECIPE_TYPES.register("icestone_freezable", () -> RecipeType.simple(new ResourceLocation(Aether.MODID, "icestone_freezable"))); + public static final RegistryObject> ACCESSORY_FREEZABLE = RECIPE_TYPES.register("accessory_freezable", () -> RecipeType.simple(new ResourceLocation(Aether.MODID, "accessory_freezable"))); + public static final RegistryObject> PLACEMENT_CONVERSION = RECIPE_TYPES.register("placement_conversion", () -> RecipeType.simple(new ResourceLocation(Aether.MODID, "placement_conversion"))); + public static final RegistryObject> ITEM_PLACEMENT_BAN = RECIPE_TYPES.register("item_placement_ban", () -> RecipeType.simple(new ResourceLocation(Aether.MODID, "item_placement_ban"))); + public static final RegistryObject> BLOCK_PLACEMENT_BAN = RECIPE_TYPES.register("block_placement_ban", () -> RecipeType.simple(new ResourceLocation(Aether.MODID, "block_placement_ban"))); } diff --git a/src/main/java/com/gildedgames/aether/recipe/BlockPropertyPair.java b/src/main/java/com/gildedgames/aether/recipe/BlockPropertyPair.java index 9fdc810952..3b14baa9a7 100644 --- a/src/main/java/com/gildedgames/aether/recipe/BlockPropertyPair.java +++ b/src/main/java/com/gildedgames/aether/recipe/BlockPropertyPair.java @@ -7,11 +7,21 @@ import java.util.HashSet; import java.util.Map; +/** + * Used to store a block alongside a block's properties. + */ public record BlockPropertyPair(Block block, Map, Comparable> properties) { public static BlockPropertyPair of(Block block, Map, Comparable> properties) { return new BlockPropertyPair(block, properties); } + /** + * Checks if the {@link BlockState} matches the block, before calling {@link BlockPropertyPair#propertiesMatch(BlockState, Map)}. + * @param state The {@link BlockState}. + * @param block The {@link Block}. + * @param properties The {@link Map} of {@link Property} keys and {@link Comparable} values. + * @return Whether the block and properties match the {@link BlockState}. + */ public static boolean matches(BlockState state, Block block, Map, Comparable> properties) { if (state.is(block)) { return propertiesMatch(state, properties); @@ -19,6 +29,12 @@ public static boolean matches(BlockState state, Block block, Map, Co return false; } + /** + * Checks if the set of given properties all exist within the set of properties of the given {@link BlockState}. + * @param state The {@link BlockState}. + * @param properties The {@link Map} of {@link Property} keys and {@link Comparable} values. + * @return Whether all the properties are found within the {@link BlockState}. + */ public static boolean propertiesMatch(BlockState state, Map, Comparable> properties) { if (!properties.isEmpty()) { HashSet, Comparable>> stateProperties = new HashSet<>(state.getValues().entrySet()); @@ -27,6 +43,11 @@ public static boolean propertiesMatch(BlockState state, Map, Compara return true; } + /** + * Calls {@link BlockPropertyPair#matches(BlockState, Block, Map)} with the provided values from this {@link BlockPropertyPair}. + * @param state A {@link BlockState} from the world. + * @return Whether the block and properties match the {@link BlockState}. + */ public boolean matches(BlockState state) { return BlockPropertyPair.matches(state, this.block(), this.properties()); } diff --git a/src/main/java/com/gildedgames/aether/recipe/BlockStateIngredient.java b/src/main/java/com/gildedgames/aether/recipe/BlockStateIngredient.java index aabf6f40f1..c30d0070e3 100644 --- a/src/main/java/com/gildedgames/aether/recipe/BlockStateIngredient.java +++ b/src/main/java/com/gildedgames/aether/recipe/BlockStateIngredient.java @@ -2,7 +2,7 @@ import com.gildedgames.aether.util.BlockStateRecipeUtil; import com.google.gson.*; -import net.minecraft.core.Registry; +import net.minecraft.core.registries.Registries; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.resources.ResourceLocation; import net.minecraft.tags.TagKey; @@ -19,6 +19,9 @@ import java.util.stream.Stream; import java.util.stream.StreamSupport; +/** + * Based on {@link net.minecraft.world.item.crafting.Ingredient}, except based on a {@link Predicate}<{@link BlockState}>. + */ public class BlockStateIngredient implements Predicate { public static final BlockStateIngredient EMPTY = new BlockStateIngredient(Stream.empty()); private final BlockStateIngredient.Value[] values; @@ -35,6 +38,10 @@ private void dissolve() { } } + /** + * Warning for "ConstantConditions" is suppressed because the potential of {@link BlockStateIngredient#pairs} being null is avoided by {@link BlockStateIngredient#dissolve()}. + */ + @SuppressWarnings("ConstantConditions") @Override public boolean test(BlockState state) { this.dissolve(); @@ -82,6 +89,10 @@ public static BlockStateIngredient of(TagKey tag) { return fromValues(Stream.of(new BlockStateIngredient.TagValue(tag))); } + /** + * Warning for "ConstantConditions" is suppressed because the potential of {@link BlockStateIngredient#pairs} being null is avoided by {@link BlockStateIngredient#dissolve()}. + */ + @SuppressWarnings("ConstantConditions") public final void toNetwork(FriendlyByteBuf buf) { this.dissolve(); buf.writeCollection(Arrays.asList(this.pairs), BlockStateRecipeUtil::writePair); @@ -116,7 +127,7 @@ public static BlockStateIngredient fromJson(@Nullable JsonElement json) { if (jsonArray.size() == 0) { throw new JsonSyntaxException("Block array cannot be empty, at least one item must be defined"); } else { - return fromValues(StreamSupport.stream(jsonArray.spliterator(), false).map((p_151264_) -> valueFromJson(GsonHelper.convertToJsonObject(p_151264_, "block")))); + return fromValues(StreamSupport.stream(jsonArray.spliterator(), false).map((element) -> valueFromJson(GsonHelper.convertToJsonObject(element, "block")))); } } else { throw new JsonSyntaxException("Expected block to be object or array of objects"); @@ -139,7 +150,7 @@ public static BlockStateIngredient.Value valueFromJson(JsonObject json) { } } else if (json.has("tag")) { ResourceLocation resourcelocation = new ResourceLocation(GsonHelper.getAsString(json, "tag")); - TagKey tagKey = TagKey.create(Registry.BLOCK_REGISTRY, resourcelocation); + TagKey tagKey = TagKey.create(Registries.BLOCK, resourcelocation); return new BlockStateIngredient.TagValue(tagKey); } else { throw new JsonParseException("An ingredient entry needs either a tag or a block"); diff --git a/src/main/java/com/gildedgames/aether/recipe/builder/AetherCookingRecipeBuilder.java b/src/main/java/com/gildedgames/aether/recipe/builder/AetherCookingRecipeBuilder.java new file mode 100644 index 0000000000..5e2ae49991 --- /dev/null +++ b/src/main/java/com/gildedgames/aether/recipe/builder/AetherCookingRecipeBuilder.java @@ -0,0 +1,170 @@ +package com.gildedgames.aether.recipe.builder; + +import com.gildedgames.aether.recipe.AetherBookCategory; +import com.gildedgames.aether.recipe.AetherRecipeSerializers; +import com.google.gson.JsonObject; +import net.minecraft.advancements.Advancement; +import net.minecraft.advancements.AdvancementRewards; +import net.minecraft.advancements.CriterionTriggerInstance; +import net.minecraft.advancements.RequirementsStrategy; +import net.minecraft.advancements.critereon.RecipeUnlockedTrigger; +import net.minecraft.data.recipes.FinishedRecipe; +import net.minecraft.data.recipes.RecipeBuilder; +import net.minecraft.data.recipes.RecipeCategory; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.crafting.AbstractCookingRecipe; +import net.minecraft.world.item.crafting.Ingredient; +import net.minecraft.world.item.crafting.RecipeSerializer; +import net.minecraft.world.level.ItemLike; +import net.minecraftforge.registries.ForgeRegistries; + +import javax.annotation.Nullable; +import java.util.function.Consumer; + +/** + * Based on {@link net.minecraft.data.recipes.SimpleCookingRecipeBuilder}. + */ +public class AetherCookingRecipeBuilder implements RecipeBuilder { + private final RecipeCategory category; + private final AetherBookCategory bookCategory; + private final Item result; + private final Ingredient ingredient; + private final float experience; + private final int cookingTime; + private final Advancement.Builder advancement = Advancement.Builder.advancement(); + @Nullable + private String group; + private final RecipeSerializer serializer; + + public AetherCookingRecipeBuilder(RecipeCategory category, AetherBookCategory bookCategory, ItemLike result, Ingredient ingredient, float experience, int cookingTime, RecipeSerializer serializer) { + this.category = category; + this.bookCategory = bookCategory; + this.result = result.asItem(); + this.ingredient = ingredient; + this.experience = experience; + this.cookingTime = cookingTime; + this.serializer = serializer; + } + + public static AetherCookingRecipeBuilder generic(Ingredient ingredient, RecipeCategory category, ItemLike result, float experience, int cookingTime, RecipeSerializer serializer) { + return new AetherCookingRecipeBuilder(category, determineRecipeCategory(serializer, category), result, ingredient, experience, cookingTime, serializer); + } + + @Override + public AetherCookingRecipeBuilder group(@Nullable String group) { + this.group = group; + return this; + } + + @Override + public Item getResult() { + return this.result; + } + + @Override + public AetherCookingRecipeBuilder unlockedBy(String criterionName, CriterionTriggerInstance criterionTrigger) { + this.advancement.addCriterion(criterionName, criterionTrigger); + return this; + } + + @Override + public void save(Consumer finishedRecipeConsumer, ResourceLocation id) { + this.ensureValid(id); + this.advancement.parent(ROOT_RECIPE_ADVANCEMENT).addCriterion("has_the_recipe", RecipeUnlockedTrigger.unlocked(id)).rewards(AdvancementRewards.Builder.recipe(id)).requirements(RequirementsStrategy.OR); + finishedRecipeConsumer.accept(new AetherCookingRecipeBuilder.Result(id, this.group == null ? "" : this.group, this.bookCategory, this.ingredient, this.result, this.experience, this.cookingTime, this.advancement, id.withPrefix("recipes/" + this.category.getFolderName() + "/"), this.serializer)); + } + + private static AetherBookCategory determineRecipeCategory(RecipeSerializer serializer, RecipeCategory category) { + AetherBookCategory bookCategory; + if (serializer == AetherRecipeSerializers.ENCHANTING.get()) { + switch(category) { + case BUILDING_BLOCKS, DECORATIONS -> bookCategory = AetherBookCategory.ENCHANTING_BLOCKS; + case FOOD -> bookCategory = AetherBookCategory.ENCHANTING_FOOD; + default -> bookCategory = AetherBookCategory.ENCHANTING_MISC; + } + return bookCategory; + } else if (serializer == AetherRecipeSerializers.REPAIRING.get()) { + return AetherBookCategory.ENCHANTING_REPAIR; + } else if (serializer == AetherRecipeSerializers.FREEZING.get()) { + switch(category) { + case BUILDING_BLOCKS, DECORATIONS -> bookCategory = AetherBookCategory.FREEZABLE_BLOCKS; + default -> bookCategory = AetherBookCategory.FREEZABLE_MISC; + } + return bookCategory; + } else { + throw new IllegalStateException("Unknown cooking recipe type; may not belong to the Aether"); + } + } + + private void ensureValid(ResourceLocation id) { + if (this.advancement.getCriteria().isEmpty()) { + throw new IllegalStateException("No way of obtaining recipe " + id); + } + } + + static class Result implements FinishedRecipe { + private final ResourceLocation id; + private final String group; + private final AetherBookCategory category; + private final Ingredient ingredient; + private final Item result; + private final float experience; + private final int cookingTime; + private final Advancement.Builder advancement; + private final ResourceLocation advancementId; + private final RecipeSerializer serializer; + + public Result(ResourceLocation id, String group, AetherBookCategory category, Ingredient ingredient, Item result, float experience, int cookingTime, Advancement.Builder advancement, ResourceLocation advancementId, RecipeSerializer serializer) { + this.id = id; + this.group = group; + this.category = category; + this.ingredient = ingredient; + this.result = result; + this.experience = experience; + this.cookingTime = cookingTime; + this.advancement = advancement; + this.advancementId = advancementId; + this.serializer = serializer; + } + + @Override + public void serializeRecipeData(JsonObject json) { + if (!this.group.isEmpty()) { + json.addProperty("group", this.group); + } + json.addProperty("category", this.category.getSerializedName()); + json.add("ingredient", this.ingredient.toJson()); + ResourceLocation itemLocation = ForgeRegistries.ITEMS.getKey(this.result); + if (itemLocation != null) { + json.addProperty("result", itemLocation.toString()); + } else { + throw new IllegalStateException("Item: " + this.result + " does not exist"); + } + json.addProperty("experience", this.experience); + json.addProperty("cookingtime", this.cookingTime); + } + + @Override + public RecipeSerializer getType() { + return this.serializer; + } + + @Override + public ResourceLocation getId() { + return this.id; + } + + @Nullable + @Override + public JsonObject serializeAdvancement() { + return this.advancement.serializeToJson(); + } + + @Nullable + @Override + public ResourceLocation getAdvancementId() { + return this.advancementId; + } + } +} diff --git a/src/main/java/com/gildedgames/aether/recipe/builder/AltarRepairBuilder.java b/src/main/java/com/gildedgames/aether/recipe/builder/AltarRepairBuilder.java index beb4ae0266..f8012d2dcc 100644 --- a/src/main/java/com/gildedgames/aether/recipe/builder/AltarRepairBuilder.java +++ b/src/main/java/com/gildedgames/aether/recipe/builder/AltarRepairBuilder.java @@ -9,17 +9,17 @@ import net.minecraft.advancements.critereon.RecipeUnlockedTrigger; import net.minecraft.data.recipes.FinishedRecipe; import net.minecraft.data.recipes.RecipeBuilder; +import net.minecraft.data.recipes.RecipeCategory; import net.minecraft.world.item.Item; import net.minecraft.world.item.crafting.RecipeSerializer; import net.minecraft.world.item.crafting.Ingredient; import net.minecraft.resources.ResourceLocation; -import javax.annotation.Nonnull; import javax.annotation.Nullable; import java.util.function.Consumer; -public class AltarRepairBuilder implements RecipeBuilder -{ +public class AltarRepairBuilder implements RecipeBuilder { + private final RecipeCategory category; private final Ingredient ingredient; private final int repairTime; private final Advancement.Builder advancement = Advancement.Builder.advancement(); @@ -27,45 +27,44 @@ public class AltarRepairBuilder implements RecipeBuilder private String group; private final RecipeSerializer serializer; - private AltarRepairBuilder(Ingredient ingredient, int repairTime, RecipeSerializer serializer) { + private AltarRepairBuilder(RecipeCategory category, Ingredient ingredient, int repairTime, RecipeSerializer serializer) { + this.category = category; this.ingredient = ingredient; this.repairTime = repairTime; this.serializer = serializer; } - public static AltarRepairBuilder repair(Ingredient item, int repairTime, RecipeSerializer serializer) { - return new AltarRepairBuilder(item, repairTime, serializer); + public static AltarRepairBuilder repair(Ingredient item, RecipeCategory category, int repairTime, RecipeSerializer serializer) { + return new AltarRepairBuilder(category, item, repairTime, serializer); } @Override - @Nonnull - public AltarRepairBuilder unlockedBy(String pCriterionName, CriterionTriggerInstance pCriterionTrigger) { - this.advancement.addCriterion(pCriterionName, pCriterionTrigger); + public RecipeBuilder group(@Nullable String group) { + this.group = group; return this; } @Override - @Nonnull - public RecipeBuilder group(@Nullable String pGroupName) { - this.group = pGroupName; - return this; + public Item getResult() { + return this.ingredient.getItems()[0].getItem(); } @Override - @Nonnull - public Item getResult() { - return this.ingredient.getItems()[0].getItem(); + public AltarRepairBuilder unlockedBy(String criterionName, CriterionTriggerInstance criterionTrigger) { + this.advancement.addCriterion(criterionName, criterionTrigger); + return this; } - public void save(Consumer consumer, @Nonnull ResourceLocation pRecipeId) { - this.ensureValid(pRecipeId); - this.advancement.parent(new ResourceLocation("recipes/root")).addCriterion("has_the_recipe", RecipeUnlockedTrigger.unlocked(pRecipeId)).rewards(AdvancementRewards.Builder.recipe(pRecipeId)).requirements(RequirementsStrategy.OR); - consumer.accept(new AltarRepairBuilder.Result(pRecipeId, this.group == null ? "" : this.group, this.ingredient, this.repairTime, this.advancement, new ResourceLocation(pRecipeId.getNamespace(), "recipes/" + this.ingredient.getItems()[0].getItem().getItemCategory().getRecipeFolderName() + "/" + pRecipeId.getPath()), this.serializer)); + @Override + public void save(Consumer finishedRecipeConsumer, ResourceLocation id) { + this.ensureValid(id); + this.advancement.parent(new ResourceLocation("recipes/root")).addCriterion("has_the_recipe", RecipeUnlockedTrigger.unlocked(id)).rewards(AdvancementRewards.Builder.recipe(id)).requirements(RequirementsStrategy.OR); + finishedRecipeConsumer.accept(new AltarRepairBuilder.Result(id, this.group == null ? "" : this.group, this.ingredient, this.repairTime, this.advancement, id.withPrefix("recipes/" + this.category.getFolderName() + "/"), this.serializer)); } - private void ensureValid(ResourceLocation p_218634_1_) { + private void ensureValid(ResourceLocation id) { if (this.advancement.getCriteria().isEmpty()) { - throw new IllegalStateException("No way of obtaining recipe " + p_218634_1_); + throw new IllegalStateException("No way of obtaining recipe " + id); } } @@ -78,9 +77,9 @@ public static class Result implements FinishedRecipe { private final ResourceLocation advancementId; private final RecipeSerializer serializer; - public Result(ResourceLocation recipeLocation, String pGroup, Ingredient ingredient, int repairTime, Advancement.Builder advancement, ResourceLocation advancementId, RecipeSerializer serializer) { - this.id = recipeLocation; - this.group = pGroup; + public Result(ResourceLocation id, String group, Ingredient ingredient, int repairTime, Advancement.Builder advancement, ResourceLocation advancementId, RecipeSerializer serializer) { + this.id = id; + this.group = group; this.ingredient = ingredient; this.repairTime = repairTime; this.advancement = advancement; @@ -88,30 +87,33 @@ public Result(ResourceLocation recipeLocation, String pGroup, Ingredient ingredi this.serializer = serializer; } - public void serializeRecipeData(JsonObject pJson) { + @Override + public void serializeRecipeData(JsonObject json) { if (!this.group.isEmpty()) { - pJson.addProperty("group", this.group); + json.addProperty("group", this.group); } - pJson.add("ingredient", this.ingredient.toJson()); - pJson.addProperty("repairTime", this.repairTime); + json.add("ingredient", this.ingredient.toJson()); + json.addProperty("repairTime", this.repairTime); } - @Nonnull + @Override public RecipeSerializer getType() { return this.serializer; } - @Nonnull + @Override public ResourceLocation getId() { return this.id; } @Nullable + @Override public JsonObject serializeAdvancement() { return this.advancement.serializeToJson(); } @Nullable + @Override public ResourceLocation getAdvancementId() { return this.advancementId; } diff --git a/src/main/java/com/gildedgames/aether/recipe/builder/BiomeParameterRecipeBuilder.java b/src/main/java/com/gildedgames/aether/recipe/builder/BiomeParameterRecipeBuilder.java index 6c01dfba80..77b2c1f7de 100644 --- a/src/main/java/com/gildedgames/aether/recipe/builder/BiomeParameterRecipeBuilder.java +++ b/src/main/java/com/gildedgames/aether/recipe/builder/BiomeParameterRecipeBuilder.java @@ -15,7 +15,6 @@ import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.properties.Property; -import javax.annotation.Nonnull; import javax.annotation.Nullable; import java.util.Map; import java.util.function.Consumer; @@ -59,8 +58,8 @@ public static BiomeParameterRecipeBuilder recipe(BlockPropertyPair result, Block } @Override - public void save(@Nonnull Consumer finishedRecipeConsumer, @Nonnull ResourceLocation recipeId) { - finishedRecipeConsumer.accept(new BiomeParameterRecipeBuilder.Result(recipeId, this.biomeKey, this.biomeTag, this.getIngredient(), this.getResultPair(), this.getSerializer())); + public void save(Consumer finishedRecipeConsumer, ResourceLocation id) { + finishedRecipeConsumer.accept(new BiomeParameterRecipeBuilder.Result(id, this.biomeKey, this.biomeTag, this.getIngredient(), this.getResultPair(), this.getSerializer())); } public static class Result extends BlockStateRecipeBuilder.Result { diff --git a/src/main/java/com/gildedgames/aether/recipe/builder/BlockBanBuilder.java b/src/main/java/com/gildedgames/aether/recipe/builder/BlockBanBuilder.java index 1aa77435a4..63af871253 100644 --- a/src/main/java/com/gildedgames/aether/recipe/builder/BlockBanBuilder.java +++ b/src/main/java/com/gildedgames/aether/recipe/builder/BlockBanBuilder.java @@ -12,7 +12,6 @@ import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.block.state.BlockState; -import javax.annotation.Nonnull; import javax.annotation.Nullable; import java.util.function.Consumer; @@ -45,8 +44,8 @@ public static PlacementBanBuilder recipe(BlockStateIngredient ingredient, BlockS } @Override - public void save(@Nonnull Consumer finishedRecipeConsumer, @Nonnull ResourceLocation recipeId) { - finishedRecipeConsumer.accept(new BlockBanBuilder.Result(recipeId, this.getBiomeKey(), this.getBiomeTag(), this.getBypassBlock(), this.ingredient, this.getSerializer())); + public void save(Consumer finishedRecipeConsumer, ResourceLocation id) { + finishedRecipeConsumer.accept(new BlockBanBuilder.Result(id, this.getBiomeKey(), this.getBiomeTag(), this.getBypassBlock(), this.ingredient, this.getSerializer())); } public static class Result extends PlacementBanBuilder.Result { @@ -58,7 +57,7 @@ public Result(ResourceLocation id, @Nullable ResourceKey biomeKey, @Nulla } @Override - public void serializeRecipeData(@Nonnull JsonObject json) { + public void serializeRecipeData(JsonObject json) { super.serializeRecipeData(json); json.add("ingredient", this.ingredient.toJson()); } diff --git a/src/main/java/com/gildedgames/aether/recipe/builder/BlockStateRecipeBuilder.java b/src/main/java/com/gildedgames/aether/recipe/builder/BlockStateRecipeBuilder.java index 8b8554a83f..e6e60ad976 100644 --- a/src/main/java/com/gildedgames/aether/recipe/builder/BlockStateRecipeBuilder.java +++ b/src/main/java/com/gildedgames/aether/recipe/builder/BlockStateRecipeBuilder.java @@ -8,7 +8,6 @@ import net.minecraft.advancements.CriterionTriggerInstance; import net.minecraft.data.recipes.FinishedRecipe; import net.minecraft.data.recipes.RecipeBuilder; -import net.minecraft.data.recipes.SimpleCookingRecipeBuilder; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.Item; import net.minecraft.world.item.Items; @@ -16,7 +15,6 @@ import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.properties.Property; -import javax.annotation.Nonnull; import javax.annotation.Nullable; import java.util.Map; import java.util.function.Consumer; @@ -46,45 +44,41 @@ public static BlockStateRecipeBuilder recipe(BlockStateIngredient ingredient, Bl return new BlockStateRecipeBuilder(result, ingredient, serializer); } - public BlockStateIngredient getIngredient() { - return this.ingredient; + @Override + public RecipeBuilder group(@Nullable String groupName) { + return this; + } + + public RecipeBuilder function(@Nullable ResourceLocation function) { + this.function = function; + return this; } public BlockPropertyPair getResultPair() { return this.result; } + public BlockStateIngredient getIngredient() { + return this.ingredient; + } + public BlockStateRecipeSerializer getSerializer() { return this.serializer; } - @Nonnull @Override - public RecipeBuilder unlockedBy(@Nonnull String criterionName, @Nonnull CriterionTriggerInstance criterionTriggerInstance) { - return this; + public Item getResult() { + return Items.AIR; } - @Nonnull @Override - public RecipeBuilder group(@Nullable String groupName) { - return this; - } - - @Nonnull - public RecipeBuilder function(@Nullable ResourceLocation function) { - this.function = function; + public RecipeBuilder unlockedBy(String criterionName, CriterionTriggerInstance criterionTrigger) { return this; } - @Nonnull - @Override - public Item getResult() { - return Items.AIR; - } - @Override - public void save(@Nonnull Consumer finishedRecipeConsumer, @Nonnull ResourceLocation recipeId) { - finishedRecipeConsumer.accept(new BlockStateRecipeBuilder.Result(recipeId, this.ingredient, this.result, this.serializer, this.function)); + public void save(Consumer finishedRecipeConsumer, ResourceLocation id) { + finishedRecipeConsumer.accept(new BlockStateRecipeBuilder.Result(id, this.ingredient, this.result, this.serializer, this.function)); } public static class Result implements FinishedRecipe { @@ -120,13 +114,11 @@ public void serializeRecipeData(JsonObject json) { } } - @Nonnull @Override public RecipeSerializer getType() { return this.serializer; } - @Nonnull @Override public ResourceLocation getId() { return this.id; diff --git a/src/main/java/com/gildedgames/aether/recipe/builder/IncubationBuilder.java b/src/main/java/com/gildedgames/aether/recipe/builder/IncubationBuilder.java index 9f19db943c..0a082075f2 100644 --- a/src/main/java/com/gildedgames/aether/recipe/builder/IncubationBuilder.java +++ b/src/main/java/com/gildedgames/aether/recipe/builder/IncubationBuilder.java @@ -17,7 +17,6 @@ import net.minecraft.world.item.crafting.Ingredient; import net.minecraft.world.item.crafting.RecipeSerializer; -import javax.annotation.Nonnull; import javax.annotation.Nullable; import java.util.function.Consumer; @@ -45,34 +44,32 @@ public static IncubationBuilder incubation(Ingredient ingredient, EntityType } @Override - @Nonnull - public IncubationBuilder unlockedBy(@Nonnull String criterionName, @Nonnull CriterionTriggerInstance criterionTrigger) { - this.advancement.addCriterion(criterionName, criterionTrigger); - return this; - } - - @Override - @Nonnull public IncubationBuilder group(@Nullable String group) { this.group = group; return this; } @Override - @Nonnull public Item getResult() { return Items.AIR; } - public void save(Consumer consumer, @Nonnull ResourceLocation recipeId) { - this.ensureValid(recipeId); - this.advancement.parent(new ResourceLocation("recipes/root")).addCriterion("has_the_recipe", RecipeUnlockedTrigger.unlocked(recipeId)).rewards(AdvancementRewards.Builder.recipe(recipeId)).requirements(RequirementsStrategy.OR); - consumer.accept(new IncubationBuilder.Result(recipeId, this.group == null ? "" : this.group, this.ingredient, this.entity, this.tag, this.incubationTime, this.advancement, new ResourceLocation(recipeId.getNamespace(), "recipes/incubation/" + recipeId.getPath()), this.serializer)); + @Override + public IncubationBuilder unlockedBy(String criterionName, CriterionTriggerInstance criterionTrigger) { + this.advancement.addCriterion(criterionName, criterionTrigger); + return this; + } + + @Override + public void save(Consumer consumer, ResourceLocation id) { + this.ensureValid(id); + this.advancement.parent(new ResourceLocation("recipes/root")).addCriterion("has_the_recipe", RecipeUnlockedTrigger.unlocked(id)).rewards(AdvancementRewards.Builder.recipe(id)).requirements(RequirementsStrategy.OR); + consumer.accept(new IncubationBuilder.Result(id, this.group == null ? "" : this.group, this.ingredient, this.entity, this.tag, this.incubationTime, this.advancement, new ResourceLocation(id.getNamespace(), "recipes/incubation/" + id.getPath()), this.serializer)); } - private void ensureValid(ResourceLocation pId) { + private void ensureValid(ResourceLocation id) { if (this.advancement.getCriteria().isEmpty()) { - throw new IllegalStateException("No way of obtaining recipe " + pId); + throw new IllegalStateException("No way of obtaining recipe " + id); } } @@ -99,7 +96,8 @@ public Result(ResourceLocation id, String group, Ingredient ingredient, EntityTy this.serializer = serializer; } - public void serializeRecipeData(@Nonnull JsonObject json) { + @Override + public void serializeRecipeData(JsonObject json) { if (!this.group.isEmpty()) { json.addProperty("group", this.group); } @@ -111,22 +109,24 @@ public void serializeRecipeData(@Nonnull JsonObject json) { json.addProperty("incubationtime", this.incubationTime); } - @Nonnull + @Override public RecipeSerializer getType() { return this.serializer; } - @Nonnull + @Override public ResourceLocation getId() { return this.id; } @Nullable + @Override public JsonObject serializeAdvancement() { return this.advancement.serializeToJson(); } @Nullable + @Override public ResourceLocation getAdvancementId() { return this.advancementId; } diff --git a/src/main/java/com/gildedgames/aether/recipe/builder/ItemBanBuilder.java b/src/main/java/com/gildedgames/aether/recipe/builder/ItemBanBuilder.java index c9164e6c64..65ea85c64f 100644 --- a/src/main/java/com/gildedgames/aether/recipe/builder/ItemBanBuilder.java +++ b/src/main/java/com/gildedgames/aether/recipe/builder/ItemBanBuilder.java @@ -13,7 +13,6 @@ import net.minecraft.world.item.crafting.RecipeSerializer; import net.minecraft.world.level.biome.Biome; -import javax.annotation.Nonnull; import javax.annotation.Nullable; import java.util.function.Consumer; @@ -46,8 +45,8 @@ public static PlacementBanBuilder recipe(Ingredient ingredient, BlockStateIngred } @Override - public void save(@Nonnull Consumer finishedRecipeConsumer, @Nonnull ResourceLocation recipeId) { - finishedRecipeConsumer.accept(new ItemBanBuilder.Result(recipeId, this.getBiomeKey(), this.getBiomeTag(), this.getBypassBlock(), this.ingredient, this.getSerializer())); + public void save(Consumer finishedRecipeConsumer, ResourceLocation id) { + finishedRecipeConsumer.accept(new ItemBanBuilder.Result(id, this.getBiomeKey(), this.getBiomeTag(), this.getBypassBlock(), this.ingredient, this.getSerializer())); } public static class Result extends PlacementBanBuilder.Result { @@ -59,7 +58,7 @@ public Result(ResourceLocation id, @Nullable ResourceKey biomeKey, @Nulla } @Override - public void serializeRecipeData(@Nonnull JsonObject json) { + public void serializeRecipeData(JsonObject json) { super.serializeRecipeData(json); json.add("ingredient", this.ingredient.toJson()); } diff --git a/src/main/java/com/gildedgames/aether/recipe/builder/PlacementBanBuilder.java b/src/main/java/com/gildedgames/aether/recipe/builder/PlacementBanBuilder.java index b09fd65842..72133e7558 100644 --- a/src/main/java/com/gildedgames/aether/recipe/builder/PlacementBanBuilder.java +++ b/src/main/java/com/gildedgames/aether/recipe/builder/PlacementBanBuilder.java @@ -14,7 +14,6 @@ import net.minecraft.world.item.crafting.RecipeSerializer; import net.minecraft.world.level.biome.Biome; -import javax.annotation.Nonnull; import javax.annotation.Nullable; public abstract class PlacementBanBuilder implements RecipeBuilder { @@ -30,6 +29,11 @@ public PlacementBanBuilder(BlockStateIngredient bypassBlock, @Nullable ResourceK this.serializer = serializer; } + @Override + public RecipeBuilder group(@Nullable String group) { + return this; + } + public BlockStateIngredient getBypassBlock() { return this.bypassBlock; } @@ -46,24 +50,16 @@ public RecipeSerializer getSerializer() { return this.serializer; } - @Nonnull @Override - public RecipeBuilder unlockedBy(@Nonnull String criterionName, @Nonnull CriterionTriggerInstance criterionTriggerInstance) { - return this; + public Item getResult() { + return Items.AIR; } - @Nonnull @Override - public RecipeBuilder group(@Nullable String groupName) { + public RecipeBuilder unlockedBy(String criterionName, CriterionTriggerInstance criterionTrigger) { return this; } - @Nonnull - @Override - public Item getResult() { - return Items.AIR; - } - public static class Result implements FinishedRecipe { private final ResourceLocation id; private final ResourceKey biomeKey; @@ -80,7 +76,7 @@ public Result(ResourceLocation id, @Nullable ResourceKey biomeKey, @Nulla } @Override - public void serializeRecipeData(@Nonnull JsonObject json) { + public void serializeRecipeData(JsonObject json) { BlockStateRecipeUtil.biomeKeyToJson(json, this.biomeKey); BlockStateRecipeUtil.biomeTagToJson(json, this.biomeTag); if (!this.bypassBlock.isEmpty()) { @@ -88,13 +84,11 @@ public void serializeRecipeData(@Nonnull JsonObject json) { } } - @Nonnull @Override public RecipeSerializer getType() { return this.serializer; } - @Nonnull @Override public ResourceLocation getId() { return this.id; diff --git a/src/main/java/com/gildedgames/aether/recipe/conditions/ConfigCondition.java b/src/main/java/com/gildedgames/aether/recipe/conditions/ConfigCondition.java index 890863fc64..0c41e73b3b 100644 --- a/src/main/java/com/gildedgames/aether/recipe/conditions/ConfigCondition.java +++ b/src/main/java/com/gildedgames/aether/recipe/conditions/ConfigCondition.java @@ -9,12 +9,14 @@ import net.minecraftforge.common.crafting.conditions.ICondition; import net.minecraftforge.common.crafting.conditions.IConditionSerializer; +/** + * Checks if a config value is true or false for a recipe. + */ public class ConfigCondition implements ICondition { private static final ResourceLocation NAME = new ResourceLocation(Aether.MODID, "config"); private final ForgeConfigSpec.ConfigValue config; - public ConfigCondition(ForgeConfigSpec.ConfigValue config) - { + public ConfigCondition(ForgeConfigSpec.ConfigValue config) { this.config = config; } @@ -37,13 +39,13 @@ public static class Serializer implements IConditionSerializer public static final ConfigCondition.Serializer INSTANCE = new ConfigCondition.Serializer(); @Override - public void write(JsonObject object, ConfigCondition condition) { - object.addProperty("config", ConfigSerializationUtil.serialize(condition.config)); + public void write(JsonObject json, ConfigCondition condition) { + json.addProperty("config", ConfigSerializationUtil.serialize(condition.config)); } @Override - public ConfigCondition read(JsonObject object) { - return new ConfigCondition(ConfigSerializationUtil.deserialize(GsonHelper.getAsString(object, "config"))); + public ConfigCondition read(JsonObject json) { + return new ConfigCondition(ConfigSerializationUtil.deserialize(GsonHelper.getAsString(json, "config"))); } @Override diff --git a/src/main/java/com/gildedgames/aether/recipe/recipes/ban/AbstractPlacementBanRecipe.java b/src/main/java/com/gildedgames/aether/recipe/recipes/ban/AbstractPlacementBanRecipe.java index 77df1e247f..7b305af387 100644 --- a/src/main/java/com/gildedgames/aether/recipe/recipes/ban/AbstractPlacementBanRecipe.java +++ b/src/main/java/com/gildedgames/aether/recipe/recipes/ban/AbstractPlacementBanRecipe.java @@ -11,8 +11,8 @@ import net.minecraft.world.item.crafting.RecipeType; import net.minecraft.world.level.Level; import net.minecraft.world.level.biome.Biome; +import net.minecraft.world.level.block.state.BlockState; -import javax.annotation.Nonnull; import javax.annotation.Nullable; import java.util.function.Predicate; @@ -33,6 +33,16 @@ public AbstractPlacementBanRecipe(RecipeType type, ResourceLocation id, @Null this.ingredient = ingredient; } + /** + * Tests if the given object matches with the recipe.

+ * First it checks if there is no {@link AbstractPlacementBanRecipe#bypassBlock} or it doesn't match the interacted block. + * Then if there is a {@link AbstractPlacementBanRecipe#biomeKey} or a {@link AbstractPlacementBanRecipe#biomeTag} it will test one of those alongside {@link BlockStateIngredient#test(BlockState)}. + * Otherwise, it will only test {@link BlockStateIngredient#test(BlockState)}. + * @param level The {@link Level} the recipe is performed in. + * @param pos The {@link BlockPos} the recipe is performed at. + * @param object The object being used that is being checked. + * @return Whether the given object is banned from placement. + */ public boolean matches(Level level, BlockPos pos, T object) { if (this.bypassBlock.isEmpty() || !this.bypassBlock.test(level.getBlockState(pos))) { if (this.biomeKey != null) { @@ -64,26 +74,23 @@ public S getIngredient() { return this.ingredient; } - @Nonnull @Override public RecipeType getType() { return this.type; } - @Nonnull @Override public ResourceLocation getId() { return this.id; } @Override - public boolean matches(@Nonnull Container container, @Nonnull Level level) { + public boolean matches(Container container, Level level) { return false; } - @Nonnull @Override - public ItemStack assemble(@Nonnull Container container) { + public ItemStack assemble(Container container) { return ItemStack.EMPTY; } @@ -92,7 +99,6 @@ public boolean canCraftInDimensions(int pWidth, int pHeight) { return false; } - @Nonnull @Override public ItemStack getResultItem() { return ItemStack.EMPTY; diff --git a/src/main/java/com/gildedgames/aether/recipe/recipes/ban/BlockBanRecipe.java b/src/main/java/com/gildedgames/aether/recipe/recipes/ban/BlockBanRecipe.java index 24c7bd9bf1..bf0d7b1a13 100644 --- a/src/main/java/com/gildedgames/aether/recipe/recipes/ban/BlockBanRecipe.java +++ b/src/main/java/com/gildedgames/aether/recipe/recipes/ban/BlockBanRecipe.java @@ -10,17 +10,19 @@ import com.google.gson.JsonObject; import com.google.gson.JsonSyntaxException; import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; import net.minecraft.tags.TagKey; import net.minecraft.util.GsonHelper; +import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.crafting.RecipeSerializer; import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelAccessor; import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.block.state.BlockState; -import javax.annotation.Nonnull; import javax.annotation.Nullable; public class BlockBanRecipe extends AbstractPlacementBanRecipe { @@ -32,6 +34,15 @@ public BlockBanRecipe(ResourceLocation id, @Nullable ResourceKey biomeKey this(id, biomeKey, biomeTag, bypassBlock, BlockStateIngredient.EMPTY); } + /** + * Checks if the recipe matches the given parameters using {@link AbstractPlacementBanRecipe#matches(Level, BlockPos, Object)}.

+ * Then checks an event hook through {@link AetherEventDispatch#isBlockPlacementBanned(LevelAccessor, BlockPos, BlockState)}.

+ * Before calling {@link AetherEventDispatch#onPlacementSpawnParticles(LevelAccessor, BlockPos, Direction, ItemStack, BlockState)} to spawn particles on block ban. + * @param level The {@link Level} the recipe is performed in. + * @param pos The {@link BlockPos} the recipe is performed at. + * @param state The {@link BlockState} being used that is being checked. + * @return Whether the given {@link BlockState} is banned from placement. + */ public boolean banBlock(Level level, BlockPos pos, BlockState state) { if (this.matches(level, pos.below(), state)) { if (AetherEventDispatch.isBlockPlacementBanned(level, pos, state)) { @@ -42,7 +53,6 @@ public boolean banBlock(Level level, BlockPos pos, BlockState state) { return false; } - @Nonnull @Override public RecipeSerializer getSerializer() { return AetherRecipeSerializers.BLOCK_PLACEMENT_BAN.get(); @@ -53,30 +63,31 @@ public Serializer() { super(BlockBanRecipe::new); } - @Nonnull @Override - public BlockBanRecipe fromJson(@Nonnull ResourceLocation recipeId, @Nonnull JsonObject serializedRecipe) { - BlockBanRecipe recipe = super.fromJson(recipeId, serializedRecipe); - if (!serializedRecipe.has("ingredient")) throw new JsonSyntaxException("Missing ingredient, expected to find an object or array"); - JsonElement jsonElement = GsonHelper.isArrayNode(serializedRecipe, "ingredient") ? GsonHelper.getAsJsonArray(serializedRecipe, "ingredient") : GsonHelper.getAsJsonObject(serializedRecipe, "ingredient"); + public BlockBanRecipe fromJson(ResourceLocation id, JsonObject json) { + BlockBanRecipe recipe = super.fromJson(id, json); + if (!json.has("ingredient")) { + throw new JsonSyntaxException("Missing ingredient, expected to find an object or array"); + } + JsonElement jsonElement = GsonHelper.isArrayNode(json, "ingredient") ? GsonHelper.getAsJsonArray(json, "ingredient") : GsonHelper.getAsJsonObject(json, "ingredient"); BlockStateIngredient ingredient = BlockStateIngredient.fromJson(jsonElement); - return new BlockBanRecipe(recipeId, recipe.getBiomeKey(), recipe.getBiomeTag(), recipe.getBypassBlock(), ingredient); + return new BlockBanRecipe(id, recipe.getBiomeKey(), recipe.getBiomeTag(), recipe.getBypassBlock(), ingredient); } @Nullable @Override - public BlockBanRecipe fromNetwork(@Nonnull ResourceLocation recipeId, @Nonnull FriendlyByteBuf buf) { - ResourceKey biomeKey = BlockStateRecipeUtil.readBiomeKey(buf); - TagKey biomeTag = BlockStateRecipeUtil.readBiomeTag(buf); - BlockStateIngredient bypassBlock = BlockStateIngredient.fromNetwork(buf); - BlockStateIngredient ingredient = BlockStateIngredient.fromNetwork(buf); - return new BlockBanRecipe(recipeId, biomeKey, biomeTag, bypassBlock, ingredient); + public BlockBanRecipe fromNetwork(ResourceLocation id, FriendlyByteBuf buffer) { + ResourceKey biomeKey = BlockStateRecipeUtil.readBiomeKey(buffer); + TagKey biomeTag = BlockStateRecipeUtil.readBiomeTag(buffer); + BlockStateIngredient bypassBlock = BlockStateIngredient.fromNetwork(buffer); + BlockStateIngredient ingredient = BlockStateIngredient.fromNetwork(buffer); + return new BlockBanRecipe(id, biomeKey, biomeTag, bypassBlock, ingredient); } @Override - public void toNetwork(@Nonnull FriendlyByteBuf buf, @Nonnull BlockBanRecipe recipe) { - super.toNetwork(buf, recipe); - recipe.getIngredient().toNetwork(buf); + public void toNetwork(FriendlyByteBuf buffer, BlockBanRecipe recipe) { + super.toNetwork(buffer, recipe); + recipe.getIngredient().toNetwork(buffer); } } } \ No newline at end of file diff --git a/src/main/java/com/gildedgames/aether/recipe/recipes/ban/ItemBanRecipe.java b/src/main/java/com/gildedgames/aether/recipe/recipes/ban/ItemBanRecipe.java index 1a705f35f3..727a0f8edd 100644 --- a/src/main/java/com/gildedgames/aether/recipe/recipes/ban/ItemBanRecipe.java +++ b/src/main/java/com/gildedgames/aether/recipe/recipes/ban/ItemBanRecipe.java @@ -20,9 +20,10 @@ import net.minecraft.world.item.crafting.Ingredient; import net.minecraft.world.item.crafting.RecipeSerializer; import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelAccessor; import net.minecraft.world.level.biome.Biome; +import net.minecraft.world.level.block.state.BlockState; -import javax.annotation.Nonnull; import javax.annotation.Nullable; public class ItemBanRecipe extends AbstractPlacementBanRecipe { @@ -34,17 +35,26 @@ public ItemBanRecipe(ResourceLocation id, @Nullable ResourceKey biomeKey this(id, biomeKey, biomeTag, bypassBlock, Ingredient.EMPTY); } - public boolean banItem(Level level, BlockPos pos, Direction face, ItemStack stack) { + /** + * Checks if the recipe matches the given parameters using {@link AbstractPlacementBanRecipe#matches(Level, BlockPos, Object)}.

+ * Then checks an event hook through {@link AetherEventDispatch#isItemPlacementBanned(LevelAccessor, BlockPos, ItemStack)}.

+ * Before calling {@link AetherEventDispatch#onPlacementSpawnParticles(LevelAccessor, BlockPos, Direction, ItemStack, BlockState)} to spawn particles on item ban. + * @param level The {@link Level} the recipe is performed in. + * @param pos The {@link BlockPos} the recipe is performed at. + * @param direction The {@link Direction} face that is interacted with. + * @param stack The {@link ItemStack} being used that is being checked. + * @return Whether the given {@link ItemStack} is banned from placement. + */ + public boolean banItem(Level level, BlockPos pos, Direction direction, ItemStack stack) { if (this.matches(level, pos, stack)) { if (AetherEventDispatch.isItemPlacementBanned(level, pos, stack)) { - AetherEventDispatch.onPlacementSpawnParticles(level, pos, face, stack, null); + AetherEventDispatch.onPlacementSpawnParticles(level, pos, direction, stack, null); return true; } } return false; } - @Nonnull @Override public RecipeSerializer getSerializer() { return AetherRecipeSerializers.ITEM_PLACEMENT_BAN.get(); @@ -55,30 +65,31 @@ public Serializer() { super(ItemBanRecipe::new); } - @Nonnull @Override - public ItemBanRecipe fromJson(@Nonnull ResourceLocation recipeId, @Nonnull JsonObject serializedRecipe) { - ItemBanRecipe recipe = super.fromJson(recipeId, serializedRecipe); - if (!serializedRecipe.has("ingredient")) throw new JsonSyntaxException("Missing ingredient, expected to find an object or array"); - JsonElement jsonElement = GsonHelper.isArrayNode(serializedRecipe, "ingredient") ? GsonHelper.getAsJsonArray(serializedRecipe, "ingredient") : GsonHelper.getAsJsonObject(serializedRecipe, "ingredient"); + public ItemBanRecipe fromJson(ResourceLocation id, JsonObject json) { + ItemBanRecipe recipe = super.fromJson(id, json); + if (!json.has("ingredient")) { + throw new JsonSyntaxException("Missing ingredient, expected to find an object or array"); + } + JsonElement jsonElement = GsonHelper.isArrayNode(json, "ingredient") ? GsonHelper.getAsJsonArray(json, "ingredient") : GsonHelper.getAsJsonObject(json, "ingredient"); Ingredient ingredient = Ingredient.fromJson(jsonElement); - return new ItemBanRecipe(recipeId, recipe.getBiomeKey(), recipe.getBiomeTag(), recipe.getBypassBlock(), ingredient); + return new ItemBanRecipe(id, recipe.getBiomeKey(), recipe.getBiomeTag(), recipe.getBypassBlock(), ingredient); } @Nullable @Override - public ItemBanRecipe fromNetwork(@Nonnull ResourceLocation recipeId, @Nonnull FriendlyByteBuf buf) { - ResourceKey biomeKey = BlockStateRecipeUtil.readBiomeKey(buf); - TagKey biomeTag = BlockStateRecipeUtil.readBiomeTag(buf); - BlockStateIngredient bypassBlock = BlockStateIngredient.fromNetwork(buf); - Ingredient ingredient = Ingredient.fromNetwork(buf); - return new ItemBanRecipe(recipeId, biomeKey, biomeTag, bypassBlock, ingredient); + public ItemBanRecipe fromNetwork(ResourceLocation id, FriendlyByteBuf buffer) { + ResourceKey biomeKey = BlockStateRecipeUtil.readBiomeKey(buffer); + TagKey biomeTag = BlockStateRecipeUtil.readBiomeTag(buffer); + BlockStateIngredient bypassBlock = BlockStateIngredient.fromNetwork(buffer); + Ingredient ingredient = Ingredient.fromNetwork(buffer); + return new ItemBanRecipe(id, biomeKey, biomeTag, bypassBlock, ingredient); } @Override - public void toNetwork(@Nonnull FriendlyByteBuf buf, @Nonnull ItemBanRecipe recipe) { - super.toNetwork(buf, recipe); - recipe.getIngredient().toNetwork(buf); + public void toNetwork(FriendlyByteBuf buffer, ItemBanRecipe recipe) { + super.toNetwork(buffer, recipe); + recipe.getIngredient().toNetwork(buffer); } } } diff --git a/src/main/java/com/gildedgames/aether/recipe/recipes/block/AbstractBiomeParameterRecipe.java b/src/main/java/com/gildedgames/aether/recipe/recipes/block/AbstractBiomeParameterRecipe.java index ca42467516..dc3eaa5ccf 100644 --- a/src/main/java/com/gildedgames/aether/recipe/recipes/block/AbstractBiomeParameterRecipe.java +++ b/src/main/java/com/gildedgames/aether/recipe/recipes/block/AbstractBiomeParameterRecipe.java @@ -24,6 +24,15 @@ public AbstractBiomeParameterRecipe(RecipeType type, ResourceLocation id, @Nu this.biomeTag = biomeTag; } + /** + * Tests if the given object matches with the recipe.

+ * Checks if there is a {@link AbstractBiomeParameterRecipe#biomeKey} or a {@link AbstractBiomeParameterRecipe#biomeTag} it will test one of those alongside {@link AbstractBlockStateRecipe#matches(Level, BlockPos, BlockState)}. + * Otherwise, it will only test {@link AbstractBlockStateRecipe#matches(Level, BlockPos, BlockState)}. + * @param level The {@link Level} the recipe is performed in. + * @param pos The {@link BlockPos} the recipe is performed at. + * @param state The {@link BlockState} being used that is being checked. + * @return Whether the given {@link BlockState} matches. + */ @Override public boolean matches(Level level, BlockPos pos, BlockState state) { if (this.biomeKey != null) { diff --git a/src/main/java/com/gildedgames/aether/recipe/recipes/block/AbstractBlockStateRecipe.java b/src/main/java/com/gildedgames/aether/recipe/recipes/block/AbstractBlockStateRecipe.java index 931c8e4500..28a0d99546 100644 --- a/src/main/java/com/gildedgames/aether/recipe/recipes/block/AbstractBlockStateRecipe.java +++ b/src/main/java/com/gildedgames/aether/recipe/recipes/block/AbstractBlockStateRecipe.java @@ -11,7 +11,6 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.properties.Property; -import javax.annotation.Nonnull; import java.util.Map; public abstract class AbstractBlockStateRecipe implements BlockStateRecipe { @@ -29,6 +28,13 @@ public AbstractBlockStateRecipe(RecipeType type, ResourceLocation id, BlockSt this.function = function; } + /** + * Replaces an old {@link BlockState} with a new one from {@link AbstractBlockStateRecipe#getResultState(BlockState)}. Also executes a mcfunction if the recipe has one. + * @param level The {@link Level} the recipe is performed in. + * @param pos The {@link BlockPos} the recipe is performed at. + * @param oldState The original {@link BlockState} being interacted with. + * @return Whether the new {@link BlockState} was set. + */ public boolean set(Level level, BlockPos pos, BlockState oldState) { if (this.matches(level, pos, oldState)) { BlockState newState = this.getResultState(oldState); @@ -43,6 +49,12 @@ public boolean matches(Level level, BlockPos pos, BlockState state) { return this.getIngredient().test(state); } + /** + * Sets up a new {@link BlockState} with the result {@link BlockPropertyPair#block()} and the original {@link BlockState}'s properties. + * Then the new {@link BlockState}'s properties are modified based on the result {@link BlockPropertyPair#properties()} using {@link BlockStateRecipeUtil#setHelper(Map.Entry, BlockState)}. + * @param originalState The original {@link BlockState} being interacted with. + * @return The new result {@link BlockState}. + */ @Override public BlockState getResultState(BlockState originalState) { BlockState resultState = this.getResult().block().withPropertiesOf(originalState); @@ -53,29 +65,27 @@ public BlockState getResultState(BlockState originalState) { } @Override - public BlockStateIngredient getIngredient() { - return this.ingredient; + public RecipeType getType() { + return this.type; } @Override - public BlockPropertyPair getResult() { - return this.result; + public ResourceLocation getId() { + return this.id; } @Override - public CommandFunction.CacheableFunction getFunction() { - return this.function; + public BlockStateIngredient getIngredient() { + return this.ingredient; } - @Nonnull @Override - public RecipeType getType() { - return this.type; + public BlockPropertyPair getResult() { + return this.result; } - @Nonnull @Override - public ResourceLocation getId() { - return this.id; + public CommandFunction.CacheableFunction getFunction() { + return this.function; } } diff --git a/src/main/java/com/gildedgames/aether/recipe/recipes/block/AccessoryFreezableRecipe.java b/src/main/java/com/gildedgames/aether/recipe/recipes/block/AccessoryFreezableRecipe.java index 2fa993a398..032e500970 100644 --- a/src/main/java/com/gildedgames/aether/recipe/recipes/block/AccessoryFreezableRecipe.java +++ b/src/main/java/com/gildedgames/aether/recipe/recipes/block/AccessoryFreezableRecipe.java @@ -9,14 +9,11 @@ import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.crafting.RecipeSerializer; -import javax.annotation.Nonnull; - public class AccessoryFreezableRecipe extends AbstractBlockStateRecipe { public AccessoryFreezableRecipe(ResourceLocation id, BlockStateIngredient ingredient, BlockPropertyPair result, CommandFunction.CacheableFunction function) { super(AetherRecipeTypes.ACCESSORY_FREEZABLE.get(), id, ingredient, result, function); } - @Nonnull @Override public RecipeSerializer getSerializer() { return AetherRecipeSerializers.ACCESSORY_FREEZABLE.get(); diff --git a/src/main/java/com/gildedgames/aether/recipe/recipes/block/AmbrosiumRecipe.java b/src/main/java/com/gildedgames/aether/recipe/recipes/block/AmbrosiumRecipe.java index d052a91eee..1b13adb129 100644 --- a/src/main/java/com/gildedgames/aether/recipe/recipes/block/AmbrosiumRecipe.java +++ b/src/main/java/com/gildedgames/aether/recipe/recipes/block/AmbrosiumRecipe.java @@ -14,18 +14,16 @@ import net.minecraft.world.level.Level; import net.minecraft.world.level.block.state.BlockState; -import javax.annotation.Nonnull; - public class AmbrosiumRecipe extends AbstractBlockStateRecipe implements MatchEventRecipe { public AmbrosiumRecipe(ResourceLocation id, BlockStateIngredient ingredient, BlockPropertyPair result, CommandFunction.CacheableFunction function) { super(AetherRecipeTypes.AMBROSIUM_ENCHANTING.get(), id, ingredient, result, function); } + @Override public boolean matches(Player player, Level level, BlockPos pos, ItemStack stack, BlockState oldState, BlockState newState) { return MatchEventRecipe.super.matches(player, level, pos, stack, oldState, newState) && this.matches(level, pos, oldState); } - @Nonnull @Override public RecipeSerializer getSerializer() { return AetherRecipeSerializers.AMBROSIUM_ENCHANTING.get(); diff --git a/src/main/java/com/gildedgames/aether/recipe/recipes/block/BlockStateRecipe.java b/src/main/java/com/gildedgames/aether/recipe/recipes/block/BlockStateRecipe.java index a12012886a..5d9205c0f3 100644 --- a/src/main/java/com/gildedgames/aether/recipe/recipes/block/BlockStateRecipe.java +++ b/src/main/java/com/gildedgames/aether/recipe/recipes/block/BlockStateRecipe.java @@ -10,8 +10,9 @@ import net.minecraft.world.level.Level; import net.minecraft.world.level.block.state.BlockState; -import javax.annotation.Nonnull; - +/** + * Overrides anything container-related or item-related because these in-world recipes have no container and are {@link BlockState}-based. Instead, custom behavior is implemented by recipes that extend this. + */ public interface BlockStateRecipe extends Recipe { BlockStateIngredient getIngredient(); @@ -22,13 +23,12 @@ public interface BlockStateRecipe extends Recipe { CommandFunction.CacheableFunction getFunction(); @Override - default boolean matches(@Nonnull Container container, @Nonnull Level level) { + default boolean matches(Container container, Level level) { return false; } - @Nonnull @Override - default ItemStack assemble(@Nonnull Container container) { + default ItemStack assemble(Container container) { return ItemStack.EMPTY; } @@ -37,15 +37,13 @@ default boolean canCraftInDimensions(int pWidth, int pHeight) { return false; } - @Nonnull @Override default ItemStack getResultItem() { return ItemStack.EMPTY; } - @Nonnull @Override - default NonNullList getRemainingItems(@Nonnull Container container) { + default NonNullList getRemainingItems(Container container) { return NonNullList.create(); } diff --git a/src/main/java/com/gildedgames/aether/recipe/recipes/block/IcestoneFreezableRecipe.java b/src/main/java/com/gildedgames/aether/recipe/recipes/block/IcestoneFreezableRecipe.java index 8a2a6693ce..32b7656f2d 100644 --- a/src/main/java/com/gildedgames/aether/recipe/recipes/block/IcestoneFreezableRecipe.java +++ b/src/main/java/com/gildedgames/aether/recipe/recipes/block/IcestoneFreezableRecipe.java @@ -9,14 +9,11 @@ import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.crafting.RecipeSerializer; -import javax.annotation.Nonnull; - public class IcestoneFreezableRecipe extends AbstractBlockStateRecipe { public IcestoneFreezableRecipe(ResourceLocation id, BlockStateIngredient ingredient, BlockPropertyPair result, CommandFunction.CacheableFunction function) { super(AetherRecipeTypes.ICESTONE_FREEZABLE.get(), id, ingredient, result, function); } - @Nonnull @Override public RecipeSerializer getSerializer() { return AetherRecipeSerializers.ICESTONE_FREEZABLE.get(); diff --git a/src/main/java/com/gildedgames/aether/recipe/recipes/block/MatchEventRecipe.java b/src/main/java/com/gildedgames/aether/recipe/recipes/block/MatchEventRecipe.java index 37bdae0624..050c429706 100644 --- a/src/main/java/com/gildedgames/aether/recipe/recipes/block/MatchEventRecipe.java +++ b/src/main/java/com/gildedgames/aether/recipe/recipes/block/MatchEventRecipe.java @@ -5,14 +5,24 @@ import com.gildedgames.aether.util.BlockStateRecipeUtil; import net.minecraft.commands.CommandFunction; import net.minecraft.core.BlockPos; -import net.minecraft.server.level.ServerLevel; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelAccessor; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.phys.Vec3; public interface MatchEventRecipe { + /** + * Replaces an old {@link BlockState} with a new one. Also executes a mcfunction if the recipe has one. + * @param player The {@link Player} performing the recipe. + * @param level The {@link Level} the recipe is performed in. + * @param pos The {@link BlockPos} the recipe is performed at. + * @param stack The {@link ItemStack} being used to perform the recipe. + * @param oldState The original {@link BlockState} being interacted with. + * @param newState The resulting {@link BlockState} from the recipe. + * @param function The {@link CommandFunction.CacheableFunction} to run when the recipe is performed. + * @return Whether the new {@link BlockState} was set. + */ default boolean convert(Player player, Level level, BlockPos pos, ItemStack stack, BlockState oldState, BlockState newState, CommandFunction.CacheableFunction function) { if (this.matches(player, level, pos, stack, oldState, newState)) { level.setBlockAndUpdate(pos, newState); @@ -22,6 +32,16 @@ default boolean convert(Player player, Level level, BlockPos pos, ItemStack stac return false; } + /** + * Checks if {@link ItemUseConvertEvent} is cancelled through {@link AetherEventDispatch#onItemUseConvert(Player, LevelAccessor, BlockPos, ItemStack, BlockState, BlockState)}. + * @param player The {@link Player} performing the recipe. + * @param level The {@link Level} the recipe is performed in. + * @param pos The {@link BlockPos} the recipe is performed at. + * @param stack The {@link ItemStack} being used to perform the recipe. + * @param oldState The original {@link BlockState} being interacted with. + * @param newState The resulting {@link BlockState} from the recipe. + * @return Whether {@link ItemUseConvertEvent} is cancelled. + */ default boolean matches(Player player, Level level, BlockPos pos, ItemStack stack, BlockState oldState, BlockState newState) { ItemUseConvertEvent event = AetherEventDispatch.onItemUseConvert(player, level, pos, stack, oldState, newState); return !event.isCanceled(); diff --git a/src/main/java/com/gildedgames/aether/recipe/recipes/block/PlacementConversionRecipe.java b/src/main/java/com/gildedgames/aether/recipe/recipes/block/PlacementConversionRecipe.java index 78aea856a3..e25cb283c9 100644 --- a/src/main/java/com/gildedgames/aether/recipe/recipes/block/PlacementConversionRecipe.java +++ b/src/main/java/com/gildedgames/aether/recipe/recipes/block/PlacementConversionRecipe.java @@ -17,7 +17,6 @@ import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.block.state.BlockState; -import javax.annotation.Nonnull; import javax.annotation.Nullable; public class PlacementConversionRecipe extends AbstractBiomeParameterRecipe { @@ -29,6 +28,13 @@ public PlacementConversionRecipe(ResourceLocation id, BlockStateIngredient ingre this(id, null, null, ingredient, result, function); } + /** + * Replaces an old {@link BlockState} with a new one from {@link AbstractBlockStateRecipe#getResultState(BlockState)}, if {@link PlacementConvertEvent} isn't cancelled. + * @param level The {@link Level} the recipe is performed in. + * @param pos The {@link BlockPos} the recipe is performed at. + * @param oldState The original {@link BlockState} being used that is being checked. + * @return Whether the new {@link BlockState} was set. + */ public boolean convert(Level level, BlockPos pos, BlockState oldState) { if (this.matches(level, pos, oldState)) { BlockState newState = this.getResultState(oldState); @@ -41,7 +47,6 @@ public boolean convert(Level level, BlockPos pos, BlockState oldState) { return false; } - @Nonnull @Override public RecipeSerializer getSerializer() { return AetherRecipeSerializers.PLACEMENT_CONVERSION.get(); diff --git a/src/main/java/com/gildedgames/aether/recipe/recipes/block/SwetBallRecipe.java b/src/main/java/com/gildedgames/aether/recipe/recipes/block/SwetBallRecipe.java index 06041a54f3..5409e3388c 100644 --- a/src/main/java/com/gildedgames/aether/recipe/recipes/block/SwetBallRecipe.java +++ b/src/main/java/com/gildedgames/aether/recipe/recipes/block/SwetBallRecipe.java @@ -17,7 +17,6 @@ import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.block.state.BlockState; -import javax.annotation.Nonnull; import javax.annotation.Nullable; public class SwetBallRecipe extends AbstractBiomeParameterRecipe implements MatchEventRecipe { @@ -29,11 +28,11 @@ public SwetBallRecipe(ResourceLocation id, BlockStateIngredient ingredient, Bloc this(id, null, null, ingredient, result, function); } + @Override public boolean matches(Player player, Level level, BlockPos pos, ItemStack stack, BlockState oldState, BlockState newState) { return MatchEventRecipe.super.matches(player, level, pos, stack, oldState, newState) && this.matches(level, pos, oldState); } - @Nonnull @Override public RecipeSerializer getSerializer() { return AetherRecipeSerializers.SWET_BALL_CONVERSION.get(); diff --git a/src/main/java/com/gildedgames/aether/recipe/recipes/item/AbstractAetherCookingRecipe.java b/src/main/java/com/gildedgames/aether/recipe/recipes/item/AbstractAetherCookingRecipe.java new file mode 100644 index 0000000000..d2e6acce6b --- /dev/null +++ b/src/main/java/com/gildedgames/aether/recipe/recipes/item/AbstractAetherCookingRecipe.java @@ -0,0 +1,22 @@ +package com.gildedgames.aether.recipe.recipes.item; + +import com.gildedgames.aether.recipe.AetherBookCategory; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.crafting.AbstractCookingRecipe; +import net.minecraft.world.item.crafting.CookingBookCategory; +import net.minecraft.world.item.crafting.Ingredient; +import net.minecraft.world.item.crafting.RecipeType; + +public abstract class AbstractAetherCookingRecipe extends AbstractCookingRecipe { + private final AetherBookCategory category; + + public AbstractAetherCookingRecipe(RecipeType recipeType, ResourceLocation id, String group, AetherBookCategory category, Ingredient ingredient, ItemStack result, float experience, int cookingTime) { + super(recipeType, id, group, CookingBookCategory.MISC, ingredient, result, experience, cookingTime); + this.category = category; + } + + public AetherBookCategory aetherCategory() { + return this.category; + } +} diff --git a/src/main/java/com/gildedgames/aether/recipe/recipes/item/AltarRepairRecipe.java b/src/main/java/com/gildedgames/aether/recipe/recipes/item/AltarRepairRecipe.java index 2538ca4f2a..1a00219656 100644 --- a/src/main/java/com/gildedgames/aether/recipe/recipes/item/AltarRepairRecipe.java +++ b/src/main/java/com/gildedgames/aether/recipe/recipes/item/AltarRepairRecipe.java @@ -1,6 +1,7 @@ package com.gildedgames.aether.recipe.recipes.item; import com.gildedgames.aether.block.AetherBlocks; +import com.gildedgames.aether.recipe.AetherBookCategory; import com.gildedgames.aether.recipe.AetherRecipeSerializers; import com.gildedgames.aether.recipe.AetherRecipeTypes; import com.google.gson.JsonObject; @@ -10,25 +11,32 @@ import net.minecraft.util.GsonHelper; import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.item.crafting.AbstractCookingRecipe; import net.minecraft.world.item.crafting.Ingredient; import net.minecraft.world.item.crafting.RecipeSerializer; import net.minecraft.world.item.crafting.RecipeType; -public class AltarRepairRecipe extends AbstractCookingRecipe -{ +import javax.annotation.Nullable; + +public class AltarRepairRecipe extends AbstractAetherCookingRecipe { public final Ingredient ingredient; - public AltarRepairRecipe(ResourceLocation recipeLocation, String groupIn, Ingredient ingredient, int cookingTime) { - super(AetherRecipeTypes.ENCHANTING.get(), recipeLocation, groupIn, ingredient, ingredient.getItems()[0], 0.0F, cookingTime); + public AltarRepairRecipe(ResourceLocation id, String group, AetherBookCategory category, Ingredient ingredient, int repairTime) { + super(AetherRecipeTypes.ENCHANTING.get(), id, group, category, ingredient, ingredient.getItems()[0], 0.0F, repairTime); this.ingredient = ingredient; } + /** + * @param inventory The crafting {@link Container}. + * @return The original {@link ItemStack} ingredient, because repairing always outputs the same item as the input. + */ @Override public ItemStack assemble(Container inventory) { return this.ingredient.getItems()[0]; } + /** + * @return The original {@link ItemStack} ingredient for Recipe Book display, because repairing always outputs the same item as the input. + */ @Override public ItemStack getResultItem() { return this.ingredient.getItems()[0]; @@ -49,24 +57,30 @@ public RecipeType getType() { return AetherRecipeTypes.ENCHANTING.get(); } - public static class Serializer implements RecipeSerializer - { - public AltarRepairRecipe fromJson(ResourceLocation recipeLocation, JsonObject jsonObject) { - String group = GsonHelper.getAsString(jsonObject, "group", ""); - Ingredient ingredient = Ingredient.fromJson(GsonHelper.getAsJsonObject(jsonObject, "ingredient")); - int cookingTime = GsonHelper.getAsInt(jsonObject, "repairTime", 200); - return new AltarRepairRecipe(recipeLocation, group, ingredient, cookingTime); + public static class Serializer implements RecipeSerializer { + @Override + public AltarRepairRecipe fromJson(ResourceLocation id, JsonObject json) { + String group = GsonHelper.getAsString(json, "group", ""); + AetherBookCategory aetherBookCategory = AetherBookCategory.CODEC.byName(GsonHelper.getAsString(json, "category", null), AetherBookCategory.UNKNOWN); + Ingredient ingredient = Ingredient.fromJson(GsonHelper.getAsJsonObject(json, "ingredient")); + int cookingTime = GsonHelper.getAsInt(json, "repairTime", 200); + return new AltarRepairRecipe(id, group, aetherBookCategory, ingredient, cookingTime); } - public AltarRepairRecipe fromNetwork(ResourceLocation recipeLocation, FriendlyByteBuf buffer) { + @Nullable + @Override + public AltarRepairRecipe fromNetwork(ResourceLocation id, FriendlyByteBuf buffer) { String group = buffer.readUtf(); + AetherBookCategory aetherBookCategory = buffer.readEnum(AetherBookCategory.class); Ingredient ingredient = Ingredient.fromNetwork(buffer); int cookingTime = buffer.readVarInt(); - return new AltarRepairRecipe(recipeLocation, group, ingredient, cookingTime); + return new AltarRepairRecipe(id, group, aetherBookCategory, ingredient, cookingTime); } + @Override public void toNetwork(FriendlyByteBuf buffer, AltarRepairRecipe recipe) { buffer.writeUtf(recipe.group); + buffer.writeEnum(recipe.aetherCategory()); recipe.ingredient.toNetwork(buffer); buffer.writeVarInt(recipe.cookingTime); } diff --git a/src/main/java/com/gildedgames/aether/recipe/recipes/item/EnchantingRecipe.java b/src/main/java/com/gildedgames/aether/recipe/recipes/item/EnchantingRecipe.java index 4f93ee20ae..e934fa9863 100644 --- a/src/main/java/com/gildedgames/aether/recipe/recipes/item/EnchantingRecipe.java +++ b/src/main/java/com/gildedgames/aether/recipe/recipes/item/EnchantingRecipe.java @@ -1,19 +1,17 @@ package com.gildedgames.aether.recipe.recipes.item; import com.gildedgames.aether.block.AetherBlocks; +import com.gildedgames.aether.recipe.AetherBookCategory; import com.gildedgames.aether.recipe.AetherRecipeSerializers; import com.gildedgames.aether.recipe.AetherRecipeTypes; +import com.gildedgames.aether.recipe.serializer.AetherCookingSerializer; import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.crafting.AbstractCookingRecipe; -import net.minecraft.world.item.crafting.SimpleCookingSerializer; -import net.minecraft.world.item.crafting.RecipeSerializer; -import net.minecraft.world.item.crafting.Ingredient; +import net.minecraft.world.item.crafting.*; import net.minecraft.resources.ResourceLocation; -public class EnchantingRecipe extends AbstractCookingRecipe -{ - public EnchantingRecipe(ResourceLocation idIn, String groupIn, Ingredient ingredientIn, ItemStack resultIn, float experienceIn, int cookTimeIn) { - super(AetherRecipeTypes.ENCHANTING.get(), idIn, groupIn, ingredientIn, resultIn, experienceIn, cookTimeIn); +public class EnchantingRecipe extends AbstractAetherCookingRecipe { + public EnchantingRecipe(ResourceLocation id, String group, AetherBookCategory category, Ingredient ingredient, ItemStack result, float experience, int enchantingTime) { + super(AetherRecipeTypes.ENCHANTING.get(), id, group, category, ingredient, result, experience, enchantingTime); } @Override @@ -26,8 +24,7 @@ public RecipeSerializer getSerializer() { return AetherRecipeSerializers.ENCHANTING.get(); } - public static class Serializer extends SimpleCookingSerializer - { + public static class Serializer extends AetherCookingSerializer { public Serializer() { super(EnchantingRecipe::new, 200); } diff --git a/src/main/java/com/gildedgames/aether/recipe/recipes/item/FreezingRecipe.java b/src/main/java/com/gildedgames/aether/recipe/recipes/item/FreezingRecipe.java index e9ab558cae..973ef6bfd8 100644 --- a/src/main/java/com/gildedgames/aether/recipe/recipes/item/FreezingRecipe.java +++ b/src/main/java/com/gildedgames/aether/recipe/recipes/item/FreezingRecipe.java @@ -1,19 +1,18 @@ package com.gildedgames.aether.recipe.recipes.item; import com.gildedgames.aether.block.AetherBlocks; +import com.gildedgames.aether.recipe.AetherBookCategory; import com.gildedgames.aether.recipe.AetherRecipeSerializers; import com.gildedgames.aether.recipe.AetherRecipeTypes; +import com.gildedgames.aether.recipe.serializer.AetherCookingSerializer; import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.crafting.AbstractCookingRecipe; -import net.minecraft.world.item.crafting.SimpleCookingSerializer; import net.minecraft.world.item.crafting.RecipeSerializer; import net.minecraft.world.item.crafting.Ingredient; import net.minecraft.resources.ResourceLocation; -public class FreezingRecipe extends AbstractCookingRecipe -{ - public FreezingRecipe(ResourceLocation idIn, String groupIn, Ingredient ingredientIn, ItemStack resultIn, float experienceIn, int cookTimeIn) { - super(AetherRecipeTypes.FREEZING.get(), idIn, groupIn, ingredientIn, resultIn, experienceIn, cookTimeIn); +public class FreezingRecipe extends AbstractAetherCookingRecipe { + public FreezingRecipe(ResourceLocation id, String group, AetherBookCategory category, Ingredient ingredient, ItemStack result, float experience, int freezingTime) { + super(AetherRecipeTypes.FREEZING.get(), id, group, category, ingredient, result, experience, freezingTime); } @Override @@ -26,8 +25,7 @@ public RecipeSerializer getSerializer() { return AetherRecipeSerializers.FREEZING.get(); } - public static class Serializer extends SimpleCookingSerializer - { + public static class Serializer extends AetherCookingSerializer { public Serializer() { super(FreezingRecipe::new, 200); } diff --git a/src/main/java/com/gildedgames/aether/recipe/recipes/item/IncubationRecipe.java b/src/main/java/com/gildedgames/aether/recipe/recipes/item/IncubationRecipe.java index 9c4d013cb0..0a03e80d35 100644 --- a/src/main/java/com/gildedgames/aether/recipe/recipes/item/IncubationRecipe.java +++ b/src/main/java/com/gildedgames/aether/recipe/recipes/item/IncubationRecipe.java @@ -17,7 +17,7 @@ import net.minecraft.world.level.Level; import net.minecraftforge.common.crafting.CraftingHelper; -import javax.annotation.Nonnull; +import javax.annotation.Nullable; public class IncubationRecipe implements Recipe { protected final RecipeType type; @@ -39,17 +39,21 @@ public IncubationRecipe(ResourceLocation id, String group, Ingredient ingredient } @Override - public boolean matches(Container menu, @Nonnull Level level) { + public boolean matches(Container menu, Level level) { return this.ingredient.test(menu.getItem(0)); } - @Nonnull + /** + * @return An empty {@link ItemStack}, as there is no item output. + */ @Override - public ItemStack assemble(@Nonnull Container menu) { + public ItemStack assemble(Container menu) { return ItemStack.EMPTY; } - @Nonnull + /** + * @return The original {@link ItemStack} ingredient for Recipe Book display. + */ @Override public ItemStack getResultItem() { return this.ingredient.getItems()[0]; @@ -59,11 +63,11 @@ public ItemStack getResultItem() { public boolean canCraftInDimensions(int width, int height) { return true; } + public int getIncubationTime() { return this.incubationTime; } - @Nonnull public EntityType getEntity() { return this.entity; } @@ -72,7 +76,6 @@ public CompoundTag getTag() { return this.tag; } - @Nonnull @Override public NonNullList getIngredients() { NonNullList nonNullList = NonNullList.create(); @@ -80,39 +83,34 @@ public NonNullList getIngredients() { return nonNullList; } - @Nonnull @Override public String getGroup() { return this.group; } - @Nonnull @Override public ResourceLocation getId() { return this.id; } - @Nonnull @Override public ItemStack getToastSymbol() { return new ItemStack(AetherBlocks.INCUBATOR.get()); } - @Nonnull @Override public RecipeSerializer getSerializer() { return AetherRecipeSerializers.INCUBATION.get(); } - @Nonnull @Override public RecipeType getType() { return this.type; } public static class Serializer implements RecipeSerializer { - @Nonnull - public IncubationRecipe fromJson(@Nonnull ResourceLocation recipeLocation, @Nonnull JsonObject jsonObject) { + @Override + public IncubationRecipe fromJson(ResourceLocation recipeLocation, JsonObject jsonObject) { String group = GsonHelper.getAsString(jsonObject, "group", ""); Ingredient ingredient = Ingredient.fromJson(GsonHelper.getAsJsonObject(jsonObject, "ingredient")); EntityType entityType = EntityType.byString(GsonHelper.getAsString(jsonObject, "entity")).orElseThrow(() -> new JsonSyntaxException("Entity type cannot be found")); @@ -124,7 +122,9 @@ public IncubationRecipe fromJson(@Nonnull ResourceLocation recipeLocation, @Nonn return new IncubationRecipe(recipeLocation, group, ingredient, entityType, tag, incubationTime); } - public IncubationRecipe fromNetwork(@Nonnull ResourceLocation recipeLocation, FriendlyByteBuf buffer) { + @Nullable + @Override + public IncubationRecipe fromNetwork(ResourceLocation recipeLocation, FriendlyByteBuf buffer) { String group = buffer.readUtf(); Ingredient ingredient = Ingredient.fromNetwork(buffer); EntityType entityType = EntityType.byString(buffer.readUtf()).orElseThrow(() -> new JsonSyntaxException("Entity type cannot be found")); @@ -136,6 +136,7 @@ public IncubationRecipe fromNetwork(@Nonnull ResourceLocation recipeLocation, Fr return new IncubationRecipe(recipeLocation, group, ingredient, entityType, tag, incubationTime); } + @Override public void toNetwork(FriendlyByteBuf buffer, IncubationRecipe recipe) { buffer.writeUtf(recipe.group); recipe.ingredient.toNetwork(buffer); diff --git a/src/main/java/com/gildedgames/aether/recipe/serializer/AetherCookingSerializer.java b/src/main/java/com/gildedgames/aether/recipe/serializer/AetherCookingSerializer.java new file mode 100644 index 0000000000..9d9edd5b6c --- /dev/null +++ b/src/main/java/com/gildedgames/aether/recipe/serializer/AetherCookingSerializer.java @@ -0,0 +1,82 @@ +package com.gildedgames.aether.recipe.serializer; + +import com.gildedgames.aether.recipe.AetherBookCategory; +import com.gildedgames.aether.recipe.recipes.item.AbstractAetherCookingRecipe; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonSyntaxException; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.GsonHelper; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.crafting.*; +import net.minecraftforge.registries.ForgeRegistries; + +import javax.annotation.Nullable; + +/** + * Based on {@link SimpleCookingSerializer}. + */ +public class AetherCookingSerializer implements RecipeSerializer { + private final int defaultCookingTime; + private final AetherCookingSerializer.CookieBaker factory; + + public AetherCookingSerializer(AetherCookingSerializer.CookieBaker factory, int defaultCookingTime) { + this.defaultCookingTime = defaultCookingTime; + this.factory = factory; + } + + @Override + public T fromJson(ResourceLocation id, JsonObject json) { + String group = GsonHelper.getAsString(json, "group", ""); + AetherBookCategory aetherBookCategory = AetherBookCategory.CODEC.byName(GsonHelper.getAsString(json, "category", null), AetherBookCategory.UNKNOWN); + JsonElement ingredientJson = GsonHelper.isArrayNode(json, "ingredient") ? GsonHelper.getAsJsonArray(json, "ingredient") : GsonHelper.getAsJsonObject(json, "ingredient"); + Ingredient ingredient = Ingredient.fromJson(ingredientJson); + + ItemStack result; + if (!json.has("result")) { + throw new JsonSyntaxException("Missing result, expected to find a string or object"); + } + if (json.get("result").isJsonObject()) { + result = ShapedRecipe.itemStackFromJson(GsonHelper.getAsJsonObject(json, "result")); + } else { + String resultString = GsonHelper.getAsString(json, "result"); + ResourceLocation resultLocation = new ResourceLocation(resultString); + result = new ItemStack(ForgeRegistries.ITEMS.getValue(resultLocation)); + if (result.isEmpty()) { + throw new IllegalStateException("Item: " + resultString + " does not exist"); + } + } + + float experience = GsonHelper.getAsFloat(json, "experience", 0.0F); + int cookingTime = GsonHelper.getAsInt(json, "cookingtime", this.defaultCookingTime); + + return this.factory.create(id, group, aetherBookCategory, ingredient, result, experience, cookingTime); + } + + @Nullable + @Override + public T fromNetwork(ResourceLocation id, FriendlyByteBuf buffer) { + String group = buffer.readUtf(); + AetherBookCategory aetherBookCategory = buffer.readEnum(AetherBookCategory.class); + Ingredient ingredient = Ingredient.fromNetwork(buffer); + ItemStack result = buffer.readItem(); + float experience = buffer.readFloat(); + int cookingTime = buffer.readVarInt(); + return this.factory.create(id, group, aetherBookCategory, ingredient, result, experience, cookingTime); + } + + @Override + public void toNetwork(FriendlyByteBuf buffer, T recipe) { + buffer.writeUtf(recipe.getGroup()); + buffer.writeEnum(recipe.aetherCategory()); + recipe.getIngredients().get(0).toNetwork(buffer); + buffer.writeItem(recipe.getResultItem()); + buffer.writeFloat(recipe.getExperience()); + buffer.writeVarInt(recipe.getCookingTime()); + } + + public interface CookieBaker { + T create(ResourceLocation id, String group, AetherBookCategory category, Ingredient ingredient, ItemStack result, float experience, int cookingTime); + } +} \ No newline at end of file diff --git a/src/main/java/com/gildedgames/aether/recipe/serializer/BiomeParameterRecipeSerializer.java b/src/main/java/com/gildedgames/aether/recipe/serializer/BiomeParameterRecipeSerializer.java index af6bf0a7be..4d99b55aed 100644 --- a/src/main/java/com/gildedgames/aether/recipe/serializer/BiomeParameterRecipeSerializer.java +++ b/src/main/java/com/gildedgames/aether/recipe/serializer/BiomeParameterRecipeSerializer.java @@ -13,7 +13,6 @@ import net.minecraft.world.level.biome.Biome; import org.apache.commons.lang3.tuple.Pair; -import javax.annotation.Nonnull; import javax.annotation.Nullable; public class BiomeParameterRecipeSerializer extends BlockStateRecipeSerializer { @@ -24,32 +23,31 @@ public BiomeParameterRecipeSerializer(BiomeParameterRecipeSerializer.CookieBaker this.factory = factory; } - @Nonnull @Override - public T fromJson(@Nonnull ResourceLocation recipeId, @Nonnull JsonObject serializedRecipe) { - Pair, TagKey> biomeRecipeData = BlockStateRecipeUtil.biomeRecipeDataFromJson(serializedRecipe); + public T fromJson(ResourceLocation id, JsonObject json) { + Pair, TagKey> biomeRecipeData = BlockStateRecipeUtil.biomeRecipeDataFromJson(json); ResourceKey biomeKey = biomeRecipeData.getLeft(); TagKey biomeTag = biomeRecipeData.getRight(); - T recipe = super.fromJson(recipeId, serializedRecipe); - return this.factory.create(recipeId, biomeKey, biomeTag, recipe.getIngredient(), recipe.getResult(), recipe.getFunction()); + T recipe = super.fromJson(id, json); + return this.factory.create(id, biomeKey, biomeTag, recipe.getIngredient(), recipe.getResult(), recipe.getFunction()); } @Nullable @Override - public T fromNetwork(@Nonnull ResourceLocation recipeId, @Nonnull FriendlyByteBuf buf) { - ResourceKey biomeKey = BlockStateRecipeUtil.readBiomeKey(buf); - TagKey biomeTag = BlockStateRecipeUtil.readBiomeTag(buf); - BlockStateIngredient ingredient = BlockStateIngredient.fromNetwork(buf); - BlockPropertyPair result = BlockStateRecipeUtil.readPair(buf); - CommandFunction.CacheableFunction function = BlockStateRecipeUtil.readFunction(buf); - return this.factory.create(recipeId, biomeKey, biomeTag, ingredient, result, function); + public T fromNetwork(ResourceLocation id, FriendlyByteBuf buffer) { + ResourceKey biomeKey = BlockStateRecipeUtil.readBiomeKey(buffer); + TagKey biomeTag = BlockStateRecipeUtil.readBiomeTag(buffer); + BlockStateIngredient ingredient = BlockStateIngredient.fromNetwork(buffer); + BlockPropertyPair result = BlockStateRecipeUtil.readPair(buffer); + CommandFunction.CacheableFunction function = BlockStateRecipeUtil.readFunction(buffer); + return this.factory.create(id, biomeKey, biomeTag, ingredient, result, function); } @Override - public void toNetwork(@Nonnull FriendlyByteBuf buf, T recipe) { - BlockStateRecipeUtil.writeBiomeKey(buf, recipe.getBiomeKey()); - BlockStateRecipeUtil.writeBiomeTag(buf, recipe.getBiomeTag()); - super.toNetwork(buf, recipe); + public void toNetwork(FriendlyByteBuf buffer, T recipe) { + BlockStateRecipeUtil.writeBiomeKey(buffer, recipe.getBiomeKey()); + BlockStateRecipeUtil.writeBiomeTag(buffer, recipe.getBiomeTag()); + super.toNetwork(buffer, recipe); } public interface CookieBaker { diff --git a/src/main/java/com/gildedgames/aether/recipe/serializer/BlockStateRecipeSerializer.java b/src/main/java/com/gildedgames/aether/recipe/serializer/BlockStateRecipeSerializer.java index d69efd9728..74d44e084c 100644 --- a/src/main/java/com/gildedgames/aether/recipe/serializer/BlockStateRecipeSerializer.java +++ b/src/main/java/com/gildedgames/aether/recipe/serializer/BlockStateRecipeSerializer.java @@ -13,7 +13,6 @@ import net.minecraft.util.GsonHelper; import net.minecraft.world.item.crafting.RecipeSerializer; -import javax.annotation.Nonnull; import javax.annotation.Nullable; public class BlockStateRecipeSerializer implements RecipeSerializer { @@ -23,44 +22,45 @@ public BlockStateRecipeSerializer(BlockStateRecipeSerializer.CookieBaker fact this.factory = factory; } - @Nonnull @Override - public T fromJson(@Nonnull ResourceLocation recipeId, @Nonnull JsonObject serializedRecipe) { - if (!serializedRecipe.has("ingredient")) throw new JsonSyntaxException("Missing ingredient, expected to find an object or array"); - JsonElement jsonElement = GsonHelper.isArrayNode(serializedRecipe, "ingredient") ? GsonHelper.getAsJsonArray(serializedRecipe, "ingredient") : GsonHelper.getAsJsonObject(serializedRecipe, "ingredient"); + public T fromJson(ResourceLocation id, JsonObject json) { + if (!json.has("ingredient")) throw new JsonSyntaxException("Missing ingredient, expected to find an object or array"); + JsonElement jsonElement = GsonHelper.isArrayNode(json, "ingredient") ? GsonHelper.getAsJsonArray(json, "ingredient") : GsonHelper.getAsJsonObject(json, "ingredient"); BlockStateIngredient ingredient = BlockStateIngredient.fromJson(jsonElement); - if (!serializedRecipe.has("result")) throw new JsonSyntaxException("Missing result, expected to find a string or object"); BlockPropertyPair result; - if (serializedRecipe.get("result").isJsonObject()) { - JsonObject resultObject = serializedRecipe.getAsJsonObject("result"); + if (!json.has("result")) { + throw new JsonSyntaxException("Missing result, expected to find a string or object"); + } + if (json.get("result").isJsonObject()) { + JsonObject resultObject = json.getAsJsonObject("result"); result = BlockStateRecipeUtil.pairFromJson(resultObject); } else { throw new JsonSyntaxException("Expected result to be object"); } - String functionString = GsonHelper.getAsString(serializedRecipe, "mcfunction", null); + String functionString = GsonHelper.getAsString(json, "mcfunction", null); ResourceLocation functionLocation = functionString == null ? null : new ResourceLocation(functionString); CommandFunction.CacheableFunction function = functionLocation == null ? CommandFunction.CacheableFunction.NONE : new CommandFunction.CacheableFunction(functionLocation); - return this.factory.create(recipeId, ingredient, result, function); + return this.factory.create(id, ingredient, result, function); } @Nullable @Override - public T fromNetwork(@Nonnull ResourceLocation recipeId, @Nonnull FriendlyByteBuf buf) { - BlockStateIngredient ingredient = BlockStateIngredient.fromNetwork(buf); - BlockPropertyPair result = BlockStateRecipeUtil.readPair(buf); - CommandFunction.CacheableFunction function = BlockStateRecipeUtil.readFunction(buf); - return this.factory.create(recipeId, ingredient, result, function); + public T fromNetwork(ResourceLocation id, FriendlyByteBuf buffer) { + BlockStateIngredient ingredient = BlockStateIngredient.fromNetwork(buffer); + BlockPropertyPair result = BlockStateRecipeUtil.readPair(buffer); + CommandFunction.CacheableFunction function = BlockStateRecipeUtil.readFunction(buffer); + return this.factory.create(id, ingredient, result, function); } @Override - public void toNetwork(@Nonnull FriendlyByteBuf buf, T recipe) { - recipe.getIngredient().toNetwork(buf); - BlockStateRecipeUtil.writePair(buf, recipe.getResult()); + public void toNetwork(FriendlyByteBuf buffer, T recipe) { + recipe.getIngredient().toNetwork(buffer); + BlockStateRecipeUtil.writePair(buffer, recipe.getResult()); CommandFunction.CacheableFunction function = recipe.getFunction(); - buf.writeUtf(function != null && function.getId() != null ? function.getId().toString() : ""); + buffer.writeUtf(function != null && function.getId() != null ? function.getId().toString() : ""); } public interface CookieBaker { diff --git a/src/main/java/com/gildedgames/aether/recipe/serializer/PlacementBanRecipeSerializer.java b/src/main/java/com/gildedgames/aether/recipe/serializer/PlacementBanRecipeSerializer.java index 14a1666598..46f4af33c7 100644 --- a/src/main/java/com/gildedgames/aether/recipe/serializer/PlacementBanRecipeSerializer.java +++ b/src/main/java/com/gildedgames/aether/recipe/serializer/PlacementBanRecipeSerializer.java @@ -14,7 +14,6 @@ import net.minecraft.world.level.biome.Biome; import org.apache.commons.lang3.tuple.Pair; -import javax.annotation.Nonnull; import javax.annotation.Nullable; import java.util.function.Predicate; @@ -25,35 +24,36 @@ public PlacementBanRecipeSerializer(PlacementBanRecipeSerializer.CookieBaker, TagKey> biomeRecipeData = BlockStateRecipeUtil.biomeRecipeDataFromJson(serializedRecipe); + public F fromJson(ResourceLocation id, JsonObject json) { + Pair, TagKey> biomeRecipeData = BlockStateRecipeUtil.biomeRecipeDataFromJson(json); ResourceKey biomeKey = biomeRecipeData.getLeft(); TagKey biomeTag = biomeRecipeData.getRight(); + BlockStateIngredient bypassBlock = BlockStateIngredient.EMPTY; - if (serializedRecipe.has("bypass")) { - boolean isBypassArray = GsonHelper.isArrayNode(serializedRecipe, "bypass"); - JsonElement bypassElement = isBypassArray ? GsonHelper.getAsJsonArray(serializedRecipe, "bypass") : GsonHelper.getAsJsonObject(serializedRecipe, "bypass"); + if (json.has("bypass")) { + boolean isBypassArray = GsonHelper.isArrayNode(json, "bypass"); + JsonElement bypassElement = isBypassArray ? GsonHelper.getAsJsonArray(json, "bypass") : GsonHelper.getAsJsonObject(json, "bypass"); bypassBlock = BlockStateIngredient.fromJson(bypassElement); } - return this.factory.create(recipeId, biomeKey, biomeTag, bypassBlock); + + return this.factory.create(id, biomeKey, biomeTag, bypassBlock); } @Nullable @Override - public F fromNetwork(@Nonnull ResourceLocation recipeId, @Nonnull FriendlyByteBuf buf) { - ResourceKey biomeKey = BlockStateRecipeUtil.readBiomeKey(buf); - TagKey biomeTag = BlockStateRecipeUtil.readBiomeTag(buf); - BlockStateIngredient bypassBlock = BlockStateIngredient.fromNetwork(buf); - return this.factory.create(recipeId, biomeKey, biomeTag, bypassBlock); + public F fromNetwork(ResourceLocation id, FriendlyByteBuf buffer) { + ResourceKey biomeKey = BlockStateRecipeUtil.readBiomeKey(buffer); + TagKey biomeTag = BlockStateRecipeUtil.readBiomeTag(buffer); + BlockStateIngredient bypassBlock = BlockStateIngredient.fromNetwork(buffer); + return this.factory.create(id, biomeKey, biomeTag, bypassBlock); } @Override - public void toNetwork(@Nonnull FriendlyByteBuf buf, F recipe) { - BlockStateRecipeUtil.writeBiomeKey(buf, recipe.getBiomeKey()); - BlockStateRecipeUtil.writeBiomeTag(buf, recipe.getBiomeTag()); - recipe.getBypassBlock().toNetwork(buf); + public void toNetwork(FriendlyByteBuf buffer, F recipe) { + BlockStateRecipeUtil.writeBiomeKey(buffer, recipe.getBiomeKey()); + BlockStateRecipeUtil.writeBiomeTag(buffer, recipe.getBiomeTag()); + recipe.getBypassBlock().toNetwork(buffer); } public interface CookieBaker, F extends AbstractPlacementBanRecipe> { diff --git a/src/main/java/com/gildedgames/aether/util/BlockStateRecipeUtil.java b/src/main/java/com/gildedgames/aether/util/BlockStateRecipeUtil.java index 1d9d44ef6d..f68cbac2b0 100644 --- a/src/main/java/com/gildedgames/aether/util/BlockStateRecipeUtil.java +++ b/src/main/java/com/gildedgames/aether/util/BlockStateRecipeUtil.java @@ -6,7 +6,7 @@ import net.minecraft.commands.CommandFunction; import net.minecraft.commands.CommandSourceStack; import net.minecraft.core.BlockPos; -import net.minecraft.core.Registry; +import net.minecraft.core.registries.Registries; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.resources.ResourceKey; @@ -43,45 +43,53 @@ public static void executeFunction(Level level, BlockPos pos, CommandFunction.Ca } } - public static void writePair(FriendlyByteBuf buf, BlockPropertyPair pair) { + // Buffer write methods. + + public static void writePair(FriendlyByteBuf buffer, BlockPropertyPair pair) { ResourceLocation blockLocation = ForgeRegistries.BLOCKS.getKey(pair.block()); if ((pair.block().defaultBlockState().isAir() && pair.properties().isEmpty()) || blockLocation == null) { - buf.writeBoolean(false); + buffer.writeBoolean(false); } else { - buf.writeBoolean(true); - buf.writeUtf(blockLocation.toString()); + buffer.writeBoolean(true); + buffer.writeUtf(blockLocation.toString()); CompoundTag tag = new CompoundTag(); for (Map.Entry, Comparable> entry : pair.properties().entrySet()) { Property property = entry.getKey(); tag.putString(property.getName(), getName(property, entry.getValue())); } - buf.writeNbt(tag); + buffer.writeNbt(tag); } } - public static void writeBiomeKey(FriendlyByteBuf buf, ResourceKey biomeKey) { + public static void writeBiomeKey(FriendlyByteBuf buffer, ResourceKey biomeKey) { if (biomeKey == null) { - buf.writeBoolean(false); + buffer.writeBoolean(false); } else { - buf.writeBoolean(true); - buf.writeResourceLocation(biomeKey.location()); + buffer.writeBoolean(true); + buffer.writeResourceLocation(biomeKey.location()); } } - public static void writeBiomeTag(FriendlyByteBuf buf, TagKey biomeTag) { + public static void writeBiomeTag(FriendlyByteBuf buffer, TagKey biomeTag) { if (biomeTag == null) { - buf.writeBoolean(false); + buffer.writeBoolean(false); } else { - buf.writeBoolean(true); - buf.writeResourceLocation(biomeTag.location()); + buffer.writeBoolean(true); + buffer.writeResourceLocation(biomeTag.location()); } } - public static BlockPropertyPair readPair(FriendlyByteBuf buf) { - if (!buf.readBoolean()) { + // Buffer read methods. + + /** + * Warning for "unchecked" is suppressed because casting within this method works fine. + */ + @SuppressWarnings("unchecked") + public static BlockPropertyPair readPair(FriendlyByteBuf buffer) { + if (!buffer.readBoolean()) { return BlockPropertyPair.of(Blocks.AIR, new HashMap<>()); } else { - String blockString = buf.readUtf(); + String blockString = buffer.readUtf(); ResourceLocation blockLocation = new ResourceLocation(blockString); Block block = ForgeRegistries.BLOCKS.getValue(blockLocation); if (block == null) { @@ -89,7 +97,7 @@ public static BlockPropertyPair readPair(FriendlyByteBuf buf) { } Map, Comparable> properties = new HashMap<>(); - CompoundTag tag = buf.readNbt(); + CompoundTag tag = buffer.readNbt(); if (tag != null) { for (String propertyName : tag.getAllKeys()) { @@ -105,30 +113,48 @@ public static BlockPropertyPair readPair(FriendlyByteBuf buf) { } } - public static ResourceKey readBiomeKey(FriendlyByteBuf buf) { - if (!buf.readBoolean()) { + public static ResourceKey readBiomeKey(FriendlyByteBuf buffer) { + if (!buffer.readBoolean()) { return null; } else { - ResourceLocation biomeLocation = buf.readResourceLocation(); - return ResourceKey.create(Registry.BIOME_REGISTRY, biomeLocation); + ResourceLocation biomeLocation = buffer.readResourceLocation(); + return ResourceKey.create(Registries.BIOME, biomeLocation); } } - public static TagKey readBiomeTag(FriendlyByteBuf buf) { - if (!buf.readBoolean()) { + public static TagKey readBiomeTag(FriendlyByteBuf buffer) { + if (!buffer.readBoolean()) { return null; } else { - ResourceLocation tagLocation = buf.readResourceLocation(); - return TagKey.create(Registry.BIOME_REGISTRY, tagLocation); + ResourceLocation tagLocation = buffer.readResourceLocation(); + return TagKey.create(Registries.BIOME, tagLocation); } } - public static CommandFunction.CacheableFunction readFunction(FriendlyByteBuf buf) { - String functionString = buf.readUtf(); + public static CommandFunction.CacheableFunction readFunction(FriendlyByteBuf buffer) { + String functionString = buffer.readUtf(); ResourceLocation functionLocation = functionString.isEmpty() ? null : new ResourceLocation(functionString); return functionLocation == null ? CommandFunction.CacheableFunction.NONE : new CommandFunction.CacheableFunction(functionLocation); } + // JSON write methods. + + public static void biomeKeyToJson(JsonObject json, ResourceKey biomeKey) { + if (biomeKey != null) { + ResourceLocation biomeLocation = biomeKey.location(); + json.addProperty("biome", biomeLocation.toString()); + } + } + + public static void biomeTagToJson(JsonObject json, TagKey biomeTag) { + if (biomeTag != null) { + ResourceLocation tagLocation = biomeTag.location(); + json.addProperty("biome", "#" + tagLocation); + } + } + + // JSON read methods. + public static BlockPropertyPair pairFromJson(JsonObject json) { Block block; Map, Comparable> properties = Map.of(); @@ -161,6 +187,10 @@ public static Block blockFromJson(JsonObject json) { } } + /** + * Warning for "unchecked" is suppressed because casting within this method works fine. + */ + @SuppressWarnings("unchecked") public static Map, Comparable> propertiesFromJson(JsonObject json, Block block) { Map, Comparable> properties = new HashMap<>(); StateDefinition stateDefinition = block.getStateDefinition(); @@ -193,33 +223,29 @@ public static Pair, TagKey> biomeRecipeDataFromJson(Js public static ResourceKey biomeKeyFromJson(JsonObject json) { String biomeName = GsonHelper.getAsString(json, "biome"); String[] nameWithId = biomeName.split(":"); - return ResourceKey.create(Registry.BIOME_REGISTRY, (nameWithId.length > 1) ? new ResourceLocation(nameWithId[0], nameWithId[1]) : new ResourceLocation(biomeName)); + return ResourceKey.create(Registries.BIOME, (nameWithId.length > 1) ? new ResourceLocation(nameWithId[0], nameWithId[1]) : new ResourceLocation(biomeName)); } public static TagKey biomeTagFromJson(JsonObject json) { String biomeName = GsonHelper.getAsString(json, "biome").replace("#", ""); String[] nameWithId = biomeName.split(":"); - return TagKey.create(Registry.BIOME_REGISTRY, (nameWithId.length > 1) ? new ResourceLocation(nameWithId[0], nameWithId[1]) : new ResourceLocation(biomeName)); + return TagKey.create(Registries.BIOME, (nameWithId.length > 1) ? new ResourceLocation(nameWithId[0], nameWithId[1]) : new ResourceLocation(biomeName)); } - public static void biomeKeyToJson(JsonObject json, ResourceKey biomeKey) { - if (biomeKey != null) { - ResourceLocation biomeLocation = biomeKey.location(); - json.addProperty("biome", biomeLocation.toString()); - } - } - - public static void biomeTagToJson(JsonObject json, TagKey biomeTag) { - if (biomeTag != null) { - ResourceLocation tagLocation = biomeTag.location(); - json.addProperty("biome", "#" + tagLocation); - } - } + // Extra methods. + /** + * Warning for "unchecked" is suppressed because casting within this method works fine. + */ + @SuppressWarnings("unchecked") public static , V extends T> BlockState setHelper(Map.Entry, Comparable> properties, BlockState state) { return state.setValue((Property) properties.getKey(), (V) properties.getValue()); } + /** + * Warning for "unchecked" is suppressed because casting within this method works fine. + */ + @SuppressWarnings("unchecked") public static > String getName(Property pProperty, Comparable pValue) { return pProperty.getName((T) pValue); } diff --git a/src/main/java/com/gildedgames/aether/util/ConstantsUtil.java b/src/main/java/com/gildedgames/aether/util/ConstantsUtil.java index 0e92c00d2b..bc309de361 100644 --- a/src/main/java/com/gildedgames/aether/util/ConstantsUtil.java +++ b/src/main/java/com/gildedgames/aether/util/ConstantsUtil.java @@ -1,8 +1,5 @@ package com.gildedgames.aether.util; -import net.minecraft.core.BlockPos; -import net.minecraft.world.level.block.state.BlockState; - public class ConstantsUtil { /** * Y-vector of an entity's delta movement when on the ground. diff --git a/src/main/java/com/gildedgames/aether/util/LevelUtil.java b/src/main/java/com/gildedgames/aether/util/LevelUtil.java index 9a2908ba36..c86556a2c9 100644 --- a/src/main/java/com/gildedgames/aether/util/LevelUtil.java +++ b/src/main/java/com/gildedgames/aether/util/LevelUtil.java @@ -1,17 +1,17 @@ package com.gildedgames.aether.util; import com.gildedgames.aether.AetherConfig; -import net.minecraft.core.Registry; +import net.minecraft.core.registries.Registries; import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.Level; public class LevelUtil { public static ResourceKey destinationDimension() { // Default: aether:the_aether - return ResourceKey.create(Registry.DIMENSION_REGISTRY, new ResourceLocation(AetherConfig.COMMON.portal_destination_dimension_ID.get())); + return ResourceKey.create(Registries.DIMENSION, new ResourceLocation(AetherConfig.COMMON.portal_destination_dimension_ID.get())); } public static ResourceKey returnDimension() { // Default: minecraft:overworld - return ResourceKey.create(Registry.DIMENSION_REGISTRY, new ResourceLocation(AetherConfig.COMMON.portal_return_dimension_ID.get())); + return ResourceKey.create(Registries.DIMENSION, new ResourceLocation(AetherConfig.COMMON.portal_return_dimension_ID.get())); } } diff --git a/src/main/java/com/gildedgames/aether/world/feature/CrystalIslandFeature.java b/src/main/java/com/gildedgames/aether/world/feature/CrystalIslandFeature.java index 05193bd86d..d7c947cb18 100644 --- a/src/main/java/com/gildedgames/aether/world/feature/CrystalIslandFeature.java +++ b/src/main/java/com/gildedgames/aether/world/feature/CrystalIslandFeature.java @@ -1,10 +1,10 @@ package com.gildedgames.aether.world.feature; -import com.gildedgames.aether.data.resources.AetherConfiguredFeatures; +import com.gildedgames.aether.data.resources.registries.AetherConfiguredFeatures; import com.gildedgames.aether.data.resources.AetherFeatureStates; import com.mojang.serialization.Codec; import net.minecraft.core.Direction; -import net.minecraft.core.Registry; +import net.minecraft.core.registries.Registries; import net.minecraft.data.worldgen.placement.PlacementUtils; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.levelgen.feature.Feature; @@ -21,7 +21,7 @@ public CrystalIslandFeature(Codec codec) { @Override public boolean place(FeaturePlaceContext context) { - PlacedFeature feature = PlacementUtils.inlinePlaced(context.level().registryAccess().registryOrThrow(Registry.CONFIGURED_FEATURE_REGISTRY).getOrCreateHolderOrThrow(AetherConfiguredFeatures.CRYSTAL_TREE_CONFIGURATION)).get(); + PlacedFeature feature = PlacementUtils.inlinePlaced(context.level().registryAccess().registryOrThrow(Registries.CONFIGURED_FEATURE).getHolderOrThrow(AetherConfiguredFeatures.CRYSTAL_TREE_CONFIGURATION)).get(); if (feature.place(context.level(), context.chunkGenerator(), context.random(), context.origin().above())) { for (int i = 0; i < 3; i++) { BlockState state; diff --git a/src/main/java/com/gildedgames/aether/world/placementmodifier/AetherPlacementModifiers.java b/src/main/java/com/gildedgames/aether/world/placementmodifier/AetherPlacementModifiers.java index aed5eb2310..fb19e67ed8 100644 --- a/src/main/java/com/gildedgames/aether/world/placementmodifier/AetherPlacementModifiers.java +++ b/src/main/java/com/gildedgames/aether/world/placementmodifier/AetherPlacementModifiers.java @@ -3,8 +3,8 @@ import com.gildedgames.aether.Aether; import com.mojang.serialization.Codec; import net.minecraft.core.Registry; +import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.level.levelgen.placement.PlacementFilter; import net.minecraft.world.level.levelgen.placement.PlacementModifier; import net.minecraft.world.level.levelgen.placement.PlacementModifierType; @@ -20,6 +20,6 @@ public class AetherPlacementModifiers { public static void init() { } private static

PlacementModifierType

register(ResourceLocation name, Codec

codec) { - return Registry.register(Registry.PLACEMENT_MODIFIERS, name, () -> codec); + return Registry.register(BuiltInRegistries.PLACEMENT_MODIFIER_TYPE, name, () -> codec); } } diff --git a/src/main/java/com/gildedgames/aether/world/placementmodifier/DungeonBlacklistFilter.java b/src/main/java/com/gildedgames/aether/world/placementmodifier/DungeonBlacklistFilter.java index eaee114879..6f9c4db6f5 100644 --- a/src/main/java/com/gildedgames/aether/world/placementmodifier/DungeonBlacklistFilter.java +++ b/src/main/java/com/gildedgames/aether/world/placementmodifier/DungeonBlacklistFilter.java @@ -6,6 +6,7 @@ import net.minecraft.core.BlockPos; import net.minecraft.core.Holder; import net.minecraft.core.Registry; +import net.minecraft.core.registries.Registries; import net.minecraft.server.level.WorldGenRegion; import net.minecraft.util.RandomSource; import net.minecraft.world.level.StructureManager; @@ -23,7 +24,7 @@ protected boolean shouldPlace(PlacementContext context, RandomSource random, Blo return false; } StructureManager structureManager = ((WorldGenRegionAccessor)context.getLevel()).getStructureManager(); - Registry configuredStructureFeatureRegistry = context.getLevel().registryAccess().registryOrThrow(Registry.STRUCTURE_REGISTRY); + Registry configuredStructureFeatureRegistry = context.getLevel().registryAccess().registryOrThrow(Registries.STRUCTURE); for (Holder structure : configuredStructureFeatureRegistry.getOrCreateTag(AetherTags.Structures.DUNGEONS)) { if (structureManager.getStructureAt(pos, structure.value()).isValid()) { return false; diff --git a/src/main/java/com/gildedgames/aether/world/processor/AetherStructureProcessors.java b/src/main/java/com/gildedgames/aether/world/processor/AetherStructureProcessors.java index 67f2613baf..5266fd4ced 100644 --- a/src/main/java/com/gildedgames/aether/world/processor/AetherStructureProcessors.java +++ b/src/main/java/com/gildedgames/aether/world/processor/AetherStructureProcessors.java @@ -1,7 +1,7 @@ package com.gildedgames.aether.world.processor; import com.gildedgames.aether.Aether; -import net.minecraft.core.Registry; +import net.minecraft.core.registries.Registries; import net.minecraft.world.level.levelgen.structure.templatesystem.StructureProcessorType; import net.minecraftforge.registries.DeferredRegister; import net.minecraftforge.registries.RegistryObject; @@ -10,7 +10,7 @@ * Class for registering StructureProcessorTypes */ public class AetherStructureProcessors { - public static final DeferredRegister> STRUCTURE_PROCESSOR_TYPES = DeferredRegister.create(Registry.STRUCTURE_PROCESSOR_REGISTRY, Aether.MODID); + public static final DeferredRegister> STRUCTURE_PROCESSOR_TYPES = DeferredRegister.create(Registries.STRUCTURE_PROCESSOR, Aether.MODID); public static final RegistryObject> DUNGEON_STONE_REPLACE = STRUCTURE_PROCESSOR_TYPES.register("dungeon_stone_replace", () -> () -> DungeonStoneProcessor.CODEC); diff --git a/src/main/java/com/gildedgames/aether/world/structure/AetherStructureTypes.java b/src/main/java/com/gildedgames/aether/world/structure/AetherStructureTypes.java index 284c8eaa2c..352ff97691 100644 --- a/src/main/java/com/gildedgames/aether/world/structure/AetherStructureTypes.java +++ b/src/main/java/com/gildedgames/aether/world/structure/AetherStructureTypes.java @@ -1,13 +1,13 @@ package com.gildedgames.aether.world.structure; import com.gildedgames.aether.Aether; -import net.minecraft.core.Registry; +import net.minecraft.core.registries.Registries; import net.minecraft.world.level.levelgen.structure.StructureType; import net.minecraftforge.registries.DeferredRegister; import net.minecraftforge.registries.RegistryObject; public class AetherStructureTypes { - public static final DeferredRegister> STRUCTURE_TYPES = DeferredRegister.create(Registry.STRUCTURE_TYPE_REGISTRY, Aether.MODID); + public static final DeferredRegister> STRUCTURE_TYPES = DeferredRegister.create(Registries.STRUCTURE_TYPE, Aether.MODID); public static final RegistryObject> LARGE_AERCLOUD = STRUCTURE_TYPES.register("large_aercloud", () -> () -> LargeAercloudStructure.CODEC); public static final RegistryObject> BRONZE_DUNGEON = STRUCTURE_TYPES.register("bronze_dungeon", () -> () -> BronzeDungeonStructure.CODEC); diff --git a/src/main/java/com/gildedgames/aether/world/structurepiece/AetherStructurePieceTypes.java b/src/main/java/com/gildedgames/aether/world/structurepiece/AetherStructurePieceTypes.java index bc88ee982f..f288e2ea31 100644 --- a/src/main/java/com/gildedgames/aether/world/structurepiece/AetherStructurePieceTypes.java +++ b/src/main/java/com/gildedgames/aether/world/structurepiece/AetherStructurePieceTypes.java @@ -1,7 +1,7 @@ package com.gildedgames.aether.world.structurepiece; import com.gildedgames.aether.Aether; -import net.minecraft.core.Registry; +import net.minecraft.core.registries.Registries; import net.minecraft.world.level.levelgen.structure.pieces.StructurePieceType; import net.minecraftforge.registries.DeferredRegister; import net.minecraftforge.registries.RegistryObject; @@ -9,7 +9,7 @@ import java.util.Locale; public class AetherStructurePieceTypes { - public static final DeferredRegister STRUCTURE_PIECE_TYPES = DeferredRegister.create(Registry.STRUCTURE_PIECE_REGISTRY, Aether.MODID); + public static final DeferredRegister STRUCTURE_PIECE_TYPES = DeferredRegister.create(Registries.STRUCTURE_PIECE, Aether.MODID); public static RegistryObject LARGE_AERCLOUD = register("ALC", LargeAercloudPiece::new); public static final RegistryObject BRONZE_BOSS_ROOM = register("BBossRoom", BronzeDungeonPieces.BossRoom::new); diff --git a/src/main/java/com/gildedgames/aether/world/structurepiece/SilverDungeonPieces.java b/src/main/java/com/gildedgames/aether/world/structurepiece/SilverDungeonPieces.java index af7edcea15..4737ef708d 100644 --- a/src/main/java/com/gildedgames/aether/world/structurepiece/SilverDungeonPieces.java +++ b/src/main/java/com/gildedgames/aether/world/structurepiece/SilverDungeonPieces.java @@ -4,14 +4,14 @@ import com.gildedgames.aether.api.DungeonTracker; import com.gildedgames.aether.block.AetherBlocks; import com.gildedgames.aether.blockentity.TreasureChestBlockEntity; -import com.gildedgames.aether.data.resources.AetherStructures; +import com.gildedgames.aether.data.resources.registries.AetherStructures; import com.gildedgames.aether.entity.AetherEntityTypes; import com.gildedgames.aether.entity.monster.dungeon.boss.ValkyrieQueen; import com.gildedgames.aether.loot.AetherLoot; import com.google.common.collect.ImmutableList; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; -import net.minecraft.core.Registry; +import net.minecraft.core.registries.Registries; import net.minecraft.nbt.*; import net.minecraft.resources.ResourceLocation; import net.minecraft.util.RandomSource; @@ -107,7 +107,7 @@ protected void handleDataMarker(String name, BlockPos pos, ServerLevelAccessor l new AABB(this.boundingBox.minX(), this.boundingBox.minY(), this.boundingBox.minZ(), this.boundingBox.maxX() + 1, this.boundingBox.maxY() + 1, this.boundingBox.maxZ() + 1), new ArrayList<>())); StructureManager manager = level.getLevel().structureManager(); - Structure temple = manager.registryAccess().registryOrThrow(Registry.STRUCTURE_REGISTRY).get(AetherStructures.SILVER_DUNGEON); + Structure temple = manager.registryAccess().registryOrThrow(Registries.STRUCTURE).get(AetherStructures.SILVER_DUNGEON); if (temple != null) { BoundingBox box = manager.getStructureAt(pos, temple).getBoundingBox(); AABB dungeonBounds = new AABB(box.minX(), box.minY(), box.minZ(), box.maxX() + 1, box.maxY() + 1, box.maxZ() + 1); diff --git a/src/main/java/com/gildedgames/aether/world/treegrower/GoldenOakTree.java b/src/main/java/com/gildedgames/aether/world/treegrower/GoldenOakTree.java index 86d29c7e9d..2d9a6b7b13 100644 --- a/src/main/java/com/gildedgames/aether/world/treegrower/GoldenOakTree.java +++ b/src/main/java/com/gildedgames/aether/world/treegrower/GoldenOakTree.java @@ -1,30 +1,18 @@ package com.gildedgames.aether.world.treegrower; -import com.gildedgames.aether.data.resources.AetherConfiguredFeatures; -import net.minecraft.core.BlockPos; -import net.minecraft.core.Holder; -import net.minecraft.core.Registry; -import net.minecraft.server.level.ServerLevel; +import com.gildedgames.aether.data.resources.registries.AetherConfiguredFeatures; +import net.minecraft.resources.ResourceKey; import net.minecraft.util.RandomSource; -import javax.annotation.Nonnull; import javax.annotation.Nullable; import net.minecraft.world.level.block.grower.AbstractTreeGrower; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.feature.ConfiguredFeature; public class GoldenOakTree extends AbstractTreeGrower { @Nullable @Override - protected Holder> getConfiguredFeature(@Nonnull ServerLevel level, @Nonnull ChunkGenerator chunkGenerator, @Nonnull BlockPos pos, @Nonnull BlockState state, @Nonnull RandomSource random, boolean hasFlowers) { - return level.registryAccess().registryOrThrow(Registry.CONFIGURED_FEATURE_REGISTRY).getOrCreateHolderOrThrow(AetherConfiguredFeatures.GOLDEN_OAK_TREE_CONFIGURATION); - } - - @Nullable - @Override - protected Holder> getConfiguredFeature(@Nonnull RandomSource random, boolean pLargeHive) { - return null; + protected ResourceKey> getConfiguredFeature(RandomSource random, boolean largeHive) { + return AetherConfiguredFeatures.GOLDEN_OAK_TREE_CONFIGURATION; } } diff --git a/src/main/java/com/gildedgames/aether/world/treegrower/SkyrootTree.java b/src/main/java/com/gildedgames/aether/world/treegrower/SkyrootTree.java index ca126e8077..a8d71c839d 100644 --- a/src/main/java/com/gildedgames/aether/world/treegrower/SkyrootTree.java +++ b/src/main/java/com/gildedgames/aether/world/treegrower/SkyrootTree.java @@ -1,30 +1,18 @@ package com.gildedgames.aether.world.treegrower; -import com.gildedgames.aether.data.resources.AetherConfiguredFeatures; -import net.minecraft.core.BlockPos; -import net.minecraft.core.Holder; -import net.minecraft.core.Registry; -import net.minecraft.server.level.ServerLevel; +import com.gildedgames.aether.data.resources.registries.AetherConfiguredFeatures; +import net.minecraft.resources.ResourceKey; import net.minecraft.util.RandomSource; -import javax.annotation.Nonnull; import javax.annotation.Nullable; import net.minecraft.world.level.block.grower.AbstractTreeGrower; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.feature.ConfiguredFeature; public class SkyrootTree extends AbstractTreeGrower { @Nullable @Override - protected Holder> getConfiguredFeature(@Nonnull ServerLevel level, @Nonnull ChunkGenerator chunkGenerator, @Nonnull BlockPos pos, @Nonnull BlockState state, @Nonnull RandomSource random, boolean hasFlowers) { - return level.registryAccess().registryOrThrow(Registry.CONFIGURED_FEATURE_REGISTRY).getOrCreateHolderOrThrow(AetherConfiguredFeatures.SKYROOT_TREE_CONFIGURATION); - } - - @Nullable - @Override - protected Holder> getConfiguredFeature(@Nonnull RandomSource random, boolean pLargeHive) { - return null; + protected ResourceKey> getConfiguredFeature(RandomSource random, boolean largeHive) { + return AetherConfiguredFeatures.SKYROOT_TREE_CONFIGURATION; } } diff --git a/src/main/resources/META-INF/mods.toml b/src/main/resources/META-INF/mods.toml index 5d6dd2abf9..c632d87b38 100644 --- a/src/main/resources/META-INF/mods.toml +++ b/src/main/resources/META-INF/mods.toml @@ -1,5 +1,5 @@ modLoader = "javafml" -loaderVersion = "[43,)" +loaderVersion = "[44,)" license = "Assets: All Rights Reserved; Code: LGPL-3.0" [[mods]] @@ -17,18 +17,18 @@ description = ''' [[dependencies.aether]] modId = "forge" mandatory = true - versionRange = "[43.1.65,)" + versionRange = "[44.0.36,)" ordering = "NONE" side = "BOTH" [[dependencies.aether]] modId = "curios" mandatory = true - versionRange = "[1.19.2-5.1.1.0,)" + versionRange = "[1.19.3-5.1.1.2,)" ordering = "NONE" side = "BOTH" [[dependencies.aether]] modId = "minecraft" mandatory = true - versionRange = "[1.19.2]" + versionRange = "[1.19.3]" ordering = "NONE" side = "BOTH" diff --git a/src/main/resources/aether.mixins.json b/src/main/resources/aether.mixins.json index 49d34803f1..9f67fced15 100644 --- a/src/main/resources/aether.mixins.json +++ b/src/main/resources/aether.mixins.json @@ -6,6 +6,9 @@ "plugin": "com.gildedgames.aether.mixin.AetherMixinPlugin", "refmap": "aether.refmap.json", "mixins": [ + "common.AbstractArrowMixin", + "common.DimensionTypeMixin", + "common.FeatureMixin", "common.accessor.AbstractContainerMenuAccessor", "common.accessor.AbstractFurnaceBlockEntityAccessor", "common.accessor.BaseSpawnerAccessor", @@ -27,13 +30,20 @@ "common.accessor.SpreadingSnowyDirtBlockAccessor", "common.accessor.StoredUserListAccessor", "common.accessor.WorldGenRegionAccessor", - "common.accessor.ZombifiedPiglinAccessor", - "common.AbstractArrowMixin", - "common.DimensionTypeMixin", - "common.FeatureMixin" + "common.accessor.ZombifiedPiglinAccessor" ], "client": [ + "client.AdvancementToastMixin", + "client.ConnectScreenMixin", + "client.CreateWorldScreenMixin", + "client.ElytraLayerMixin", + "client.LocalPlayerMixin", + "client.PanoramaRendererMixin", + "client.TippableArrowRendererMixin", + "client.TitleScreenMixin", + "client.WorldListEntryMixin", "client.accessor.BlockColorsAccessor", + "client.accessor.ButtonAccessor", "client.accessor.EntityRendererAccessor", "client.accessor.GuiAccessor", "client.accessor.GuiComponentAccessor", @@ -43,16 +53,7 @@ "client.accessor.QuadrupedModelAccessor", "client.accessor.RealmsPlayerScreenAccessor", "client.accessor.ScreenAccessor", - "client.accessor.TitleScreenAccessor", - "client.AdvancementToastMixin", - "client.ConnectScreenMixin", - "client.CreateWorldScreenMixin", - "client.ElytraLayerMixin", - "client.LocalPlayerMixin", - "client.PanoramaRendererMixin", - "client.TippableArrowRendererMixin", - "client.TitleScreenMixin", - "client.WorldListEntryMixin" + "client.accessor.TitleScreenAccessor" ], "injectors": { "defaultRequire": 1 diff --git a/src/main/resources/assets/aether/lang/de_de.json b/src/main/resources/assets/aether/lang/de_de.json index 254c8f34a2..8ee9b1c5fe 100644 --- a/src/main/resources/assets/aether/lang/de_de.json +++ b/src/main/resources/assets/aether/lang/de_de.json @@ -174,9 +174,9 @@ "gui.aether.valkyrie.dialog.medal.1": "Ähm... Das ist ein schöner Stapel Medaillen, den Du da hast...", "gui.aether.valkyrie.dialog.medal.2": "Das ist ziemlich beeindruckend, aber Du wirst mich nicht besiegen.", "gui.aether.valkyrie.dialog.medal.3": "Du hältst dich wohl für einen harten Kerl, was? Na, dann mal los!", - "gui.aether.valkyrie.dialog.playerdead.1": "Du willst eine Medaille? Versuche doch mal, weniger erbärmlich zu sein.", - "gui.aether.valkyrie.dialog.playerdead.2": "Vielleicht eines Tages, %s... vielleicht eines Tages.", - "gui.aether.valkyrie.dialog.playerdead.3": "Menschen sind nicht annähernd so süß, wenn sie tot sind.", + "gui.aether.valkyrie.dialog.playerdeath.1": "Du willst eine Medaille? Versuche doch mal, weniger erbärmlich zu sein.", + "gui.aether.valkyrie.dialog.playerdeath.2": "Vielleicht eines Tages, %s... vielleicht eines Tages.", + "gui.aether.valkyrie.dialog.playerdeath.3": "Menschen sind nicht annähernd so süß, wenn sie tot sind.", "item.aether.aechor_petal": "Aechorblütenblatt", "item.aether.aether_portal_frame": "Aether Portal Frame", "item.aether.agility_cape": "Beweglichkeitsumhang", diff --git a/src/main/resources/assets/aether/lang/en_ud.json b/src/main/resources/assets/aether/lang/en_ud.json index 08f2016f00..a4ee7a9902 100644 --- a/src/main/resources/assets/aether/lang/en_ud.json +++ b/src/main/resources/assets/aether/lang/en_ud.json @@ -174,9 +174,9 @@ "gui.aether.valkyrie.dialog.medal.1": "Umm... that's a nice pile of medallions you have there...", "gui.aether.valkyrie.dialog.medal.2": "That's pretty impressive, but you won't defeat me.", "gui.aether.valkyrie.dialog.medal.3": "You think you're a tough guy, eh? Well, bring it on!", - "gui.aether.valkyrie.dialog.playerdead.1": "You want a medallion? Try being less pathetic.", - "gui.aether.valkyrie.dialog.playerdead.2": "Maybe some day, %s... maybe some day.", - "gui.aether.valkyrie.dialog.playerdead.3": "Humans aren't nearly as cute when they're dead.", + "gui.aether.valkyrie.dialog.playerdeath.1": "You want a medallion? Try being less pathetic.", + "gui.aether.valkyrie.dialog.playerdeath.2": "Maybe some day, %s... maybe some day.", + "gui.aether.valkyrie.dialog.playerdeath.3": "Humans aren't nearly as cute when they're dead.", "item.aether.aechor_petal": "ꞁɐʇǝԀ ɹoɥɔǝⱯ", "item.aether.aether_portal_frame": "Aether Portal Frame", "item.aether.agility_cape": "ǝdɐƆ ʎʇᴉꞁᴉᵷⱯ", diff --git a/src/main/resources/assets/aether/lang/es_mx.json b/src/main/resources/assets/aether/lang/es_mx.json index d0399e8277..6331f3682c 100644 --- a/src/main/resources/assets/aether/lang/es_mx.json +++ b/src/main/resources/assets/aether/lang/es_mx.json @@ -175,9 +175,9 @@ "gui.aether.valkyrie.dialog.medal.1": "Umm... that's a nice pile of medallions you have there...", "gui.aether.valkyrie.dialog.medal.2": "That's pretty impressive, but you won't defeat me.", "gui.aether.valkyrie.dialog.medal.3": "You think you're a tough guy, eh? Well, bring it on!", - "gui.aether.valkyrie.dialog.playerdead.1": "You want a medallion? Try being less pathetic.", - "gui.aether.valkyrie.dialog.playerdead.2": "Maybe some day, %s... maybe some day.", - "gui.aether.valkyrie.dialog.playerdead.3": "Humans aren't nearly as cute when they're dead.", + "gui.aether.valkyrie.dialog.playerdeath.1": "You want a medallion? Try being less pathetic.", + "gui.aether.valkyrie.dialog.playerdeath.2": "Maybe some day, %s... maybe some day.", + "gui.aether.valkyrie.dialog.playerdeath.3": "Humans aren't nearly as cute when they're dead.", "item.aether.aechor_petal": "Petalo de Aechor", "item.aether.aether_portal_frame": "Aether Portal Frame", "item.aether.agility_cape": "Capa de Agilidad", diff --git a/src/main/resources/assets/aether/lang/fr_fr.json b/src/main/resources/assets/aether/lang/fr_fr.json index ac763f0f94..485fbfaeb9 100644 --- a/src/main/resources/assets/aether/lang/fr_fr.json +++ b/src/main/resources/assets/aether/lang/fr_fr.json @@ -814,9 +814,9 @@ "gui.aether.valkyrie.dialog.medal.1": "Mmh, c'est une belle pile de médailles que tu as là.", "gui.aether.valkyrie.dialog.medal.2": "Impressionant. Mais tu ne pourras jamais faire le poids contre moi !", "gui.aether.valkyrie.dialog.medal.3": "Tu penses que tu es un dur à cuire, hein ? Et bien, ramène-toi pour voir !", - "gui.aether.valkyrie.dialog.playerdead.1": "Tu veux une médaille ? Une simple médaille ? Pathétique.", - "gui.aether.valkyrie.dialog.playerdead.2": "Peut-être un jour, %s... peut-être un jour.", - "gui.aether.valkyrie.dialog.playerdead.3": "Les humains ne sont pas aussi mignons, quand ils sont morts, tu trouves pas ?", + "gui.aether.valkyrie.dialog.playerdeath.1": "Tu veux une médaille ? Une simple médaille ? Pathétique.", + "gui.aether.valkyrie.dialog.playerdeath.2": "Peut-être un jour, %s... peut-être un jour.", + "gui.aether.valkyrie.dialog.playerdeath.3": "Les humains ne sont pas aussi mignons, quand ils sont morts, tu trouves pas ?", "entity.aether.poison_needle": "Aiguille empoisonnée", "entity.aether.valkyrie_queen": "Reine des Valkyries", "item.aether.skyroot_chest_boat": "Bateau en skyroot avec un coffre", diff --git a/src/main/resources/assets/aether/lang/it_it.json b/src/main/resources/assets/aether/lang/it_it.json index 053ad505a5..f84d98107a 100644 --- a/src/main/resources/assets/aether/lang/it_it.json +++ b/src/main/resources/assets/aether/lang/it_it.json @@ -175,9 +175,9 @@ "gui.aether.valkyrie.dialog.medal.1": "Um...Che bella pila di medaglie che hai...", "gui.aether.valkyrie.dialog.medal.2": "That's pretty impressive, but you won't defeat me.", "gui.aether.valkyrie.dialog.medal.3": "You think you're a tough guy, eh? Well, bring it on!", - "gui.aether.valkyrie.dialog.playerdead.1": "Vuoi una medaglia? Prova a essere meno patetico.", - "gui.aether.valkyrie.dialog.playerdead.2": "Maybe some day, %s... maybe some day.", - "gui.aether.valkyrie.dialog.playerdead.3": "Gli umani non sono così carini quando sono morti...", + "gui.aether.valkyrie.dialog.playerdeath.1": "Vuoi una medaglia? Prova a essere meno patetico.", + "gui.aether.valkyrie.dialog.playerdeath.2": "Maybe some day, %s... maybe some day.", + "gui.aether.valkyrie.dialog.playerdeath.3": "Gli umani non sono così carini quando sono morti...", "item.aether.aechor_petal": "Aechor Petal", "item.aether.aether_portal_frame": "Aether Portal Frame", "item.aether.agility_cape": "Mantello dell'agilità", diff --git a/src/main/resources/assets/aether/lang/ko_kr.json b/src/main/resources/assets/aether/lang/ko_kr.json index 699c982c56..3d210a152a 100644 --- a/src/main/resources/assets/aether/lang/ko_kr.json +++ b/src/main/resources/assets/aether/lang/ko_kr.json @@ -175,9 +175,9 @@ "gui.aether.valkyrie.dialog.medal.1": "음... 정말 굉장한 메달꾸러미를 가지고 있구만...", "gui.aether.valkyrie.dialog.medal.2": "흥미롭다만, 넌 날 이길 수 없어.", "gui.aether.valkyrie.dialog.medal.3": "넌 니가 가장 세다고 생각하냐? 하, 덤벼!", - "gui.aether.valkyrie.dialog.playerdead.1": "메달을 원하니? 그런 한심한 전투력으로는 부족하다구.", - "gui.aether.valkyrie.dialog.playerdead.2": "언젠간, %s... 니가 날 이길 수 있겠지... 아마 언젠가는.", - "gui.aether.valkyrie.dialog.playerdead.3": "인간들을 이길 쯤에는 귀엽지가 않단 말이지.", + "gui.aether.valkyrie.dialog.playerdeath.1": "메달을 원하니? 그런 한심한 전투력으로는 부족하다구.", + "gui.aether.valkyrie.dialog.playerdeath.2": "언젠간, %s... 니가 날 이길 수 있겠지... 아마 언젠가는.", + "gui.aether.valkyrie.dialog.playerdeath.3": "인간들을 이길 쯤에는 귀엽지가 않단 말이지.", "item.aether.aechor_petal": "에코르 연꽃잎", "item.aether.aether_portal_frame": "Aether Portal Frame", "item.aether.agility_cape": "민첩의 망토", diff --git a/src/main/resources/assets/aether/lang/lol_us.json b/src/main/resources/assets/aether/lang/lol_us.json index 09a3684573..1791dd1c0a 100644 --- a/src/main/resources/assets/aether/lang/lol_us.json +++ b/src/main/resources/assets/aether/lang/lol_us.json @@ -176,9 +176,9 @@ "gui.aether.valkyrie.dialog.medal.1": "oh no those r medalians", "gui.aether.valkyrie.dialog.medal.2": "those medalians mean nofing 2 me", "gui.aether.valkyrie.dialog.medal.3": "bring it on m8", - "gui.aether.valkyrie.dialog.playerdead.1": "u really didnt put much effort into dat won", - "gui.aether.valkyrie.dialog.playerdead.2": "mayb sum day, %s... mayb sum day......", - "gui.aether.valkyrie.dialog.playerdead.3": "man u kinda ugly now that i look at u", + "gui.aether.valkyrie.dialog.playerdeath.1": "u really didnt put much effort into dat won", + "gui.aether.valkyrie.dialog.playerdeath.2": "mayb sum day, %s... mayb sum day......", + "gui.aether.valkyrie.dialog.playerdeath.3": "man u kinda ugly now that i look at u", "item.aether.aechor_petal": "moa food", "item.aether.aether_portal_frame": "Aether Portal Frame", "item.aether.agility_cape": "fast cape", diff --git a/src/main/resources/assets/aether/lang/nl_nl.json b/src/main/resources/assets/aether/lang/nl_nl.json index 661404f8fe..db21e8dedd 100644 --- a/src/main/resources/assets/aether/lang/nl_nl.json +++ b/src/main/resources/assets/aether/lang/nl_nl.json @@ -175,9 +175,9 @@ "gui.aether.valkyrie.dialog.medal.1": "Umm... dat is een mooie stapel medaillons die je daar hebt...", "gui.aether.valkyrie.dialog.medal.2": "Dat is behoorlijk indrukwekkend, maar je zult me niet verslaan.", "gui.aether.valkyrie.dialog.medal.3": "Je denkt dat je een stoere vent bent, toch? Nou, kom maar op!", - "gui.aether.valkyrie.dialog.playerdead.1": "Wil je een medaillon? Probeer minder zielig te zijn.", - "gui.aether.valkyrie.dialog.playerdead.2": "Misschien ooit, %s... misschien ooit.", - "gui.aether.valkyrie.dialog.playerdead.3": "Mensen zijn lang niet zo schattig als ze dood zijn.", + "gui.aether.valkyrie.dialog.playerdeath.1": "Wil je een medaillon? Probeer minder zielig te zijn.", + "gui.aether.valkyrie.dialog.playerdeath.2": "Misschien ooit, %s... misschien ooit.", + "gui.aether.valkyrie.dialog.playerdeath.3": "Mensen zijn lang niet zo schattig als ze dood zijn.", "item.aether.aechor_petal": "Aechor Bloemblad", "item.aether.aether_portal_frame": "Aether Portal Frame", "item.aether.agility_cape": "Behendigheids Cape", diff --git a/src/main/resources/assets/aether/lang/pl_pl.json b/src/main/resources/assets/aether/lang/pl_pl.json index fd76675cdf..dc356f0091 100644 --- a/src/main/resources/assets/aether/lang/pl_pl.json +++ b/src/main/resources/assets/aether/lang/pl_pl.json @@ -175,9 +175,9 @@ "gui.aether.valkyrie.dialog.medal.1": "Uhh... masz tam niezłą stertę medali...", "gui.aether.valkyrie.dialog.medal.2": "To w miarę imponujące, ale mnie nie pokonasz.", "gui.aether.valkyrie.dialog.medal.3": "Myślisz, że jesteś twardy, co? No to walcz!", - "gui.aether.valkyrie.dialog.playerdead.1": "Chcesz medalion? Spróbuj być mniej żałosny.", - "gui.aether.valkyrie.dialog.playerdead.2": "Może któregoś dnia, %s... może któregoś dnia.", - "gui.aether.valkyrie.dialog.playerdead.3": "Ludzie wyglądają najsłodziej, kiedy są martwi.", + "gui.aether.valkyrie.dialog.playerdeath.1": "Chcesz medalion? Spróbuj być mniej żałosny.", + "gui.aether.valkyrie.dialog.playerdeath.2": "Może któregoś dnia, %s... może któregoś dnia.", + "gui.aether.valkyrie.dialog.playerdeath.3": "Ludzie wyglądają najsłodziej, kiedy są martwi.", "item.aether.aechor_petal": "Płatek aechora", "item.aether.aether_portal_frame": "Aether Portal Frame", "item.aether.agility_cape": "Peleryna zręczności", diff --git a/src/main/resources/assets/aether/lang/ro_ro.json b/src/main/resources/assets/aether/lang/ro_ro.json index 6c62f3a52b..6290392ee3 100644 --- a/src/main/resources/assets/aether/lang/ro_ro.json +++ b/src/main/resources/assets/aether/lang/ro_ro.json @@ -175,9 +175,9 @@ "gui.aether.valkyrie.dialog.medal.1": "Mmm... Ai o grămadă frumoasă de medalioane...", "gui.aether.valkyrie.dialog.medal.2": "Impresionant , dar nu mă poți învinge.", "gui.aether.valkyrie.dialog.medal.3": "Te crezi dur ? Hai!", - "gui.aether.valkyrie.dialog.playerdead.1": "Vrei o medalie ? Încearcă să fii mai puțin patetic!", - "gui.aether.valkyrie.dialog.playerdead.2": "Poate într-o zi, %s... poate într-o zi.", - "gui.aether.valkyrie.dialog.playerdead.3": "Oameni nu sunt la fel de drăguți cănd sunt morti. :(", + "gui.aether.valkyrie.dialog.playerdeath.1": "Vrei o medalie ? Încearcă să fii mai puțin patetic!", + "gui.aether.valkyrie.dialog.playerdeath.2": "Poate într-o zi, %s... poate într-o zi.", + "gui.aether.valkyrie.dialog.playerdeath.3": "Oameni nu sunt la fel de drăguți cănd sunt morti. :(", "item.aether.aechor_petal": "Petală de aechor", "item.aether.aether_portal_frame": "Aether Portal Frame", "item.aether.agility_cape": "Pelerină a agilității", diff --git a/src/main/resources/assets/aether/lang/ru_ru.json b/src/main/resources/assets/aether/lang/ru_ru.json index 6e0f3ca916..f3ec5d82b0 100644 --- a/src/main/resources/assets/aether/lang/ru_ru.json +++ b/src/main/resources/assets/aether/lang/ru_ru.json @@ -175,9 +175,9 @@ "gui.aether.valkyrie.dialog.medal.1": "МММ... у тебя там хорошая куча медальонов...", "gui.aether.valkyrie.dialog.medal.2": "Это впечатляет, но ты меня не победишь.", "gui.aether.valkyrie.dialog.medal.3": "Ты думаешь, что ты крутой парень, а? Ну, давай!", - "gui.aether.valkyrie.dialog.playerdead.1": "Тебе нужен медальон? Попробуй быть менее жалким.", - "gui.aether.valkyrie.dialog.playerdead.2": "Maybe some day, %s... maybe some day.", - "gui.aether.valkyrie.dialog.playerdead.3": "Люди не такие милые, когда они мертвы.", + "gui.aether.valkyrie.dialog.playerdeath.1": "Тебе нужен медальон? Попробуй быть менее жалким.", + "gui.aether.valkyrie.dialog.playerdeath.2": "Maybe some day, %s... maybe some day.", + "gui.aether.valkyrie.dialog.playerdeath.3": "Люди не такие милые, когда они мертвы.", "item.aether.aechor_petal": "Листок Цветка Моа", "item.aether.aether_portal_frame": "Aether Portal Frame", "item.aether.agility_cape": "Плащ-Ловкости", diff --git a/src/main/resources/assets/aether/lang/sv_se.json b/src/main/resources/assets/aether/lang/sv_se.json index 29307a5317..47ef5400c6 100644 --- a/src/main/resources/assets/aether/lang/sv_se.json +++ b/src/main/resources/assets/aether/lang/sv_se.json @@ -175,9 +175,9 @@ "gui.aether.valkyrie.dialog.medal.1": "Eh... det var en tjusig hög med medaljer du har där...", "gui.aether.valkyrie.dialog.medal.2": "Det är ganska imponerande, men tro inte att du kan besegra mig.", "gui.aether.valkyrie.dialog.medal.3": "Du tror du är en tuffing alltså? Dåså, kom igen!", - "gui.aether.valkyrie.dialog.playerdead.1": "Vill du ha en medalj? Försök vara mindre patetisk.", - "gui.aether.valkyrie.dialog.playerdead.2": "Kanske en vacker dag, %s...", - "gui.aether.valkyrie.dialog.playerdead.3": "Människor är inte alls lika söta när de är döda.", + "gui.aether.valkyrie.dialog.playerdeath.1": "Vill du ha en medalj? Försök vara mindre patetisk.", + "gui.aether.valkyrie.dialog.playerdeath.2": "Kanske en vacker dag, %s...", + "gui.aether.valkyrie.dialog.playerdeath.3": "Människor är inte alls lika söta när de är döda.", "item.aether.aechor_petal": "Aechorblomblad", "item.aether.aether_portal_frame": "Aetherportalram", "item.aether.agility_cape": "Smidighetsmantel", diff --git a/src/main/resources/assets/aether/lang/th_th.json b/src/main/resources/assets/aether/lang/th_th.json index f5194bd121..7bc6320a4f 100644 --- a/src/main/resources/assets/aether/lang/th_th.json +++ b/src/main/resources/assets/aether/lang/th_th.json @@ -175,9 +175,9 @@ "gui.aether.valkyrie.dialog.medal.1": "Umm... that's a nice pile of medallions you have there...", "gui.aether.valkyrie.dialog.medal.2": "That's pretty impressive, but you won't defeat me.", "gui.aether.valkyrie.dialog.medal.3": "You think you're a tough guy, eh? Well, bring it on!", - "gui.aether.valkyrie.dialog.playerdead.1": "You want a medallion? Try being less pathetic.", - "gui.aether.valkyrie.dialog.playerdead.2": "Maybe some day, %s... maybe some day.", - "gui.aether.valkyrie.dialog.playerdead.3": "Humans aren't nearly as cute when they're dead.", + "gui.aether.valkyrie.dialog.playerdeath.1": "You want a medallion? Try being less pathetic.", + "gui.aether.valkyrie.dialog.playerdeath.2": "Maybe some day, %s... maybe some day.", + "gui.aether.valkyrie.dialog.playerdeath.3": "Humans aren't nearly as cute when they're dead.", "item.aether.aechor_petal": "กลีบดอกAechor", "item.aether.aether_portal_frame": "Aether Portal Frame", "item.aether.agility_cape": "เสื้อคลุมกระโดดสูง", diff --git a/src/main/resources/assets/aether/lang/uk_ua.json b/src/main/resources/assets/aether/lang/uk_ua.json index 7351c89e34..0a7c7b48aa 100644 --- a/src/main/resources/assets/aether/lang/uk_ua.json +++ b/src/main/resources/assets/aether/lang/uk_ua.json @@ -175,9 +175,9 @@ "gui.aether.valkyrie.dialog.medal.1": "Umm... that's a nice pile of medallions you have there...", "gui.aether.valkyrie.dialog.medal.2": "That's pretty impressive, but you won't defeat me.", "gui.aether.valkyrie.dialog.medal.3": "You think you're a tough guy, eh? Well, bring it on!", - "gui.aether.valkyrie.dialog.playerdead.1": "You want a medallion? Try being less pathetic.", - "gui.aether.valkyrie.dialog.playerdead.2": "Maybe some day, %s... maybe some day.", - "gui.aether.valkyrie.dialog.playerdead.3": "Humans aren't nearly as cute when they're dead.", + "gui.aether.valkyrie.dialog.playerdeath.1": "You want a medallion? Try being less pathetic.", + "gui.aether.valkyrie.dialog.playerdeath.2": "Maybe some day, %s... maybe some day.", + "gui.aether.valkyrie.dialog.playerdeath.3": "Humans aren't nearly as cute when they're dead.", "item.aether.aechor_petal": "Лепесток Айчора", "item.aether.aether_portal_frame": "Aether Portal Frame", "item.aether.agility_cape": "Плащ спритності", diff --git a/src/main/resources/assets/aether/lang/zh_cn.json b/src/main/resources/assets/aether/lang/zh_cn.json index 82b07e4cc3..717c6d7af3 100644 --- a/src/main/resources/assets/aether/lang/zh_cn.json +++ b/src/main/resources/assets/aether/lang/zh_cn.json @@ -391,9 +391,9 @@ "gui.aether.valkyrie.dialog.medal.1": "嗯哼?……不错的奖牌。", "gui.aether.valkyrie.dialog.medal.2": "那倒是挺令人印象深刻的,但你不会想要挑战一名真正的武神族人的。", "gui.aether.valkyrie.dialog.medal.3": "好吧,你觉得自己是个硬汉?那就来吧!", - "gui.aether.valkyrie.dialog.playerdead.1": "你想要奖章?那就试着别那么软弱吧!", - "gui.aether.valkyrie.dialog.playerdead.2": "会有那么一天的, %s... 会有的。", - "gui.aether.valkyrie.dialog.playerdead.3": "人类真是过于自信的物种,不是么?", + "gui.aether.valkyrie.dialog.playerdeath.1": "你想要奖章?那就试着别那么软弱吧!", + "gui.aether.valkyrie.dialog.playerdeath.2": "会有那么一天的, %s... 会有的。", + "gui.aether.valkyrie.dialog.playerdeath.3": "人类真是过于自信的物种,不是么?", "item.aether.aechor_petal": "箭毒花瓣", "item.aether.aechor_plant_spawn_egg": "生成 箭毒花", diff --git a/src/main/resources/assets/aether/lang/zh_tw.json b/src/main/resources/assets/aether/lang/zh_tw.json index 1ecfcd8e73..947385465c 100644 --- a/src/main/resources/assets/aether/lang/zh_tw.json +++ b/src/main/resources/assets/aether/lang/zh_tw.json @@ -366,9 +366,9 @@ "gui.aether.valkyrie.dialog.medal.1": "嗯...那裡有一大堆獎牌...", "gui.aether.valkyrie.dialog.medal.2": "這真是令人印象深刻,但你無法打敗我的。", "gui.aether.valkyrie.dialog.medal.3": "你認為你是個硬漢?哼...很好,那就上吧!", - "gui.aether.valkyrie.dialog.playerdead.1": "你想要一個獎牌?那就試著別那麼弱小吧。", - "gui.aether.valkyrie.dialog.playerdead.2": "也許有一天,%s...也許有一天。", - "gui.aether.valkyrie.dialog.playerdead.3": "人類死後幾乎不可愛。", + "gui.aether.valkyrie.dialog.playerdeath.1": "你想要一個獎牌?那就試著別那麼弱小吧。", + "gui.aether.valkyrie.dialog.playerdeath.2": "也許有一天,%s...也許有一天。", + "gui.aether.valkyrie.dialog.playerdeath.3": "人類死後幾乎不可愛。", "item.aether.aechor_petal": "毒箭草花瓣", "item.aether.aether_portal_frame": "天堂傳送門架", "item.aether.agility_cape": "敏捷披風", diff --git a/src/main/resources/assets/aether/particles/white_smoke.json b/src/main/resources/assets/aether/particles/white_smoke.json deleted file mode 100644 index 271261099b..0000000000 --- a/src/main/resources/assets/aether/particles/white_smoke.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "textures": [ - "minecraft:generic_7", - "minecraft:generic_6", - "minecraft:generic_5", - "minecraft:generic_4", - "minecraft:generic_3", - "minecraft:generic_2", - "minecraft:generic_1", - "minecraft:generic_0" - ] -} \ No newline at end of file diff --git a/src/main/resources/assets/minecraft/atlases/blocks.json b/src/main/resources/assets/minecraft/atlases/blocks.json new file mode 100644 index 0000000000..58674eaa61 --- /dev/null +++ b/src/main/resources/assets/minecraft/atlases/blocks.json @@ -0,0 +1,9 @@ +{ + "sources": [ + { + "type": "directory", + "source": "gui/slots", + "prefix": "gui/slots/" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/minecraft/atlases/chests.json b/src/main/resources/assets/minecraft/atlases/chests.json new file mode 100644 index 0000000000..bdb8f1a908 --- /dev/null +++ b/src/main/resources/assets/minecraft/atlases/chests.json @@ -0,0 +1,9 @@ +{ + "sources": [ + { + "type": "directory", + "source": "entity/tiles/chest", + "prefix": "entity/tiles/chest/" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/pack.mcmeta b/src/main/resources/pack.mcmeta index 35b9e326b9..91309c1962 100644 --- a/src/main/resources/pack.mcmeta +++ b/src/main/resources/pack.mcmeta @@ -1,8 +1,8 @@ { "pack": { "description": "Aether Resources", - "pack_format": 9, - "forge:resource_pack_format": 9, + "pack_format": 12, + "forge:resource_pack_format": 12, "forge:data_pack_format": 10 } }