From 7c1219ead5bcda6a7ce66f3374bb347a98259b5b Mon Sep 17 00:00:00 2001 From: Chikorita Lover Date: Sun, 14 Jul 2024 19:53:15 -0500 Subject: [PATCH] Merge changes and update to 1.21.0 --- gradle.properties | 3 +- .../23ea077d1d6c303dee4db4b707eb3883dc4bc6bb | 8 + .../9ac78b54b5833f183877ec224e276c4aea5aac3a | 4 + .../c189bb4c92920ea572e0709157481155fe15e5dc | 29 ++++ .../f97ece2f3a543d4dbc8c984a7bcdf2d64b8f7bed | 39 +++++ .../blockstates/cauldron_campfire.json | 64 +++++++ .../blockstates/coffee_bean_block.json | 7 + .../blockstates/coffee_berry_crate.json | 7 + .../blockstates/coffee_cauldron.json | 13 ++ .../caffeinated/blockstates/coffee_shrub.json | 16 ++ .../blockstates/ground_coffee_block.json | 7 + .../blockstates/ground_coffee_cauldron.json | 13 ++ .../blockstates/potted_coffee_shrub.json | 7 + .../blockstates/soul_cauldron_campfire.json | 64 +++++++ .../caffeinated/blockstates/tiramisu.json | 16 ++ .../models/block/cauldron_campfire.json | 7 + .../block/cauldron_campfire_filled.json | 7 + .../models/block/coffee_bean_block.json | 6 + .../models/block/coffee_berry_crate.json | 8 + .../models/block/coffee_cauldron_full.json | 11 ++ .../models/block/coffee_cauldron_level1.json | 11 ++ .../models/block/coffee_cauldron_level2.json | 11 ++ .../models/block/coffee_shrub_stage0.json | 6 + .../models/block/coffee_shrub_stage1.json | 6 + .../models/block/ground_coffee_block.json | 6 + .../block/ground_coffee_cauldron_full.json | 11 ++ .../block/ground_coffee_cauldron_level1.json | 11 ++ .../block/ground_coffee_cauldron_level2.json | 11 ++ .../models/block/potted_coffee_shrub.json | 6 + .../models/block/soul_cauldron_campfire.json | 7 + .../block/soul_cauldron_campfire_filled.json | 7 + .../models/item/civet_spawn_egg.json | 3 + .../models/item/coffee_bean_block.json | 3 + .../caffeinated/models/item/coffee_beans.json | 6 + .../models/item/coffee_berries.json | 6 + .../models/item/coffee_berry_crate.json | 3 + .../models/item/coffee_bottle.json | 6 + .../models/item/ground_coffee.json | 6 + .../models/item/ground_coffee_block.json | 3 + .../models/item/java_banner_pattern.json | 6 + .../models/item/latte_coffee_bottle.json | 6 + .../caffeinated/models/item/tiramisu.json | 6 + .../models/item/tiramisu_slice.json | 6 + .../advancement/husbandry/bake_tiramisu.json | 33 ++++ .../husbandry/brew_all_coffee.json | 46 +++++ .../advancement/husbandry/brew_coffee.json | 37 ++--- .../building_blocks/coffee_bean_block.json | 32 ++++ .../building_blocks/ground_coffee_block.json | 32 ++++ .../decorations/coffee_berry_crate.json | 40 +++++ .../recipes/food/coffee_berries.json | 40 +++++ .../recipes/food/coffee_bottle.json | 32 ++++ .../recipes/food/latte_coffee_bottle.json | 32 ++++ .../advancement/recipes/food/tiramisu.json | 32 ++++ .../recipes/food/tiramisu_from_slices.json | 40 +++++ .../misc/brown_dye_from_ground_coffee.json | 32 ++++ .../recipes/misc/coffee_beans.json | 32 ++++ .../coffee_beans_from_campfire_cooking.json | 32 ++++ .../misc/coffee_beans_from_smoking.json | 32 ++++ .../misc/ground_coffee_from_coffee_beans.json | 32 ++++ .../recipes/misc/java_banner_pattern.json | 32 ++++ .../loot_table/blocks/coffee_bean_block.json | 20 +++ .../loot_table/blocks/coffee_berry_crate.json | 20 +++ .../loot_table/blocks/coffee_cauldron.json | 20 +++ .../blocks/flowering_coffee_shrub.json | 49 ++++++ .../blocks/ground_coffee_block.json | 20 +++ .../blocks/ground_coffee_cauldron.json | 20 +++ .../blocks/potted_coffee_shrub.json | 35 ++++ .../recipe/brown_dye_from_ground_coffee.json | 14 ++ .../caffeinated/recipe/coffee_bean_block.json | 17 ++ .../data/caffeinated/recipe/coffee_beans.json | 12 ++ .../coffee_beans_from_campfire_cooking.json | 12 ++ .../recipe/coffee_beans_from_smoking.json | 12 ++ .../caffeinated/recipe/coffee_berries.json | 21 +++ .../recipe/coffee_berry_crate.json | 26 +++ .../caffeinated/recipe/coffee_bottle.json | 14 ++ .../recipe/ground_coffee_block.json | 17 ++ .../ground_coffee_from_coffee_beans.json | 17 ++ .../recipe/java_banner_pattern.json | 16 ++ .../recipe/latte_coffee_bottle.json | 14 ++ .../data/caffeinated/recipe/tiramisu.json | 26 +++ .../recipe/tiramisu_from_slices.json | 26 +++ .../caffeinated/Caffeinated.java | 33 +++- .../caffeinated/CaffeinatedDataGenerator.java | 2 + .../caffeinated/CaffeinatedEarlyRiser.java | 4 +- .../advancement/BrewCoffeeCriterion.java | 49 ++---- .../block/CauldronCampfireBlock.java | 95 +++++------ .../block/CoffeeCauldronBlock.java | 49 +----- .../block/GroundCoffeeCauldronBlock.java | 50 ------ .../caffeinated/block/TiramisuBlock.java | 63 ++++--- .../entity/CauldronCampfireBlockEntity.java | 157 +++++++++--------- .../{ => client}/CaffeinatedClient.java | 15 +- .../caffeinated/client/CivetEntityModel.java | 7 +- .../client/CivetEntityRenderer.java | 11 +- .../data/CaffeinatedAdvancementProvider.java | 49 ++++++ .../data/CaffeinatedModelProvider.java | 31 +++- .../data/CaffeinatedRecipeProvider.java | 29 ++-- .../caffeinated/entity/CivetEntity.java | 21 +-- .../caffeinated/item/CoffeeBottleItem.java | 75 +-------- .../item/LatteCoffeeBottleItem.java | 8 +- .../caffeinated/mixin/CampfireBlockMixin.java | 16 +- .../caffeinated/mixin/CauldronBlockMixin.java | 29 ++-- .../mixin/ClientRecipeBookMixin.java | 17 +- .../mixin/CookingRecipeJsonBuilderMixin.java | 5 +- .../mixin/MinecraftServerMixin.java | 21 +-- .../caffeinated/mixin/PlayerEntityMixin.java | 6 +- .../mixin/RecipeBookGroupMixin.java | 14 +- .../caffeinated/mixin/ShovelItemMixin.java | 40 +++-- .../recipe/CoffeeBrewingRecipe.java | 116 ++++++------- .../recipe/CoffeeBrewingRecipeInput.java | 24 ++- .../CoffeeBrewingRecipeJsonBuilder.java | 114 +++---------- .../registry/CaffeinatedBiomeTags.java | 11 +- .../registry/CaffeinatedBlockEntityTypes.java | 14 ++ .../registry/CaffeinatedBlocks.java | 18 +- .../registry/CaffeinatedCauldronBehavior.java | 122 -------------- .../registry/CaffeinatedEntities.java | 11 +- .../registry/CaffeinatedFoodComponents.java | 5 +- .../registry/CaffeinatedItemGroups.java | 24 +-- .../registry/CaffeinatedItems.java | 9 +- .../registry/CaffeinatedParticleTypes.java | 9 +- .../registry/CaffeinatedRecipeTypes.java | 18 ++ .../registry/CaffeinatedStats.java | 2 + .../registry/CaffeinatedTradeOffers.java | 2 +- .../util/LootModificationUtils.java | 69 ++++++++ .../caffeinated/world/CivetSpawner.java | 34 ++-- .../assets/caffeinated/lang/en_us.json | 125 +++++++------- src/main/resources/caffeinated.accesswidener | 6 +- .../data/c/tags/block/storage_blocks.json | 4 +- .../resources/data/c/tags/item/foods.json | 3 +- .../c/tags/item/foods/edible_when_placed.json | 5 + .../data/c/tags/item/storage_blocks.json | 4 +- .../husbandry/brew_all_coffee.json | 52 ------ .../advancement/husbandry/eat_tiramisu.json | 38 ----- .../caffeinated/tags/item/civet_food.json | 3 +- src/main/resources/fabric.mod.json | 4 +- 134 files changed, 2218 insertions(+), 1029 deletions(-) create mode 100644 src/main/generated/.cache/23ea077d1d6c303dee4db4b707eb3883dc4bc6bb create mode 100644 src/main/generated/.cache/9ac78b54b5833f183877ec224e276c4aea5aac3a create mode 100644 src/main/generated/.cache/c189bb4c92920ea572e0709157481155fe15e5dc create mode 100644 src/main/generated/.cache/f97ece2f3a543d4dbc8c984a7bcdf2d64b8f7bed create mode 100644 src/main/generated/assets/caffeinated/blockstates/cauldron_campfire.json create mode 100644 src/main/generated/assets/caffeinated/blockstates/coffee_bean_block.json create mode 100644 src/main/generated/assets/caffeinated/blockstates/coffee_berry_crate.json create mode 100644 src/main/generated/assets/caffeinated/blockstates/coffee_cauldron.json create mode 100644 src/main/generated/assets/caffeinated/blockstates/coffee_shrub.json create mode 100644 src/main/generated/assets/caffeinated/blockstates/ground_coffee_block.json create mode 100644 src/main/generated/assets/caffeinated/blockstates/ground_coffee_cauldron.json create mode 100644 src/main/generated/assets/caffeinated/blockstates/potted_coffee_shrub.json create mode 100644 src/main/generated/assets/caffeinated/blockstates/soul_cauldron_campfire.json create mode 100644 src/main/generated/assets/caffeinated/blockstates/tiramisu.json create mode 100644 src/main/generated/assets/caffeinated/models/block/cauldron_campfire.json create mode 100644 src/main/generated/assets/caffeinated/models/block/cauldron_campfire_filled.json create mode 100644 src/main/generated/assets/caffeinated/models/block/coffee_bean_block.json create mode 100644 src/main/generated/assets/caffeinated/models/block/coffee_berry_crate.json create mode 100644 src/main/generated/assets/caffeinated/models/block/coffee_cauldron_full.json create mode 100644 src/main/generated/assets/caffeinated/models/block/coffee_cauldron_level1.json create mode 100644 src/main/generated/assets/caffeinated/models/block/coffee_cauldron_level2.json create mode 100644 src/main/generated/assets/caffeinated/models/block/coffee_shrub_stage0.json create mode 100644 src/main/generated/assets/caffeinated/models/block/coffee_shrub_stage1.json create mode 100644 src/main/generated/assets/caffeinated/models/block/ground_coffee_block.json create mode 100644 src/main/generated/assets/caffeinated/models/block/ground_coffee_cauldron_full.json create mode 100644 src/main/generated/assets/caffeinated/models/block/ground_coffee_cauldron_level1.json create mode 100644 src/main/generated/assets/caffeinated/models/block/ground_coffee_cauldron_level2.json create mode 100644 src/main/generated/assets/caffeinated/models/block/potted_coffee_shrub.json create mode 100644 src/main/generated/assets/caffeinated/models/block/soul_cauldron_campfire.json create mode 100644 src/main/generated/assets/caffeinated/models/block/soul_cauldron_campfire_filled.json create mode 100644 src/main/generated/assets/caffeinated/models/item/civet_spawn_egg.json create mode 100644 src/main/generated/assets/caffeinated/models/item/coffee_bean_block.json create mode 100644 src/main/generated/assets/caffeinated/models/item/coffee_beans.json create mode 100644 src/main/generated/assets/caffeinated/models/item/coffee_berries.json create mode 100644 src/main/generated/assets/caffeinated/models/item/coffee_berry_crate.json create mode 100644 src/main/generated/assets/caffeinated/models/item/coffee_bottle.json create mode 100644 src/main/generated/assets/caffeinated/models/item/ground_coffee.json create mode 100644 src/main/generated/assets/caffeinated/models/item/ground_coffee_block.json create mode 100644 src/main/generated/assets/caffeinated/models/item/java_banner_pattern.json create mode 100644 src/main/generated/assets/caffeinated/models/item/latte_coffee_bottle.json create mode 100644 src/main/generated/assets/caffeinated/models/item/tiramisu.json create mode 100644 src/main/generated/assets/caffeinated/models/item/tiramisu_slice.json create mode 100644 src/main/generated/data/caffeinated/advancement/husbandry/bake_tiramisu.json create mode 100644 src/main/generated/data/caffeinated/advancement/husbandry/brew_all_coffee.json rename src/main/{resources => generated}/data/caffeinated/advancement/husbandry/brew_coffee.json (59%) create mode 100644 src/main/generated/data/caffeinated/advancement/recipes/building_blocks/coffee_bean_block.json create mode 100644 src/main/generated/data/caffeinated/advancement/recipes/building_blocks/ground_coffee_block.json create mode 100644 src/main/generated/data/caffeinated/advancement/recipes/decorations/coffee_berry_crate.json create mode 100644 src/main/generated/data/caffeinated/advancement/recipes/food/coffee_berries.json create mode 100644 src/main/generated/data/caffeinated/advancement/recipes/food/coffee_bottle.json create mode 100644 src/main/generated/data/caffeinated/advancement/recipes/food/latte_coffee_bottle.json create mode 100644 src/main/generated/data/caffeinated/advancement/recipes/food/tiramisu.json create mode 100644 src/main/generated/data/caffeinated/advancement/recipes/food/tiramisu_from_slices.json create mode 100644 src/main/generated/data/caffeinated/advancement/recipes/misc/brown_dye_from_ground_coffee.json create mode 100644 src/main/generated/data/caffeinated/advancement/recipes/misc/coffee_beans.json create mode 100644 src/main/generated/data/caffeinated/advancement/recipes/misc/coffee_beans_from_campfire_cooking.json create mode 100644 src/main/generated/data/caffeinated/advancement/recipes/misc/coffee_beans_from_smoking.json create mode 100644 src/main/generated/data/caffeinated/advancement/recipes/misc/ground_coffee_from_coffee_beans.json create mode 100644 src/main/generated/data/caffeinated/advancement/recipes/misc/java_banner_pattern.json create mode 100644 src/main/generated/data/caffeinated/loot_table/blocks/coffee_bean_block.json create mode 100644 src/main/generated/data/caffeinated/loot_table/blocks/coffee_berry_crate.json create mode 100644 src/main/generated/data/caffeinated/loot_table/blocks/coffee_cauldron.json create mode 100644 src/main/generated/data/caffeinated/loot_table/blocks/flowering_coffee_shrub.json create mode 100644 src/main/generated/data/caffeinated/loot_table/blocks/ground_coffee_block.json create mode 100644 src/main/generated/data/caffeinated/loot_table/blocks/ground_coffee_cauldron.json create mode 100644 src/main/generated/data/caffeinated/loot_table/blocks/potted_coffee_shrub.json create mode 100644 src/main/generated/data/caffeinated/recipe/brown_dye_from_ground_coffee.json create mode 100644 src/main/generated/data/caffeinated/recipe/coffee_bean_block.json create mode 100644 src/main/generated/data/caffeinated/recipe/coffee_beans.json create mode 100644 src/main/generated/data/caffeinated/recipe/coffee_beans_from_campfire_cooking.json create mode 100644 src/main/generated/data/caffeinated/recipe/coffee_beans_from_smoking.json create mode 100644 src/main/generated/data/caffeinated/recipe/coffee_berries.json create mode 100644 src/main/generated/data/caffeinated/recipe/coffee_berry_crate.json create mode 100644 src/main/generated/data/caffeinated/recipe/coffee_bottle.json create mode 100644 src/main/generated/data/caffeinated/recipe/ground_coffee_block.json create mode 100644 src/main/generated/data/caffeinated/recipe/ground_coffee_from_coffee_beans.json create mode 100644 src/main/generated/data/caffeinated/recipe/java_banner_pattern.json create mode 100644 src/main/generated/data/caffeinated/recipe/latte_coffee_bottle.json create mode 100644 src/main/generated/data/caffeinated/recipe/tiramisu.json create mode 100644 src/main/generated/data/caffeinated/recipe/tiramisu_from_slices.json delete mode 100644 src/main/java/net/chikorita_lover/caffeinated/block/GroundCoffeeCauldronBlock.java rename src/main/java/net/chikorita_lover/caffeinated/{ => client}/CaffeinatedClient.java (79%) create mode 100644 src/main/java/net/chikorita_lover/caffeinated/data/CaffeinatedAdvancementProvider.java create mode 100644 src/main/java/net/chikorita_lover/caffeinated/registry/CaffeinatedBlockEntityTypes.java delete mode 100644 src/main/java/net/chikorita_lover/caffeinated/registry/CaffeinatedCauldronBehavior.java create mode 100644 src/main/java/net/chikorita_lover/caffeinated/registry/CaffeinatedRecipeTypes.java create mode 100644 src/main/java/net/chikorita_lover/caffeinated/util/LootModificationUtils.java delete mode 100644 src/main/resources/data/caffeinated/advancement/husbandry/brew_all_coffee.json delete mode 100644 src/main/resources/data/caffeinated/advancement/husbandry/eat_tiramisu.json diff --git a/gradle.properties b/gradle.properties index 4ac1f67..b2bd1ca 100644 --- a/gradle.properties +++ b/gradle.properties @@ -9,10 +9,11 @@ yarn_mappings=1.21+build.9 loader_version=0.15.11 # Mod Properties -mod_version=1.0.5 +mod_version=2.0.0 maven_group=net.chikorita_lover.caffeinated archives_base_name=caffeinated # Dependencies fabric_version=0.100.6+1.21 farmersdelight_version=4640640 +fabric_asm_version=v2.3 diff --git a/src/main/generated/.cache/23ea077d1d6c303dee4db4b707eb3883dc4bc6bb b/src/main/generated/.cache/23ea077d1d6c303dee4db4b707eb3883dc4bc6bb new file mode 100644 index 0000000..a26180d --- /dev/null +++ b/src/main/generated/.cache/23ea077d1d6c303dee4db4b707eb3883dc4bc6bb @@ -0,0 +1,8 @@ +// 1.21 2024-07-14T19:42:38.1818714 Caffeinated/Block Loot Tables +548d115eeb79b74d3fbe03951bdc179110ed6f8a data\caffeinated\loot_table\blocks\ground_coffee_cauldron.json +8b8e67a4f2fbd3f51a69d1359cceb2704429f4c3 data\caffeinated\loot_table\blocks\coffee_berry_crate.json +d481f7802dfc0e83cd271518b47e73b256a24d2f data\caffeinated\loot_table\blocks\flowering_coffee_shrub.json +548d115eeb79b74d3fbe03951bdc179110ed6f8a data\caffeinated\loot_table\blocks\coffee_cauldron.json +2181144c1ab146492f9cae41e26a4ad585b0c46b data\caffeinated\loot_table\blocks\ground_coffee_block.json +55664479b7d3ad31e070226a65db432f03d97236 data\caffeinated\loot_table\blocks\potted_coffee_shrub.json +3bec24cd54986eea9c228540df648ca7b01c86fc data\caffeinated\loot_table\blocks\coffee_bean_block.json diff --git a/src/main/generated/.cache/9ac78b54b5833f183877ec224e276c4aea5aac3a b/src/main/generated/.cache/9ac78b54b5833f183877ec224e276c4aea5aac3a new file mode 100644 index 0000000..e7aef56 --- /dev/null +++ b/src/main/generated/.cache/9ac78b54b5833f183877ec224e276c4aea5aac3a @@ -0,0 +1,4 @@ +// 1.21 2024-07-14T19:42:38.1808633 Caffeinated/Advancements +bcaa279e3e0ad8280ebfe57370201ce6290340a1 data\caffeinated\advancement\husbandry\brew_coffee.json +3a0446170026d8aa5bbef46b956c9373eb0a91c8 data\caffeinated\advancement\husbandry\bake_tiramisu.json +a13c94beba4187f9b1b7021707a912e58beac70d data\caffeinated\advancement\husbandry\brew_all_coffee.json diff --git a/src/main/generated/.cache/c189bb4c92920ea572e0709157481155fe15e5dc b/src/main/generated/.cache/c189bb4c92920ea572e0709157481155fe15e5dc new file mode 100644 index 0000000..4d74dfb --- /dev/null +++ b/src/main/generated/.cache/c189bb4c92920ea572e0709157481155fe15e5dc @@ -0,0 +1,29 @@ +// 1.21 2024-07-14T19:42:38.1828711 Caffeinated/Recipes +c773cd5c995b67602b5f054f551a8f5d6f33d139 data\caffeinated\advancement\recipes\misc\coffee_beans.json +c9b5cb066d0fab702915da1774fdd48fcbc57229 data\caffeinated\advancement\recipes\misc\coffee_beans_from_smoking.json +6061a7a2ef7b2febcca08d801ffce55d131fda2b data\caffeinated\recipe\tiramisu_from_slices.json +9e061efc3626a119413e61ca86a53990ab4f8a8a data\caffeinated\advancement\recipes\misc\ground_coffee_from_coffee_beans.json +b8e94b6ab3e5b643e335a6036992426d7e3ed11c data\caffeinated\advancement\recipes\building_blocks\coffee_bean_block.json +861e142a5a287eba94cf46a7d37342304f9ad285 data\caffeinated\recipe\ground_coffee_block.json +f1258bcc7fbf71701ecbdce075c9ac0d21afab91 data\caffeinated\advancement\recipes\decorations\coffee_berry_crate.json +afc5ab486779e47ce326b86ef93037905639d03a data\caffeinated\recipe\coffee_beans_from_smoking.json +51cbbbc43481615db699ce0878398bb475466f96 data\caffeinated\advancement\recipes\building_blocks\ground_coffee_block.json +31f69cf23ef6a168c6d98a8fef731d470bcbb187 data\caffeinated\recipe\coffee_berries.json +081e951942029c81b7edec2c02074e4b47d00d3d data\caffeinated\recipe\ground_coffee_from_coffee_beans.json +bc56b1de573d33d57411984e3b1a021270bb9719 data\caffeinated\recipe\coffee_berry_crate.json +ba81552d4ee1d9d568b84f786de61e415fdb157e data\caffeinated\recipe\latte_coffee_bottle.json +b3d10b49b978d96c244fb776e1292f0b3f9c272b data\caffeinated\recipe\brown_dye_from_ground_coffee.json +920e03fa0683e9b42e081c15bd1af0c69feb51eb data\caffeinated\recipe\coffee_beans.json +0ce1e6e9d0c954f2ea67d39a1a43bf358a1a8991 data\caffeinated\advancement\recipes\misc\brown_dye_from_ground_coffee.json +05ce2e487120bb80ae830054a41d88227ff06701 data\caffeinated\advancement\recipes\misc\coffee_beans_from_campfire_cooking.json +400dd2329e8ff95d83dae40af8db1c9fc5296ce4 data\caffeinated\recipe\coffee_bean_block.json +a3089cb10cc080957830e10d1b276e6fb8e2845c data\caffeinated\advancement\recipes\food\tiramisu_from_slices.json +42e097d611b5534f387afce66da821f0349faf9f data\caffeinated\recipe\coffee_bottle.json +72418a991f973fb5cf728affdcbfde7d5818b251 data\caffeinated\advancement\recipes\food\coffee_bottle.json +1410b08380530f562102b9d54fde26a7163b2256 data\caffeinated\advancement\recipes\food\latte_coffee_bottle.json +145d4111298037135c323e1347f67b3871daaa3e data\caffeinated\recipe\java_banner_pattern.json +fd6bc1e87eab4e2bccc5d198e5bca2730df804db data\caffeinated\recipe\coffee_beans_from_campfire_cooking.json +e1d9fbf68af558ba9d59fc35535075266be4d5fe data\caffeinated\recipe\tiramisu.json +d4cb036e5e2675e9ddf086c9a38c979f07b2648e data\caffeinated\advancement\recipes\food\tiramisu.json +d9e05f57073c3e404c58a204f07503f392f4d2fe data\caffeinated\advancement\recipes\food\coffee_berries.json +a9a4364e33318712c4a3e4ef39fa828117e28314 data\caffeinated\advancement\recipes\misc\java_banner_pattern.json diff --git a/src/main/generated/.cache/f97ece2f3a543d4dbc8c984a7bcdf2d64b8f7bed b/src/main/generated/.cache/f97ece2f3a543d4dbc8c984a7bcdf2d64b8f7bed new file mode 100644 index 0000000..7ebcf64 --- /dev/null +++ b/src/main/generated/.cache/f97ece2f3a543d4dbc8c984a7bcdf2d64b8f7bed @@ -0,0 +1,39 @@ +// 1.21 2024-07-14T19:42:38.1795313 Caffeinated/Model Definitions +da4528a3cfafc1ab21e5814b64029c10ec357178 assets\caffeinated\blockstates\ground_coffee_block.json +26f35f3a03b0d53578efd2c555721b08353d75f0 assets\caffeinated\blockstates\coffee_cauldron.json +b1a481861132973fe035c9b9ce7613e15938034c assets\caffeinated\models\block\coffee_berry_crate.json +e8f1792493d7219e1da4ac39e45bf903a349e3f5 assets\caffeinated\models\block\ground_coffee_cauldron_full.json +cd360bb185f465f81672c32ac31312f77270e5f4 assets\caffeinated\models\block\coffee_cauldron_level2.json +5f0ad0fc380a095ead21e3a00bdbbdcd648548e3 assets\caffeinated\models\item\latte_coffee_bottle.json +57311e73aae426dff5d3b58c69ec071360f952d3 assets\caffeinated\models\block\ground_coffee_cauldron_level1.json +13297d4a51cb3b1369630338ba5f7b439b4af3fc assets\caffeinated\models\block\cauldron_campfire_filled.json +cd254ba40cfd07d6c01d66a963e5ec83ed478aef assets\caffeinated\blockstates\coffee_berry_crate.json +ace2f8060adedf59471fa9728ad427b7c2abb51e assets\caffeinated\blockstates\soul_cauldron_campfire.json +cdbc1b9ed3c8b04b24b80402af15eb777423817d assets\caffeinated\models\block\ground_coffee_cauldron_level2.json +1297909cbb77803c3f1a796d29fa088c9aeae546 assets\caffeinated\blockstates\coffee_shrub.json +34202786f9a57de99cd6cc7be5013c91a1b9690a assets\caffeinated\models\item\tiramisu_slice.json +86a7f801b70c8f877d0e3d52a8bce349a9232c4f assets\caffeinated\models\block\ground_coffee_block.json +37d547b30cad973f0223896df68f15c5eea49d4b assets\caffeinated\models\item\ground_coffee_block.json +2e82d1add55c94e56c5b85172449dc9ff539882d assets\caffeinated\models\block\coffee_cauldron_full.json +63ec6c618a3a23eab4cab9c52d7d3250de9b516e assets\caffeinated\models\item\civet_spawn_egg.json +fe9155058173a06c1325878e72a8f42b0acfb9d7 assets\caffeinated\models\block\coffee_shrub_stage1.json +2078aae9dd460adbf0bf14e46615e32012f351e8 assets\caffeinated\blockstates\ground_coffee_cauldron.json +865a21f6601205d70079dbcc9d2bc9d375fbbc73 assets\caffeinated\models\block\coffee_bean_block.json +16db00fbb67b98528c1a99e61640adc411cc4cff assets\caffeinated\models\item\tiramisu.json +8ba76990b97aa664bf34e5e2b94761ebdc7a8c04 assets\caffeinated\models\block\coffee_cauldron_level1.json +3ef771d34d7bc76165d6a5f7053ea5ff27bc44dd assets\caffeinated\blockstates\coffee_bean_block.json +821f41182077e0ce6bc7918aee907e45a9dd7d73 assets\caffeinated\models\block\soul_cauldron_campfire.json +2ee0688f44b78a48941720e3223b7bf3a9133161 assets\caffeinated\blockstates\potted_coffee_shrub.json +358965a77d8a9ace29f9981a460163089349eda2 assets\caffeinated\models\item\coffee_berry_crate.json +196754b26a9f9cac1bf6b81563cef5344f998868 assets\caffeinated\blockstates\tiramisu.json +ee814f36f99a123b06cf2e7bcb08415b97595925 assets\caffeinated\models\block\potted_coffee_shrub.json +50804beb94c1a58c883df514333ff7d2c2807a42 assets\caffeinated\models\item\coffee_bean_block.json +6bc7bd9e663e1a1e43a79ef46957b15c4682a3a6 assets\caffeinated\models\block\coffee_shrub_stage0.json +0dab1d0bc7608970cc968c8f8569497fae0b2295 assets\caffeinated\models\item\ground_coffee.json +ffcb5afccb3a6b30399f263654799949096594da assets\caffeinated\blockstates\cauldron_campfire.json +58f78eb6198fba07304fece9e3c7bb6247a13229 assets\caffeinated\models\item\coffee_bottle.json +e4c8f2b75d3ecafc48e0a48ec6940b6dac0eb258 assets\caffeinated\models\item\coffee_beans.json +6568f0e38ffcef7753bd7c0ae1bfdd66fafc6795 assets\caffeinated\models\block\cauldron_campfire.json +66ab3c0788a1452c84c9c06f8ffe0bf7828a9620 assets\caffeinated\models\item\java_banner_pattern.json +1564a118add7b691cd3d6b1b6d06641507f0a7e2 assets\caffeinated\models\item\coffee_berries.json +f231ba05786d3928e6a0fce4139f5e1c5b106036 assets\caffeinated\models\block\soul_cauldron_campfire_filled.json diff --git a/src/main/generated/assets/caffeinated/blockstates/cauldron_campfire.json b/src/main/generated/assets/caffeinated/blockstates/cauldron_campfire.json new file mode 100644 index 0000000..e448057 --- /dev/null +++ b/src/main/generated/assets/caffeinated/blockstates/cauldron_campfire.json @@ -0,0 +1,64 @@ +{ + "variants": { + "facing=east,filled=false,lit=false": { + "model": "caffeinated:block/cauldron_campfire_off", + "y": 270 + }, + "facing=east,filled=false,lit=true": { + "model": "caffeinated:block/cauldron_campfire", + "y": 270 + }, + "facing=east,filled=true,lit=false": { + "model": "caffeinated:block/cauldron_campfire_off_filled", + "y": 270 + }, + "facing=east,filled=true,lit=true": { + "model": "caffeinated:block/cauldron_campfire_filled", + "y": 270 + }, + "facing=north,filled=false,lit=false": { + "model": "caffeinated:block/cauldron_campfire_off", + "y": 180 + }, + "facing=north,filled=false,lit=true": { + "model": "caffeinated:block/cauldron_campfire", + "y": 180 + }, + "facing=north,filled=true,lit=false": { + "model": "caffeinated:block/cauldron_campfire_off_filled", + "y": 180 + }, + "facing=north,filled=true,lit=true": { + "model": "caffeinated:block/cauldron_campfire_filled", + "y": 180 + }, + "facing=south,filled=false,lit=false": { + "model": "caffeinated:block/cauldron_campfire_off" + }, + "facing=south,filled=false,lit=true": { + "model": "caffeinated:block/cauldron_campfire" + }, + "facing=south,filled=true,lit=false": { + "model": "caffeinated:block/cauldron_campfire_off_filled" + }, + "facing=south,filled=true,lit=true": { + "model": "caffeinated:block/cauldron_campfire_filled" + }, + "facing=west,filled=false,lit=false": { + "model": "caffeinated:block/cauldron_campfire_off", + "y": 90 + }, + "facing=west,filled=false,lit=true": { + "model": "caffeinated:block/cauldron_campfire", + "y": 90 + }, + "facing=west,filled=true,lit=false": { + "model": "caffeinated:block/cauldron_campfire_off_filled", + "y": 90 + }, + "facing=west,filled=true,lit=true": { + "model": "caffeinated:block/cauldron_campfire_filled", + "y": 90 + } + } +} \ No newline at end of file diff --git a/src/main/generated/assets/caffeinated/blockstates/coffee_bean_block.json b/src/main/generated/assets/caffeinated/blockstates/coffee_bean_block.json new file mode 100644 index 0000000..1592c66 --- /dev/null +++ b/src/main/generated/assets/caffeinated/blockstates/coffee_bean_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "caffeinated:block/coffee_bean_block" + } + } +} \ No newline at end of file diff --git a/src/main/generated/assets/caffeinated/blockstates/coffee_berry_crate.json b/src/main/generated/assets/caffeinated/blockstates/coffee_berry_crate.json new file mode 100644 index 0000000..80c7718 --- /dev/null +++ b/src/main/generated/assets/caffeinated/blockstates/coffee_berry_crate.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "caffeinated:block/coffee_berry_crate" + } + } +} \ No newline at end of file diff --git a/src/main/generated/assets/caffeinated/blockstates/coffee_cauldron.json b/src/main/generated/assets/caffeinated/blockstates/coffee_cauldron.json new file mode 100644 index 0000000..490d3fa --- /dev/null +++ b/src/main/generated/assets/caffeinated/blockstates/coffee_cauldron.json @@ -0,0 +1,13 @@ +{ + "variants": { + "level=1": { + "model": "caffeinated:block/coffee_cauldron_level1" + }, + "level=2": { + "model": "caffeinated:block/coffee_cauldron_level2" + }, + "level=3": { + "model": "caffeinated:block/coffee_cauldron_full" + } + } +} \ No newline at end of file diff --git a/src/main/generated/assets/caffeinated/blockstates/coffee_shrub.json b/src/main/generated/assets/caffeinated/blockstates/coffee_shrub.json new file mode 100644 index 0000000..83b902d --- /dev/null +++ b/src/main/generated/assets/caffeinated/blockstates/coffee_shrub.json @@ -0,0 +1,16 @@ +{ + "variants": { + "age=0": { + "model": "caffeinated:block/coffee_shrub_stage0" + }, + "age=1": { + "model": "caffeinated:block/coffee_shrub_stage0" + }, + "age=2": { + "model": "caffeinated:block/coffee_shrub_stage1" + }, + "age=3": { + "model": "caffeinated:block/coffee_shrub_stage1" + } + } +} \ No newline at end of file diff --git a/src/main/generated/assets/caffeinated/blockstates/ground_coffee_block.json b/src/main/generated/assets/caffeinated/blockstates/ground_coffee_block.json new file mode 100644 index 0000000..aa1864c --- /dev/null +++ b/src/main/generated/assets/caffeinated/blockstates/ground_coffee_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "caffeinated:block/ground_coffee_block" + } + } +} \ No newline at end of file diff --git a/src/main/generated/assets/caffeinated/blockstates/ground_coffee_cauldron.json b/src/main/generated/assets/caffeinated/blockstates/ground_coffee_cauldron.json new file mode 100644 index 0000000..c54ef3a --- /dev/null +++ b/src/main/generated/assets/caffeinated/blockstates/ground_coffee_cauldron.json @@ -0,0 +1,13 @@ +{ + "variants": { + "level=1": { + "model": "caffeinated:block/ground_coffee_cauldron_level1" + }, + "level=2": { + "model": "caffeinated:block/ground_coffee_cauldron_level2" + }, + "level=3": { + "model": "caffeinated:block/ground_coffee_cauldron_full" + } + } +} \ No newline at end of file diff --git a/src/main/generated/assets/caffeinated/blockstates/potted_coffee_shrub.json b/src/main/generated/assets/caffeinated/blockstates/potted_coffee_shrub.json new file mode 100644 index 0000000..3b06abc --- /dev/null +++ b/src/main/generated/assets/caffeinated/blockstates/potted_coffee_shrub.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "caffeinated:block/potted_coffee_shrub" + } + } +} \ No newline at end of file diff --git a/src/main/generated/assets/caffeinated/blockstates/soul_cauldron_campfire.json b/src/main/generated/assets/caffeinated/blockstates/soul_cauldron_campfire.json new file mode 100644 index 0000000..44c6f47 --- /dev/null +++ b/src/main/generated/assets/caffeinated/blockstates/soul_cauldron_campfire.json @@ -0,0 +1,64 @@ +{ + "variants": { + "facing=east,filled=false,lit=false": { + "model": "caffeinated:block/cauldron_campfire_off", + "y": 270 + }, + "facing=east,filled=false,lit=true": { + "model": "caffeinated:block/soul_cauldron_campfire", + "y": 270 + }, + "facing=east,filled=true,lit=false": { + "model": "caffeinated:block/cauldron_campfire_off_filled", + "y": 270 + }, + "facing=east,filled=true,lit=true": { + "model": "caffeinated:block/soul_cauldron_campfire_filled", + "y": 270 + }, + "facing=north,filled=false,lit=false": { + "model": "caffeinated:block/cauldron_campfire_off", + "y": 180 + }, + "facing=north,filled=false,lit=true": { + "model": "caffeinated:block/soul_cauldron_campfire", + "y": 180 + }, + "facing=north,filled=true,lit=false": { + "model": "caffeinated:block/cauldron_campfire_off_filled", + "y": 180 + }, + "facing=north,filled=true,lit=true": { + "model": "caffeinated:block/soul_cauldron_campfire_filled", + "y": 180 + }, + "facing=south,filled=false,lit=false": { + "model": "caffeinated:block/cauldron_campfire_off" + }, + "facing=south,filled=false,lit=true": { + "model": "caffeinated:block/soul_cauldron_campfire" + }, + "facing=south,filled=true,lit=false": { + "model": "caffeinated:block/cauldron_campfire_off_filled" + }, + "facing=south,filled=true,lit=true": { + "model": "caffeinated:block/soul_cauldron_campfire_filled" + }, + "facing=west,filled=false,lit=false": { + "model": "caffeinated:block/cauldron_campfire_off", + "y": 90 + }, + "facing=west,filled=false,lit=true": { + "model": "caffeinated:block/soul_cauldron_campfire", + "y": 90 + }, + "facing=west,filled=true,lit=false": { + "model": "caffeinated:block/cauldron_campfire_off_filled", + "y": 90 + }, + "facing=west,filled=true,lit=true": { + "model": "caffeinated:block/soul_cauldron_campfire_filled", + "y": 90 + } + } +} \ No newline at end of file diff --git a/src/main/generated/assets/caffeinated/blockstates/tiramisu.json b/src/main/generated/assets/caffeinated/blockstates/tiramisu.json new file mode 100644 index 0000000..612ef58 --- /dev/null +++ b/src/main/generated/assets/caffeinated/blockstates/tiramisu.json @@ -0,0 +1,16 @@ +{ + "variants": { + "slices=1": { + "model": "caffeinated:block/tiramisu_slice3" + }, + "slices=2": { + "model": "caffeinated:block/tiramisu_slice2" + }, + "slices=3": { + "model": "caffeinated:block/tiramisu_slice1" + }, + "slices=4": { + "model": "caffeinated:block/tiramisu" + } + } +} \ No newline at end of file diff --git a/src/main/generated/assets/caffeinated/models/block/cauldron_campfire.json b/src/main/generated/assets/caffeinated/models/block/cauldron_campfire.json new file mode 100644 index 0000000..59e3301 --- /dev/null +++ b/src/main/generated/assets/caffeinated/models/block/cauldron_campfire.json @@ -0,0 +1,7 @@ +{ + "parent": "caffeinated:block/template_cauldron_campfire", + "textures": { + "fire": "minecraft:block/campfire_fire", + "lit_log": "minecraft:block/campfire_log_lit" + } +} \ No newline at end of file diff --git a/src/main/generated/assets/caffeinated/models/block/cauldron_campfire_filled.json b/src/main/generated/assets/caffeinated/models/block/cauldron_campfire_filled.json new file mode 100644 index 0000000..aa1ef6e --- /dev/null +++ b/src/main/generated/assets/caffeinated/models/block/cauldron_campfire_filled.json @@ -0,0 +1,7 @@ +{ + "parent": "caffeinated:block/template_cauldron_campfire_filled", + "textures": { + "fire": "minecraft:block/campfire_fire", + "lit_log": "minecraft:block/campfire_log_lit" + } +} \ No newline at end of file diff --git a/src/main/generated/assets/caffeinated/models/block/coffee_bean_block.json b/src/main/generated/assets/caffeinated/models/block/coffee_bean_block.json new file mode 100644 index 0000000..00a0566 --- /dev/null +++ b/src/main/generated/assets/caffeinated/models/block/coffee_bean_block.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "caffeinated:block/coffee_bean_block" + } +} \ No newline at end of file diff --git a/src/main/generated/assets/caffeinated/models/block/coffee_berry_crate.json b/src/main/generated/assets/caffeinated/models/block/coffee_berry_crate.json new file mode 100644 index 0000000..92962f6 --- /dev/null +++ b/src/main/generated/assets/caffeinated/models/block/coffee_berry_crate.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/cube_bottom_top", + "textures": { + "bottom": "farmersdelight:block/crate_bottom", + "side": "caffeinated:block/coffee_berry_crate_side", + "top": "caffeinated:block/coffee_berry_crate_top" + } +} \ No newline at end of file diff --git a/src/main/generated/assets/caffeinated/models/block/coffee_cauldron_full.json b/src/main/generated/assets/caffeinated/models/block/coffee_cauldron_full.json new file mode 100644 index 0000000..8ac53b9 --- /dev/null +++ b/src/main/generated/assets/caffeinated/models/block/coffee_cauldron_full.json @@ -0,0 +1,11 @@ +{ + "parent": "minecraft:block/template_cauldron_full", + "textures": { + "bottom": "minecraft:block/cauldron_bottom", + "content": "caffeinated:block/coffee", + "inside": "minecraft:block/cauldron_inner", + "particle": "minecraft:block/cauldron_side", + "side": "minecraft:block/cauldron_side", + "top": "minecraft:block/cauldron_top" + } +} \ No newline at end of file diff --git a/src/main/generated/assets/caffeinated/models/block/coffee_cauldron_level1.json b/src/main/generated/assets/caffeinated/models/block/coffee_cauldron_level1.json new file mode 100644 index 0000000..ed7e86e --- /dev/null +++ b/src/main/generated/assets/caffeinated/models/block/coffee_cauldron_level1.json @@ -0,0 +1,11 @@ +{ + "parent": "minecraft:block/template_cauldron_level1", + "textures": { + "bottom": "minecraft:block/cauldron_bottom", + "content": "caffeinated:block/coffee", + "inside": "minecraft:block/cauldron_inner", + "particle": "minecraft:block/cauldron_side", + "side": "minecraft:block/cauldron_side", + "top": "minecraft:block/cauldron_top" + } +} \ No newline at end of file diff --git a/src/main/generated/assets/caffeinated/models/block/coffee_cauldron_level2.json b/src/main/generated/assets/caffeinated/models/block/coffee_cauldron_level2.json new file mode 100644 index 0000000..dce45f4 --- /dev/null +++ b/src/main/generated/assets/caffeinated/models/block/coffee_cauldron_level2.json @@ -0,0 +1,11 @@ +{ + "parent": "minecraft:block/template_cauldron_level2", + "textures": { + "bottom": "minecraft:block/cauldron_bottom", + "content": "caffeinated:block/coffee", + "inside": "minecraft:block/cauldron_inner", + "particle": "minecraft:block/cauldron_side", + "side": "minecraft:block/cauldron_side", + "top": "minecraft:block/cauldron_top" + } +} \ No newline at end of file diff --git a/src/main/generated/assets/caffeinated/models/block/coffee_shrub_stage0.json b/src/main/generated/assets/caffeinated/models/block/coffee_shrub_stage0.json new file mode 100644 index 0000000..7547f66 --- /dev/null +++ b/src/main/generated/assets/caffeinated/models/block/coffee_shrub_stage0.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "caffeinated:block/coffee_shrub_stage0" + } +} \ No newline at end of file diff --git a/src/main/generated/assets/caffeinated/models/block/coffee_shrub_stage1.json b/src/main/generated/assets/caffeinated/models/block/coffee_shrub_stage1.json new file mode 100644 index 0000000..afee346 --- /dev/null +++ b/src/main/generated/assets/caffeinated/models/block/coffee_shrub_stage1.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "caffeinated:block/coffee_shrub_stage1" + } +} \ No newline at end of file diff --git a/src/main/generated/assets/caffeinated/models/block/ground_coffee_block.json b/src/main/generated/assets/caffeinated/models/block/ground_coffee_block.json new file mode 100644 index 0000000..1a74a4e --- /dev/null +++ b/src/main/generated/assets/caffeinated/models/block/ground_coffee_block.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "caffeinated:block/ground_coffee_block" + } +} \ No newline at end of file diff --git a/src/main/generated/assets/caffeinated/models/block/ground_coffee_cauldron_full.json b/src/main/generated/assets/caffeinated/models/block/ground_coffee_cauldron_full.json new file mode 100644 index 0000000..6b02d95 --- /dev/null +++ b/src/main/generated/assets/caffeinated/models/block/ground_coffee_cauldron_full.json @@ -0,0 +1,11 @@ +{ + "parent": "minecraft:block/template_cauldron_full", + "textures": { + "bottom": "minecraft:block/cauldron_bottom", + "content": "caffeinated:block/ground_coffee_cauldron", + "inside": "minecraft:block/cauldron_inner", + "particle": "minecraft:block/cauldron_side", + "side": "minecraft:block/cauldron_side", + "top": "minecraft:block/cauldron_top" + } +} \ No newline at end of file diff --git a/src/main/generated/assets/caffeinated/models/block/ground_coffee_cauldron_level1.json b/src/main/generated/assets/caffeinated/models/block/ground_coffee_cauldron_level1.json new file mode 100644 index 0000000..dc90ad5 --- /dev/null +++ b/src/main/generated/assets/caffeinated/models/block/ground_coffee_cauldron_level1.json @@ -0,0 +1,11 @@ +{ + "parent": "minecraft:block/template_cauldron_level1", + "textures": { + "bottom": "minecraft:block/cauldron_bottom", + "content": "caffeinated:block/ground_coffee_cauldron", + "inside": "minecraft:block/cauldron_inner", + "particle": "minecraft:block/cauldron_side", + "side": "minecraft:block/cauldron_side", + "top": "minecraft:block/cauldron_top" + } +} \ No newline at end of file diff --git a/src/main/generated/assets/caffeinated/models/block/ground_coffee_cauldron_level2.json b/src/main/generated/assets/caffeinated/models/block/ground_coffee_cauldron_level2.json new file mode 100644 index 0000000..5b043ad --- /dev/null +++ b/src/main/generated/assets/caffeinated/models/block/ground_coffee_cauldron_level2.json @@ -0,0 +1,11 @@ +{ + "parent": "minecraft:block/template_cauldron_level2", + "textures": { + "bottom": "minecraft:block/cauldron_bottom", + "content": "caffeinated:block/ground_coffee_cauldron", + "inside": "minecraft:block/cauldron_inner", + "particle": "minecraft:block/cauldron_side", + "side": "minecraft:block/cauldron_side", + "top": "minecraft:block/cauldron_top" + } +} \ No newline at end of file diff --git a/src/main/generated/assets/caffeinated/models/block/potted_coffee_shrub.json b/src/main/generated/assets/caffeinated/models/block/potted_coffee_shrub.json new file mode 100644 index 0000000..cd9812c --- /dev/null +++ b/src/main/generated/assets/caffeinated/models/block/potted_coffee_shrub.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/flower_pot_cross", + "textures": { + "plant": "caffeinated:block/coffee_shrub_stage1" + } +} \ No newline at end of file diff --git a/src/main/generated/assets/caffeinated/models/block/soul_cauldron_campfire.json b/src/main/generated/assets/caffeinated/models/block/soul_cauldron_campfire.json new file mode 100644 index 0000000..4449bd4 --- /dev/null +++ b/src/main/generated/assets/caffeinated/models/block/soul_cauldron_campfire.json @@ -0,0 +1,7 @@ +{ + "parent": "caffeinated:block/template_cauldron_campfire", + "textures": { + "fire": "minecraft:block/soul_campfire_fire", + "lit_log": "minecraft:block/soul_campfire_log_lit" + } +} \ No newline at end of file diff --git a/src/main/generated/assets/caffeinated/models/block/soul_cauldron_campfire_filled.json b/src/main/generated/assets/caffeinated/models/block/soul_cauldron_campfire_filled.json new file mode 100644 index 0000000..801ca78 --- /dev/null +++ b/src/main/generated/assets/caffeinated/models/block/soul_cauldron_campfire_filled.json @@ -0,0 +1,7 @@ +{ + "parent": "caffeinated:block/template_cauldron_campfire_filled", + "textures": { + "fire": "minecraft:block/soul_campfire_fire", + "lit_log": "minecraft:block/soul_campfire_log_lit" + } +} \ No newline at end of file diff --git a/src/main/generated/assets/caffeinated/models/item/civet_spawn_egg.json b/src/main/generated/assets/caffeinated/models/item/civet_spawn_egg.json new file mode 100644 index 0000000..d1aaa9d --- /dev/null +++ b/src/main/generated/assets/caffeinated/models/item/civet_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} \ No newline at end of file diff --git a/src/main/generated/assets/caffeinated/models/item/coffee_bean_block.json b/src/main/generated/assets/caffeinated/models/item/coffee_bean_block.json new file mode 100644 index 0000000..606e462 --- /dev/null +++ b/src/main/generated/assets/caffeinated/models/item/coffee_bean_block.json @@ -0,0 +1,3 @@ +{ + "parent": "caffeinated:block/coffee_bean_block" +} \ No newline at end of file diff --git a/src/main/generated/assets/caffeinated/models/item/coffee_beans.json b/src/main/generated/assets/caffeinated/models/item/coffee_beans.json new file mode 100644 index 0000000..d3664f5 --- /dev/null +++ b/src/main/generated/assets/caffeinated/models/item/coffee_beans.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "caffeinated:item/coffee_beans" + } +} \ No newline at end of file diff --git a/src/main/generated/assets/caffeinated/models/item/coffee_berries.json b/src/main/generated/assets/caffeinated/models/item/coffee_berries.json new file mode 100644 index 0000000..84622a0 --- /dev/null +++ b/src/main/generated/assets/caffeinated/models/item/coffee_berries.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "caffeinated:item/coffee_berries" + } +} \ No newline at end of file diff --git a/src/main/generated/assets/caffeinated/models/item/coffee_berry_crate.json b/src/main/generated/assets/caffeinated/models/item/coffee_berry_crate.json new file mode 100644 index 0000000..1183e1e --- /dev/null +++ b/src/main/generated/assets/caffeinated/models/item/coffee_berry_crate.json @@ -0,0 +1,3 @@ +{ + "parent": "caffeinated:block/coffee_berry_crate" +} \ No newline at end of file diff --git a/src/main/generated/assets/caffeinated/models/item/coffee_bottle.json b/src/main/generated/assets/caffeinated/models/item/coffee_bottle.json new file mode 100644 index 0000000..5a3e056 --- /dev/null +++ b/src/main/generated/assets/caffeinated/models/item/coffee_bottle.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "caffeinated:item/coffee_bottle" + } +} \ No newline at end of file diff --git a/src/main/generated/assets/caffeinated/models/item/ground_coffee.json b/src/main/generated/assets/caffeinated/models/item/ground_coffee.json new file mode 100644 index 0000000..0cb2a92 --- /dev/null +++ b/src/main/generated/assets/caffeinated/models/item/ground_coffee.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "caffeinated:item/ground_coffee" + } +} \ No newline at end of file diff --git a/src/main/generated/assets/caffeinated/models/item/ground_coffee_block.json b/src/main/generated/assets/caffeinated/models/item/ground_coffee_block.json new file mode 100644 index 0000000..9365e1f --- /dev/null +++ b/src/main/generated/assets/caffeinated/models/item/ground_coffee_block.json @@ -0,0 +1,3 @@ +{ + "parent": "caffeinated:block/ground_coffee_block" +} \ No newline at end of file diff --git a/src/main/generated/assets/caffeinated/models/item/java_banner_pattern.json b/src/main/generated/assets/caffeinated/models/item/java_banner_pattern.json new file mode 100644 index 0000000..6292d3f --- /dev/null +++ b/src/main/generated/assets/caffeinated/models/item/java_banner_pattern.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "caffeinated:item/java_banner_pattern" + } +} \ No newline at end of file diff --git a/src/main/generated/assets/caffeinated/models/item/latte_coffee_bottle.json b/src/main/generated/assets/caffeinated/models/item/latte_coffee_bottle.json new file mode 100644 index 0000000..d5b802e --- /dev/null +++ b/src/main/generated/assets/caffeinated/models/item/latte_coffee_bottle.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "caffeinated:item/latte_coffee_bottle" + } +} \ No newline at end of file diff --git a/src/main/generated/assets/caffeinated/models/item/tiramisu.json b/src/main/generated/assets/caffeinated/models/item/tiramisu.json new file mode 100644 index 0000000..c0522cc --- /dev/null +++ b/src/main/generated/assets/caffeinated/models/item/tiramisu.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "caffeinated:item/tiramisu" + } +} \ No newline at end of file diff --git a/src/main/generated/assets/caffeinated/models/item/tiramisu_slice.json b/src/main/generated/assets/caffeinated/models/item/tiramisu_slice.json new file mode 100644 index 0000000..f60dd13 --- /dev/null +++ b/src/main/generated/assets/caffeinated/models/item/tiramisu_slice.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "caffeinated:item/tiramisu_slice" + } +} \ No newline at end of file diff --git a/src/main/generated/data/caffeinated/advancement/husbandry/bake_tiramisu.json b/src/main/generated/data/caffeinated/advancement/husbandry/bake_tiramisu.json new file mode 100644 index 0000000..c07cde6 --- /dev/null +++ b/src/main/generated/data/caffeinated/advancement/husbandry/bake_tiramisu.json @@ -0,0 +1,33 @@ +{ + "parent": "caffeinated:husbandry/brew_coffee", + "criteria": { + "bake_tiramisu": { + "conditions": { + "items": [ + { + "items": "caffeinated:tiramisu" + } + ] + }, + "trigger": "minecraft:inventory_changed" + } + }, + "display": { + "description": { + "translate": "advancements.husbandry.bake_tiramisu.description" + }, + "icon": { + "count": 1, + "id": "caffeinated:tiramisu" + }, + "title": { + "translate": "advancements.husbandry.bake_tiramisu.title" + } + }, + "requirements": [ + [ + "bake_tiramisu" + ] + ], + "sends_telemetry_event": true +} \ No newline at end of file diff --git a/src/main/generated/data/caffeinated/advancement/husbandry/brew_all_coffee.json b/src/main/generated/data/caffeinated/advancement/husbandry/brew_all_coffee.json new file mode 100644 index 0000000..70bbd32 --- /dev/null +++ b/src/main/generated/data/caffeinated/advancement/husbandry/brew_all_coffee.json @@ -0,0 +1,46 @@ +{ + "parent": "caffeinated:husbandry/brew_coffee", + "criteria": { + "brew_coffee_bottle": { + "conditions": { + "result": { + "items": "caffeinated:coffee_bottle" + } + }, + "trigger": "caffeinated:brew_coffee" + }, + "brew_latte_coffee_bottle": { + "conditions": { + "result": { + "items": "caffeinated:latte_coffee_bottle" + } + }, + "trigger": "caffeinated:brew_coffee" + } + }, + "display": { + "description": { + "translate": "advancements.husbandry.brew_all_coffee.description" + }, + "frame": "challenge", + "icon": { + "count": 1, + "id": "caffeinated:latte_coffee_bottle" + }, + "title": { + "translate": "advancements.husbandry.brew_all_coffee.title" + } + }, + "requirements": [ + [ + "brew_coffee_bottle" + ], + [ + "brew_latte_coffee_bottle" + ] + ], + "rewards": { + "experience": 100 + }, + "sends_telemetry_event": true +} \ No newline at end of file diff --git a/src/main/resources/data/caffeinated/advancement/husbandry/brew_coffee.json b/src/main/generated/data/caffeinated/advancement/husbandry/brew_coffee.json similarity index 59% rename from src/main/resources/data/caffeinated/advancement/husbandry/brew_coffee.json rename to src/main/generated/data/caffeinated/advancement/husbandry/brew_coffee.json index 47c3f42..b524a90 100644 --- a/src/main/resources/data/caffeinated/advancement/husbandry/brew_coffee.json +++ b/src/main/generated/data/caffeinated/advancement/husbandry/brew_coffee.json @@ -1,30 +1,25 @@ { - "display": { - "icon": { - "item": "caffeinated:coffee_bottle" - }, - "title": { - "translate": "advancements.husbandry.brew_coffee.title" - }, - "description": { - "translate": "advancements.husbandry.brew_coffee.description" - }, - "frame": "task", - "show_toast": true, - "announce_to_chat": true, - "hidden": false - }, "parent": "minecraft:husbandry/root", "criteria": { "brew_coffee": { - "trigger": "caffeinated:brew_coffee", "conditions": { - "item": { - "items": [ - "caffeinated:coffee_bottle" - ] + "result": { + "items": "#caffeinated:black_coffee_bottles" } - } + }, + "trigger": "caffeinated:brew_coffee" + } + }, + "display": { + "description": { + "translate": "advancements.husbandry.brew_coffee.description" + }, + "icon": { + "count": 1, + "id": "caffeinated:coffee_bottle" + }, + "title": { + "translate": "advancements.husbandry.brew_coffee.title" } }, "requirements": [ diff --git a/src/main/generated/data/caffeinated/advancement/recipes/building_blocks/coffee_bean_block.json b/src/main/generated/data/caffeinated/advancement/recipes/building_blocks/coffee_bean_block.json new file mode 100644 index 0000000..856f0cf --- /dev/null +++ b/src/main/generated/data/caffeinated/advancement/recipes/building_blocks/coffee_bean_block.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_coffee_beans": { + "conditions": { + "items": [ + { + "items": "caffeinated:coffee_beans" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "caffeinated:coffee_bean_block" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_coffee_beans" + ] + ], + "rewards": { + "recipes": [ + "caffeinated:coffee_bean_block" + ] + } +} \ No newline at end of file diff --git a/src/main/generated/data/caffeinated/advancement/recipes/building_blocks/ground_coffee_block.json b/src/main/generated/data/caffeinated/advancement/recipes/building_blocks/ground_coffee_block.json new file mode 100644 index 0000000..cea3c84 --- /dev/null +++ b/src/main/generated/data/caffeinated/advancement/recipes/building_blocks/ground_coffee_block.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ground_coffee": { + "conditions": { + "items": [ + { + "items": "caffeinated:ground_coffee" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "caffeinated:ground_coffee_block" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_ground_coffee" + ] + ], + "rewards": { + "recipes": [ + "caffeinated:ground_coffee_block" + ] + } +} \ No newline at end of file diff --git a/src/main/generated/data/caffeinated/advancement/recipes/decorations/coffee_berry_crate.json b/src/main/generated/data/caffeinated/advancement/recipes/decorations/coffee_berry_crate.json new file mode 100644 index 0000000..f270a75 --- /dev/null +++ b/src/main/generated/data/caffeinated/advancement/recipes/decorations/coffee_berry_crate.json @@ -0,0 +1,40 @@ +{ + "fabric:load_conditions": [ + { + "condition": "fabric:all_mods_loaded", + "values": [ + "farmersdelight" + ] + } + ], + "parent": "minecraft:recipes/root", + "criteria": { + "has_coffee_berries": { + "conditions": { + "items": [ + { + "items": "caffeinated:coffee_berries" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "minecraft:coffee_berry_crate" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_coffee_berries" + ] + ], + "rewards": { + "recipes": [ + "minecraft:coffee_berry_crate" + ] + } +} \ No newline at end of file diff --git a/src/main/generated/data/caffeinated/advancement/recipes/food/coffee_berries.json b/src/main/generated/data/caffeinated/advancement/recipes/food/coffee_berries.json new file mode 100644 index 0000000..5648f3b --- /dev/null +++ b/src/main/generated/data/caffeinated/advancement/recipes/food/coffee_berries.json @@ -0,0 +1,40 @@ +{ + "fabric:load_conditions": [ + { + "condition": "fabric:all_mods_loaded", + "values": [ + "farmersdelight" + ] + } + ], + "parent": "minecraft:recipes/root", + "criteria": { + "has_coffee_berry_crate": { + "conditions": { + "items": [ + { + "items": "caffeinated:coffee_berry_crate" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "minecraft:coffee_berries" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_coffee_berry_crate" + ] + ], + "rewards": { + "recipes": [ + "minecraft:coffee_berries" + ] + } +} \ No newline at end of file diff --git a/src/main/generated/data/caffeinated/advancement/recipes/food/coffee_bottle.json b/src/main/generated/data/caffeinated/advancement/recipes/food/coffee_bottle.json new file mode 100644 index 0000000..4e195b5 --- /dev/null +++ b/src/main/generated/data/caffeinated/advancement/recipes/food/coffee_bottle.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ground_coffee": { + "conditions": { + "items": [ + { + "items": "caffeinated:ground_coffee" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "caffeinated:coffee_bottle" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_ground_coffee" + ] + ], + "rewards": { + "recipes": [ + "caffeinated:coffee_bottle" + ] + } +} \ No newline at end of file diff --git a/src/main/generated/data/caffeinated/advancement/recipes/food/latte_coffee_bottle.json b/src/main/generated/data/caffeinated/advancement/recipes/food/latte_coffee_bottle.json new file mode 100644 index 0000000..f37fc76 --- /dev/null +++ b/src/main/generated/data/caffeinated/advancement/recipes/food/latte_coffee_bottle.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_milk_bucket": { + "conditions": { + "items": [ + { + "items": "#c:buckets/milk" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "caffeinated:latte_coffee_bottle" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_milk_bucket" + ] + ], + "rewards": { + "recipes": [ + "caffeinated:latte_coffee_bottle" + ] + } +} \ No newline at end of file diff --git a/src/main/generated/data/caffeinated/advancement/recipes/food/tiramisu.json b/src/main/generated/data/caffeinated/advancement/recipes/food/tiramisu.json new file mode 100644 index 0000000..403577e --- /dev/null +++ b/src/main/generated/data/caffeinated/advancement/recipes/food/tiramisu.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_black_coffee_bottle": { + "conditions": { + "items": [ + { + "items": "#caffeinated:black_coffee_bottles" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "caffeinated:tiramisu" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_black_coffee_bottle" + ] + ], + "rewards": { + "recipes": [ + "caffeinated:tiramisu" + ] + } +} \ No newline at end of file diff --git a/src/main/generated/data/caffeinated/advancement/recipes/food/tiramisu_from_slices.json b/src/main/generated/data/caffeinated/advancement/recipes/food/tiramisu_from_slices.json new file mode 100644 index 0000000..e2dc1d6 --- /dev/null +++ b/src/main/generated/data/caffeinated/advancement/recipes/food/tiramisu_from_slices.json @@ -0,0 +1,40 @@ +{ + "fabric:load_conditions": [ + { + "condition": "fabric:all_mods_loaded", + "values": [ + "farmersdelight" + ] + } + ], + "parent": "minecraft:recipes/root", + "criteria": { + "has_the_recipe": { + "conditions": { + "recipe": "caffeinated:tiramisu_from_slices" + }, + "trigger": "minecraft:recipe_unlocked" + }, + "has_tiramisu_slice": { + "conditions": { + "items": [ + { + "items": "caffeinated:tiramisu_slice" + } + ] + }, + "trigger": "minecraft:inventory_changed" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_tiramisu_slice" + ] + ], + "rewards": { + "recipes": [ + "caffeinated:tiramisu_from_slices" + ] + } +} \ No newline at end of file diff --git a/src/main/generated/data/caffeinated/advancement/recipes/misc/brown_dye_from_ground_coffee.json b/src/main/generated/data/caffeinated/advancement/recipes/misc/brown_dye_from_ground_coffee.json new file mode 100644 index 0000000..3bb62c5 --- /dev/null +++ b/src/main/generated/data/caffeinated/advancement/recipes/misc/brown_dye_from_ground_coffee.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ground_coffee": { + "conditions": { + "items": [ + { + "items": "caffeinated:ground_coffee" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "caffeinated:brown_dye_from_ground_coffee" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_ground_coffee" + ] + ], + "rewards": { + "recipes": [ + "caffeinated:brown_dye_from_ground_coffee" + ] + } +} \ No newline at end of file diff --git a/src/main/generated/data/caffeinated/advancement/recipes/misc/coffee_beans.json b/src/main/generated/data/caffeinated/advancement/recipes/misc/coffee_beans.json new file mode 100644 index 0000000..ab0eb98 --- /dev/null +++ b/src/main/generated/data/caffeinated/advancement/recipes/misc/coffee_beans.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_coffee_berries": { + "conditions": { + "items": [ + { + "items": "caffeinated:coffee_berries" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "caffeinated:coffee_beans" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_coffee_berries" + ] + ], + "rewards": { + "recipes": [ + "caffeinated:coffee_beans" + ] + } +} \ No newline at end of file diff --git a/src/main/generated/data/caffeinated/advancement/recipes/misc/coffee_beans_from_campfire_cooking.json b/src/main/generated/data/caffeinated/advancement/recipes/misc/coffee_beans_from_campfire_cooking.json new file mode 100644 index 0000000..587835f --- /dev/null +++ b/src/main/generated/data/caffeinated/advancement/recipes/misc/coffee_beans_from_campfire_cooking.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_coffee_berries": { + "conditions": { + "items": [ + { + "items": "caffeinated:coffee_berries" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "caffeinated:coffee_beans_from_campfire_cooking" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_coffee_berries" + ] + ], + "rewards": { + "recipes": [ + "caffeinated:coffee_beans_from_campfire_cooking" + ] + } +} \ No newline at end of file diff --git a/src/main/generated/data/caffeinated/advancement/recipes/misc/coffee_beans_from_smoking.json b/src/main/generated/data/caffeinated/advancement/recipes/misc/coffee_beans_from_smoking.json new file mode 100644 index 0000000..00eeaf1 --- /dev/null +++ b/src/main/generated/data/caffeinated/advancement/recipes/misc/coffee_beans_from_smoking.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_coffee_berries": { + "conditions": { + "items": [ + { + "items": "caffeinated:coffee_berries" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "caffeinated:coffee_beans_from_smoking" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_coffee_berries" + ] + ], + "rewards": { + "recipes": [ + "caffeinated:coffee_beans_from_smoking" + ] + } +} \ No newline at end of file diff --git a/src/main/generated/data/caffeinated/advancement/recipes/misc/ground_coffee_from_coffee_beans.json b/src/main/generated/data/caffeinated/advancement/recipes/misc/ground_coffee_from_coffee_beans.json new file mode 100644 index 0000000..13d1d70 --- /dev/null +++ b/src/main/generated/data/caffeinated/advancement/recipes/misc/ground_coffee_from_coffee_beans.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_coffee_beans": { + "conditions": { + "items": [ + { + "items": "caffeinated:coffee_beans" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "caffeinated:ground_coffee_from_coffee_beans" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_coffee_beans" + ] + ], + "rewards": { + "recipes": [ + "caffeinated:ground_coffee_from_coffee_beans" + ] + } +} \ No newline at end of file diff --git a/src/main/generated/data/caffeinated/advancement/recipes/misc/java_banner_pattern.json b/src/main/generated/data/caffeinated/advancement/recipes/misc/java_banner_pattern.json new file mode 100644 index 0000000..8c12084 --- /dev/null +++ b/src/main/generated/data/caffeinated/advancement/recipes/misc/java_banner_pattern.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_black_coffee_bottle": { + "conditions": { + "items": [ + { + "items": "#caffeinated:black_coffee_bottles" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "caffeinated:java_banner_pattern" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_black_coffee_bottle" + ] + ], + "rewards": { + "recipes": [ + "caffeinated:java_banner_pattern" + ] + } +} \ No newline at end of file diff --git a/src/main/generated/data/caffeinated/loot_table/blocks/coffee_bean_block.json b/src/main/generated/data/caffeinated/loot_table/blocks/coffee_bean_block.json new file mode 100644 index 0000000..30bf11a --- /dev/null +++ b/src/main/generated/data/caffeinated/loot_table/blocks/coffee_bean_block.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "caffeinated:coffee_bean_block" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/main/generated/data/caffeinated/loot_table/blocks/coffee_berry_crate.json b/src/main/generated/data/caffeinated/loot_table/blocks/coffee_berry_crate.json new file mode 100644 index 0000000..a76344e --- /dev/null +++ b/src/main/generated/data/caffeinated/loot_table/blocks/coffee_berry_crate.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "caffeinated:coffee_berry_crate" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/main/generated/data/caffeinated/loot_table/blocks/coffee_cauldron.json b/src/main/generated/data/caffeinated/loot_table/blocks/coffee_cauldron.json new file mode 100644 index 0000000..68a7312 --- /dev/null +++ b/src/main/generated/data/caffeinated/loot_table/blocks/coffee_cauldron.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:cauldron" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/main/generated/data/caffeinated/loot_table/blocks/flowering_coffee_shrub.json b/src/main/generated/data/caffeinated/loot_table/blocks/flowering_coffee_shrub.json new file mode 100644 index 0000000..6269abc --- /dev/null +++ b/src/main/generated/data/caffeinated/loot_table/blocks/flowering_coffee_shrub.json @@ -0,0 +1,49 @@ +{ + "type": "minecraft:block", + "functions": [ + { + "function": "minecraft:explosion_decay" + } + ], + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "block": "caffeinated:flowering_coffee_shrub", + "condition": "minecraft:block_state_property", + "properties": { + "age": "3", + "half": "lower" + } + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "caffeinated:coffee_berries" + } + ], + "functions": [ + { + "add": false, + "count": { + "type": "minecraft:uniform", + "max": 3.0, + "min": 1.0 + }, + "function": "minecraft:set_count" + }, + { + "enchantment": "minecraft:fortune", + "formula": "minecraft:uniform_bonus_count", + "function": "minecraft:apply_bonus", + "parameters": { + "bonusMultiplier": 1 + } + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/main/generated/data/caffeinated/loot_table/blocks/ground_coffee_block.json b/src/main/generated/data/caffeinated/loot_table/blocks/ground_coffee_block.json new file mode 100644 index 0000000..9f0f174 --- /dev/null +++ b/src/main/generated/data/caffeinated/loot_table/blocks/ground_coffee_block.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "caffeinated:ground_coffee_block" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/main/generated/data/caffeinated/loot_table/blocks/ground_coffee_cauldron.json b/src/main/generated/data/caffeinated/loot_table/blocks/ground_coffee_cauldron.json new file mode 100644 index 0000000..68a7312 --- /dev/null +++ b/src/main/generated/data/caffeinated/loot_table/blocks/ground_coffee_cauldron.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:cauldron" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/main/generated/data/caffeinated/loot_table/blocks/potted_coffee_shrub.json b/src/main/generated/data/caffeinated/loot_table/blocks/potted_coffee_shrub.json new file mode 100644 index 0000000..b4eee0c --- /dev/null +++ b/src/main/generated/data/caffeinated/loot_table/blocks/potted_coffee_shrub.json @@ -0,0 +1,35 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:flower_pot" + } + ], + "rolls": 1.0 + }, + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "caffeinated:coffee_berries" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/main/generated/data/caffeinated/recipe/brown_dye_from_ground_coffee.json b/src/main/generated/data/caffeinated/recipe/brown_dye_from_ground_coffee.json new file mode 100644 index 0000000..9c3d6e6 --- /dev/null +++ b/src/main/generated/data/caffeinated/recipe/brown_dye_from_ground_coffee.json @@ -0,0 +1,14 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "group": "brown_dye", + "ingredients": [ + { + "item": "caffeinated:ground_coffee" + } + ], + "result": { + "count": 1, + "id": "minecraft:brown_dye" + } +} \ No newline at end of file diff --git a/src/main/generated/data/caffeinated/recipe/coffee_bean_block.json b/src/main/generated/data/caffeinated/recipe/coffee_bean_block.json new file mode 100644 index 0000000..a6069dd --- /dev/null +++ b/src/main/generated/data/caffeinated/recipe/coffee_bean_block.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "caffeinated:coffee_beans" + } + }, + "pattern": [ + "##", + "##" + ], + "result": { + "count": 1, + "id": "caffeinated:coffee_bean_block" + } +} \ No newline at end of file diff --git a/src/main/generated/data/caffeinated/recipe/coffee_beans.json b/src/main/generated/data/caffeinated/recipe/coffee_beans.json new file mode 100644 index 0000000..bbb451e --- /dev/null +++ b/src/main/generated/data/caffeinated/recipe/coffee_beans.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:smelting", + "category": "misc", + "cookingtime": 200, + "experience": 0.3, + "ingredient": { + "item": "caffeinated:coffee_berries" + }, + "result": { + "id": "caffeinated:coffee_beans" + } +} \ No newline at end of file diff --git a/src/main/generated/data/caffeinated/recipe/coffee_beans_from_campfire_cooking.json b/src/main/generated/data/caffeinated/recipe/coffee_beans_from_campfire_cooking.json new file mode 100644 index 0000000..0e98d35 --- /dev/null +++ b/src/main/generated/data/caffeinated/recipe/coffee_beans_from_campfire_cooking.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:campfire_cooking", + "category": "food", + "cookingtime": 600, + "experience": 0.3, + "ingredient": { + "item": "caffeinated:coffee_berries" + }, + "result": { + "id": "caffeinated:coffee_beans" + } +} \ No newline at end of file diff --git a/src/main/generated/data/caffeinated/recipe/coffee_beans_from_smoking.json b/src/main/generated/data/caffeinated/recipe/coffee_beans_from_smoking.json new file mode 100644 index 0000000..3fb4e8a --- /dev/null +++ b/src/main/generated/data/caffeinated/recipe/coffee_beans_from_smoking.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:smoking", + "category": "food", + "cookingtime": 100, + "experience": 0.3, + "ingredient": { + "item": "caffeinated:coffee_berries" + }, + "result": { + "id": "caffeinated:coffee_beans" + } +} \ No newline at end of file diff --git a/src/main/generated/data/caffeinated/recipe/coffee_berries.json b/src/main/generated/data/caffeinated/recipe/coffee_berries.json new file mode 100644 index 0000000..1dd2f32 --- /dev/null +++ b/src/main/generated/data/caffeinated/recipe/coffee_berries.json @@ -0,0 +1,21 @@ +{ + "fabric:load_conditions": [ + { + "condition": "fabric:all_mods_loaded", + "values": [ + "farmersdelight" + ] + } + ], + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "item": "caffeinated:coffee_berry_crate" + } + ], + "result": { + "count": 9, + "id": "caffeinated:coffee_berries" + } +} \ No newline at end of file diff --git a/src/main/generated/data/caffeinated/recipe/coffee_berry_crate.json b/src/main/generated/data/caffeinated/recipe/coffee_berry_crate.json new file mode 100644 index 0000000..28adc52 --- /dev/null +++ b/src/main/generated/data/caffeinated/recipe/coffee_berry_crate.json @@ -0,0 +1,26 @@ +{ + "fabric:load_conditions": [ + { + "condition": "fabric:all_mods_loaded", + "values": [ + "farmersdelight" + ] + } + ], + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "#": { + "item": "caffeinated:coffee_berries" + } + }, + "pattern": [ + "###", + "###", + "###" + ], + "result": { + "count": 1, + "id": "caffeinated:coffee_berry_crate" + } +} \ No newline at end of file diff --git a/src/main/generated/data/caffeinated/recipe/coffee_bottle.json b/src/main/generated/data/caffeinated/recipe/coffee_bottle.json new file mode 100644 index 0000000..02f5a5e --- /dev/null +++ b/src/main/generated/data/caffeinated/recipe/coffee_bottle.json @@ -0,0 +1,14 @@ +{ + "type": "caffeinated:coffee_brewing", + "brewingtime": 600, + "experience": 1.0, + "ingredient": { + "item": "minecraft:potion" + }, + "reagent": { + "item": "caffeinated:ground_coffee" + }, + "result": { + "id": "caffeinated:coffee_bottle" + } +} \ No newline at end of file diff --git a/src/main/generated/data/caffeinated/recipe/ground_coffee_block.json b/src/main/generated/data/caffeinated/recipe/ground_coffee_block.json new file mode 100644 index 0000000..e1c31c2 --- /dev/null +++ b/src/main/generated/data/caffeinated/recipe/ground_coffee_block.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "caffeinated:ground_coffee" + } + }, + "pattern": [ + "##", + "##" + ], + "result": { + "count": 1, + "id": "caffeinated:ground_coffee_block" + } +} \ No newline at end of file diff --git a/src/main/generated/data/caffeinated/recipe/ground_coffee_from_coffee_beans.json b/src/main/generated/data/caffeinated/recipe/ground_coffee_from_coffee_beans.json new file mode 100644 index 0000000..02d497e --- /dev/null +++ b/src/main/generated/data/caffeinated/recipe/ground_coffee_from_coffee_beans.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "group": "ground_coffee", + "key": { + "#": { + "item": "caffeinated:coffee_beans" + } + }, + "pattern": [ + "###" + ], + "result": { + "count": 1, + "id": "caffeinated:ground_coffee" + } +} \ No newline at end of file diff --git a/src/main/generated/data/caffeinated/recipe/java_banner_pattern.json b/src/main/generated/data/caffeinated/recipe/java_banner_pattern.json new file mode 100644 index 0000000..866cbb8 --- /dev/null +++ b/src/main/generated/data/caffeinated/recipe/java_banner_pattern.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "item": "minecraft:paper" + }, + { + "tag": "caffeinated:black_coffee_bottles" + } + ], + "result": { + "count": 1, + "id": "caffeinated:java_banner_pattern" + } +} \ No newline at end of file diff --git a/src/main/generated/data/caffeinated/recipe/latte_coffee_bottle.json b/src/main/generated/data/caffeinated/recipe/latte_coffee_bottle.json new file mode 100644 index 0000000..c9ef5ee --- /dev/null +++ b/src/main/generated/data/caffeinated/recipe/latte_coffee_bottle.json @@ -0,0 +1,14 @@ +{ + "type": "caffeinated:coffee_brewing", + "brewingtime": 600, + "experience": 1.0, + "ingredient": { + "tag": "caffeinated:black_coffee_bottles" + }, + "reagent": { + "tag": "c:buckets/milk" + }, + "result": { + "id": "caffeinated:latte_coffee_bottle" + } +} \ No newline at end of file diff --git a/src/main/generated/data/caffeinated/recipe/tiramisu.json b/src/main/generated/data/caffeinated/recipe/tiramisu.json new file mode 100644 index 0000000..ca89f18 --- /dev/null +++ b/src/main/generated/data/caffeinated/recipe/tiramisu.json @@ -0,0 +1,26 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "group": "tiramisu", + "ingredients": [ + { + "tag": "caffeinated:black_coffee_bottles" + }, + { + "item": "minecraft:wheat" + }, + { + "item": "minecraft:sugar" + }, + { + "tag": "c:buckets/milk" + }, + { + "item": "minecraft:egg" + } + ], + "result": { + "count": 1, + "id": "caffeinated:tiramisu" + } +} \ No newline at end of file diff --git a/src/main/generated/data/caffeinated/recipe/tiramisu_from_slices.json b/src/main/generated/data/caffeinated/recipe/tiramisu_from_slices.json new file mode 100644 index 0000000..04e88a6 --- /dev/null +++ b/src/main/generated/data/caffeinated/recipe/tiramisu_from_slices.json @@ -0,0 +1,26 @@ +{ + "fabric:load_conditions": [ + { + "condition": "fabric:all_mods_loaded", + "values": [ + "farmersdelight" + ] + } + ], + "type": "minecraft:crafting_shaped", + "category": "misc", + "group": "tiramisu", + "key": { + "#": { + "item": "caffeinated:tiramisu_slice" + } + }, + "pattern": [ + "##", + "##" + ], + "result": { + "count": 1, + "id": "caffeinated:tiramisu" + } +} \ No newline at end of file diff --git a/src/main/java/net/chikorita_lover/caffeinated/Caffeinated.java b/src/main/java/net/chikorita_lover/caffeinated/Caffeinated.java index 8ee06ba..0e5d52d 100644 --- a/src/main/java/net/chikorita_lover/caffeinated/Caffeinated.java +++ b/src/main/java/net/chikorita_lover/caffeinated/Caffeinated.java @@ -1,19 +1,37 @@ package net.chikorita_lover.caffeinated; +import net.chikorita_lover.caffeinated.advancement.BrewCoffeeCriterion; +import net.chikorita_lover.caffeinated.entity.CivetEntity; +import net.chikorita_lover.caffeinated.recipe.CoffeeBrewingRecipe; import net.chikorita_lover.caffeinated.registry.*; +import net.chikorita_lover.caffeinated.util.LootModificationUtils; import net.fabricmc.api.ModInitializer; +import net.fabricmc.fabric.api.biome.v1.BiomeModifications; +import net.fabricmc.fabric.api.biome.v1.BiomeSelectors; import net.fabricmc.fabric.api.loot.v3.LootTableEvents; +import net.minecraft.entity.SpawnGroup; +import net.minecraft.entity.SpawnLocationTypes; +import net.minecraft.entity.SpawnRestriction; import net.minecraft.loot.LootPool; import net.minecraft.loot.LootTables; import net.minecraft.loot.entry.EmptyEntry; import net.minecraft.loot.entry.ItemEntry; +import net.minecraft.loot.function.SetCountLootFunction; +import net.minecraft.loot.provider.number.UniformLootNumberProvider; +import net.minecraft.recipe.RecipeSerializer; +import net.minecraft.registry.Registries; +import net.minecraft.registry.Registry; import net.minecraft.util.Identifier; +import net.minecraft.world.Heightmap; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class Caffeinated implements ModInitializer { public static final Logger LOGGER = LoggerFactory.getLogger("Caffeinated"); public static final String NAMESPACE = "caffeinated"; + public static final BrewCoffeeCriterion BREW_COFFEE_CRITERION = Registry.register(Registries.CRITERION, of("brew_coffee"), new BrewCoffeeCriterion()); + public static final RecipeSerializer COFFEE_BREWING_SERIALIZER = Registry.register(Registries.RECIPE_SERIALIZER, of("coffee_brewing"), new CoffeeBrewingRecipe.Serializer(CoffeeBrewingRecipe::new, 600) { + }); public static Identifier of(String id) { return Identifier.of(NAMESPACE, id); @@ -21,20 +39,33 @@ public static Identifier of(String id) { @Override public void onInitialize() { + CaffeinatedBlockEntityTypes.register(); CaffeinatedBlocks.register(); - CaffeinatedCauldronBehavior.register(); + CaffeinatedEntities.register(); + CaffeinatedItemGroups.register(); CaffeinatedItems.register(); CaffeinatedParticleTypes.register(); CaffeinatedPlacedFeatures.register(); + CaffeinatedRecipeTypes.register(); CaffeinatedSoundEvents.register(); CaffeinatedStats.register(); CaffeinatedStatusEffects.register(); CaffeinatedTradeOffers.register(); + SpawnRestriction.register(CaffeinatedEntities.CIVET, SpawnLocationTypes.ON_GROUND, Heightmap.Type.MOTION_BLOCKING, CivetEntity::canSpawn); + + BiomeModifications.addSpawn(BiomeSelectors.tag(CaffeinatedBiomeTags.SPAWNS_CIVETS), SpawnGroup.CREATURE, CaffeinatedEntities.CIVET, 4, 1, 2); + LootTableEvents.MODIFY.register((key, tableBuilder, source, registries) -> { if (key.equals(LootTables.JUNGLE_TEMPLE_CHEST)) { tableBuilder.pool(LootPool.builder().with(ItemEntry.builder(CaffeinatedItems.COFFEE_BERRIES)).with(EmptyEntry.builder())); } + if (key.equals(LootTables.SHIPWRECK_SUPPLY_CHEST)) { + LootModificationUtils.modifyPool(tableBuilder, 0, builder -> builder.with(ItemEntry.builder(CaffeinatedItems.COFFEE_BERRIES).weight(2).apply(SetCountLootFunction.builder(UniformLootNumberProvider.create(1.0F, 5.0F))))); + } + if (key.equals(LootTables.VILLAGE_SAVANNA_HOUSE_CHEST)) { + LootModificationUtils.modifyPool(tableBuilder, 0, builder -> builder.with(ItemEntry.builder(CaffeinatedItems.COFFEE_BERRIES).weight(5).apply(SetCountLootFunction.builder(UniformLootNumberProvider.create(1.0F, 7.0F))))); + } }); } } diff --git a/src/main/java/net/chikorita_lover/caffeinated/CaffeinatedDataGenerator.java b/src/main/java/net/chikorita_lover/caffeinated/CaffeinatedDataGenerator.java index f7bd789..a7de2fb 100644 --- a/src/main/java/net/chikorita_lover/caffeinated/CaffeinatedDataGenerator.java +++ b/src/main/java/net/chikorita_lover/caffeinated/CaffeinatedDataGenerator.java @@ -1,5 +1,6 @@ package net.chikorita_lover.caffeinated; +import net.chikorita_lover.caffeinated.data.CaffeinatedAdvancementProvider; import net.chikorita_lover.caffeinated.data.CaffeinatedLootTableProvider; import net.chikorita_lover.caffeinated.data.CaffeinatedModelProvider; import net.chikorita_lover.caffeinated.data.CaffeinatedRecipeProvider; @@ -10,6 +11,7 @@ public class CaffeinatedDataGenerator implements DataGeneratorEntrypoint { @Override public void onInitializeDataGenerator(FabricDataGenerator fabricDataGenerator) { FabricDataGenerator.Pack pack = fabricDataGenerator.createPack(); + pack.addProvider(CaffeinatedAdvancementProvider::new); pack.addProvider(CaffeinatedLootTableProvider::new); pack.addProvider(CaffeinatedModelProvider::new); pack.addProvider(CaffeinatedRecipeProvider::new); diff --git a/src/main/java/net/chikorita_lover/caffeinated/CaffeinatedEarlyRiser.java b/src/main/java/net/chikorita_lover/caffeinated/CaffeinatedEarlyRiser.java index 62be81c..0ae1910 100644 --- a/src/main/java/net/chikorita_lover/caffeinated/CaffeinatedEarlyRiser.java +++ b/src/main/java/net/chikorita_lover/caffeinated/CaffeinatedEarlyRiser.java @@ -1,7 +1,7 @@ -package com.chikoritalover.caffeinated; +package net.chikorita_lover.caffeinated; -import com.chikoritalover.caffeinated.registry.CaffeinatedItems; import com.chocohead.mm.api.ClassTinkerers; +import net.chikorita_lover.caffeinated.registry.CaffeinatedItems; import net.fabricmc.loader.api.FabricLoader; import net.fabricmc.loader.api.MappingResolver; import net.minecraft.item.ItemStack; diff --git a/src/main/java/net/chikorita_lover/caffeinated/advancement/BrewCoffeeCriterion.java b/src/main/java/net/chikorita_lover/caffeinated/advancement/BrewCoffeeCriterion.java index dcb7b5f..caf38b2 100644 --- a/src/main/java/net/chikorita_lover/caffeinated/advancement/BrewCoffeeCriterion.java +++ b/src/main/java/net/chikorita_lover/caffeinated/advancement/BrewCoffeeCriterion.java @@ -1,52 +1,37 @@ -package com.chikoritalover.caffeinated.advancement; +package net.chikorita_lover.caffeinated.advancement; -import com.chikoritalover.caffeinated.Caffeinated; -import com.google.gson.JsonObject; +import com.mojang.serialization.Codec; +import com.mojang.serialization.codecs.RecordCodecBuilder; +import net.chikorita_lover.caffeinated.Caffeinated; +import net.minecraft.advancement.AdvancementCriterion; import net.minecraft.advancement.criterion.AbstractCriterion; -import net.minecraft.advancement.criterion.AbstractCriterionConditions; import net.minecraft.item.ItemStack; -import net.minecraft.predicate.entity.AdvancementEntityPredicateDeserializer; -import net.minecraft.predicate.entity.AdvancementEntityPredicateSerializer; +import net.minecraft.predicate.entity.EntityPredicate; import net.minecraft.predicate.entity.LootContextPredicate; import net.minecraft.predicate.item.ItemPredicate; import net.minecraft.server.network.ServerPlayerEntity; -import net.minecraft.util.Identifier; -public class BrewCoffeeCriterion extends AbstractCriterion { - static final Identifier ID = new Identifier(Caffeinated.MODID, "brew_coffee"); - - @Override - protected Conditions conditionsFromJson(JsonObject obj, LootContextPredicate playerPredicate, AdvancementEntityPredicateDeserializer predicateDeserializer) { - ItemPredicate itemPredicate = ItemPredicate.fromJson(obj.get("item")); - return new Conditions(playerPredicate, itemPredicate); - } +import java.util.Optional; - @Override - public Identifier getId() { - return ID; +public class BrewCoffeeCriterion extends AbstractCriterion { + public Codec getConditionsCodec() { + return BrewCoffeeCriterion.Conditions.CODEC; } public void trigger(ServerPlayerEntity player, ItemStack stack) { - this.trigger(player, conditions -> conditions.matches(stack)); + this.trigger(player, (conditions) -> conditions.matches(stack)); } - public static class Conditions extends AbstractCriterionConditions { - private final ItemPredicate itemPredicate; + public record Conditions(Optional player, + ItemPredicate predicate) implements AbstractCriterion.Conditions { + public static final Codec CODEC = RecordCodecBuilder.create((instance) -> instance.group(EntityPredicate.LOOT_CONTEXT_PREDICATE_CODEC.optionalFieldOf("player").forGetter(BrewCoffeeCriterion.Conditions::player), ItemPredicate.CODEC.fieldOf("result").forGetter(Conditions::predicate)).apply(instance, Conditions::new)); - public Conditions(LootContextPredicate player, ItemPredicate item) { - super(ID, player); - this.itemPredicate = item; + public static AdvancementCriterion create(ItemPredicate.Builder builder) { + return Caffeinated.BREW_COFFEE_CRITERION.create(new BrewCoffeeCriterion.Conditions(Optional.empty(), builder.build())); } public boolean matches(ItemStack stack) { - return this.itemPredicate.test(stack); - } - - @Override - public JsonObject toJson(AdvancementEntityPredicateSerializer predicateSerializer) { - JsonObject jsonObject = super.toJson(predicateSerializer); - jsonObject.add("item", this.itemPredicate.toJson()); - return jsonObject; + return this.predicate.test(stack); } } } diff --git a/src/main/java/net/chikorita_lover/caffeinated/block/CauldronCampfireBlock.java b/src/main/java/net/chikorita_lover/caffeinated/block/CauldronCampfireBlock.java index 080d202..e0ebfc0 100644 --- a/src/main/java/net/chikorita_lover/caffeinated/block/CauldronCampfireBlock.java +++ b/src/main/java/net/chikorita_lover/caffeinated/block/CauldronCampfireBlock.java @@ -1,16 +1,20 @@ -package com.chikoritalover.caffeinated.block; +package net.chikorita_lover.caffeinated.block; -import com.chikoritalover.caffeinated.Caffeinated; -import com.chikoritalover.caffeinated.block.entity.CauldronCampfireBlockEntity; -import com.chikoritalover.caffeinated.registry.CaffeinatedBlockTags; -import com.chikoritalover.caffeinated.registry.CaffeinatedSoundEvents; -import com.chikoritalover.caffeinated.registry.CaffeinatedStats; import com.google.common.collect.Maps; -import net.fabricmc.fabric.api.tag.convention.v1.ConventionalItemTags; +import com.mojang.serialization.DataResult; +import com.mojang.serialization.MapCodec; +import com.mojang.serialization.codecs.RecordCodecBuilder; +import net.chikorita_lover.caffeinated.block.entity.CauldronCampfireBlockEntity; +import net.chikorita_lover.caffeinated.registry.CaffeinatedBlockEntityTypes; +import net.chikorita_lover.caffeinated.registry.CaffeinatedSoundEvents; +import net.chikorita_lover.caffeinated.registry.CaffeinatedStats; +import net.chikorita_lover.caffeinated.registry.tag.CaffeinatedBlockTags; +import net.fabricmc.fabric.api.tag.convention.v2.ConventionalItemTags; import net.minecraft.block.*; import net.minecraft.block.entity.BlockEntity; import net.minecraft.block.entity.BlockEntityTicker; import net.minecraft.block.entity.BlockEntityType; +import net.minecraft.component.type.PotionContentsComponent; import net.minecraft.entity.Entity; import net.minecraft.entity.ai.pathing.NavigationType; import net.minecraft.entity.player.PlayerEntity; @@ -22,10 +26,10 @@ import net.minecraft.item.ItemUsage; import net.minecraft.item.Items; import net.minecraft.loot.context.LootContextParameterSet; -import net.minecraft.particle.ParticleEffect; import net.minecraft.particle.ParticleTypes; -import net.minecraft.potion.PotionUtil; +import net.minecraft.particle.SimpleParticleType; import net.minecraft.potion.Potions; +import net.minecraft.registry.Registries; import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.sound.SoundCategory; import net.minecraft.sound.SoundEvent; @@ -35,10 +39,10 @@ import net.minecraft.state.property.BooleanProperty; import net.minecraft.state.property.DirectionProperty; import net.minecraft.state.property.Properties; -import net.minecraft.util.ActionResult; import net.minecraft.util.BlockMirror; import net.minecraft.util.BlockRotation; import net.minecraft.util.Hand; +import net.minecraft.util.ItemActionResult; import net.minecraft.util.function.BooleanBiFunction; import net.minecraft.util.hit.BlockHitResult; import net.minecraft.util.math.BlockPos; @@ -56,6 +60,7 @@ import java.util.List; import java.util.Map; +import java.util.Optional; public class CauldronCampfireBlock extends BlockWithEntity implements Waterloggable { public static final BooleanProperty FILLED = BooleanProperty.of("filled"); @@ -63,15 +68,17 @@ public class CauldronCampfireBlock extends BlockWithEntity implements Waterlogga public static final BooleanProperty WATERLOGGED = Properties.WATERLOGGED; public static final DirectionProperty FACING = Properties.HORIZONTAL_FACING; public static final Map CAMPFIRE_TO_CAULDRON_CAMPFIRE = Maps.newHashMap(); + protected static final MapCodec PARTICLE_TYPE_CODEC = Registries.PARTICLE_TYPE.getCodec().comapFlatMap(particleType -> particleType instanceof SimpleParticleType simpleParticleType ? DataResult.success(simpleParticleType) : DataResult.error(() -> "Not a SimpleParticleType: " + particleType), particleType -> particleType).fieldOf("particle_options"); + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec((instance) -> instance.group(Block.CODEC.fieldOf("base_block").forGetter((block) -> block.baseBlock), PARTICLE_TYPE_CODEC.forGetter((block) -> block.particle), createSettingsCodec()).apply(instance, CauldronCampfireBlock::new)); protected static final VoxelShape COLLISION_SHAPE = Block.createCuboidShape(0.5, 0.0, 0.5, 15.5, 16.0, 15.5); protected static final VoxelShape OUTLINE_SHAPE = VoxelShapes.combineAndSimplify(Block.createCuboidShape(0.0, 0.0, 0.0, 16.0, 7.0, 16.0), Block.createCuboidShape(2.0, 5.0, 2.0, 14.0, 16.0, 14.0), BooleanBiFunction.OR); private final Block baseBlock; - private final ParticleEffect particleEffect; + private final SimpleParticleType particle; - public CauldronCampfireBlock(Block baseBlock, ParticleEffect particleEffect, Settings settings) { + public CauldronCampfireBlock(Block baseBlock, SimpleParticleType particle, Settings settings) { super(settings); this.baseBlock = baseBlock; - this.particleEffect = particleEffect; + this.particle = particle; CAMPFIRE_TO_CAULDRON_CAMPFIRE.put(baseBlock, this); this.setDefaultState(this.getStateManager().getDefaultState().with(FILLED, false).with(LIT, true).with(WATERLOGGED, false).with(FACING, Direction.NORTH)); } @@ -92,7 +99,6 @@ public static void extinguish(@Nullable Entity entity, WorldAccess world, BlockP CampfireBlock.spawnSmokeParticle((World) world, pos, false, true); } } - world.emitGameEvent(entity, GameEvent.BLOCK_CHANGE, pos); } @@ -110,17 +116,21 @@ public static boolean canBeLit(BlockState state) { } @Override - public ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockHitResult hit) { + protected MapCodec getCodec() { + return CODEC; + } + + @Override + public ItemActionResult onUseWithItem(ItemStack stack, BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockHitResult hit) { BlockEntity blockEntity = world.getBlockEntity(pos); if (blockEntity instanceof CauldronCampfireBlockEntity cauldronCampfire) { - ItemStack stack = player.getStackInHand(hand); Item item = stack.getItem(); Item item2 = cauldronCampfire.getStack(0).getItem(); boolean bl = !state.get(FILLED) && cauldronCampfire.isBaseIngredient(stack); boolean bl2 = !cauldronCampfire.hasReagent() && cauldronCampfire.canBrewTogether(cauldronCampfire.getStack(0), stack); boolean bl3 = state.get(FILLED) && (!item2.hasRecipeRemainder() || stack.isOf(item2.getRecipeRemainder())); if (!bl && !bl2 && !bl3) { - return ActionResult.PASS; + return ItemActionResult.PASS_TO_DEFAULT_BLOCK_INTERACTION; } if (!world.isClient()) { if (bl) { @@ -134,11 +144,11 @@ public ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEnt player.setStackInHand(hand, ItemUsage.exchangeStack(stack, player, item.getRecipeRemainder(stack))); world.emitGameEvent(null, GameEvent.BLOCK_CHANGE, pos); } else { - ItemStack itemStack = item2.getDefaultStack(); - if (stack.isOf(item2.getRecipeRemainder())) { - player.setStackInHand(hand, ItemUsage.exchangeStack(stack, player, itemStack)); + ItemStack stack2 = item2.getDefaultStack(); + if (stack2.isOf(item2.getRecipeRemainder())) { + player.setStackInHand(hand, ItemUsage.exchangeStack(stack, player, stack2)); } else { - player.giveItemStack(itemStack); + player.giveItemStack(stack2); } cauldronCampfire.clear(); cauldronCampfire.dropExperienceForRecipesUsed((ServerPlayerEntity) player); @@ -148,9 +158,9 @@ public ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEnt player.incrementStat(Stats.USED.getOrCreateStat(item)); player.incrementStat(CaffeinatedStats.INTERACT_WITH_CAULDRON_CAMPFIRE); } - return ActionResult.success(world.isClient()); + return ItemActionResult.success(world.isClient()); } else { - return ActionResult.PASS; + return ItemActionResult.PASS_TO_DEFAULT_BLOCK_INTERACTION; } } @@ -159,7 +169,6 @@ public BlockState getStateForNeighborUpdate(BlockState state, Direction directio if (state.get(WATERLOGGED)) { world.scheduleFluidTick(pos, Fluids.WATER, Fluids.WATER.getTickRate(world)); } - return super.getStateForNeighborUpdate(state, direction, neighborState, world, pos, neighborPos); } @@ -175,14 +184,10 @@ public VoxelShape getOutlineShape(BlockState state, BlockView world, BlockPos po @Override public List getDroppedStacks(BlockState state, LootContextParameterSet.Builder builder) { - List stacks = super.getDroppedStacks(state, builder); - for (ItemStack stack : Blocks.CAULDRON.getDroppedStacks(Blocks.CAULDRON.getDefaultState(), builder)) { - stacks.add(stack); - } - for (ItemStack stack : baseBlock.getDroppedStacks(getBaseBlockState(state), builder)) { - stacks.add(stack); - } - return stacks; + List droppedStacks = super.getDroppedStacks(state, builder); + droppedStacks.addAll(Blocks.CAULDRON.getDefaultState().getDroppedStacks(builder)); + droppedStacks.addAll(this.baseBlock.getStateWithProperties(state).getDroppedStacks(builder)); + return droppedStacks; } @Override @@ -199,7 +204,7 @@ public void randomDisplayTick(BlockState state, World world, BlockPos pos, Rando world.playSoundAtBlockCenter(pos, SoundEvents.BLOCK_CAMPFIRE_CRACKLE, SoundCategory.BLOCKS, 0.5F + random.nextFloat(), random.nextFloat() * 0.7F + 0.6F, false); } float f = random.nextFloat() * MathHelper.PI * 2.0F; - world.addParticle(this.particleEffect, pos.getX() + 0.5 + MathHelper.sin(f) * 0.45, pos.getY() + random.nextBetween(6, 8) / 16.0, pos.getZ() + 0.5 + MathHelper.cos(f) * 0.45, 0.0, 0.0, 0.0); + world.addParticle(this.particle, pos.getX() + 0.5 + MathHelper.sin(f) * 0.45, pos.getY() + random.nextBetween(6, 8) / 16.0, pos.getZ() + 0.5 + MathHelper.cos(f) * 0.45, 0.0, 0.0, 0.0); } @Override @@ -221,9 +226,9 @@ public boolean tryFillWithFluid(WorldAccess world, BlockPos pos, BlockState stat @Override public void precipitationTick(BlockState state, World world, BlockPos pos, Biome.Precipitation precipitation) { if ((precipitation == Biome.Precipitation.RAIN || precipitation == Biome.Precipitation.SNOW) && world.getRandom().nextFloat() < 0.05F) { - BlockEntity blockEntity = world.getBlockEntity(pos); - if (blockEntity instanceof CauldronCampfireBlockEntity cauldronCampfire && !state.get(FILLED)) { - cauldronCampfire.addBaseIngredient(null, PotionUtil.setPotion(Items.POTION.getDefaultStack(), Potions.WATER)); + Optional blockEntity = world.getBlockEntity(pos, CaffeinatedBlockEntityTypes.CAULDRON_CAMPFIRE); + if (blockEntity.isPresent() && !state.get(FILLED)) { + blockEntity.get().addBaseIngredient(null, PotionContentsComponent.createStack(Items.POTION, Potions.WATER)); } world.emitGameEvent(null, GameEvent.BLOCK_CHANGE, pos); } @@ -231,9 +236,9 @@ public void precipitationTick(BlockState state, World world, BlockPos pos, Biome @Override public void onProjectileHit(World world, BlockState state, BlockHitResult hit, ProjectileEntity projectile) { - BlockPos blockPos = hit.getBlockPos(); - if (!world.isClient() && projectile.isOnFire() && projectile.canModifyAt(world, blockPos) && !state.get(LIT) && !state.get(WATERLOGGED)) { - world.setBlockState(blockPos, state.with(Properties.LIT, true), 11); + BlockPos pos = hit.getBlockPos(); + if (!world.isClient() && projectile.isOnFire() && projectile.canModifyAt(world, pos) && !state.get(LIT) && !state.get(WATERLOGGED)) { + world.setBlockState(pos, state.with(Properties.LIT, true), Block.NOTIFY_ALL_AND_REDRAW); } } @@ -266,21 +271,13 @@ public BlockEntity createBlockEntity(BlockPos pos, BlockState state) { @Nullable public BlockEntityTicker getTicker(World world, BlockState state, BlockEntityType type) { if (state.get(LIT)) { - return checkType(type, Caffeinated.CAULDRON_CAMPFIRE, world.isClient() ? CauldronCampfireBlockEntity::clientTick : CauldronCampfireBlockEntity::litServerTick); + return validateTicker(type, CaffeinatedBlockEntityTypes.CAULDRON_CAMPFIRE, world.isClient() ? CauldronCampfireBlockEntity::clientTick : CauldronCampfireBlockEntity::litServerTick); } return null; } @Override - public boolean canPathfindThrough(BlockState state, BlockView world, BlockPos pos, NavigationType type) { + protected boolean canPathfindThrough(BlockState state, NavigationType type) { return false; } - - private BlockState getBaseBlockState(BlockState state) { - if (this.baseBlock instanceof CampfireBlock campfireBlock) { - return campfireBlock.getDefaultState().with(FACING, state.get(FACING)).with(LIT, state.get(LIT)).with(WATERLOGGED, state.get(WATERLOGGED)); - } else { - return this.baseBlock.getDefaultState(); - } - } } diff --git a/src/main/java/net/chikorita_lover/caffeinated/block/CoffeeCauldronBlock.java b/src/main/java/net/chikorita_lover/caffeinated/block/CoffeeCauldronBlock.java index 3663080..5bf1f69 100644 --- a/src/main/java/net/chikorita_lover/caffeinated/block/CoffeeCauldronBlock.java +++ b/src/main/java/net/chikorita_lover/caffeinated/block/CoffeeCauldronBlock.java @@ -1,65 +1,20 @@ package net.chikorita_lover.caffeinated.block; -import net.chikorita_lover.caffeinated.registry.tag.CaffeinatedBlockTags; -import net.chikorita_lover.caffeinated.registry.CaffeinatedParticleTypes; -import net.chikorita_lover.caffeinated.registry.CaffeinatedSoundEvents; -import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.block.Blocks; import net.minecraft.block.LeveledCauldronBlock; import net.minecraft.block.cauldron.CauldronBehavior; import net.minecraft.item.ItemStack; -import net.minecraft.particle.ParticleEffect; -import net.minecraft.sound.SoundCategory; -import net.minecraft.state.StateManager; -import net.minecraft.state.property.BooleanProperty; -import net.minecraft.state.property.Properties; import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.random.Random; -import net.minecraft.world.World; import net.minecraft.world.WorldView; public class CoffeeCauldronBlock extends LeveledCauldronBlock { - public static final BooleanProperty REWARD_EXPERIENCE = BooleanProperty.of("reward_experience"); - - public CoffeeCauldronBlock(CauldronBehavior.CauldronBehaviorMap behaviorMap, Settings settings) { - super(null, behaviorMap, settings); - this.setDefaultState(this.stateManager.getDefaultState().with(REWARD_EXPERIENCE, false)); - } - - public static boolean isLitFireInRange(World world, BlockPos pos) { - BlockState state = world.getBlockState(pos.down()); - return state.isIn(CaffeinatedBlockTags.LIT_FIRES) && (!state.contains(Properties.LIT) || state.get(Properties.LIT)); + public CoffeeCauldronBlock(Settings settings) { + super(null, CauldronBehavior.WATER_CAULDRON_BEHAVIOR, settings); } @Override public ItemStack getPickStack(WorldView world, BlockPos pos, BlockState state) { return new ItemStack(Blocks.CAULDRON); } - - @Override - public void randomDisplayTick(BlockState state, World world, BlockPos pos, Random random) { - if (isLitFireInRange(world, pos)) { - int level = state.get(LEVEL); - - double d = pos.getX() + random.nextDouble() * 0.5 + 0.25; - double e = pos.getY() + 0.375 + level * 0.1875; - double f = pos.getZ() + random.nextDouble() * 0.5 + 0.25; - if (random.nextDouble() < 0.15) { - world.playSound(d, e, f, CaffeinatedSoundEvents.BLOCK_CAULDRON_CAMPFIRE_BUBBLE, SoundCategory.BLOCKS, 0.2F, 2.5F - level * 0.5F, true); - } - - world.addParticle(getPopParticleEffect(), d, e, f, 0.0, 0.0, 0.0); - } - } - - @Override - protected void appendProperties(StateManager.Builder builder) { - super.appendProperties(builder); - builder.add(REWARD_EXPERIENCE); - } - - public ParticleEffect getPopParticleEffect() { - return CaffeinatedParticleTypes.COFFEE_POP; - } } diff --git a/src/main/java/net/chikorita_lover/caffeinated/block/GroundCoffeeCauldronBlock.java b/src/main/java/net/chikorita_lover/caffeinated/block/GroundCoffeeCauldronBlock.java deleted file mode 100644 index 61eb9d4..0000000 --- a/src/main/java/net/chikorita_lover/caffeinated/block/GroundCoffeeCauldronBlock.java +++ /dev/null @@ -1,50 +0,0 @@ -package net.chikorita_lover.caffeinated.block; - -import net.chikorita_lover.caffeinated.registry.CaffeinatedBlocks; -import net.chikorita_lover.caffeinated.registry.CaffeinatedCauldronBehavior; -import net.chikorita_lover.caffeinated.registry.CaffeinatedSoundEvents; -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.particle.ParticleEffect; -import net.minecraft.particle.ParticleTypes; -import net.minecraft.server.world.ServerWorld; -import net.minecraft.sound.SoundCategory; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.random.Random; -import net.minecraft.world.World; -import net.minecraft.world.event.GameEvent; - -public class GroundCoffeeCauldronBlock extends CoffeeCauldronBlock { - public GroundCoffeeCauldronBlock(Settings settings) { - super(CaffeinatedCauldronBehavior.GROUND_COFFEE_CAULDRON_BEHAVIOR, settings); - } - - @Override - public ParticleEffect getPopParticleEffect() { - return ParticleTypes.BUBBLE_POP; - } - - @Override - public void onBlockAdded(BlockState state, World world, BlockPos pos, BlockState oldState, boolean notify) { - if (isLitFireInRange(world, pos)) { - world.scheduleBlockTick(pos, CaffeinatedBlocks.GROUND_COFFEE_CAULDRON, 200); - } - } - - @Override - public void neighborUpdate(BlockState state, World world, BlockPos pos, Block sourceBlock, BlockPos sourcePos, boolean notify) { - if (isLitFireInRange(world, pos)) { - world.scheduleBlockTick(pos, CaffeinatedBlocks.GROUND_COFFEE_CAULDRON, 200); - } - } - - @Override - public void scheduledTick(BlockState state, ServerWorld world, BlockPos pos, Random random) { - if (isLitFireInRange(world, pos)) { - BlockState blockState = CaffeinatedBlocks.COFFEE_CAULDRON.getStateWithProperties(state).with(CoffeeCauldronBlock.REWARD_EXPERIENCE, true); - world.setBlockState(pos, blockState); - world.emitGameEvent(GameEvent.BLOCK_CHANGE, pos, GameEvent.Emitter.of(blockState)); - world.playSound(null, pos, CaffeinatedSoundEvents.BLOCK_CAULDRON_CAMPFIRE_BREW, SoundCategory.BLOCKS, 1.0F, 1.0F); - } - } -} diff --git a/src/main/java/net/chikorita_lover/caffeinated/block/TiramisuBlock.java b/src/main/java/net/chikorita_lover/caffeinated/block/TiramisuBlock.java index 0ec03f4..3d0c680 100644 --- a/src/main/java/net/chikorita_lover/caffeinated/block/TiramisuBlock.java +++ b/src/main/java/net/chikorita_lover/caffeinated/block/TiramisuBlock.java @@ -1,20 +1,17 @@ -package com.chikoritalover.caffeinated.block; +package net.chikorita_lover.caffeinated.block; -import com.chikoritalover.caffeinated.registry.CaffeinatedFoodComponents; -import com.chikoritalover.caffeinated.registry.CaffeinatedStats; -import com.chikoritalover.caffeinated.registry.CaffeinatedStatusEffects; +import net.chikorita_lover.caffeinated.registry.CaffeinatedFoodComponents; +import net.chikorita_lover.caffeinated.registry.CaffeinatedStats; +import net.chikorita_lover.caffeinated.registry.CaffeinatedStatusEffects; import net.minecraft.block.*; +import net.minecraft.component.type.FoodComponent; import net.minecraft.entity.ai.pathing.NavigationType; import net.minecraft.entity.effect.StatusEffectInstance; import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.FoodComponent; -import net.minecraft.item.ItemStack; import net.minecraft.sound.SoundEvents; -import net.minecraft.stat.Stats; import net.minecraft.state.StateManager; import net.minecraft.state.property.IntProperty; import net.minecraft.util.ActionResult; -import net.minecraft.util.Hand; import net.minecraft.util.hit.BlockHitResult; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Direction; @@ -35,27 +32,6 @@ public TiramisuBlock(AbstractBlock.Settings settings) { this.setDefaultState(this.stateManager.getDefaultState().with(SLICES, 4)); } - @Override - public VoxelShape getOutlineShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context) { - VoxelShape[] voxelShapes = new VoxelShape[state.get(SLICES) - 1]; - System.arraycopy(SLICE_TO_SHAPE, 1, voxelShapes, 0, state.get(SLICES) - 1); - return VoxelShapes.union(SLICE_TO_SHAPE[0], voxelShapes); - } - - @Override - public ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockHitResult hit) { - ItemStack itemStack = player.getStackInHand(hand); - if (world.isClient) { - if (tryEat(world, pos, state, player).isAccepted()) { - return ActionResult.SUCCESS; - } - if (itemStack.isEmpty()) { - return ActionResult.CONSUME; - } - } - return tryEat(world, pos, state, player); - } - protected static ActionResult tryEat(WorldAccess world, BlockPos pos, BlockState state, PlayerEntity player) { if (!player.canConsume(false)) { return ActionResult.PASS; @@ -63,7 +39,7 @@ protected static ActionResult tryEat(WorldAccess world, BlockPos pos, BlockState player.incrementStat(CaffeinatedStats.EAT_TIRAMISU_SLICE); player.playSound(SoundEvents.ENTITY_GENERIC_EAT, 1.0F, 1.0F); FoodComponent food = CaffeinatedFoodComponents.TIRAMISU_SLICE; - player.getHungerManager().add(food.getHunger(), food.getHunger() * food.getSaturationModifier() * 2); + player.getHungerManager().add(food.nutrition(), food.nutrition() * food.saturation() * 2); player.addStatusEffect(new StatusEffectInstance(CaffeinatedStatusEffects.CAFFEINE, 600, 1)); int i = state.get(SLICES); world.emitGameEvent(player, GameEvent.EAT, pos); @@ -77,6 +53,27 @@ protected static ActionResult tryEat(WorldAccess world, BlockPos pos, BlockState } } + public static int getComparatorOutput(int bites) { + return bites * 4 - 1; + } + + @Override + public VoxelShape getOutlineShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context) { + VoxelShape[] voxelShapes = new VoxelShape[state.get(SLICES) - 1]; + System.arraycopy(SLICE_TO_SHAPE, 1, voxelShapes, 0, state.get(SLICES) - 1); + return VoxelShapes.union(SLICE_TO_SHAPE[0], voxelShapes); + } + + @Override + public ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, BlockHitResult hit) { + if (world.isClient()) { + if (tryEat(world, pos, state, player).isAccepted()) { + return ActionResult.SUCCESS; + } + } + return tryEat(world, pos, state, player); + } + @Override public BlockState getStateForNeighborUpdate(BlockState state, Direction direction, BlockState neighborState, WorldAccess world, BlockPos pos, BlockPos neighborPos) { return direction == Direction.DOWN && !state.canPlaceAt(world, pos) ? Blocks.AIR.getDefaultState() : super.getStateForNeighborUpdate(state, direction, neighborState, world, pos, neighborPos); @@ -97,17 +94,13 @@ public int getComparatorOutput(BlockState state, World world, BlockPos pos) { return getComparatorOutput(state.get(SLICES)); } - public static int getComparatorOutput(int bites) { - return bites * 4 - 1; - } - @Override public boolean hasComparatorOutput(BlockState state) { return true; } @Override - public boolean canPathfindThrough(BlockState state, BlockView world, BlockPos pos, NavigationType type) { + protected boolean canPathfindThrough(BlockState state, NavigationType type) { return false; } } diff --git a/src/main/java/net/chikorita_lover/caffeinated/block/entity/CauldronCampfireBlockEntity.java b/src/main/java/net/chikorita_lover/caffeinated/block/entity/CauldronCampfireBlockEntity.java index dd4a8fb..1c9b5ea 100644 --- a/src/main/java/net/chikorita_lover/caffeinated/block/entity/CauldronCampfireBlockEntity.java +++ b/src/main/java/net/chikorita_lover/caffeinated/block/entity/CauldronCampfireBlockEntity.java @@ -1,33 +1,33 @@ -package com.chikoritalover.caffeinated.block.entity; - -import com.chikoritalover.caffeinated.Caffeinated; -import com.chikoritalover.caffeinated.block.CauldronCampfireBlock; -import com.chikoritalover.caffeinated.recipe.CoffeeBrewingRecipe; -import com.chikoritalover.caffeinated.registry.CaffeinatedItems; -import com.chikoritalover.caffeinated.registry.CaffeinatedSoundEvents; +package net.chikorita_lover.caffeinated.block.entity; + +import net.chikorita_lover.caffeinated.Caffeinated; +import net.chikorita_lover.caffeinated.block.CauldronCampfireBlock; +import net.chikorita_lover.caffeinated.recipe.CoffeeBrewingRecipe; +import net.chikorita_lover.caffeinated.recipe.CoffeeBrewingRecipeInput; +import net.chikorita_lover.caffeinated.registry.CaffeinatedBlockEntityTypes; +import net.chikorita_lover.caffeinated.registry.CaffeinatedRecipeTypes; +import net.chikorita_lover.caffeinated.registry.CaffeinatedSoundEvents; import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.block.entity.BlockEntity; -import net.minecraft.client.color.world.BiomeColors; +import net.minecraft.component.DataComponentTypes; +import net.minecraft.component.type.PotionContentsComponent; import net.minecraft.entity.Entity; import net.minecraft.entity.ExperienceOrbEntity; import net.minecraft.inventory.Inventories; -import net.minecraft.inventory.Inventory; -import net.minecraft.inventory.SimpleInventory; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; import net.minecraft.nbt.NbtCompound; import net.minecraft.nbt.NbtElement; import net.minecraft.nbt.NbtList; import net.minecraft.nbt.NbtString; -import net.minecraft.network.packet.Packet; import net.minecraft.network.packet.s2c.play.BlockEntityUpdateS2CPacket; import net.minecraft.particle.ParticleTypes; -import net.minecraft.potion.PotionUtil; import net.minecraft.potion.Potions; -import net.minecraft.recipe.Recipe; +import net.minecraft.recipe.RecipeEntry; import net.minecraft.recipe.RecipeManager; import net.minecraft.recipe.RecipeUnlocker; +import net.minecraft.registry.RegistryWrapper; import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.server.world.ServerWorld; import net.minecraft.sound.SoundCategory; @@ -45,30 +45,30 @@ import java.util.Optional; public class CauldronCampfireBlockEntity extends BlockEntity implements RecipeUnlocker { - private DefaultedList inventory = DefaultedList.ofSize(2, ItemStack.EMPTY); - int brewingTime; - int brewingTimeTotal; + private final DefaultedList inventory = DefaultedList.ofSize(2, ItemStack.EMPTY); private final ArrayList recipesUsed = new ArrayList<>(); - private final RecipeManager.MatchGetter matchGetter = RecipeManager.createCachedMatchGetter(Caffeinated.COFFEE_BREWING); + private final RecipeManager.MatchGetter matchGetter = RecipeManager.createCachedMatchGetter(CaffeinatedRecipeTypes.COFFEE_BREWING); + private int brewingTime; + private int brewingTimeTotal; public CauldronCampfireBlockEntity(BlockPos pos, BlockState state) { - super(Caffeinated.CAULDRON_CAMPFIRE, pos, state); + super(CaffeinatedBlockEntityTypes.CAULDRON_CAMPFIRE, pos, state); this.brewingTime = 0; this.brewingTimeTotal = 600; } public static void litServerTick(World world, BlockPos pos, BlockState state, CauldronCampfireBlockEntity cauldronCampfire) { - ItemStack stack = cauldronCampfire.getStack(0); - if (state.get(CauldronCampfireBlock.FILLED) && cauldronCampfire.canBrewTogether(stack, cauldronCampfire.getStack(1))) { + ItemStack inputStack = cauldronCampfire.getStack(0); + if (state.get(CauldronCampfireBlock.FILLED) && cauldronCampfire.canBrewTogether(inputStack, cauldronCampfire.getStack(1))) { cauldronCampfire.brewingTime++; if (cauldronCampfire.brewingTime >= cauldronCampfire.brewingTimeTotal) { - Optional optional; - SimpleInventory inventory; + Optional> optional; + CoffeeBrewingRecipeInput recipeInput; cauldronCampfire.brewingTime = 0; - ItemStack itemStack = (optional = cauldronCampfire.matchGetter.getFirstMatch(inventory = new SimpleInventory(stack, cauldronCampfire.getStack(1)), world)).map(recipe -> recipe.craft(inventory, world.getRegistryManager())).orElse(stack); + ItemStack outputStack = (optional = cauldronCampfire.matchGetter.getFirstMatch(recipeInput = new CoffeeBrewingRecipeInput(inputStack, cauldronCampfire.getStack(1)), world)).map(recipe -> recipe.value().craft(recipeInput, world.getRegistryManager())).orElse(inputStack); cauldronCampfire.clear(); - cauldronCampfire.setStack(0, itemStack); - optional.ifPresent(recipe -> cauldronCampfire.recipesUsed.add(recipe.getId())); + cauldronCampfire.setStack(0, outputStack); + optional.ifPresent(recipe -> cauldronCampfire.recipesUsed.add(recipe.id())); world.playSound(null, pos, CaffeinatedSoundEvents.BLOCK_CAULDRON_CAMPFIRE_BREW, SoundCategory.BLOCKS, 1.0F, 1.0F); world.updateListeners(pos, state, state, Block.NOTIFY_ALL); world.emitGameEvent(GameEvent.BLOCK_CHANGE, pos, GameEvent.Emitter.of(state)); @@ -84,37 +84,52 @@ public static void clientTick(World world, BlockPos pos, BlockState state, Cauld CauldronCampfireBlock.spawnSmokeParticle(world, pos, false); } } - if (state.get(CauldronCampfireBlock.FILLED)) { - boolean bl = cauldronCampfire.hasReagent(); - if (bl) { + boolean hasReagent = cauldronCampfire.hasReagent(); + if (hasReagent) { float f = random.nextFloat() * MathHelper.PI * 2.0F; world.addParticle(ParticleTypes.SMOKE, pos.getX() + 0.5 + MathHelper.sin(f) * 0.45, pos.getY() + random.nextBetween(6, 8) / 16.0, pos.getZ() + 0.5 + MathHelper.cos(f) * 0.45, 0.0, 5.0E-4, 0.0); } - if (random.nextInt(50) == 0) { - world.playSoundAtBlockCenter(pos, CaffeinatedSoundEvents.BLOCK_CAULDRON_CAMPFIRE_BUBBLE, SoundCategory.BLOCKS, bl ? 0.2F : 0.1F, bl ? 1.0F : 2.0F, false); + world.playSoundAtBlockCenter(pos, CaffeinatedSoundEvents.BLOCK_CAULDRON_CAMPFIRE_BUBBLE, SoundCategory.BLOCKS, hasReagent ? 0.2F : 0.1F, hasReagent ? 1.0F : 2.0F, false); } } } + private static void dropExperience(ServerWorld world, Vec3d pos, float experience) { + int i = MathHelper.floor(experience); + float f = MathHelper.fractionalPart(experience); + if (Math.random() < f) { + i++; + } + ExperienceOrbEntity.spawn(world, pos, i); + } + + private static boolean isOfWaterBottle(ItemStack stack) { + if (stack.isOf(Items.POTION)) { + PotionContentsComponent component = stack.get(DataComponentTypes.POTION_CONTENTS); + return component != null && component.potion().isPresent() && component.potion().get() == Potions.WATER; + } + return false; + } + @Override - public void readNbt(NbtCompound nbt) { - super.readNbt(nbt); + public void readNbt(NbtCompound nbt, RegistryWrapper.WrapperLookup registryLookup) { + super.readNbt(nbt, registryLookup); this.inventory.clear(); - Inventories.readNbt(nbt, this.inventory); + Inventories.readNbt(nbt, this.inventory, registryLookup); this.brewingTime = nbt.getInt("BrewingTime"); this.brewingTimeTotal = nbt.getInt("BrewingTimeTotal"); NbtList nbtList = nbt.getList("RecipesUsed", NbtElement.STRING_TYPE); for (NbtElement nbtElement : nbtList) { - this.recipesUsed.add(new Identifier(nbtElement.asString())); + this.recipesUsed.add(Identifier.of(nbtElement.asString())); } } @Override - protected void writeNbt(NbtCompound nbt) { - super.writeNbt(nbt); - Inventories.writeNbt(nbt, this.inventory, true); + protected void writeNbt(NbtCompound nbt, RegistryWrapper.WrapperLookup registryLookup) { + super.writeNbt(nbt, registryLookup); + Inventories.writeNbt(nbt, this.inventory, registryLookup); nbt.putInt("BrewingTime", this.brewingTime); nbt.putInt("BrewingTimeTotal", this.brewingTimeTotal); NbtList nbtList = new NbtList(); @@ -123,19 +138,19 @@ protected void writeNbt(NbtCompound nbt) { } @Override - public Packet toUpdatePacket() { + public BlockEntityUpdateS2CPacket toUpdatePacket() { return BlockEntityUpdateS2CPacket.create(this); } @Override - public NbtCompound toInitialChunkDataNbt() { + public NbtCompound toInitialChunkDataNbt(RegistryWrapper.WrapperLookup registryLookup) { NbtCompound nbtCompound = new NbtCompound(); - Inventories.writeNbt(nbtCompound, this.inventory, true); + Inventories.writeNbt(nbtCompound, this.inventory, registryLookup); return nbtCompound; } - public Optional getRecipeFor(ItemStack... stacks) { - return this.matchGetter.getFirstMatch(new SimpleInventory(stacks), this.world); + public Optional> getRecipeFor(ItemStack input, ItemStack reagent) { + return this.matchGetter.getFirstMatch(new CoffeeBrewingRecipeInput(input, reagent), this.world); } public ItemStack getStack(int slot) { @@ -164,9 +179,9 @@ public void addBaseIngredient(@Nullable Entity user, ItemStack stack) { public void addReagent(@Nullable Entity user, ItemStack stack) { this.setStack(1, stack.copyWithCount(1)); - Optional optional; + Optional> optional; if ((optional = getRecipeFor(this.getStack(0), stack)).isPresent()) { - this.brewingTimeTotal = optional.get().getBrewTime(); + this.brewingTimeTotal = optional.get().value().getBrewTime(); } this.getWorld().emitGameEvent(GameEvent.BLOCK_CHANGE, this.getPos(), GameEvent.Emitter.of(user, this.getCachedState())); this.updateListeners(); @@ -174,29 +189,19 @@ public void addReagent(@Nullable Entity user, ItemStack stack) { public boolean isBaseIngredient(ItemStack stack) { if (stack.isOf(Items.POTION)) { - return PotionUtil.getPotion(stack) == Potions.WATER; + return isOfWaterBottle(stack); } - return this.getWorld().getRecipeManager().listAllOfType(Caffeinated.COFFEE_BREWING).stream().anyMatch(coffeeBrewingRecipe -> coffeeBrewingRecipe.getIngredients().get(0).test(stack)); + return this.getWorld().getRecipeManager().listAllOfType(CaffeinatedRecipeTypes.COFFEE_BREWING).stream().anyMatch(coffeeBrewingRecipe -> coffeeBrewingRecipe.value().getIngredients().get(0).test(stack)); } - public boolean canBrewTogether(ItemStack stack, ItemStack stack2) { - return getRecipeFor(stack, stack2).isPresent() && (!stack.isOf(Items.POTION) || PotionUtil.getPotion(stack) == Potions.WATER); + public boolean canBrewTogether(ItemStack input, ItemStack reagent) { + return this.getRecipeFor(input, reagent).isPresent() && (!input.isOf(Items.POTION) || isOfWaterBottle(input)); } public boolean hasReagent() { return !this.getStack(1).isEmpty(); } - public int getColor() { - if (this.getStack(0).isOf(Items.POTION)) { - return BiomeColors.getWaterColor(this.getWorld(), this.getPos()); - } - if (this.getStack(0).isOf(CaffeinatedItems.BLACK_COFFEE_BOTTLE)) { - return 0x4A2E20; - } - return -1; - } - private void updateListeners() { this.markDirty(); this.getWorld().updateListeners(this.getPos(), this.getCachedState(), this.getCachedState(), Block.NOTIFY_ALL); @@ -211,39 +216,29 @@ public void clear() { } public void dropExperienceForRecipesUsed(ServerPlayerEntity player) { - ArrayList> arrayList = new ArrayList<>(); - for (Identifier identifier : this.recipesUsed) { - this.getWorld().getRecipeManager().get(identifier).ifPresent(arrayList::add); + ArrayList> recipeEntries = new ArrayList<>(); + for (Identifier recipeId : this.recipesUsed) { + this.getWorld().getRecipeManager().get(recipeId).ifPresent(recipeEntries::add); } - player.unlockRecipes(arrayList); - for (Recipe recipe : arrayList) { - if (recipe == null) continue; + player.unlockRecipes(recipeEntries); + for (RecipeEntry recipe : recipeEntries) { + if (recipe == null || !(recipe.value() instanceof CoffeeBrewingRecipe coffeeBrewingRecipe)) continue; player.onRecipeCrafted(recipe, this.inventory); - Caffeinated.BREW_COFFEE_CRITERION.trigger(player, recipe.getOutput(this.getWorld().getRegistryManager())); - dropExperience(player.getServerWorld(), player.getPos(), ((CoffeeBrewingRecipe) recipe).getExperience()); + Caffeinated.BREW_COFFEE_CRITERION.trigger(player, coffeeBrewingRecipe.getResult(this.getWorld().getRegistryManager())); + dropExperience(player.getServerWorld(), player.getPos(), coffeeBrewingRecipe.getExperience()); } this.recipesUsed.clear(); } - private static void dropExperience(ServerWorld world, Vec3d pos, float experience) { - int i = MathHelper.floor(experience); - float f = MathHelper.fractionalPart(experience); - if (f != 0.0f && Math.random() < f) { - i++; - } - ExperienceOrbEntity.spawn(world, pos, i); + @Override + public RecipeEntry getLastRecipe() { + return null; } @Override - public void setLastRecipe(@Nullable Recipe recipe) { + public void setLastRecipe(@Nullable RecipeEntry recipe) { if (recipe != null) { - this.recipesUsed.add(recipe.getId()); + this.recipesUsed.add(recipe.id()); } } - - @Nullable - @Override - public Recipe getLastRecipe() { - return null; - } } diff --git a/src/main/java/net/chikorita_lover/caffeinated/CaffeinatedClient.java b/src/main/java/net/chikorita_lover/caffeinated/client/CaffeinatedClient.java similarity index 79% rename from src/main/java/net/chikorita_lover/caffeinated/CaffeinatedClient.java rename to src/main/java/net/chikorita_lover/caffeinated/client/CaffeinatedClient.java index fd9f8f6..adbf1e8 100644 --- a/src/main/java/net/chikorita_lover/caffeinated/CaffeinatedClient.java +++ b/src/main/java/net/chikorita_lover/caffeinated/client/CaffeinatedClient.java @@ -1,6 +1,9 @@ -package net.chikorita_lover.caffeinated; +package net.chikorita_lover.caffeinated.client; +import net.chikorita_lover.caffeinated.Caffeinated; +import net.chikorita_lover.caffeinated.block.CauldronCampfireBlock; import net.chikorita_lover.caffeinated.registry.CaffeinatedBlocks; +import net.chikorita_lover.caffeinated.registry.CaffeinatedEntities; import net.chikorita_lover.caffeinated.registry.CaffeinatedParticleTypes; import net.fabricmc.api.ClientModInitializer; import net.fabricmc.fabric.api.blockrenderlayer.v1.BlockRenderLayerMap; @@ -13,10 +16,9 @@ import net.minecraft.client.particle.BubblePopParticle; import net.minecraft.client.render.RenderLayer; import net.minecraft.client.render.entity.model.EntityModelLayer; -import net.minecraft.util.Identifier; public class CaffeinatedClient implements ClientModInitializer { - public static EntityModelLayer MODEL_CIVET_LAYER = new EntityModelLayer(new Identifier(Caffeinated.MODID, "civet"), "main"); + public static EntityModelLayer MODEL_CIVET_LAYER = new EntityModelLayer(Caffeinated.of("civet"), "main"); @Override public void onInitializeClient() { @@ -26,12 +28,7 @@ public void onInitializeClient() { BlockRenderLayerMap.INSTANCE.putBlock(CaffeinatedBlocks.CAULDRON_CAMPFIRE, RenderLayer.getCutout()); BlockRenderLayerMap.INSTANCE.putBlock(CaffeinatedBlocks.SOUL_CAULDRON_CAMPFIRE, RenderLayer.getCutout()); - ColorProviderRegistry.BLOCK.register((state, world, pos, tintIndex) -> { - if (world == null || pos == null || world.getBlockEntity(pos) == null) { - return BiomeColors.getWaterColor(world, pos); - } - return ((CauldronCampfireBlockEntity) world.getBlockEntity(pos)).getColor(); - }, CauldronCampfireBlock.CAMPFIRE_TO_CAULDRON_CAMPFIRE.values().toArray(new Block[0])); + ColorProviderRegistry.BLOCK.register((state, world, pos, tintIndex) -> BiomeColors.getWaterColor(world, pos), CauldronCampfireBlock.CAMPFIRE_TO_CAULDRON_CAMPFIRE.values().toArray(new Block[0])); EntityModelLayerRegistry.registerModelLayer(MODEL_CIVET_LAYER, CivetEntityModel::getTexturedModelData); diff --git a/src/main/java/net/chikorita_lover/caffeinated/client/CivetEntityModel.java b/src/main/java/net/chikorita_lover/caffeinated/client/CivetEntityModel.java index eb3fc34..45a3acc 100644 --- a/src/main/java/net/chikorita_lover/caffeinated/client/CivetEntityModel.java +++ b/src/main/java/net/chikorita_lover/caffeinated/client/CivetEntityModel.java @@ -1,4 +1,4 @@ -package com.chikoritalover.caffeinated.client; +package net.chikorita_lover.caffeinated.client; import com.google.common.collect.ImmutableList; import net.minecraft.client.model.*; @@ -32,10 +32,7 @@ public CivetEntityModel(ModelPart root) { public static TexturedModelData getTexturedModelData() { ModelData modelData = new ModelData(); ModelPartData modelPartData = modelData.getRoot(); - modelPartData.addChild(EntityModelPartNames.HEAD, ModelPartBuilder.create().uv(0, 0).cuboid(-2.5F, -2.0F, -4.0F, 5.0F, 4.0F, 5.0F, new Dilation(0.0F)) - .uv(0, 21).cuboid(-1.0F, 0.0F, -6.0F, 2.0F, 2.0F, 2.0F, new Dilation(0.0F)) - .uv(0, 9).cuboid(-3.5F, -3.0F, -1.0F, 2.0F, 2.0F, 1.0F, new Dilation(0.0F)) - .uv(0, 9).mirrored().cuboid(1.5F, -3.0F, -1.0F, 2.0F, 2.0F, 1.0F, new Dilation(0.0F)).mirrored(false), ModelTransform.pivot(0.0F, 17.5F, -7.0F)); + modelPartData.addChild(EntityModelPartNames.HEAD, ModelPartBuilder.create().uv(0, 0).cuboid(-2.5F, -2.0F, -4.0F, 5.0F, 4.0F, 5.0F, new Dilation(0.0F)).uv(0, 21).cuboid(-1.0F, 0.0F, -6.0F, 2.0F, 2.0F, 2.0F, new Dilation(0.0F)).uv(0, 9).cuboid(-3.5F, -3.0F, -1.0F, 2.0F, 2.0F, 1.0F, new Dilation(0.0F)).uv(0, 9).mirrored().cuboid(1.5F, -3.0F, -1.0F, 2.0F, 2.0F, 1.0F, new Dilation(0.0F)).mirrored(false), ModelTransform.pivot(0.0F, 17.5F, -7.0F)); modelPartData.addChild(EntityModelPartNames.BODY, ModelPartBuilder.create().uv(20, 0).cuboid(-2.5F, -6.0F, -3.5F, 5.0F, 13.0F, 4.0F, new Dilation(0.0F)), ModelTransform.of(0.0F, 17.0F, 0.0F, 1.5708F, 0.0F, 0.0F)); diff --git a/src/main/java/net/chikorita_lover/caffeinated/client/CivetEntityRenderer.java b/src/main/java/net/chikorita_lover/caffeinated/client/CivetEntityRenderer.java index 36ef7c8..cef41e4 100644 --- a/src/main/java/net/chikorita_lover/caffeinated/client/CivetEntityRenderer.java +++ b/src/main/java/net/chikorita_lover/caffeinated/client/CivetEntityRenderer.java @@ -1,20 +1,19 @@ -package com.chikoritalover.caffeinated.client; +package net.chikorita_lover.caffeinated.client; -import com.chikoritalover.caffeinated.Caffeinated; -import com.chikoritalover.caffeinated.CaffeinatedClient; -import com.chikoritalover.caffeinated.entity.CivetEntity; +import net.chikorita_lover.caffeinated.Caffeinated; +import net.chikorita_lover.caffeinated.entity.CivetEntity; import net.minecraft.client.render.entity.EntityRendererFactory; import net.minecraft.client.render.entity.MobEntityRenderer; -import net.minecraft.client.render.entity.model.EntityModelLayers; import net.minecraft.util.Identifier; public class CivetEntityRenderer extends MobEntityRenderer> { - private static final Identifier TEXTURE = new Identifier(Caffeinated.MODID, "textures/entity/civet/civet.png"); + private static final Identifier TEXTURE = Caffeinated.of("textures/entity/civet/civet.png"); public CivetEntityRenderer(EntityRendererFactory.Context context) { super(context, new CivetEntityModel<>(context.getPart(CaffeinatedClient.MODEL_CIVET_LAYER)), 0.4F); } + @Override public Identifier getTexture(CivetEntity civetEntity) { return TEXTURE; } diff --git a/src/main/java/net/chikorita_lover/caffeinated/data/CaffeinatedAdvancementProvider.java b/src/main/java/net/chikorita_lover/caffeinated/data/CaffeinatedAdvancementProvider.java new file mode 100644 index 0000000..eb4a182 --- /dev/null +++ b/src/main/java/net/chikorita_lover/caffeinated/data/CaffeinatedAdvancementProvider.java @@ -0,0 +1,49 @@ +package net.chikorita_lover.caffeinated.data; + +import net.chikorita_lover.caffeinated.Caffeinated; +import net.chikorita_lover.caffeinated.advancement.BrewCoffeeCriterion; +import net.chikorita_lover.caffeinated.registry.CaffeinatedBlocks; +import net.chikorita_lover.caffeinated.registry.CaffeinatedItems; +import net.chikorita_lover.caffeinated.registry.tag.CaffeinatedItemTags; +import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput; +import net.fabricmc.fabric.api.datagen.v1.provider.FabricAdvancementProvider; +import net.minecraft.advancement.Advancement; +import net.minecraft.advancement.AdvancementEntry; +import net.minecraft.advancement.AdvancementFrame; +import net.minecraft.advancement.AdvancementRewards; +import net.minecraft.advancement.criterion.InventoryChangedCriterion; +import net.minecraft.advancement.criterion.ItemCriterion; +import net.minecraft.item.Item; +import net.minecraft.predicate.BlockPredicate; +import net.minecraft.predicate.entity.LocationPredicate; +import net.minecraft.predicate.item.ItemPredicate; +import net.minecraft.registry.Registries; +import net.minecraft.registry.RegistryKeys; +import net.minecraft.registry.RegistryWrapper; +import net.minecraft.registry.entry.RegistryEntryList; +import net.minecraft.text.Text; +import net.minecraft.util.Identifier; + +import java.util.concurrent.CompletableFuture; +import java.util.function.Consumer; + +public class CaffeinatedAdvancementProvider extends FabricAdvancementProvider { + public CaffeinatedAdvancementProvider(FabricDataOutput output, CompletableFuture registryLookup) { + super(output, registryLookup); + } + + private static Advancement.Builder requireAllCoffeeBottlesBrewed(Advancement.Builder builder, RegistryWrapper.WrapperLookup registryLookup, Item... items) { + for (Item item : items) { + builder.criterion("brew_" + Registries.ITEM.getId(item).getPath(), BrewCoffeeCriterion.Conditions.create(ItemPredicate.Builder.create().items(item))); + } + return builder; + } + + @Override + public void generateAdvancement(RegistryWrapper.WrapperLookup registryLookup, Consumer consumer) { + AdvancementEntry husbandryRoot = new AdvancementEntry(Identifier.ofVanilla("husbandry/root"), null); + AdvancementEntry brewCoffee = Advancement.Builder.create().parent(husbandryRoot).display(CaffeinatedItems.BLACK_COFFEE_BOTTLE, Text.translatable("advancements.husbandry.brew_coffee.title"), Text.translatable("advancements.husbandry.brew_coffee.description"), null, AdvancementFrame.TASK, true, true, false).criterion("brew_coffee", BrewCoffeeCriterion.Conditions.create(ItemPredicate.Builder.create().tag(CaffeinatedItemTags.BLACK_COFFEE_BOTTLES))).build(consumer, Caffeinated.NAMESPACE + ":husbandry/brew_coffee"); + requireAllCoffeeBottlesBrewed(Advancement.Builder.create().parent(brewCoffee).display(CaffeinatedItems.LATTE_COFFEE_BOTTLE, Text.translatable("advancements.husbandry.brew_all_coffee.title"), Text.translatable("advancements.husbandry.brew_all_coffee.description"), null, AdvancementFrame.CHALLENGE, true, true, false), registryLookup, CaffeinatedItems.BLACK_COFFEE_BOTTLE, CaffeinatedItems.LATTE_COFFEE_BOTTLE).rewards(AdvancementRewards.Builder.experience(100)).build(consumer, Caffeinated.NAMESPACE + ":husbandry/brew_all_coffee"); + Advancement.Builder.create().parent(brewCoffee).display(CaffeinatedBlocks.TIRAMISU, Text.translatable("advancements.husbandry.bake_tiramisu.title"), Text.translatable("advancements.husbandry.bake_tiramisu.description"), null, AdvancementFrame.TASK, true, true, false).criterion("bake_tiramisu", InventoryChangedCriterion.Conditions.items(CaffeinatedBlocks.TIRAMISU)).build(consumer, Caffeinated.NAMESPACE + ":husbandry/bake_tiramisu"); + } +} diff --git a/src/main/java/net/chikorita_lover/caffeinated/data/CaffeinatedModelProvider.java b/src/main/java/net/chikorita_lover/caffeinated/data/CaffeinatedModelProvider.java index 70d8758..fd3e65c 100644 --- a/src/main/java/net/chikorita_lover/caffeinated/data/CaffeinatedModelProvider.java +++ b/src/main/java/net/chikorita_lover/caffeinated/data/CaffeinatedModelProvider.java @@ -3,6 +3,8 @@ import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; import net.chikorita_lover.caffeinated.Caffeinated; +import net.chikorita_lover.caffeinated.block.CauldronCampfireBlock; +import net.chikorita_lover.caffeinated.block.TiramisuBlock; import net.chikorita_lover.caffeinated.registry.CaffeinatedBlocks; import net.chikorita_lover.caffeinated.registry.CaffeinatedItems; import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput; @@ -14,6 +16,8 @@ import net.minecraft.state.property.Property; import net.minecraft.util.Identifier; +import java.util.Optional; + public class CaffeinatedModelProvider extends FabricModelProvider { public CaffeinatedModelProvider(FabricDataOutput output) { super(output); @@ -38,6 +42,19 @@ private static void registerCoffeeShrub(BlockStateModelGenerator blockStateModel blockStateModelGenerator.blockStateCollector.accept(BlockStateModelGenerator.createSingletonBlockState(pottedCrop, identifier)); } + private static void registerTiramisu(BlockStateModelGenerator generator) { + generator.registerItemModel(CaffeinatedBlocks.TIRAMISU.asItem()); + generator.blockStateCollector.accept(VariantsBlockStateSupplier.create(CaffeinatedBlocks.TIRAMISU).coordinate(BlockStateVariantMap.create(TiramisuBlock.SLICES).register(1, BlockStateVariant.create().put(VariantSettings.MODEL, ModelIds.getBlockSubModelId(CaffeinatedBlocks.TIRAMISU, "_slice3"))).register(2, BlockStateVariant.create().put(VariantSettings.MODEL, ModelIds.getBlockSubModelId(CaffeinatedBlocks.TIRAMISU, "_slice2"))).register(3, BlockStateVariant.create().put(VariantSettings.MODEL, ModelIds.getBlockSubModelId(CaffeinatedBlocks.TIRAMISU, "_slice1"))).register(4, BlockStateVariant.create().put(VariantSettings.MODEL, ModelIds.getBlockModelId(CaffeinatedBlocks.TIRAMISU))))); + } + + private static void registerCauldronCampfire(BlockStateModelGenerator blockStateModelGenerator, Block cauldronCampfire, Block campfire) { + Identifier identifier = Caffeinated.of("block/cauldron_campfire_off"); + Identifier identifier2 = new Model(Optional.of(Caffeinated.of("block/template_cauldron_campfire")), Optional.empty(), TextureKey.FIRE, TextureKey.LIT_LOG).upload(cauldronCampfire, TextureMap.campfire(campfire), blockStateModelGenerator.modelCollector); + Identifier identifier3 = Caffeinated.of("block/cauldron_campfire_off_filled"); + Identifier identifier4 = new Model(Optional.of(Caffeinated.of("block/template_cauldron_campfire_filled")), Optional.empty(), TextureKey.FIRE, TextureKey.LIT_LOG).upload(ModelIds.getBlockSubModelId(cauldronCampfire, "_filled"), TextureMap.campfire(campfire), blockStateModelGenerator.modelCollector); + blockStateModelGenerator.blockStateCollector.accept(VariantsBlockStateSupplier.create(cauldronCampfire).coordinate(BlockStateModelGenerator.createSouthDefaultHorizontalRotationStates()).coordinate(BlockStateVariantMap.create(Properties.LIT, CauldronCampfireBlock.FILLED).register(false, false, BlockStateVariant.create().put(VariantSettings.MODEL, identifier)).register(true, false, BlockStateVariant.create().put(VariantSettings.MODEL, identifier2)).register(false, true, BlockStateVariant.create().put(VariantSettings.MODEL, identifier3)).register(true, true, BlockStateVariant.create().put(VariantSettings.MODEL, identifier4)))); + } + @Override public void generateBlockStateModels(BlockStateModelGenerator generator) { generator.registerSimpleCubeAll(CaffeinatedBlocks.COFFEE_BEAN_BLOCK); @@ -49,14 +66,22 @@ public void generateBlockStateModels(BlockStateModelGenerator generator) { generator.blockStateCollector.accept(VariantsBlockStateSupplier.create(CaffeinatedBlocks.GROUND_COFFEE_CAULDRON).coordinate(BlockStateVariantMap.create(LeveledCauldronBlock.LEVEL).register(1, BlockStateVariant.create().put(VariantSettings.MODEL, Models.TEMPLATE_CAULDRON_LEVEL1.upload(CaffeinatedBlocks.GROUND_COFFEE_CAULDRON, "_level1", TextureMap.cauldron(Caffeinated.of("block/ground_coffee_cauldron")), generator.modelCollector))).register(2, BlockStateVariant.create().put(VariantSettings.MODEL, Models.TEMPLATE_CAULDRON_LEVEL2.upload(CaffeinatedBlocks.GROUND_COFFEE_CAULDRON, "_level2", TextureMap.cauldron(Caffeinated.of("block/ground_coffee_cauldron")), generator.modelCollector))).register(3, BlockStateVariant.create().put(VariantSettings.MODEL, Models.TEMPLATE_CAULDRON_FULL.upload(CaffeinatedBlocks.GROUND_COFFEE_CAULDRON, "_full", TextureMap.cauldron(Caffeinated.of("block/ground_coffee_cauldron")), generator.modelCollector))))); registerCoffeeShrub(generator, CaffeinatedBlocks.COFFEE_SHRUB, CaffeinatedBlocks.POTTED_COFFEE_SHRUB, Properties.AGE_3, 0, 0, 1, 1); + + registerTiramisu(generator); + + for (Block campfireBlock : CauldronCampfireBlock.CAMPFIRE_TO_CAULDRON_CAMPFIRE.keySet()) { + registerCauldronCampfire(generator, CauldronCampfireBlock.CAMPFIRE_TO_CAULDRON_CAMPFIRE.get(campfireBlock), campfireBlock); + } } @Override public void generateItemModels(ItemModelGenerator itemModelGenerator) { - itemModelGenerator.register(CaffeinatedItems.COFFEE_BERRIES, Models.GENERATED); - itemModelGenerator.register(CaffeinatedItems.COFFEE_BOTTLE, Models.GENERATED); - itemModelGenerator.register(CaffeinatedItems.TIRAMISU, Models.GENERATED); + itemModelGenerator.register(CaffeinatedItems.BLACK_COFFEE_BOTTLE, Models.GENERATED); + itemModelGenerator.register(CaffeinatedItems.LATTE_COFFEE_BOTTLE, Models.GENERATED); + itemModelGenerator.register(CaffeinatedItems.TIRAMISU_SLICE, Models.GENERATED); + itemModelGenerator.register(CaffeinatedItems.COFFEE_BEANS, Models.GENERATED); itemModelGenerator.register(CaffeinatedItems.GROUND_COFFEE, Models.GENERATED); itemModelGenerator.register(CaffeinatedItems.JAVA_BANNER_PATTERN, Models.GENERATED); + itemModelGenerator.register(CaffeinatedItems.CIVET_SPAWN_EGG, Models.item("template_spawn_egg")); } } diff --git a/src/main/java/net/chikorita_lover/caffeinated/data/CaffeinatedRecipeProvider.java b/src/main/java/net/chikorita_lover/caffeinated/data/CaffeinatedRecipeProvider.java index c7ce6f7..cc5c8c6 100644 --- a/src/main/java/net/chikorita_lover/caffeinated/data/CaffeinatedRecipeProvider.java +++ b/src/main/java/net/chikorita_lover/caffeinated/data/CaffeinatedRecipeProvider.java @@ -1,16 +1,21 @@ package net.chikorita_lover.caffeinated.data; import net.chikorita_lover.caffeinated.Caffeinated; +import net.chikorita_lover.caffeinated.recipe.CoffeeBrewingRecipeJsonBuilder; import net.chikorita_lover.caffeinated.registry.CaffeinatedBlocks; import net.chikorita_lover.caffeinated.registry.CaffeinatedItems; +import net.chikorita_lover.caffeinated.registry.tag.CaffeinatedItemTags; import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput; import net.fabricmc.fabric.api.datagen.v1.provider.FabricRecipeProvider; import net.fabricmc.fabric.api.resource.conditions.v1.ResourceConditions; +import net.fabricmc.fabric.api.tag.convention.v2.ConventionalItemTags; +import net.minecraft.data.server.recipe.CookingRecipeJsonBuilder; import net.minecraft.data.server.recipe.RecipeExporter; import net.minecraft.data.server.recipe.ShapedRecipeJsonBuilder; import net.minecraft.data.server.recipe.ShapelessRecipeJsonBuilder; import net.minecraft.item.ItemConvertible; import net.minecraft.item.Items; +import net.minecraft.recipe.Ingredient; import net.minecraft.recipe.book.RecipeCategory; import net.minecraft.registry.RegistryWrapper; import org.jetbrains.annotations.Nullable; @@ -22,25 +27,27 @@ public CaffeinatedRecipeProvider(FabricDataOutput output, CompletableFuture type, WorldAccess world, SpawnReason spawnReason, BlockPos pos, Random random) { + return world.getBlockState(pos.down()).isIn(CaffeinatedBlockTags.CIVETS_SPAWNABLE_ON) && isLightLevelValidForNaturalSpawn(world, pos); + } + @Override public boolean isBreedingItem(ItemStack stack) { return BREEDING_INGREDIENT.test(stack); } - public static boolean canSpawn(EntityType type, WorldAccess world, SpawnReason spawnReason, BlockPos pos, Random random) { - return world.getBlockState(pos.down()).isIn(CaffeinatedBlockTags.CIVETS_SPAWNABLE_ON); - } - @Override public boolean canSpawn(WorldView world) { if (!world.doesNotIntersectEntities(this) || world.containsFluid(this.getBoundingBox())) { diff --git a/src/main/java/net/chikorita_lover/caffeinated/item/CoffeeBottleItem.java b/src/main/java/net/chikorita_lover/caffeinated/item/CoffeeBottleItem.java index 63761dd..4e0495e 100644 --- a/src/main/java/net/chikorita_lover/caffeinated/item/CoffeeBottleItem.java +++ b/src/main/java/net/chikorita_lover/caffeinated/item/CoffeeBottleItem.java @@ -1,39 +1,30 @@ package net.chikorita_lover.caffeinated.item; +import net.chikorita_lover.caffeinated.Caffeinated; import net.chikorita_lover.caffeinated.registry.CaffeinatedSoundEvents; import net.minecraft.advancement.criterion.Criteria; -import net.minecraft.client.item.TooltipContext; import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.attribute.EntityAttribute; -import net.minecraft.entity.attribute.EntityAttributeModifier; -import net.minecraft.entity.effect.StatusEffect; import net.minecraft.entity.effect.StatusEffectInstance; -import net.minecraft.entity.effect.StatusEffectUtil; import net.minecraft.entity.effect.StatusEffects; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.item.ItemUsage; import net.minecraft.item.Items; +import net.minecraft.item.tooltip.TooltipType; import net.minecraft.registry.Registries; -import net.minecraft.screen.ScreenTexts; import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.sound.SoundEvent; import net.minecraft.stat.Stats; -import net.minecraft.util.Hand; -import net.minecraft.util.TypedActionResult; -import net.minecraft.util.UseAction; +import net.minecraft.text.Text; +import net.minecraft.util.*; import net.minecraft.world.World; -import org.apache.commons.compress.utils.Lists; -import org.jetbrains.annotations.Nullable; -import java.util.ArrayList; import java.util.List; -import java.util.Map; public class CoffeeBottleItem extends Item { private static final int MAX_USE_TIME = 40; - private static final String TRANSLATION_KEY = Util.createTranslationKey("item", new Identifier(Caffeinated.MODID, "coffee_bottle")); + private static final String TRANSLATION_KEY = Util.createTranslationKey("item", Caffeinated.of("coffee_bottle")); public CoffeeBottleItem(Item.Settings settings) { super(settings); @@ -88,61 +79,13 @@ public TypedActionResult use(World world, PlayerEntity user, Hand han } @Override - public void appendTooltip(ItemStack stack, @Nullable World world, List tooltip, TooltipContext context) { - super.appendTooltip(stack, world, tooltip, context); + public void appendTooltip(ItemStack stack, TooltipContext context, List tooltip, TooltipType type) { + super.appendTooltip(stack, context, tooltip, type); tooltip.add(Text.translatable(Util.createTranslationKey("item", Registries.ITEM.getId(this)).concat(".desc")).formatted(Formatting.GRAY)); - List list = Lists.newArrayList(); - for (Pair statusEffect : this.getFoodComponent().getStatusEffects()) { - list.add(statusEffect.getFirst()); - } - if (!list.isEmpty()) { - buildTooltip(list, tooltip, 1.0F); - } - } - - private static void buildTooltip(List statusEffects, List list, float durationMultiplier) { - ArrayList> list2 = Lists.newArrayList(); - int i = 0; - for (StatusEffectInstance statusEffectInstance : statusEffects) { - MutableText mutableText = Text.translatable(statusEffectInstance.getTranslationKey()); - StatusEffect statusEffect = statusEffectInstance.getEffectType(); - Map map = statusEffect.getAttributeModifiers(); - if (!map.isEmpty()) { - for (Map.Entry entry : map.entrySet()) { - EntityAttributeModifier entityAttributeModifier = entry.getValue(); - EntityAttributeModifier entityAttributeModifier2 = new EntityAttributeModifier(entityAttributeModifier.getName(), statusEffect.adjustModifierAmount(statusEffectInstance.getAmplifier(), entityAttributeModifier), entityAttributeModifier.getOperation()); - list2.add(new Pair<>(entry.getKey(), entityAttributeModifier2)); - } - } - if (statusEffectInstance.getAmplifier() > 0) { - mutableText = Text.translatable("potion.withAmplifier", mutableText, Text.translatable("potion.potency." + statusEffectInstance.getAmplifier())); - if (statusEffectInstance.getEffectType() == CaffeinatedStatusEffects.CAFFEINE) { - i = statusEffectInstance.getAmplifier(); - } - } - if (!statusEffectInstance.isDurationBelow(20)) { - mutableText = Text.translatable("potion.withDuration", mutableText, StatusEffectUtil.getDurationText(statusEffectInstance, durationMultiplier)); - } - list.add(mutableText.formatted(statusEffect.getCategory().getFormatting())); - } - list.add(ScreenTexts.EMPTY); - list.add(Text.translatable("potion.whenDrank").formatted(Formatting.DARK_PURPLE)); - list.add(Text.translatable("attribute.modifier.take.2", ItemStack.MODIFIER_FORMAT.format(getEffectChance(i) * 100.0F), Text.translatable("item.modifiers.exhaustion")).formatted(Formatting.BLUE)); - for (Pair pair : list2) { - EntityAttributeModifier entityAttributeModifier3 = pair.getSecond(); - double d = entityAttributeModifier3.getValue(); - double e = entityAttributeModifier3.getOperation() == EntityAttributeModifier.Operation.MULTIPLY_BASE || entityAttributeModifier3.getOperation() == EntityAttributeModifier.Operation.MULTIPLY_TOTAL ? entityAttributeModifier3.getValue() * 100.0 : entityAttributeModifier3.getValue(); - if (d > 0.0) { - list.add(Text.translatable("attribute.modifier.plus." + entityAttributeModifier3.getOperation().getId(), ItemStack.MODIFIER_FORMAT.format(e), Text.translatable(pair.getFirst().getTranslationKey())).formatted(Formatting.BLUE)); - continue; - } - if (!(d < 0.0)) continue; - list.add(Text.translatable("attribute.modifier.take." + entityAttributeModifier3.getOperation().getId(), ItemStack.MODIFIER_FORMAT.format(-e), Text.translatable(pair.getFirst().getTranslationKey())).formatted(Formatting.RED)); - } } - public static float getEffectChance(StatusEffectInstance statusEffectInstance) { - return getEffectChance(statusEffectInstance.getAmplifier()); + public static float getEffectChance(StatusEffectInstance effect) { + return getEffectChance(effect.getAmplifier()); } public static float getEffectChance(int i) { diff --git a/src/main/java/net/chikorita_lover/caffeinated/item/LatteCoffeeBottleItem.java b/src/main/java/net/chikorita_lover/caffeinated/item/LatteCoffeeBottleItem.java index dce4a38..e02eeeb 100644 --- a/src/main/java/net/chikorita_lover/caffeinated/item/LatteCoffeeBottleItem.java +++ b/src/main/java/net/chikorita_lover/caffeinated/item/LatteCoffeeBottleItem.java @@ -1,6 +1,6 @@ -package com.chikoritalover.caffeinated.item; +package net.chikorita_lover.caffeinated.item; -import com.chikoritalover.caffeinated.registry.CaffeinatedStatusEffects; +import net.chikorita_lover.caffeinated.registry.CaffeinatedStatusEffects; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.effect.StatusEffectInstance; import net.minecraft.item.ItemStack; @@ -17,9 +17,9 @@ public LatteCoffeeBottleItem(Settings settings) { public ItemStack finishUsing(ItemStack stack, World world, LivingEntity user) { stack = super.finishUsing(stack, world, user); if (!world.isClient()) { - ArrayList arrayList = new ArrayList<>(user.getStatusEffects()); + ArrayList statusEffects = new ArrayList<>(user.getStatusEffects()); user.clearStatusEffects(); - for (StatusEffectInstance effect : arrayList) { + for (StatusEffectInstance effect : statusEffects) { if (effect.getEffectType() == CaffeinatedStatusEffects.CAFFEINE) { user.addStatusEffect(effect); } else if (effect.getAmplifier() > 0) { diff --git a/src/main/java/net/chikorita_lover/caffeinated/mixin/CampfireBlockMixin.java b/src/main/java/net/chikorita_lover/caffeinated/mixin/CampfireBlockMixin.java index 94faf15..13f6bcb 100644 --- a/src/main/java/net/chikorita_lover/caffeinated/mixin/CampfireBlockMixin.java +++ b/src/main/java/net/chikorita_lover/caffeinated/mixin/CampfireBlockMixin.java @@ -1,6 +1,6 @@ -package com.chikoritalover.caffeinated.mixin; +package net.chikorita_lover.caffeinated.mixin; -import com.chikoritalover.caffeinated.block.CauldronCampfireBlock; +import net.chikorita_lover.caffeinated.block.CauldronCampfireBlock; import net.minecraft.block.BlockState; import net.minecraft.block.BlockWithEntity; import net.minecraft.block.CampfireBlock; @@ -19,16 +19,16 @@ protected CampfireBlockMixin(Settings settings) { super(settings); } - @Override - public boolean canReplace(BlockState state, ItemPlacementContext context) { - ItemStack itemStack = context.getStack(); - return context.getSide() != Direction.DOWN && itemStack.getItem() == Items.CAULDRON && CauldronCampfireBlock.CAMPFIRE_TO_CAULDRON_CAMPFIRE.containsKey(this) || super.canReplace(state, context); - } - @Inject(method = "canBeLit", at = @At("HEAD"), cancellable = true) private static void canBeLit(BlockState state, CallbackInfoReturnable cir) { if (state.getBlock() instanceof CauldronCampfireBlock) { cir.setReturnValue(CauldronCampfireBlock.canBeLit(state)); } } + + @Override + public boolean canReplace(BlockState state, ItemPlacementContext context) { + ItemStack stack = context.getStack(); + return context.getSide() != Direction.DOWN && stack.isOf(Items.CAULDRON) && CauldronCampfireBlock.CAMPFIRE_TO_CAULDRON_CAMPFIRE.containsKey(this) || super.canReplace(state, context); + } } diff --git a/src/main/java/net/chikorita_lover/caffeinated/mixin/CauldronBlockMixin.java b/src/main/java/net/chikorita_lover/caffeinated/mixin/CauldronBlockMixin.java index fcc0d57..19fb1c5 100644 --- a/src/main/java/net/chikorita_lover/caffeinated/mixin/CauldronBlockMixin.java +++ b/src/main/java/net/chikorita_lover/caffeinated/mixin/CauldronBlockMixin.java @@ -1,39 +1,32 @@ -package com.chikoritalover.caffeinated.mixin; +package net.chikorita_lover.caffeinated.mixin; -import com.chikoritalover.caffeinated.block.CauldronCampfireBlock; -import com.chikoritalover.caffeinated.block.entity.CauldronCampfireBlockEntity; -import net.minecraft.block.AbstractCauldronBlock; -import net.minecraft.block.BlockState; -import net.minecraft.block.CampfireBlock; -import net.minecraft.block.CauldronBlock; +import net.chikorita_lover.caffeinated.block.CauldronCampfireBlock; +import net.minecraft.block.*; import net.minecraft.block.cauldron.CauldronBehavior; -import net.minecraft.item.Item; import net.minecraft.item.ItemPlacementContext; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Direction; import org.jetbrains.annotations.Nullable; import org.spongepowered.asm.mixin.Mixin; -import java.util.Map; - @Mixin(CauldronBlock.class) public abstract class CauldronBlockMixin extends AbstractCauldronBlock { - public CauldronBlockMixin(Settings settings, Map behaviorMap) { + public CauldronBlockMixin(Settings settings, CauldronBehavior.CauldronBehaviorMap behaviorMap) { super(settings, behaviorMap); } @Override @Nullable public BlockState getPlacementState(ItemPlacementContext ctx) { - BlockPos blockPos = ctx.getBlockPos(); - BlockState blockState = ctx.getWorld().getBlockState(blockPos); - if (ctx.getSide() != Direction.DOWN && CauldronCampfireBlock.CAMPFIRE_TO_CAULDRON_CAMPFIRE.containsKey(blockState.getBlock())) { - BlockState blockState2 = CauldronCampfireBlock.CAMPFIRE_TO_CAULDRON_CAMPFIRE.get(blockState.getBlock()).getDefaultState(); - if (blockState.getBlock() instanceof CampfireBlock) { + BlockState state = ctx.getWorld().getBlockState(ctx.getBlockPos()); + Block block = state.getBlock(); + if (ctx.getSide() != Direction.DOWN && CauldronCampfireBlock.CAMPFIRE_TO_CAULDRON_CAMPFIRE.containsKey(block)) { + BlockState state2 = CauldronCampfireBlock.CAMPFIRE_TO_CAULDRON_CAMPFIRE.get(block).getDefaultState(); + if (block instanceof CampfireBlock) { CauldronCampfireBlock.spawnSmokeParticle(ctx.getWorld(), ctx.getBlockPos(), false); - return blockState2.with(CauldronCampfireBlock.FACING, blockState.get(CauldronCampfireBlock.FACING)).with(CauldronCampfireBlock.LIT, blockState.get(CauldronCampfireBlock.LIT)).with(CauldronCampfireBlock.WATERLOGGED, blockState.get(CauldronCampfireBlock.WATERLOGGED)); + return state2.with(CauldronCampfireBlock.FACING, state.get(CauldronCampfireBlock.FACING)).with(CauldronCampfireBlock.LIT, state.get(CauldronCampfireBlock.LIT)).with(CauldronCampfireBlock.WATERLOGGED, state.get(CauldronCampfireBlock.WATERLOGGED)); } else { - return blockState2; + return state2; } } else { return super.getPlacementState(ctx); diff --git a/src/main/java/net/chikorita_lover/caffeinated/mixin/ClientRecipeBookMixin.java b/src/main/java/net/chikorita_lover/caffeinated/mixin/ClientRecipeBookMixin.java index 52d1bba..b5a3499 100644 --- a/src/main/java/net/chikorita_lover/caffeinated/mixin/ClientRecipeBookMixin.java +++ b/src/main/java/net/chikorita_lover/caffeinated/mixin/ClientRecipeBookMixin.java @@ -1,11 +1,12 @@ -package com.chikoritalover.caffeinated.mixin; +package net.chikorita_lover.caffeinated.mixin; -import com.chikoritalover.caffeinated.Caffeinated; import com.chocohead.mm.api.ClassTinkerers; +import net.chikorita_lover.caffeinated.Caffeinated; +import net.chikorita_lover.caffeinated.registry.CaffeinatedRecipeTypes; import net.minecraft.client.recipebook.ClientRecipeBook; import net.minecraft.client.recipebook.RecipeBookGroup; import net.minecraft.recipe.AbstractCookingRecipe; -import net.minecraft.recipe.Recipe; +import net.minecraft.recipe.RecipeEntry; import net.minecraft.recipe.book.CookingRecipeCategory; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Unique; @@ -21,16 +22,16 @@ public class ClientRecipeBookMixin { private static final RecipeBookGroup COFFEE_BREWING = ClassTinkerers.getEnum(RecipeBookGroup.class, "CAFFEINATED_COFFEE_BREWING"); @Inject(method = "getGroupForRecipe", at = @At("HEAD"), cancellable = true) - private static void getGroupForRecipe(Recipe recipe, CallbackInfoReturnable cir) { - if (recipe.getType() == Caffeinated.COFFEE_BREWING) { + private static void getGroupForRecipe(RecipeEntry recipe, CallbackInfoReturnable cir) { + if (recipe.value().getType() == CaffeinatedRecipeTypes.COFFEE_BREWING) { cir.setReturnValue(COFFEE_BREWING); } } @Inject(method = "getGroupForRecipe", at = @At("RETURN"), cancellable = true) - private static void getGroupForCookingRecipe(Recipe recipe, CallbackInfoReturnable cir) { - if (recipe instanceof AbstractCookingRecipe abstractCookingRecipe) { - CookingRecipeCategory cookingRecipeCategory = abstractCookingRecipe.getCategory(); + private static void getGroupForCookingRecipe(RecipeEntry recipe, CallbackInfoReturnable cir) { + if (recipe.value() instanceof AbstractCookingRecipe cookingRecipe) { + CookingRecipeCategory cookingRecipeCategory = cookingRecipe.getCategory(); if (cir.getReturnValue() == RecipeBookGroup.SMOKER_FOOD && cookingRecipeCategory == CookingRecipeCategory.MISC) { cir.setReturnValue(SMOKER_MISC); } diff --git a/src/main/java/net/chikorita_lover/caffeinated/mixin/CookingRecipeJsonBuilderMixin.java b/src/main/java/net/chikorita_lover/caffeinated/mixin/CookingRecipeJsonBuilderMixin.java index a079c2a..d918cce 100644 --- a/src/main/java/net/chikorita_lover/caffeinated/mixin/CookingRecipeJsonBuilderMixin.java +++ b/src/main/java/net/chikorita_lover/caffeinated/mixin/CookingRecipeJsonBuilderMixin.java @@ -1,5 +1,6 @@ -package com.chikoritalover.caffeinated.mixin; +package net.chikorita_lover.caffeinated.mixin; +import net.minecraft.component.DataComponentTypes; import net.minecraft.data.server.recipe.CookingRecipeJsonBuilder; import net.minecraft.item.ItemConvertible; import net.minecraft.recipe.AbstractCookingRecipe; @@ -15,7 +16,7 @@ public class CookingRecipeJsonBuilderMixin { @Inject(method = "getCookingRecipeCategory", at = @At("HEAD"), cancellable = true) private static void getCookingRecipeCategory(RecipeSerializer serializer, ItemConvertible output, CallbackInfoReturnable cir) { if (serializer == RecipeSerializer.SMOKING || serializer == RecipeSerializer.CAMPFIRE_COOKING) { - cir.setReturnValue(output.asItem().isFood() ? CookingRecipeCategory.FOOD : CookingRecipeCategory.MISC); + cir.setReturnValue(output.asItem().getComponents().contains(DataComponentTypes.FOOD) ? CookingRecipeCategory.FOOD : CookingRecipeCategory.MISC); } } } diff --git a/src/main/java/net/chikorita_lover/caffeinated/mixin/MinecraftServerMixin.java b/src/main/java/net/chikorita_lover/caffeinated/mixin/MinecraftServerMixin.java index 641ebb3..9d03a8a 100644 --- a/src/main/java/net/chikorita_lover/caffeinated/mixin/MinecraftServerMixin.java +++ b/src/main/java/net/chikorita_lover/caffeinated/mixin/MinecraftServerMixin.java @@ -1,23 +1,24 @@ -package com.chikoritalover.caffeinated.mixin; +package net.chikorita_lover.caffeinated.mixin; -import com.chikoritalover.caffeinated.world.CivetSpawner; +import com.google.common.collect.ImmutableList; +import net.chikorita_lover.caffeinated.world.CivetSpawner; import net.minecraft.server.MinecraftServer; -import net.minecraft.world.spawner.Spawner; +import net.minecraft.world.spawner.SpecialSpawner; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.ModifyArg; -import java.util.ArrayList; import java.util.List; @Mixin(MinecraftServer.class) public class MinecraftServerMixin { @ModifyArg(method = "createWorlds", at = @At(value = "INVOKE", target = "Lnet/minecraft/server/world/ServerWorld;(Lnet/minecraft/server/MinecraftServer;Ljava/util/concurrent/Executor;Lnet/minecraft/world/level/storage/LevelStorage$Session;Lnet/minecraft/world/level/ServerWorldProperties;Lnet/minecraft/registry/RegistryKey;Lnet/minecraft/world/dimension/DimensionOptions;Lnet/minecraft/server/WorldGenerationProgressListener;ZJLjava/util/List;ZLnet/minecraft/util/math/random/RandomSequencesState;)V"), index = 9) - private List addCivetSpawner(List spawners) { - if (spawners.isEmpty()) return spawners; - - ArrayList spawners2 = new ArrayList<>(spawners); - spawners2.add(new CivetSpawner()); - return spawners2; + private List addCivetSpawner(List list) { + if (list.isEmpty()) { + return list; + } + ImmutableList.Builder spawners = ImmutableList.builder().addAll(list); + spawners.add(new CivetSpawner()); + return spawners.build(); } } diff --git a/src/main/java/net/chikorita_lover/caffeinated/mixin/PlayerEntityMixin.java b/src/main/java/net/chikorita_lover/caffeinated/mixin/PlayerEntityMixin.java index 0b6afcb..14f8993 100644 --- a/src/main/java/net/chikorita_lover/caffeinated/mixin/PlayerEntityMixin.java +++ b/src/main/java/net/chikorita_lover/caffeinated/mixin/PlayerEntityMixin.java @@ -1,8 +1,10 @@ package net.chikorita_lover.caffeinated.mixin; +import net.chikorita_lover.caffeinated.item.CoffeeBottleItem; import net.chikorita_lover.caffeinated.registry.CaffeinatedStatusEffects; import net.minecraft.entity.EntityType; import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.effect.StatusEffectInstance; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.world.World; import org.spongepowered.asm.mixin.Mixin; @@ -19,8 +21,8 @@ protected PlayerEntityMixin(EntityType entityType, World @Inject(method = "addExhaustion", at = @At(value = "HEAD"), cancellable = true) private void tryCancelExhaustion(float exhaustion, CallbackInfo ci) { if (this.hasStatusEffect(CaffeinatedStatusEffects.CAFFEINE)) { - int amplifier = this.getStatusEffect(CaffeinatedStatusEffects.CAFFEINE).getAmplifier(); - if (this.getRandom().nextBetween(0, amplifier + 2) > 1) { + StatusEffectInstance effect = this.getStatusEffect(CaffeinatedStatusEffects.CAFFEINE); + if (this.getRandom().nextFloat() < CoffeeBottleItem.getEffectChance(effect)) { ci.cancel(); } } diff --git a/src/main/java/net/chikorita_lover/caffeinated/mixin/RecipeBookGroupMixin.java b/src/main/java/net/chikorita_lover/caffeinated/mixin/RecipeBookGroupMixin.java index 0f34bda..6c150b2 100644 --- a/src/main/java/net/chikorita_lover/caffeinated/mixin/RecipeBookGroupMixin.java +++ b/src/main/java/net/chikorita_lover/caffeinated/mixin/RecipeBookGroupMixin.java @@ -1,4 +1,4 @@ -package com.chikoritalover.caffeinated.mixin; +package net.chikorita_lover.caffeinated.mixin; import com.chocohead.mm.api.ClassTinkerers; import net.minecraft.client.recipebook.RecipeBookGroup; @@ -33,17 +33,17 @@ public class RecipeBookGroupMixin { @Inject(method = "", at = @At("TAIL")) private static void setSearchMap(CallbackInfo ci) { - ArrayList recipeBookGroups = new ArrayList<>(SMOKER); - recipeBookGroups.add(SMOKER_MISC); - SMOKER = recipeBookGroups; + ArrayList smokerGroups = new ArrayList<>(SMOKER); + smokerGroups.add(SMOKER_MISC); + SMOKER = smokerGroups; Map> newMap = new HashMap<>(); - SEARCH_MAP.forEach((group, groups) -> { + SEARCH_MAP.forEach((searchGroup, groups) -> { ArrayList arrayList = new ArrayList<>(groups); - if (group == SMOKER_SEARCH) { + if (searchGroup == SMOKER_SEARCH) { arrayList.add(SMOKER_MISC); } - newMap.put(group, arrayList); + newMap.put(searchGroup, arrayList); }); SEARCH_MAP = newMap; } diff --git a/src/main/java/net/chikorita_lover/caffeinated/mixin/ShovelItemMixin.java b/src/main/java/net/chikorita_lover/caffeinated/mixin/ShovelItemMixin.java index 81c58ae..18954a8 100644 --- a/src/main/java/net/chikorita_lover/caffeinated/mixin/ShovelItemMixin.java +++ b/src/main/java/net/chikorita_lover/caffeinated/mixin/ShovelItemMixin.java @@ -1,8 +1,9 @@ -package com.chikoritalover.caffeinated.mixin; +package net.chikorita_lover.caffeinated.mixin; -import com.chikoritalover.caffeinated.block.CauldronCampfireBlock; +import net.chikorita_lover.caffeinated.block.CauldronCampfireBlock; +import net.minecraft.block.Block; import net.minecraft.block.BlockState; -import net.minecraft.block.CampfireBlock; +import net.minecraft.entity.LivingEntity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemUsageContext; import net.minecraft.item.ShovelItem; @@ -10,6 +11,7 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Direction; import net.minecraft.world.World; +import net.minecraft.world.WorldEvents; import net.minecraft.world.event.GameEvent; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @@ -21,33 +23,29 @@ public class ShovelItemMixin { @Inject(method = "useOnBlock", at = @At("HEAD"), cancellable = true) public void useOnBlock(ItemUsageContext context, CallbackInfoReturnable cir) { World world = context.getWorld(); - BlockPos blockPos = context.getBlockPos(); - BlockState blockState = world.getBlockState(blockPos); + BlockPos pos = context.getBlockPos(); + BlockState state = world.getBlockState(pos); if (context.getSide() == Direction.DOWN) { cir.setReturnValue(ActionResult.PASS); } else { - BlockState blockState2 = null; - if (blockState.getBlock() instanceof CauldronCampfireBlock && blockState.get(CauldronCampfireBlock.LIT)) { + BlockState state2 = null; + if (state.getBlock() instanceof CauldronCampfireBlock && state.get(CauldronCampfireBlock.LIT)) { if (!world.isClient()) { - world.syncWorldEvent(null, 1009, blockPos, 0); + world.syncWorldEvent(null, WorldEvents.FIRE_EXTINGUISHED, pos, 0); } - - CauldronCampfireBlock.extinguish(context.getPlayer(), world, blockPos, blockState); - blockState2 = blockState.with(CauldronCampfireBlock.LIT, false); + CauldronCampfireBlock.extinguish(context.getPlayer(), world, pos, state); + state2 = state.with(CauldronCampfireBlock.LIT, false); } - if (blockState2 != null) { - if (!world.isClient) { - PlayerEntity playerEntity = context.getPlayer(); - world.setBlockState(blockPos, blockState2, 11); - world.emitGameEvent(GameEvent.BLOCK_CHANGE, blockPos, GameEvent.Emitter.of(playerEntity, blockState2)); - if (playerEntity != null) { - context.getStack().damage(1, playerEntity, (p) -> { - p.sendToolBreakStatus(context.getHand()); - }); + if (state2 != null) { + if (!world.isClient()) { + PlayerEntity player = context.getPlayer(); + world.setBlockState(pos, state2, Block.NOTIFY_ALL_AND_REDRAW); + world.emitGameEvent(GameEvent.BLOCK_CHANGE, pos, GameEvent.Emitter.of(player, state2)); + if (player != null) { + context.getStack().damage(1, player, LivingEntity.getSlotForHand(context.getHand())); } } - cir.setReturnValue(ActionResult.success(world.isClient())); } } diff --git a/src/main/java/net/chikorita_lover/caffeinated/recipe/CoffeeBrewingRecipe.java b/src/main/java/net/chikorita_lover/caffeinated/recipe/CoffeeBrewingRecipe.java index 7be21df..a4419c0 100644 --- a/src/main/java/net/chikorita_lover/caffeinated/recipe/CoffeeBrewingRecipe.java +++ b/src/main/java/net/chikorita_lover/caffeinated/recipe/CoffeeBrewingRecipe.java @@ -1,26 +1,27 @@ -package com.chikoritalover.caffeinated.recipe; +package net.chikorita_lover.caffeinated.recipe; -import com.chikoritalover.caffeinated.Caffeinated; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import net.minecraft.inventory.Inventory; +import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; +import com.mojang.serialization.codecs.RecordCodecBuilder; +import net.chikorita_lover.caffeinated.Caffeinated; +import net.chikorita_lover.caffeinated.registry.CaffeinatedRecipeTypes; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; -import net.minecraft.network.PacketByteBuf; +import net.minecraft.network.RegistryByteBuf; +import net.minecraft.network.codec.PacketCodec; import net.minecraft.recipe.Ingredient; import net.minecraft.recipe.Recipe; import net.minecraft.recipe.RecipeSerializer; import net.minecraft.recipe.RecipeType; -import net.minecraft.registry.DynamicRegistryManager; -import net.minecraft.registry.Registries; +import net.minecraft.registry.RegistryWrapper; import net.minecraft.util.Identifier; -import net.minecraft.util.JsonHelper; import net.minecraft.util.collection.DefaultedList; import net.minecraft.world.World; -public class CoffeeBrewingRecipe implements Recipe { +import java.util.Objects; + +public class CoffeeBrewingRecipe implements Recipe { protected final RecipeType type; - protected final Identifier id; protected final String group; protected final Ingredient input; protected final Ingredient reagent; @@ -28,9 +29,8 @@ public class CoffeeBrewingRecipe implements Recipe { protected final float experience; protected final int brewTime; - public CoffeeBrewingRecipe(Identifier id, String group, Ingredient input, Ingredient reagent, ItemStack output, float experience, int brewTime) { - this.type = Caffeinated.COFFEE_BREWING; - this.id = id; + public CoffeeBrewingRecipe(String group, Ingredient input, Ingredient reagent, ItemStack output, float experience, int brewTime) { + this.type = CaffeinatedRecipeTypes.COFFEE_BREWING; this.group = group; this.input = input; this.reagent = reagent; @@ -40,12 +40,12 @@ public CoffeeBrewingRecipe(Identifier id, String group, Ingredient input, Ingred } @Override - public boolean matches(Inventory inventory, World world) { - return this.input.test(inventory.getStack(0)) && this.reagent.test(inventory.getStack(1)); + public boolean matches(CoffeeBrewingRecipeInput input, World world) { + return this.input.test(input.input()) && this.reagent.test(input.reagent()); } @Override - public ItemStack craft(Inventory inventory, DynamicRegistryManager registryManager) { + public ItemStack craft(CoffeeBrewingRecipeInput input, RegistryWrapper.WrapperLookup lookup) { return this.output.copy(); } @@ -54,6 +54,11 @@ public boolean fits(int width, int height) { return true; } + @Override + public ItemStack getResult(RegistryWrapper.WrapperLookup registriesLookup) { + return this.output; + } + @Override public DefaultedList getIngredients() { DefaultedList defaultedList = DefaultedList.of(); @@ -66,11 +71,6 @@ public float getExperience() { return this.experience; } - @Override - public ItemStack getOutput(DynamicRegistryManager registryManager) { - return this.output; - } - @Override public String getGroup() { return this.group; @@ -80,11 +80,6 @@ public int getBrewTime() { return this.brewTime; } - @Override - public Identifier getId() { - return this.id; - } - @Override public RecipeType getType() { return this.type; @@ -101,52 +96,49 @@ public RecipeSerializer getSerializer() { } public static class Serializer implements RecipeSerializer { - private final int brewingTime; - final CoffeeBrewingRecipe.Serializer.RecipeFactory recipeFactory; + private final CoffeeBrewingRecipe.Serializer.RecipeFactory recipeFactory; + private final MapCodec codec; + private final PacketCodec packetCodec; - protected Serializer(CoffeeBrewingRecipe.Serializer.RecipeFactory recipeFactory, int brewingTime) { - this.brewingTime = brewingTime; + public Serializer(CoffeeBrewingRecipe.Serializer.RecipeFactory recipeFactory, int brewingTime) { this.recipeFactory = recipeFactory; + this.codec = RecordCodecBuilder.mapCodec((instance) -> { + var var10000 = instance.group(Codec.STRING.optionalFieldOf("group", "").forGetter((recipe) -> recipe.group), Ingredient.DISALLOW_EMPTY_CODEC.fieldOf("ingredient").forGetter((recipe) -> recipe.input), Ingredient.DISALLOW_EMPTY_CODEC.fieldOf("reagent").forGetter((recipe) -> recipe.reagent), ItemStack.VALIDATED_UNCOUNTED_CODEC.fieldOf("result").forGetter((recipe) -> recipe.output), Codec.FLOAT.fieldOf("experience").orElse(0.0F).forGetter((recipe) -> recipe.experience), Codec.INT.fieldOf("brewingtime").orElse(brewingTime).forGetter((recipe) -> recipe.brewTime)); + Objects.requireNonNull(recipeFactory); + return var10000.apply(instance, recipeFactory::create); + }); + this.packetCodec = PacketCodec.ofStatic(this::write, this::read); + } + + public MapCodec codec() { + return this.codec; } - @Override - public T read(Identifier identifier, JsonObject jsonObject) { - String string = JsonHelper.getString(jsonObject, "group", ""); - JsonElement jsonElement = JsonHelper.hasArray(jsonObject, "ingredient") ? JsonHelper.getArray(jsonObject, "ingredient") : JsonHelper.getObject(jsonObject, "ingredient"); - JsonElement jsonElement2 = JsonHelper.hasArray(jsonObject, "reagent") ? JsonHelper.getArray(jsonObject, "reagent") : JsonHelper.getObject(jsonObject, "reagent"); - Ingredient ingredient = Ingredient.fromJson(jsonElement, false); - Ingredient ingredient2 = Ingredient.fromJson(jsonElement2, false); - String string2 = JsonHelper.getString(jsonObject, "result"); - Identifier identifier2 = new Identifier(string2); - ItemStack itemStack = new ItemStack(Registries.ITEM.getOrEmpty(identifier2).orElseThrow(() -> new IllegalStateException("Item: " + string2 + " does not exist"))); - float f = JsonHelper.getFloat(jsonObject, "experience", 0.0F); - int i = JsonHelper.getInt(jsonObject, "brewingtime", this.brewingTime); - return this.recipeFactory.create(identifier, string, ingredient, ingredient2, itemStack, f, i); + public PacketCodec packetCodec() { + return this.packetCodec; } - @Override - public T read(Identifier identifier, PacketByteBuf packetByteBuf) { - String string = packetByteBuf.readString(); - Ingredient ingredient = Ingredient.fromPacket(packetByteBuf); - Ingredient ingredient2 = Ingredient.fromPacket(packetByteBuf); - ItemStack itemStack = packetByteBuf.readItemStack(); - float f = packetByteBuf.readFloat(); - int i = packetByteBuf.readVarInt(); - return this.recipeFactory.create(identifier, string, ingredient, ingredient2, itemStack, f, i); + public T read(RegistryByteBuf buf) { + String group = buf.readString(); + Ingredient input = Ingredient.PACKET_CODEC.decode(buf); + Ingredient reagent = Ingredient.PACKET_CODEC.decode(buf); + ItemStack output = ItemStack.PACKET_CODEC.decode(buf); + float experience = buf.readFloat(); + int brewingTime = buf.readVarInt(); + return this.recipeFactory.create(group, input, reagent, output, experience, brewingTime); } - @Override - public void write(PacketByteBuf packetByteBuf, T coffeeBrewingRecipe) { - packetByteBuf.writeString(coffeeBrewingRecipe.group); - coffeeBrewingRecipe.input.write(packetByteBuf); - coffeeBrewingRecipe.reagent.write(packetByteBuf); - packetByteBuf.writeItemStack(coffeeBrewingRecipe.output); - packetByteBuf.writeFloat(coffeeBrewingRecipe.experience); - packetByteBuf.writeVarInt(coffeeBrewingRecipe.brewTime); + public void write(RegistryByteBuf buf, T coffeeBrewingRecipe) { + buf.writeString(coffeeBrewingRecipe.group); + Ingredient.PACKET_CODEC.encode(buf, coffeeBrewingRecipe.input); + Ingredient.PACKET_CODEC.encode(buf, coffeeBrewingRecipe.reagent); + ItemStack.PACKET_CODEC.encode(buf, coffeeBrewingRecipe.output); + buf.writeFloat(coffeeBrewingRecipe.experience); + buf.writeVarInt(coffeeBrewingRecipe.brewTime); } public interface RecipeFactory { - T create(Identifier identifier, String group, Ingredient input, Ingredient reagent, ItemStack output, float experience, int brewingTime); + T create(String group, Ingredient input, Ingredient reagent, ItemStack output, float experience, int brewingTime); } } } diff --git a/src/main/java/net/chikorita_lover/caffeinated/recipe/CoffeeBrewingRecipeInput.java b/src/main/java/net/chikorita_lover/caffeinated/recipe/CoffeeBrewingRecipeInput.java index d3ebd9c..2dbd824 100644 --- a/src/main/java/net/chikorita_lover/caffeinated/recipe/CoffeeBrewingRecipeInput.java +++ b/src/main/java/net/chikorita_lover/caffeinated/recipe/CoffeeBrewingRecipeInput.java @@ -1,2 +1,24 @@ -package net.chikorita_lover.caffeinated.recipe;public class CoffeeBrewingRecipeInput { +package net.chikorita_lover.caffeinated.recipe; + +import net.minecraft.item.ItemStack; +import net.minecraft.recipe.input.RecipeInput; + +public record CoffeeBrewingRecipeInput(ItemStack input, ItemStack reagent) implements RecipeInput { + public ItemStack getStackInSlot(int slot) { + ItemStack stack; + switch (slot) { + case 0 -> stack = this.input; + case 1 -> stack = this.reagent; + default -> throw new IllegalArgumentException("Recipe does not contain slot " + slot); + } + return stack; + } + + public int getSize() { + return 2; + } + + public boolean isEmpty() { + return this.input.isEmpty() && this.reagent.isEmpty(); + } } diff --git a/src/main/java/net/chikorita_lover/caffeinated/recipe/CoffeeBrewingRecipeJsonBuilder.java b/src/main/java/net/chikorita_lover/caffeinated/recipe/CoffeeBrewingRecipeJsonBuilder.java index fba441e..bc75a65 100644 --- a/src/main/java/net/chikorita_lover/caffeinated/recipe/CoffeeBrewingRecipeJsonBuilder.java +++ b/src/main/java/net/chikorita_lover/caffeinated/recipe/CoffeeBrewingRecipeJsonBuilder.java @@ -1,25 +1,23 @@ -package com.chikoritalover.caffeinated.recipe; +package net.chikorita_lover.caffeinated.recipe; -import com.chikoritalover.caffeinated.Caffeinated; -import com.google.gson.JsonObject; import net.minecraft.advancement.Advancement; +import net.minecraft.advancement.AdvancementCriterion; +import net.minecraft.advancement.AdvancementRequirements; import net.minecraft.advancement.AdvancementRewards; -import net.minecraft.advancement.CriterionMerger; -import net.minecraft.advancement.criterion.CriterionConditions; import net.minecraft.advancement.criterion.RecipeUnlockedCriterion; import net.minecraft.data.server.recipe.CraftingRecipeJsonBuilder; -import net.minecraft.data.server.recipe.RecipeJsonProvider; -import net.minecraft.data.server.recipe.RecipeProvider; +import net.minecraft.data.server.recipe.RecipeExporter; import net.minecraft.item.Item; import net.minecraft.item.ItemConvertible; +import net.minecraft.item.ItemStack; import net.minecraft.recipe.Ingredient; -import net.minecraft.recipe.RecipeSerializer; import net.minecraft.recipe.book.RecipeCategory; -import net.minecraft.registry.Registries; import net.minecraft.util.Identifier; import org.jetbrains.annotations.Nullable; -import java.util.function.Consumer; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.Objects; public class CoffeeBrewingRecipeJsonBuilder implements CraftingRecipeJsonBuilder { private final RecipeCategory category; @@ -28,12 +26,14 @@ public class CoffeeBrewingRecipeJsonBuilder implements CraftingRecipeJsonBuilder private final Ingredient reagent; private final float experience; private final int brewingTime; - private final Advancement.Builder advancementBuilder = Advancement.Builder.createUntelemetered(); + private final Map> criteria = new LinkedHashMap<>(); + private final CoffeeBrewingRecipe.Serializer.RecipeFactory recipeFactory; @Nullable private String group; - private CoffeeBrewingRecipeJsonBuilder(RecipeCategory category, ItemConvertible output, Ingredient input, Ingredient reagent, float experience, int brewingTime) { + private CoffeeBrewingRecipeJsonBuilder(RecipeCategory category, CoffeeBrewingRecipe.Serializer.RecipeFactory recipeFactory, ItemConvertible output, Ingredient input, Ingredient reagent, float experience, int brewingTime) { this.category = category; + this.recipeFactory = recipeFactory; this.output = output.asItem(); this.input = input; this.reagent = reagent; @@ -42,18 +42,18 @@ private CoffeeBrewingRecipeJsonBuilder(RecipeCategory category, ItemConvertible } public static CoffeeBrewingRecipeJsonBuilder create(Ingredient input, Ingredient reagent, RecipeCategory category, ItemConvertible output, float experience, int cookingTime) { - return new CoffeeBrewingRecipeJsonBuilder(category, output, input, reagent, experience, cookingTime); + return new CoffeeBrewingRecipeJsonBuilder(category, CoffeeBrewingRecipe::new, output, input, reagent, experience, cookingTime); } @Override - public CoffeeBrewingRecipeJsonBuilder criterion(String string, CriterionConditions criterionConditions) { - this.advancementBuilder.criterion(string, criterionConditions); + public CraftingRecipeJsonBuilder criterion(String name, AdvancementCriterion criterion) { + this.criteria.put(name, criterion); return this; } @Override - public CoffeeBrewingRecipeJsonBuilder group(@Nullable String string) { - this.group = string; + public CoffeeBrewingRecipeJsonBuilder group(@Nullable String group) { + this.group = group; return this; } @@ -63,85 +63,17 @@ public Item getOutputItem() { } @Override - public void offerTo(Consumer exporter, Identifier recipeId) { + public void offerTo(RecipeExporter exporter, Identifier recipeId) { this.validate(recipeId); - this.advancementBuilder.parent(ROOT).criterion("has_the_recipe", RecipeUnlockedCriterion.create(recipeId)).rewards(AdvancementRewards.Builder.recipe(recipeId)).criteriaMerger(CriterionMerger.OR); - exporter.accept(new CoffeeBrewingRecipeJsonBuilder.CoffeeBrewingRecipeJsonProvider(recipeId, this.group == null ? "" : this.group, this.input, this.reagent, this.output, this.experience, this.brewingTime, this.advancementBuilder, recipeId.withPrefixedPath("recipes/" + this.category.getName() + "/"))); + Advancement.Builder builder = exporter.getAdvancementBuilder().criterion("has_the_recipe", RecipeUnlockedCriterion.create(recipeId)).rewards(AdvancementRewards.Builder.recipe(recipeId)).criteriaMerger(AdvancementRequirements.CriterionMerger.OR); + this.criteria.forEach(builder::criterion); + CoffeeBrewingRecipe recipe = this.recipeFactory.create(Objects.requireNonNullElse(this.group, ""), this.input, this.reagent, new ItemStack(this.output), this.experience, this.brewingTime); + exporter.accept(recipeId, recipe, builder.build(recipeId.withPrefixedPath("recipes/" + this.category.getName() + "/"))); } private void validate(Identifier recipeId) { - if (this.advancementBuilder.getCriteria().isEmpty()) { + if (this.criteria.isEmpty()) { throw new IllegalStateException("No way of obtaining recipe " + recipeId); } } - - @Override - public void offerTo(Consumer exporter, String recipePath) { - Identifier identifier2 = new Identifier(Caffeinated.MODID, recipePath); - Identifier identifier = CraftingRecipeJsonBuilder.getItemId(this.getOutputItem()); - if (identifier2.equals(identifier)) { - throw new IllegalStateException("Recipe " + recipePath + " should remove its 'save' argument as it is equal to default one"); - } - this.offerTo(exporter, identifier2); - } - - static class CoffeeBrewingRecipeJsonProvider implements RecipeJsonProvider { - private final Identifier recipeId; - private final String group; - private final Ingredient input; - private final Ingredient reagent; - private final Item result; - private final float experience; - private final int brewingtime; - private final Advancement.Builder advancementBuilder; - private final Identifier advancementId; - private final RecipeSerializer serializer; - - public CoffeeBrewingRecipeJsonProvider(Identifier recipeId, String group, Ingredient input, Ingredient reagent, Item result, float experience, int brewingTime, Advancement.Builder advancementBuilder, Identifier advancementId) { - this.recipeId = recipeId; - this.group = group; - this.input = input; - this.reagent = reagent; - this.result = result; - this.experience = experience; - this.brewingtime = brewingTime; - this.advancementBuilder = advancementBuilder; - this.advancementId = advancementId; - this.serializer = Caffeinated.COFFEE_BREWING_SERIALIZER; - } - - @Override - public void serialize(JsonObject json) { - if (!this.group.isEmpty()) { - json.addProperty("group", this.group); - } - json.add("ingredient", this.input.toJson()); - json.add("reagent", this.reagent.toJson()); - json.addProperty("result", Registries.ITEM.getId(this.result).toString()); - json.addProperty("experience", this.experience); - json.addProperty("brewingtime", this.brewingtime); - } - - @Override - public RecipeSerializer getSerializer() { - return this.serializer; - } - - @Override - public Identifier getRecipeId() { - return this.recipeId; - } - - @Override - @Nullable - public JsonObject toAdvancementJson() { - return this.advancementBuilder.toJson(); - } - - @Override - @Nullable - public Identifier getAdvancementId() { - return this.advancementId; - } - } } diff --git a/src/main/java/net/chikorita_lover/caffeinated/registry/CaffeinatedBiomeTags.java b/src/main/java/net/chikorita_lover/caffeinated/registry/CaffeinatedBiomeTags.java index e8e4b37..399c1ad 100644 --- a/src/main/java/net/chikorita_lover/caffeinated/registry/CaffeinatedBiomeTags.java +++ b/src/main/java/net/chikorita_lover/caffeinated/registry/CaffeinatedBiomeTags.java @@ -1,18 +1,17 @@ -package com.chikoritalover.caffeinated.registry; +package net.chikorita_lover.caffeinated.registry; -import com.chikoritalover.caffeinated.Caffeinated; +import net.chikorita_lover.caffeinated.Caffeinated; import net.minecraft.registry.RegistryKeys; import net.minecraft.registry.tag.TagKey; -import net.minecraft.util.Identifier; import net.minecraft.world.biome.Biome; public class CaffeinatedBiomeTags { public static final TagKey SPAWNS_CIVETS = of("spawns_civets"); - private static TagKey of(String id) { - return TagKey.of(RegistryKeys.BIOME, new Identifier(Caffeinated.MODID, id)); + public static void register() { } - public static void register() { + private static TagKey of(String id) { + return TagKey.of(RegistryKeys.BIOME, Caffeinated.of(id)); } } diff --git a/src/main/java/net/chikorita_lover/caffeinated/registry/CaffeinatedBlockEntityTypes.java b/src/main/java/net/chikorita_lover/caffeinated/registry/CaffeinatedBlockEntityTypes.java new file mode 100644 index 0000000..715291b --- /dev/null +++ b/src/main/java/net/chikorita_lover/caffeinated/registry/CaffeinatedBlockEntityTypes.java @@ -0,0 +1,14 @@ +package net.chikorita_lover.caffeinated.registry; + +import net.chikorita_lover.caffeinated.Caffeinated; +import net.chikorita_lover.caffeinated.block.entity.CauldronCampfireBlockEntity; +import net.minecraft.block.entity.BlockEntityType; +import net.minecraft.registry.Registries; +import net.minecraft.registry.Registry; + +public class CaffeinatedBlockEntityTypes { + public static final BlockEntityType CAULDRON_CAMPFIRE = Registry.register(Registries.BLOCK_ENTITY_TYPE, Caffeinated.of("cauldron_campfire"), BlockEntityType.Builder.create(CauldronCampfireBlockEntity::new, CaffeinatedBlocks.CAULDRON_CAMPFIRE, CaffeinatedBlocks.SOUL_CAULDRON_CAMPFIRE).build()); + + public static void register() { + } +} diff --git a/src/main/java/net/chikorita_lover/caffeinated/registry/CaffeinatedBlocks.java b/src/main/java/net/chikorita_lover/caffeinated/registry/CaffeinatedBlocks.java index 748c780..52f68e9 100644 --- a/src/main/java/net/chikorita_lover/caffeinated/registry/CaffeinatedBlocks.java +++ b/src/main/java/net/chikorita_lover/caffeinated/registry/CaffeinatedBlocks.java @@ -1,23 +1,19 @@ package net.chikorita_lover.caffeinated.registry; import net.chikorita_lover.caffeinated.Caffeinated; -import net.chikorita_lover.caffeinated.block.CoffeeCauldronBlock; -import net.chikorita_lover.caffeinated.block.CoffeeShrubBlock; -import net.chikorita_lover.caffeinated.block.FloweringCoffeeShrubBlock; -import net.chikorita_lover.caffeinated.block.GroundCoffeeCauldronBlock; +import net.chikorita_lover.caffeinated.block.*; import net.fabricmc.fabric.api.registry.FlammableBlockRegistry; import net.minecraft.block.*; import net.minecraft.block.piston.PistonBehavior; import net.minecraft.item.BlockItem; import net.minecraft.item.Item; import net.minecraft.particle.ParticleEffect; -import net.minecraft.particle.ParticleType; import net.minecraft.particle.ParticleTypes; +import net.minecraft.particle.SimpleParticleType; import net.minecraft.registry.Registries; import net.minecraft.registry.Registry; import net.minecraft.sound.BlockSoundGroup; import net.minecraft.util.ColorCode; -import net.minecraft.util.Identifier; public class CaffeinatedBlocks { public static final Block COFFEE_SHRUB = register("coffee_shrub", new CoffeeShrubBlock(AbstractBlock.Settings.create().ticksRandomly().noCollision().sounds(BlockSoundGroup.AZALEA))); @@ -26,22 +22,22 @@ public class CaffeinatedBlocks { public static final Block COFFEE_BEAN_BLOCK = registerBlockWithItem("coffee_bean_block", new Block(AbstractBlock.Settings.create().mapColor(MapColor.SPRUCE_BROWN).sounds(CaffeinatedBlockSoundGroup.COFFEE_BEAN_BLOCK).strength(1.8F, 3.0F))); public static final Block GROUND_COFFEE_BLOCK = registerBlockWithItem("ground_coffee_block", new ColoredFallingBlock(new ColorCode(0x814D2B), AbstractBlock.Settings.create().mapColor(MapColor.SPRUCE_BROWN).strength(0.5F).sounds(CaffeinatedBlockSoundGroup.GROUND_COFFEE_BLOCK))); public static final Block COFFEE_BERRY_CRATE = registerBlockWithItem("coffee_berry_crate", new Block(AbstractBlock.Settings.create().mapColor(MapColor.DARK_CRIMSON).sounds(BlockSoundGroup.WOOD).strength(2.0F, 3.0F))); - public static final Block COFFEE_CAULDRON = register("coffee_cauldron", new CoffeeCauldronBlock(CaffeinatedCauldronBehavior.COFFEE_CAULDRON_BEHAVIOR, AbstractBlock.Settings.copy(Blocks.CAULDRON))); - public static final Block GROUND_COFFEE_CAULDRON = register("ground_coffee_cauldron", new GroundCoffeeCauldronBlock(AbstractBlock.Settings.copy(Blocks.CAULDRON).ticksRandomly())); + public static final Block COFFEE_CAULDRON = register("coffee_cauldron", new CoffeeCauldronBlock(AbstractBlock.Settings.copy(Blocks.CAULDRON))); + public static final Block GROUND_COFFEE_CAULDRON = register("ground_coffee_cauldron", new CoffeeCauldronBlock(AbstractBlock.Settings.copy(Blocks.CAULDRON))); public static final Block CAULDRON_CAMPFIRE = register("cauldron_campfire", createCauldronCampfire(Blocks.CAMPFIRE, ParticleTypes.FLAME)); public static final Block SOUL_CAULDRON_CAMPFIRE = register("soul_cauldron_campfire", createCauldronCampfire(Blocks.SOUL_CAMPFIRE, ParticleTypes.SOUL_FIRE_FLAME)); public static final Block TIRAMISU = registerBlockWithItem("tiramisu", new TiramisuBlock(AbstractBlock.Settings.create().solid().strength(0.5F).sounds(BlockSoundGroup.WOOL).pistonBehavior(PistonBehavior.DESTROY)), new Item.Settings().maxCount(1)); - private static CauldronCampfireBlock createCauldronCampfire(Block campfireBlock, ParticleEffect particleEffect) { + private static CauldronCampfireBlock createCauldronCampfire(Block campfireBlock, SimpleParticleType particle) { Block cauldronBlock = Blocks.CAULDRON; - return new CauldronCampfireBlock(campfireBlock, particleEffect, AbstractBlock.Settings.copy(campfireBlock).sounds(cauldronBlock.getSoundGroup(cauldronBlock.getDefaultState()))); + return new CauldronCampfireBlock(campfireBlock, particle, AbstractBlock.Settings.copy(campfireBlock).sounds(cauldronBlock.getDefaultState().getSoundGroup())); } public static Block registerBlockWithItem(String id, Block block, Item.Settings settings) { Block block2 = register(id, block); - CaffeinatedItems.register(new BlockItem(block, settings)); + CaffeinatedItems.register(block, new BlockItem(block, settings)); return block2; } diff --git a/src/main/java/net/chikorita_lover/caffeinated/registry/CaffeinatedCauldronBehavior.java b/src/main/java/net/chikorita_lover/caffeinated/registry/CaffeinatedCauldronBehavior.java deleted file mode 100644 index 2f9dfb5..0000000 --- a/src/main/java/net/chikorita_lover/caffeinated/registry/CaffeinatedCauldronBehavior.java +++ /dev/null @@ -1,122 +0,0 @@ -package net.chikorita_lover.caffeinated.registry; - -import net.chikorita_lover.caffeinated.block.CoffeeCauldronBlock; -import net.minecraft.block.Blocks; -import net.minecraft.block.LeveledCauldronBlock; -import net.minecraft.block.cauldron.CauldronBehavior; -import net.minecraft.component.DataComponentTypes; -import net.minecraft.component.type.PotionContentsComponent; -import net.minecraft.entity.ExperienceOrbEntity; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.item.ItemUsage; -import net.minecraft.item.Items; -import net.minecraft.potion.Potions; -import net.minecraft.server.world.ServerWorld; -import net.minecraft.sound.SoundCategory; -import net.minecraft.sound.SoundEvents; -import net.minecraft.stat.Stats; -import net.minecraft.util.ItemActionResult; -import net.minecraft.util.math.Vec3d; -import net.minecraft.world.event.GameEvent; - -public class CaffeinatedCauldronBehavior { - public static final CauldronBehavior.CauldronBehaviorMap COFFEE_CAULDRON_BEHAVIOR = CauldronBehavior.createMap("caffeinated_coffee_cauldron"); - public static final CauldronBehavior.CauldronBehaviorMap GROUND_COFFEE_CAULDRON_BEHAVIOR = CauldronBehavior.createMap("caffeinated_ground_coffee_cauldron"); - - public static void register() { - CauldronBehavior.EMPTY_CAULDRON_BEHAVIOR.map().put(CaffeinatedItems.COFFEE_BOTTLE, (state, world, pos, player, hand, stack) -> { - if (!world.isClient()) { - player.setStackInHand(hand, ItemUsage.exchangeStack(stack, player, new ItemStack(Items.GLASS_BOTTLE))); - player.incrementStat(Stats.USE_CAULDRON); - player.incrementStat(Stats.USED.getOrCreateStat(stack.getItem())); - world.setBlockState(pos, CaffeinatedBlocks.COFFEE_CAULDRON.getDefaultState()); - world.playSound(null, pos, SoundEvents.ITEM_BOTTLE_EMPTY, SoundCategory.BLOCKS); - world.emitGameEvent(null, GameEvent.FLUID_PLACE, pos); - } - return ItemActionResult.success(world.isClient()); - }); - CauldronBehavior.WATER_CAULDRON_BEHAVIOR.map().put(CaffeinatedItems.GROUND_COFFEE, (state, world, pos, player, hand, stack) -> { - if (!world.isClient()) { - Item item = stack.getItem(); - if (!player.isCreative()) { - stack.decrement(1); - } - player.setStackInHand(hand, ItemUsage.exchangeStack(stack, player, new ItemStack(Blocks.AIR))); - player.incrementStat(Stats.USE_CAULDRON); - player.incrementStat(Stats.USED.getOrCreateStat(item)); - world.setBlockState(pos, CaffeinatedBlocks.GROUND_COFFEE_CAULDRON.getDefaultState().with(LeveledCauldronBlock.LEVEL, state.get(LeveledCauldronBlock.LEVEL))); - world.playSound(null, pos, CaffeinatedSoundEvents.ITEM_GROUND_COFFEE_SPLASH, SoundCategory.BLOCKS); - world.emitGameEvent(null, GameEvent.FLUID_PLACE, pos); - } - - return ItemActionResult.success(world.isClient()); - }); - COFFEE_CAULDRON_BEHAVIOR.map().put(Items.GLASS_BOTTLE, (state, world, pos, player, hand, stack) -> { - if (!world.isClient()) { - player.setStackInHand(hand, ItemUsage.exchangeStack(stack, player, new ItemStack(CaffeinatedItems.COFFEE_BOTTLE))); - player.incrementStat(CaffeinatedStats.COFFEE_TAKEN); - player.incrementStat(Stats.USED.getOrCreateStat(stack.getItem())); - LeveledCauldronBlock.decrementFluidLevel(state, world, pos); - world.playSound(null, pos, SoundEvents.ITEM_BOTTLE_FILL, SoundCategory.BLOCKS); - world.emitGameEvent(null, GameEvent.FLUID_PICKUP, pos); - if (state.get(CoffeeCauldronBlock.REWARD_EXPERIENCE)) { - ExperienceOrbEntity.spawn((ServerWorld) world, Vec3d.ofCenter(pos), world.getRandom().nextBetween(1, 3)); - world.setBlockState(pos, world.getBlockState(pos).cycle(CoffeeCauldronBlock.REWARD_EXPERIENCE)); - } - } - return ItemActionResult.success(world.isClient()); - }); - COFFEE_CAULDRON_BEHAVIOR.map().put(CaffeinatedItems.COFFEE_BOTTLE, (state, world, pos, player, hand, stack) -> { - if (state.get(LeveledCauldronBlock.LEVEL) == 3) { - return ItemActionResult.PASS_TO_DEFAULT_BLOCK_INTERACTION; - } - if (!world.isClient()) { - player.setStackInHand(hand, ItemUsage.exchangeStack(stack, player, new ItemStack(Items.GLASS_BOTTLE))); - player.incrementStat(Stats.USED.getOrCreateStat(stack.getItem())); - world.setBlockState(pos, state.cycle(LeveledCauldronBlock.LEVEL)); - world.playSound(null, pos, SoundEvents.ITEM_BOTTLE_EMPTY, SoundCategory.BLOCKS); - world.emitGameEvent(null, GameEvent.FLUID_PLACE, pos); - } - return ItemActionResult.success(world.isClient()); - }); - GROUND_COFFEE_CAULDRON_BEHAVIOR.map().put(Items.GLASS_BOTTLE, (state, world, pos, player, hand, stack) -> { - if (!world.isClient()) { - Item item = stack.getItem(); - player.setStackInHand(hand, ItemUsage.exchangeStack(stack, player, PotionContentsComponent.createStack(Items.POTION, Potions.WATER))); - player.incrementStat(Stats.USE_CAULDRON); - player.incrementStat(Stats.USED.getOrCreateStat(item)); - LeveledCauldronBlock.decrementFluidLevel(state, world, pos); - world.playSound(null, pos, SoundEvents.ITEM_BOTTLE_FILL, SoundCategory.BLOCKS); - world.emitGameEvent(null, GameEvent.FLUID_PICKUP, pos); - } - return ItemActionResult.success(world.isClient()); - }); - GROUND_COFFEE_CAULDRON_BEHAVIOR.map().put(Items.BUCKET, (state, world, pos, player, hand, stack) -> { - if (!world.isClient()) { - Item item = stack.getItem(); - player.setStackInHand(hand, ItemUsage.exchangeStack(stack, player, new ItemStack(Items.WATER_BUCKET))); - player.incrementStat(Stats.USE_CAULDRON); - player.incrementStat(Stats.USED.getOrCreateStat(item)); - world.setBlockState(pos, Blocks.CAULDRON.getDefaultState()); - world.playSound(null, pos, SoundEvents.ITEM_BUCKET_FILL, SoundCategory.BLOCKS); - world.emitGameEvent(null, GameEvent.FLUID_PICKUP, pos); - } - return ItemActionResult.success(world.isClient()); - }); - GROUND_COFFEE_CAULDRON_BEHAVIOR.map().put(Items.POTION, (state, world, pos, player, hand, stack) -> { - if (state.get(LeveledCauldronBlock.LEVEL) == 3 || !stack.contains(DataComponentTypes.POTION_CONTENTS) || !stack.get(DataComponentTypes.POTION_CONTENTS).matches(Potions.WATER)) { - return ItemActionResult.PASS_TO_DEFAULT_BLOCK_INTERACTION; - } - if (!world.isClient()) { - player.setStackInHand(hand, ItemUsage.exchangeStack(stack, player, new ItemStack(Items.GLASS_BOTTLE))); - player.incrementStat(Stats.USE_CAULDRON); - player.incrementStat(Stats.USED.getOrCreateStat(stack.getItem())); - world.setBlockState(pos, state.cycle(LeveledCauldronBlock.LEVEL)); - world.playSound(null, pos, SoundEvents.ITEM_BOTTLE_EMPTY, SoundCategory.BLOCKS); - world.emitGameEvent(null, GameEvent.FLUID_PLACE, pos); - } - return ItemActionResult.success(world.isClient()); - }); - } -} diff --git a/src/main/java/net/chikorita_lover/caffeinated/registry/CaffeinatedEntities.java b/src/main/java/net/chikorita_lover/caffeinated/registry/CaffeinatedEntities.java index 880e90d..77baa77 100644 --- a/src/main/java/net/chikorita_lover/caffeinated/registry/CaffeinatedEntities.java +++ b/src/main/java/net/chikorita_lover/caffeinated/registry/CaffeinatedEntities.java @@ -1,18 +1,15 @@ -package com.chikoritalover.caffeinated.registry; +package net.chikorita_lover.caffeinated.registry; -import com.chikoritalover.caffeinated.Caffeinated; -import com.chikoritalover.caffeinated.entity.CivetEntity; +import net.chikorita_lover.caffeinated.Caffeinated; +import net.chikorita_lover.caffeinated.entity.CivetEntity; import net.fabricmc.fabric.api.object.builder.v1.entity.FabricDefaultAttributeRegistry; -import net.fabricmc.fabric.api.object.builder.v1.entity.FabricEntityTypeBuilder; -import net.minecraft.entity.EntityDimensions; import net.minecraft.entity.EntityType; import net.minecraft.entity.SpawnGroup; import net.minecraft.registry.Registries; import net.minecraft.registry.Registry; -import net.minecraft.util.Identifier; public class CaffeinatedEntities { - public static final EntityType CIVET = Registry.register(Registries.ENTITY_TYPE, new Identifier(Caffeinated.MODID, "civet"), FabricEntityTypeBuilder.create(SpawnGroup.CREATURE, CivetEntity::new).dimensions(EntityDimensions.fixed(0.7F, 0.6F)).build()); + public static final EntityType CIVET = Registry.register(Registries.ENTITY_TYPE, Caffeinated.of("civet"), EntityType.Builder.create(CivetEntity::new, SpawnGroup.CREATURE).dimensions(0.7F, 0.6F).build()); public static void register() { FabricDefaultAttributeRegistry.register(CIVET, CivetEntity.createCivetAttributes()); diff --git a/src/main/java/net/chikorita_lover/caffeinated/registry/CaffeinatedFoodComponents.java b/src/main/java/net/chikorita_lover/caffeinated/registry/CaffeinatedFoodComponents.java index 87eb742..6a4488a 100644 --- a/src/main/java/net/chikorita_lover/caffeinated/registry/CaffeinatedFoodComponents.java +++ b/src/main/java/net/chikorita_lover/caffeinated/registry/CaffeinatedFoodComponents.java @@ -5,6 +5,7 @@ public class CaffeinatedFoodComponents { public static final FoodComponent COFFEE_BERRIES = new FoodComponent.Builder().nutrition(2).saturationModifier(0.1F).build(); - public static final FoodComponent COFFEE_BOTTLE = new FoodComponent.Builder().nutrition(2).saturationModifier(0.3F).statusEffect(new StatusEffectInstance(CaffeinatedStatusEffects.CAFFEINE, 3600, 0), 1.0F).build(); - public static final FoodComponent TIRAMISU = new FoodComponent.Builder().nutrition(5).saturationModifier(0.6F).statusEffect(new StatusEffectInstance(CaffeinatedStatusEffects.CAFFEINE, 600, 1), 1.0F).build(); + public static final FoodComponent BLACK_COFFEE_BOTTLE = (new FoodComponent.Builder()).nutrition(2).saturationModifier(0.3F).statusEffect(new StatusEffectInstance(CaffeinatedStatusEffects.CAFFEINE, 3600, 1), 1.0F).build(); + public static final FoodComponent LATTE_COFFEE_BOTTLE = (new FoodComponent.Builder()).nutrition(3).saturationModifier(0.3F).statusEffect(new StatusEffectInstance(CaffeinatedStatusEffects.CAFFEINE, 2700, 0), 1.0F).build(); + public static final FoodComponent TIRAMISU_SLICE = (new FoodComponent.Builder()).nutrition(2).saturationModifier(0.3F).statusEffect(new StatusEffectInstance(CaffeinatedStatusEffects.CAFFEINE, 600, 1), 1.0F).snack().build(); } diff --git a/src/main/java/net/chikorita_lover/caffeinated/registry/CaffeinatedItemGroups.java b/src/main/java/net/chikorita_lover/caffeinated/registry/CaffeinatedItemGroups.java index 3d70dbf..74769f4 100644 --- a/src/main/java/net/chikorita_lover/caffeinated/registry/CaffeinatedItemGroups.java +++ b/src/main/java/net/chikorita_lover/caffeinated/registry/CaffeinatedItemGroups.java @@ -1,33 +1,26 @@ -package com.chikoritalover.caffeinated.registry; +package net.chikorita_lover.caffeinated.registry; -import com.chikoritalover.caffeinated.Caffeinated; +import net.chikorita_lover.caffeinated.Caffeinated; +import net.chikorita_lover.caffeinated.block.CauldronCampfireBlock; import net.fabricmc.fabric.api.itemgroup.v1.FabricItemGroup; import net.fabricmc.fabric.api.itemgroup.v1.FabricItemGroupEntries; import net.fabricmc.fabric.api.itemgroup.v1.ItemGroupEvents; import net.minecraft.block.Block; import net.minecraft.block.Blocks; -import net.minecraft.block.CampfireBlock; import net.minecraft.item.*; -import net.minecraft.potion.PotionUtil; -import net.minecraft.potion.Potions; import net.minecraft.registry.Registries; import net.minecraft.registry.Registry; import net.minecraft.registry.RegistryKey; import net.minecraft.registry.RegistryKeys; import net.minecraft.text.Text; -import net.minecraft.util.Identifier; import java.util.Set; public class CaffeinatedItemGroups { - private static final RegistryKey CAFFEINATED = RegistryKey.of(RegistryKeys.ITEM_GROUP, new Identifier(Caffeinated.MODID, "caffeinated")); + private static final RegistryKey CAFFEINATED = RegistryKey.of(RegistryKeys.ITEM_GROUP, Caffeinated.of("caffeinated")); public static void register() { - Registry.register(Registries.ITEM_GROUP, CAFFEINATED, FabricItemGroup.builder() - .displayName(Text.translatable("itemGroup.caffeinated.caffeinated")) - .icon(CaffeinatedItems.BLACK_COFFEE_BOTTLE::getDefaultStack) - .build() - ); + Registry.register(Registries.ITEM_GROUP, CAFFEINATED, FabricItemGroup.builder().displayName(Text.translatable("itemGroup.caffeinated.caffeinated")).icon(CaffeinatedItems.BLACK_COFFEE_BOTTLE::getDefaultStack).build()); ItemGroupEvents.modifyEntriesEvent(ItemGroups.NATURAL).register(entries -> { entries.addBefore(Items.NETHER_WART, CaffeinatedItems.COFFEE_BERRIES); @@ -54,7 +47,6 @@ public static void register() { entries.add(CaffeinatedBlocks.GROUND_COFFEE_BLOCK, visibility); registerCampfiresCauldron(entries, visibility); entries.add(Items.GLASS_BOTTLE, visibility); - entries.add(PotionUtil.setPotion(Items.POTION.getDefaultStack(), Potions.WATER), visibility); entries.add(CaffeinatedItems.BLACK_COFFEE_BOTTLE, visibility); entries.add(CaffeinatedItems.LATTE_COFFEE_BOTTLE, visibility); entries.add(CaffeinatedBlocks.TIRAMISU, visibility); @@ -66,9 +58,9 @@ public static void register() { private static void registerCampfiresCauldron(FabricItemGroupEntries entries, ItemGroup.StackVisibility visibility) { Set set = ItemStackSet.create(); - for (Block block : Registries.BLOCK.stream().filter(block -> block instanceof CampfireBlock).toList()) { - ItemStack itemStack = block.asItem().getDefaultStack(); - set.add(itemStack); + for (Block block : CauldronCampfireBlock.CAMPFIRE_TO_CAULDRON_CAMPFIRE.keySet()) { + ItemStack stack = block.asItem().getDefaultStack(); + set.add(stack); } set.add(Items.CAULDRON.getDefaultStack()); entries.addAll(set, visibility); diff --git a/src/main/java/net/chikorita_lover/caffeinated/registry/CaffeinatedItems.java b/src/main/java/net/chikorita_lover/caffeinated/registry/CaffeinatedItems.java index 2d5ff17..c540ac1 100644 --- a/src/main/java/net/chikorita_lover/caffeinated/registry/CaffeinatedItems.java +++ b/src/main/java/net/chikorita_lover/caffeinated/registry/CaffeinatedItems.java @@ -2,10 +2,11 @@ import net.chikorita_lover.caffeinated.Caffeinated; import net.chikorita_lover.caffeinated.item.CoffeeBottleItem; +import net.chikorita_lover.caffeinated.item.LatteCoffeeBottleItem; import net.chikorita_lover.caffeinated.registry.tag.CaffeinatedBannerPatternTags; -import net.fabricmc.fabric.api.itemgroup.v1.ItemGroupEvents; import net.fabricmc.fabric.api.registry.CompostingChanceRegistry; import net.minecraft.block.Block; +import net.minecraft.component.type.FoodComponent; import net.minecraft.item.*; import net.minecraft.registry.Registries; import net.minecraft.registry.Registry; @@ -19,10 +20,10 @@ public class CaffeinatedItems { public static final Item BLACK_COFFEE_BOTTLE = register("coffee_bottle", createCoffeeBottle(CaffeinatedFoodComponents.BLACK_COFFEE_BOTTLE)); public static final Item LATTE_COFFEE_BOTTLE = register("latte_coffee_bottle", new LatteCoffeeBottleItem(new Item.Settings().food(CaffeinatedFoodComponents.LATTE_COFFEE_BOTTLE).maxCount(16).recipeRemainder(Items.GLASS_BOTTLE))); - public static final Item JAVA_BANNER_PATTERN = register("java_banner_pattern", new BannerPatternItem(CaffeinatedBannerPatternTags.JAVA_PATTERN_ITEM, (new Item.Settings()).maxCount(1))); + public static final Item JAVA_BANNER_PATTERN = register("java_banner_pattern", new BannerPatternItem(CaffeinatedBannerPatternTags.JAVA_PATTERN_ITEM, new Item.Settings().maxCount(1))); public static final Item TIRAMISU_SLICE = register("tiramisu_slice", new Item(new Item.Settings().food(CaffeinatedFoodComponents.TIRAMISU_SLICE))); - public static final Item CIVET_SPAWN_EGG = register("civet_spawn_egg", new SpawnEggItem(CaffeinatedEntities.CIVET, 0xDCCE95, 0x6F6A5F, new FabricItemSettings())); + public static final Item CIVET_SPAWN_EGG = register("civet_spawn_egg", new SpawnEggItem(CaffeinatedEntities.CIVET, 0xDCCE95, 0x6F6A5F, new Item.Settings())); private static Item createCoffeeBottle(FoodComponent foodComponent) { return new CoffeeBottleItem(new Item.Settings().food(foodComponent).maxCount(16).recipeRemainder(Items.GLASS_BOTTLE)); @@ -32,7 +33,7 @@ public static Item register(Block block) { return register(block, new BlockItem(block, new Item.Settings())); } - private static Item register(Block block, Item item) { + public static Item register(Block block, Item item) { return register(Registries.BLOCK.getId(block), item); } diff --git a/src/main/java/net/chikorita_lover/caffeinated/registry/CaffeinatedParticleTypes.java b/src/main/java/net/chikorita_lover/caffeinated/registry/CaffeinatedParticleTypes.java index 29c94c7..ad1ac2e 100644 --- a/src/main/java/net/chikorita_lover/caffeinated/registry/CaffeinatedParticleTypes.java +++ b/src/main/java/net/chikorita_lover/caffeinated/registry/CaffeinatedParticleTypes.java @@ -2,15 +2,20 @@ import net.chikorita_lover.caffeinated.Caffeinated; import net.fabricmc.fabric.api.particle.v1.FabricParticleTypes; +import net.minecraft.particle.ParticleEffect; +import net.minecraft.particle.ParticleType; import net.minecraft.particle.SimpleParticleType; import net.minecraft.registry.Registries; import net.minecraft.registry.Registry; import net.minecraft.util.Identifier; public class CaffeinatedParticleTypes { - public static final SimpleParticleType COFFEE_POP = FabricParticleTypes.simple(); + public static final ParticleType COFFEE_POP = register("coffee_pop", FabricParticleTypes.simple()); public static void register() { - Registry.register(Registries.PARTICLE_TYPE, Caffeinated.of("coffee_pop"), COFFEE_POP); + } + + private static ParticleType register(String id, ParticleType particle) { + return Registry.register(Registries.PARTICLE_TYPE, Caffeinated.of(id), particle); } } diff --git a/src/main/java/net/chikorita_lover/caffeinated/registry/CaffeinatedRecipeTypes.java b/src/main/java/net/chikorita_lover/caffeinated/registry/CaffeinatedRecipeTypes.java new file mode 100644 index 0000000..252318e --- /dev/null +++ b/src/main/java/net/chikorita_lover/caffeinated/registry/CaffeinatedRecipeTypes.java @@ -0,0 +1,18 @@ +package net.chikorita_lover.caffeinated.registry; + +import net.chikorita_lover.caffeinated.Caffeinated; +import net.chikorita_lover.caffeinated.recipe.CoffeeBrewingRecipe; +import net.minecraft.recipe.RecipeType; +import net.minecraft.registry.Registries; +import net.minecraft.registry.Registry; + +public class CaffeinatedRecipeTypes { + public static final RecipeType COFFEE_BREWING = Registry.register(Registries.RECIPE_TYPE, Caffeinated.of("coffee_brewing"), new RecipeType() { + public String toString() { + return "coffee_brewing"; + } + }); + + public static void register() { + } +} diff --git a/src/main/java/net/chikorita_lover/caffeinated/registry/CaffeinatedStats.java b/src/main/java/net/chikorita_lover/caffeinated/registry/CaffeinatedStats.java index 793b871..9204f08 100644 --- a/src/main/java/net/chikorita_lover/caffeinated/registry/CaffeinatedStats.java +++ b/src/main/java/net/chikorita_lover/caffeinated/registry/CaffeinatedStats.java @@ -9,6 +9,8 @@ public class CaffeinatedStats { public static final Identifier COFFEE_TAKEN = register("coffee_taken", StatFormatter.DEFAULT); + public static final Identifier EAT_TIRAMISU_SLICE = register("eat_tiramisu_slice", StatFormatter.DEFAULT); + public static final Identifier INTERACT_WITH_CAULDRON_CAMPFIRE = register("interact_with_cauldron_campfire", StatFormatter.DEFAULT); private static Identifier register(String path, StatFormatter formatter) { Identifier id = Caffeinated.of(path); diff --git a/src/main/java/net/chikorita_lover/caffeinated/registry/CaffeinatedTradeOffers.java b/src/main/java/net/chikorita_lover/caffeinated/registry/CaffeinatedTradeOffers.java index 1874180..bdaba29 100644 --- a/src/main/java/net/chikorita_lover/caffeinated/registry/CaffeinatedTradeOffers.java +++ b/src/main/java/net/chikorita_lover/caffeinated/registry/CaffeinatedTradeOffers.java @@ -7,7 +7,7 @@ public class CaffeinatedTradeOffers { public static void register() { TradeOfferHelper.registerVillagerOffers(VillagerProfession.FARMER, 3, factories -> { - factories.add(new TradeOffers.BuyForOneEmeraldFactory(CaffeinatedItems.COFFEE_BERRIES, 14, 12, 20)); + factories.add(new TradeOffers.BuyItemFactory(CaffeinatedItems.COFFEE_BERRIES, 14, 12, 20)); }); TradeOfferHelper.registerWanderingTraderOffers(1, factories -> { factories.add(new TradeOffers.SellItemFactory(CaffeinatedItems.COFFEE_BERRIES, 1, 1, 12, 1)); diff --git a/src/main/java/net/chikorita_lover/caffeinated/util/LootModificationUtils.java b/src/main/java/net/chikorita_lover/caffeinated/util/LootModificationUtils.java new file mode 100644 index 0000000..8558e91 --- /dev/null +++ b/src/main/java/net/chikorita_lover/caffeinated/util/LootModificationUtils.java @@ -0,0 +1,69 @@ +package net.chikorita_lover.caffeinated.util; + +import com.google.common.collect.ImmutableList; +import net.fabricmc.fabric.api.loot.v3.FabricLootPoolBuilder; +import net.minecraft.item.Item; +import net.minecraft.loot.LootPool; +import net.minecraft.loot.LootTable; +import net.minecraft.loot.entry.ItemEntry; +import net.minecraft.loot.entry.LootPoolEntry; + +import java.util.ArrayList; +import java.util.function.Consumer; +import java.util.function.Predicate; + +public final class LootModificationUtils { + /** + * Modifies a single loot pool present in the provided builder. + * + *

This method can be used instead of simply adding a new pool + * when you want the loot table to only drop items from one of the loot pool entries + * instead of multiple. + * + *

Calling this method turns the loot pool at the specified index into a builder and rebuilds it back into a loot pool afterward. + * + * @param builder the loot table builder + * @param index the list index of the target loot pool + * @param modifier the modifying function + */ + public static void modifyPool(LootTable.Builder builder, int index, Consumer modifier) { + ArrayList list = new ArrayList<>(builder.pools.build()); + + LootPool.Builder poolBuilder = FabricLootPoolBuilder.copyOf(list.get(index)); + modifier.accept(poolBuilder); + list.set(index, poolBuilder.build()); + + builder.pools = ImmutableList.builder().addAll(list); + } + + /** + * Modifies the loot pool entries of a provided loot pool builder. + * + *

Calling this method creates a new mutable list from the builder's + * entries and assigns the new list to the builder after making modifications. + * + * @param builder the loot pool builder + * @param modifier the modifying function + */ + public static void modifyPoolEntries(LootPool.Builder builder, Consumer> modifier) { + ArrayList entries = new ArrayList<>(builder.build().entries); + modifier.accept(entries); + builder.entries = ImmutableList.builder().addAll(entries); + } + + /** + * Removes all item entries in a loot pool builder that contain a matching item. + * + *

This method accepts a predicate for testing the item of each + * loot entry. Any entry that passes the test is removed from the loot pool. + * + *

Calling this method creates a new mutable list from the builder's + * entries and assigns the new list to the builder after making modifications. + * + * @param builder the loot pool builder + * @param itemPredicate the predicate to test entry items against + */ + public static void removeItemIf(LootPool.Builder builder, Predicate itemPredicate) { + modifyPoolEntries(builder, entries -> entries.removeIf(entry -> entry instanceof ItemEntry itemEntry && itemPredicate.test(itemEntry.item.value()))); + } +} diff --git a/src/main/java/net/chikorita_lover/caffeinated/world/CivetSpawner.java b/src/main/java/net/chikorita_lover/caffeinated/world/CivetSpawner.java index 96b34f6..092a74d 100644 --- a/src/main/java/net/chikorita_lover/caffeinated/world/CivetSpawner.java +++ b/src/main/java/net/chikorita_lover/caffeinated/world/CivetSpawner.java @@ -1,23 +1,17 @@ -package com.chikoritalover.caffeinated.world; +package net.chikorita_lover.caffeinated.world; -import com.chikoritalover.caffeinated.Caffeinated; -import com.chikoritalover.caffeinated.entity.CivetEntity; -import com.chikoritalover.caffeinated.registry.CaffeinatedBiomeTags; -import com.chikoritalover.caffeinated.registry.CaffeinatedEntities; -import net.minecraft.SharedConstants; +import net.chikorita_lover.caffeinated.Caffeinated; +import net.chikorita_lover.caffeinated.entity.CivetEntity; +import net.chikorita_lover.caffeinated.registry.CaffeinatedBiomeTags; +import net.chikorita_lover.caffeinated.registry.CaffeinatedEntities; import net.minecraft.entity.SpawnReason; -import net.minecraft.entity.SpawnRestriction; -import net.minecraft.entity.effect.StatusEffectInstance; -import net.minecraft.entity.effect.StatusEffects; import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.particle.ParticleTypes; import net.minecraft.registry.RegistryKeys; import net.minecraft.registry.entry.RegistryEntry; import net.minecraft.registry.tag.PointOfInterestTypeTags; import net.minecraft.registry.tag.TagKey; import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.server.world.ServerWorld; -import net.minecraft.util.Identifier; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Box; import net.minecraft.util.math.Direction; @@ -25,19 +19,18 @@ import net.minecraft.util.math.random.Random; import net.minecraft.world.GameRules; import net.minecraft.world.Heightmap; -import net.minecraft.world.SpawnHelper; import net.minecraft.world.gen.structure.Structure; import net.minecraft.world.poi.PointOfInterestStorage; import net.minecraft.world.poi.PointOfInterestType; -import net.minecraft.world.spawner.Spawner; +import net.minecraft.world.spawner.SpecialSpawner; import java.util.List; import java.util.Optional; import java.util.function.Predicate; -public class CivetSpawner implements Spawner { +public class CivetSpawner implements SpecialSpawner { private static final int SPAWN_INTERVAL = 1200; - private static final TagKey CIVETS_SPAWN_IN = TagKey.of(RegistryKeys.STRUCTURE, new Identifier(Caffeinated.MODID, "civets_spawn_in")); + private static final TagKey CIVETS_SPAWN_IN = TagKey.of(RegistryKeys.STRUCTURE, Caffeinated.of("civets_spawn_in")); private int cooldown; private static BlockPos getRandomSpawnPos(ServerWorld world, ServerPlayerEntity playerEntity) { @@ -90,8 +83,8 @@ private static int spawnInStructure(ServerWorld world, BlockPos pos) { return 0; } } while (world.getBlockState(mutablePos).isOpaque() || !world.getBlockState(mutablePos.down()).isOpaque()); - List list = world.getNonSpectatingEntities(CivetEntity.class, new Box(mutablePos).expand(16.0, 8.0, 16.0)); - return list.isEmpty() ? spawn(mutablePos, world) : 0; + List entities = world.getNonSpectatingEntities(CivetEntity.class, new Box(mutablePos).expand(16.0, 8.0, 16.0)); + return entities.isEmpty() ? spawn(mutablePos, world) : 0; } /** @@ -100,17 +93,12 @@ private static int spawnInStructure(ServerWorld world, BlockPos pos) { * @return the number of civets spawned */ private static int spawn(BlockPos pos, ServerWorld world) { - if (!SpawnHelper.canSpawn(SpawnRestriction.Location.ON_GROUND, world, pos, CaffeinatedEntities.CIVET)) { - return 0; - } CivetEntity civetEntity = CaffeinatedEntities.CIVET.create(world); if (civetEntity == null) { return 0; } - civetEntity.initialize(world, world.getLocalDifficulty(pos), SpawnReason.NATURAL, null, null); + civetEntity.initialize(world, world.getLocalDifficulty(pos), SpawnReason.NATURAL, null); civetEntity.refreshPositionAndAngles(pos, 0.0F, 0.0F); - if (!SharedConstants.isDevelopment) - civetEntity.addStatusEffect(new StatusEffectInstance(StatusEffects.GLOWING, 72000)); world.spawnEntityAndPassengers(civetEntity); return 1; } diff --git a/src/main/resources/assets/caffeinated/lang/en_us.json b/src/main/resources/assets/caffeinated/lang/en_us.json index 44d24f4..65806ba 100644 --- a/src/main/resources/assets/caffeinated/lang/en_us.json +++ b/src/main/resources/assets/caffeinated/lang/en_us.json @@ -1,69 +1,60 @@ { - "advancements.husbandry.brew_all_coffee.description": "Brew every type of Coffee Bottle", - "advancements.husbandry.brew_all_coffee.title": "Caffeinated", - "advancements.husbandry.brew_coffee.description": "Add Ground Coffee to Water in a Campfire with Cauldron to brew Black Coffee", - "advancements.husbandry.brew_coffee.title": "Stop and Smell the Coffee", - "advancements.husbandry.eat_tiramisu.description": "Prepare a dish of Tiramisu", - "advancements.husbandry.eat_tiramisu.title": "Pick Me Up Buttercup", - - "block.caffeinated.cauldron_campfire": "Campfire with Cauldron", - "block.caffeinated.coffee_bean_block": "Coffee Bean Block", - "block.caffeinated.coffee_berry_crate": "Coffee Berry Crate", - "block.caffeinated.coffee_cauldron": "Coffee Cauldron", - "block.caffeinated.coffee_shrub": "Coffee Shrub", - "block.caffeinated.flowering_coffee_shrub": "Flowering Coffee Shrub", - "block.caffeinated.ground_coffee_block": "Ground Coffee Block", - "block.caffeinated.ground_coffee_cauldron": "Ground Coffee Cauldron", - "block.caffeinated.potted_coffee_shrub": "Potted Coffee Shrub", - "block.caffeinated.soul_cauldron_campfire": "Soul Campfire with Cauldron", - "block.caffeinated.tiramisu": "Tiramisu", - - "block.minecraft.banner.caffeinated.java.black": "Black Java Emblem", - "block.minecraft.banner.caffeinated.java.blue": "Blue Java Emblem", - "block.minecraft.banner.caffeinated.java.brown": "Brown Java Emblem", - "block.minecraft.banner.caffeinated.java.cyan": "Cyan Java Emblem", - "block.minecraft.banner.caffeinated.java.gray": "Gray Java Emblem", - "block.minecraft.banner.caffeinated.java.green": "Green Java Emblem", - "block.minecraft.banner.caffeinated.java.light_blue": "Light Blue Java Emblem", - "block.minecraft.banner.caffeinated.java.light_gray": "Light Gray Java Emblem", - "block.minecraft.banner.caffeinated.java.lime": "Lime Java Emblem", - "block.minecraft.banner.caffeinated.java.magenta": "Magenta Java Emblem", - "block.minecraft.banner.caffeinated.java.orange": "Orange Java Emblem", - "block.minecraft.banner.caffeinated.java.pink": "Pink Java Emblem", - "block.minecraft.banner.caffeinated.java.purple": "Purple Java Emblem", - "block.minecraft.banner.caffeinated.java.red": "Red Java Emblem", - "block.minecraft.banner.caffeinated.java.white": "White Java Emblem", - "block.minecraft.banner.caffeinated.java.yellow": "Yellow Java Emblem", - - "effect.caffeinated.caffeine": "Caffeine", - - "entity.caffeinated.civet": "Civet", - - "item.caffeinated.civet_spawn_egg": "Civet Spawn Egg", - "item.caffeinated.coffee_beans": "Coffee Beans", - "item.caffeinated.coffee_berries": "Coffee Berries", - "item.caffeinated.coffee_bottle": "Coffee Bottle", - "item.caffeinated.coffee_bottle.desc": "Black Coffee", - "item.caffeinated.ground_coffee": "Ground Coffee", - "item.caffeinated.java_banner_pattern": "Banner Pattern", - "item.caffeinated.java_banner_pattern.desc": "Java Emblem", - "item.caffeinated.latte_coffee_bottle.desc": "Latte", - "item.caffeinated.tiramisu_slice": "Tiramisu Slice", - - "item.modifiers.exhaustion": "Exhaustion", - - "itemGroup.caffeinated.caffeinated": "Caffeinated", - - "subtitles.block.cauldron_campfire.brew": "Cauldron brews", - "subtitles.block.cauldron_campfire.bubble": "Cauldron bubbles", - "subtitles.entity.civet.death": "Civet dies", - "subtitles.entity.civet.eat": "Civet eats", - "subtitles.entity.civet.hurt": "Civet hurts", - "subtitles.entity.civet.idle": "Civet growls", - "subtitles.item.coffee_bottle.drink": "Slurping", - "subtitles.item.ground_coffee.splash": "Ground Coffee splashes", - - "stat.caffeinated.coffee_taken": "Coffee Taken from Cauldron", - "stat.caffeinated.eat_tiramisu_slice": "Tiramisu Slices Eaten", - "stat.caffeinated.interact_with_cauldron_campfire": "Interactions with Campfire with Cauldron" + "advancements.husbandry.bake_tiramisu.description": "Prepare a dish of Tiramisu", + "advancements.husbandry.bake_tiramisu.title": "Pick Me Up Buttercup", + "advancements.husbandry.brew_all_coffee.description": "Brew every type of Coffee Bottle", + "advancements.husbandry.brew_all_coffee.title": "Caffeinated", + "advancements.husbandry.brew_coffee.description": "Add Ground Coffee to Water in a Campfire with Cauldron to brew Black Coffee", + "advancements.husbandry.brew_coffee.title": "Stop and Smell the Coffee", + "block.caffeinated.cauldron_campfire": "Campfire with Cauldron", + "block.caffeinated.coffee_bean_block": "Coffee Bean Block", + "block.caffeinated.coffee_berry_crate": "Coffee Berry Crate", + "block.caffeinated.coffee_cauldron": "Coffee Cauldron", + "block.caffeinated.coffee_shrub": "Coffee Shrub", + "block.caffeinated.flowering_coffee_shrub": "Flowering Coffee Shrub", + "block.caffeinated.ground_coffee_block": "Ground Coffee Block", + "block.caffeinated.ground_coffee_cauldron": "Ground Coffee Cauldron", + "block.caffeinated.potted_coffee_shrub": "Potted Coffee Shrub", + "block.caffeinated.soul_cauldron_campfire": "Soul Campfire with Cauldron", + "block.caffeinated.tiramisu": "Tiramisu", + "block.minecraft.banner.caffeinated.java.black": "Black Java Emblem", + "block.minecraft.banner.caffeinated.java.blue": "Blue Java Emblem", + "block.minecraft.banner.caffeinated.java.brown": "Brown Java Emblem", + "block.minecraft.banner.caffeinated.java.cyan": "Cyan Java Emblem", + "block.minecraft.banner.caffeinated.java.gray": "Gray Java Emblem", + "block.minecraft.banner.caffeinated.java.green": "Green Java Emblem", + "block.minecraft.banner.caffeinated.java.light_blue": "Light Blue Java Emblem", + "block.minecraft.banner.caffeinated.java.light_gray": "Light Gray Java Emblem", + "block.minecraft.banner.caffeinated.java.lime": "Lime Java Emblem", + "block.minecraft.banner.caffeinated.java.magenta": "Magenta Java Emblem", + "block.minecraft.banner.caffeinated.java.orange": "Orange Java Emblem", + "block.minecraft.banner.caffeinated.java.pink": "Pink Java Emblem", + "block.minecraft.banner.caffeinated.java.purple": "Purple Java Emblem", + "block.minecraft.banner.caffeinated.java.red": "Red Java Emblem", + "block.minecraft.banner.caffeinated.java.white": "White Java Emblem", + "block.minecraft.banner.caffeinated.java.yellow": "Yellow Java Emblem", + "effect.caffeinated.caffeine": "Caffeine", + "entity.caffeinated.civet": "Civet", + "item.caffeinated.civet_spawn_egg": "Civet Spawn Egg", + "item.caffeinated.coffee_beans": "Coffee Beans", + "item.caffeinated.coffee_berries": "Coffee Berries", + "item.caffeinated.coffee_bottle": "Coffee Bottle", + "item.caffeinated.coffee_bottle.desc": "Black Coffee", + "item.caffeinated.ground_coffee": "Ground Coffee", + "item.caffeinated.java_banner_pattern": "Banner Pattern", + "item.caffeinated.java_banner_pattern.desc": "Java Emblem", + "item.caffeinated.latte_coffee_bottle.desc": "Latte", + "item.caffeinated.tiramisu_slice": "Tiramisu Slice", + "item.modifiers.exhaustion": "Exhaustion", + "itemGroup.caffeinated.caffeinated": "Caffeinated", + "subtitles.block.cauldron_campfire.brew": "Cauldron brews", + "subtitles.block.cauldron_campfire.bubble": "Cauldron bubbles", + "subtitles.entity.civet.death": "Civet dies", + "subtitles.entity.civet.eat": "Civet eats", + "subtitles.entity.civet.hurt": "Civet hurts", + "subtitles.entity.civet.idle": "Civet growls", + "subtitles.item.coffee_bottle.drink": "Slurping", + "subtitles.item.ground_coffee.splash": "Ground Coffee splashes", + "stat.caffeinated.coffee_taken": "Coffee Taken from Cauldron", + "stat.caffeinated.eat_tiramisu_slice": "Tiramisu Slices Eaten", + "stat.caffeinated.interact_with_cauldron_campfire": "Interactions with Campfire with Cauldron" } \ No newline at end of file diff --git a/src/main/resources/caffeinated.accesswidener b/src/main/resources/caffeinated.accesswidener index 7ff7c01..9027c24 100644 --- a/src/main/resources/caffeinated.accesswidener +++ b/src/main/resources/caffeinated.accesswidener @@ -2,5 +2,9 @@ accessWidener v1 named accessible class net/minecraft/entity/passive/BeeEntity$GrowCropsGoal accessible field net/minecraft/block/CampfireBlock emitsParticles Z -accessible field net/minecraft/loot/LootTable$Builder pools Ljava/util/List; accessible method net/minecraft/data/client/Models item (Ljava/lang/String;[Lnet/minecraft/data/client/TextureKey;)Lnet/minecraft/data/client/Model; +accessible field net/minecraft/loot/LootTable$Builder pools Lcom/google/common/collect/ImmutableList$Builder; +mutable field net/minecraft/loot/LootTable$Builder pools Lcom/google/common/collect/ImmutableList$Builder; +accessible field net/minecraft/loot/entry/ItemEntry item Lnet/minecraft/registry/entry/RegistryEntry; +accessible field net/minecraft/loot/LootPool$Builder entries Lcom/google/common/collect/ImmutableList$Builder; +mutable field net/minecraft/loot/LootPool$Builder entries Lcom/google/common/collect/ImmutableList$Builder; diff --git a/src/main/resources/data/c/tags/block/storage_blocks.json b/src/main/resources/data/c/tags/block/storage_blocks.json index 1b825a1..6d5a670 100644 --- a/src/main/resources/data/c/tags/block/storage_blocks.json +++ b/src/main/resources/data/c/tags/block/storage_blocks.json @@ -1,7 +1,5 @@ { "values": [ - "#c:storage_blocks/coffee_bean_block", - "#c:storage_blocks/coffee_berry_crate", - "#c:storage_blocks/ground_coffee_block" + "#c:storage_blocks/coffee_berries" ] } \ No newline at end of file diff --git a/src/main/resources/data/c/tags/item/foods.json b/src/main/resources/data/c/tags/item/foods.json index fe73034..73e53aa 100644 --- a/src/main/resources/data/c/tags/item/foods.json +++ b/src/main/resources/data/c/tags/item/foods.json @@ -1,6 +1,5 @@ { "values": [ - "caffeinated:coffee_bottle", - "caffeinated:tiramisu" + "#caffeinated:coffee_food" ] } \ No newline at end of file diff --git a/src/main/resources/data/c/tags/item/foods/edible_when_placed.json b/src/main/resources/data/c/tags/item/foods/edible_when_placed.json index e69de29..f08809c 100644 --- a/src/main/resources/data/c/tags/item/foods/edible_when_placed.json +++ b/src/main/resources/data/c/tags/item/foods/edible_when_placed.json @@ -0,0 +1,5 @@ +{ + "values": [ + "caffeinated:tiramisu" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/c/tags/item/storage_blocks.json b/src/main/resources/data/c/tags/item/storage_blocks.json index 1b825a1..6d5a670 100644 --- a/src/main/resources/data/c/tags/item/storage_blocks.json +++ b/src/main/resources/data/c/tags/item/storage_blocks.json @@ -1,7 +1,5 @@ { "values": [ - "#c:storage_blocks/coffee_bean_block", - "#c:storage_blocks/coffee_berry_crate", - "#c:storage_blocks/ground_coffee_block" + "#c:storage_blocks/coffee_berries" ] } \ No newline at end of file diff --git a/src/main/resources/data/caffeinated/advancement/husbandry/brew_all_coffee.json b/src/main/resources/data/caffeinated/advancement/husbandry/brew_all_coffee.json deleted file mode 100644 index 52d88dc..0000000 --- a/src/main/resources/data/caffeinated/advancement/husbandry/brew_all_coffee.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "parent": "caffeinated:husbandry/brew_coffee", - "criteria": { - "coffee_bottle": { - "trigger": "caffeinated:brew_coffee", - "conditions": { - "item": { - "items": [ - "caffeinated:coffee_bottle" - ] - } - } - }, - "latte_coffee_bottle": { - "trigger": "caffeinated:brew_coffee", - "conditions": { - "item": { - "items": [ - "caffeinated:latte_coffee_bottle" - ] - } - } - } - }, - "display": { - "icon": { - "item": "caffeinated:latte_coffee_bottle" - }, - "title": { - "translate": "advancements.husbandry.brew_all_coffee.title" - }, - "description": { - "translate": "advancements.husbandry.brew_all_coffee.description" - }, - "frame": "challenge", - "show_toast": true, - "announce_to_chat": true, - "hidden": false - }, - "requirements": [ - [ - "coffee_bottle" - ], - [ - "latte_coffee_bottle" - ] - ], - "rewards": { - "experience": 100 - }, - "sends_telemetry_event": true -} \ No newline at end of file diff --git a/src/main/resources/data/caffeinated/advancement/husbandry/eat_tiramisu.json b/src/main/resources/data/caffeinated/advancement/husbandry/eat_tiramisu.json deleted file mode 100644 index f472f11..0000000 --- a/src/main/resources/data/caffeinated/advancement/husbandry/eat_tiramisu.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "display": { - "icon": { - "item": "caffeinated:tiramisu" - }, - "title": { - "translate": "advancements.husbandry.eat_tiramisu.title" - }, - "description": { - "translate": "advancements.husbandry.eat_tiramisu.description" - }, - "frame": "task", - "show_toast": true, - "announce_to_chat": true, - "hidden": false - }, - "parent": "caffeinated:husbandry/brew_coffee", - "criteria": { - "has_tiramisu": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "caffeinated:tiramisu" - ] - } - ] - } - } - }, - "requirements": [ - [ - "has_tiramisu" - ] - ], - "sends_telemetry_event": true -} \ No newline at end of file diff --git a/src/main/resources/data/caffeinated/tags/item/civet_food.json b/src/main/resources/data/caffeinated/tags/item/civet_food.json index b198c1c..f6306ac 100644 --- a/src/main/resources/data/caffeinated/tags/item/civet_food.json +++ b/src/main/resources/data/caffeinated/tags/item/civet_food.json @@ -1,6 +1,5 @@ { "values": [ - "minecraft:glow_berries", - "minecraft:sweet_berries" + "#c:foods/berry" ] } \ No newline at end of file diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 73af4ee..29d5724 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -22,7 +22,7 @@ "environment": "*", "entrypoints": { "client": [ - "net.chikorita_lover.caffeinated.CaffeinatedClient" + "net.chikorita_lover.caffeinated.client.CaffeinatedClient" ], "fabric-datagen": [ "net.chikorita_lover.caffeinated.CaffeinatedDataGenerator" @@ -31,7 +31,7 @@ "net.chikorita_lover.caffeinated.Caffeinated" ], "mm:early_risers": [ - "com.chikoritalover.caffeinated.CaffeinatedEarlyRiser" + "net.chikorita_lover.caffeinated.CaffeinatedEarlyRiser" ] }, "mixins": [