├── .gitattributes ├── .github ├── ISSUE_TEMPLATE │ ├── bug_report.yml │ ├── config.yml │ └── feature_request.yml └── workflows │ ├── check_build.yml │ ├── release.yml │ └── sync.yml ├── .gitignore ├── CONTRIBUTING.md ├── FUNDING.yml ├── LICENSE.md ├── README.md ├── build.gradle ├── crowdin.yml ├── curseforge.html ├── ext └── changelogs │ ├── v1.0-pre1.md │ ├── v1.0-pre2.md │ ├── v1.0.md │ └── v1.1.md ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── jitpack.yml ├── modrinth.md ├── settings.gradle ├── src └── main │ ├── java │ └── com │ │ └── hugman │ │ └── culinaire │ │ ├── Culinaire.java │ │ ├── CulinaireClient.java │ │ ├── block │ │ ├── CheeseCauldronBlock.java │ │ ├── CheeseWheelBlock.java │ │ ├── CulinaireBlockProperties.java │ │ ├── CulinaireCauldronBehaviors.java │ │ ├── KettleBlock.java │ │ ├── LettuceBlock.java │ │ ├── MilkCauldronBlock.java │ │ ├── TomatoesBlock.java │ │ └── entity │ │ │ └── KettleBlockEntity.java │ │ ├── client │ │ ├── CulinaireColorsMaps.java │ │ └── CulinaireScreens.java │ │ ├── compat │ │ └── rei │ │ │ ├── CulinaireREIPlugin.java │ │ │ ├── TeaBrewingCategory.java │ │ │ └── TeaBrewingDisplay.java │ │ ├── config │ │ ├── CulinaireConfig.java │ │ └── CulinaireModMenuIntegration.java │ │ ├── item │ │ ├── ChocolateBottleItem.java │ │ ├── MarshmallowOnAStickItem.java │ │ ├── MilkBottleItem.java │ │ ├── SandwichItem.java │ │ ├── TeaBagItem.java │ │ └── TeaBottleItem.java │ │ ├── loot │ │ └── CulinaireLootTables.java │ │ ├── mixin │ │ ├── CowEntityMixin.java │ │ ├── MilkBucketMixin.java │ │ └── client │ │ │ └── PlayerRendererMixin.java │ │ ├── recipe │ │ ├── SandwichRecipe.java │ │ ├── TeaBagMakingRecipe.java │ │ └── serializer │ │ │ └── SandwichRecipeSerializer.java │ │ ├── registry │ │ ├── CulinaireTags.java │ │ └── content │ │ │ ├── CandyContent.java │ │ │ ├── DairyContent.java │ │ │ ├── FruitContent.java │ │ │ ├── MealContent.java │ │ │ ├── PastryContent.java │ │ │ ├── TeaContent.java │ │ │ └── VegetableContent.java │ │ ├── screen │ │ ├── KettleScreen.java │ │ └── handler │ │ │ └── KettleScreenHandler.java │ │ ├── tea │ │ ├── TeaEffect.java │ │ ├── TeaHelper.java │ │ └── TeaType.java │ │ └── util │ │ ├── FoodUtil.java │ │ └── RecipeSerializerUtil.java │ └── resources │ ├── assets │ └── culinaire │ │ ├── blockstates │ │ ├── cheese_cauldron.json │ │ ├── cheese_wheel.json │ │ ├── dark_chocolate_cauldron.json │ │ ├── kettle.json │ │ ├── lettuce.json │ │ ├── milk_cauldron.json │ │ ├── milk_chocolate_cauldron.json │ │ ├── tomatoes.json │ │ └── white_chocolate_cauldron.json │ │ ├── lang │ │ └── en_us.json │ │ ├── models │ │ ├── block │ │ │ ├── cauldron │ │ │ │ └── level_height │ │ │ │ │ ├── 11.json │ │ │ │ │ ├── 5.json │ │ │ │ │ └── 8.json │ │ │ ├── cheese_cauldron │ │ │ │ └── level │ │ │ │ │ ├── 1.json │ │ │ │ │ ├── 2.json │ │ │ │ │ └── 3.json │ │ │ ├── cheese_wheel │ │ │ │ └── bites │ │ │ │ │ ├── 0.json │ │ │ │ │ ├── 1.json │ │ │ │ │ ├── 2.json │ │ │ │ │ ├── 3.json │ │ │ │ │ ├── 4.json │ │ │ │ │ └── 5.json │ │ │ ├── dark_chocolate_cauldron │ │ │ │ └── level │ │ │ │ │ ├── 1.json │ │ │ │ │ ├── 2.json │ │ │ │ │ └── 3.json │ │ │ ├── kettle.json │ │ │ ├── lettuce │ │ │ │ └── age │ │ │ │ │ ├── 0.json │ │ │ │ │ ├── 1.json │ │ │ │ │ ├── 2.json │ │ │ │ │ └── 3.json │ │ │ ├── milk_cauldron │ │ │ │ └── level │ │ │ │ │ ├── 1.json │ │ │ │ │ ├── 2.json │ │ │ │ │ └── 3.json │ │ │ ├── milk_chocolate_cauldron │ │ │ │ └── level │ │ │ │ │ ├── 1.json │ │ │ │ │ ├── 2.json │ │ │ │ │ └── 3.json │ │ │ ├── tomatoes │ │ │ │ ├── lower │ │ │ │ │ └── age │ │ │ │ │ │ ├── 0.json │ │ │ │ │ │ ├── 1.json │ │ │ │ │ │ ├── 2.json │ │ │ │ │ │ └── 3.json │ │ │ │ └── upper │ │ │ │ │ └── age │ │ │ │ │ ├── 2.json │ │ │ │ │ └── 3.json │ │ │ └── white_chocolate_cauldron │ │ │ │ └── level │ │ │ │ ├── 1.json │ │ │ │ ├── 2.json │ │ │ │ └── 3.json │ │ └── item │ │ │ ├── apple_pie.json │ │ │ ├── burnt_marshmallow_on_a_stick.json │ │ │ ├── cheese.json │ │ │ ├── cheese_wheel.json │ │ │ ├── chocolate.json │ │ │ ├── chouquette.json │ │ │ ├── dark_chocolate_bar.json │ │ │ ├── dark_chocolate_bottle.json │ │ │ ├── dark_chocolate_pie.json │ │ │ ├── golden_marshmallow_on_a_stick.json │ │ │ ├── iron_tomato.json │ │ │ ├── kettle.json │ │ │ ├── lettuce.json │ │ │ ├── lettuce_seeds.json │ │ │ ├── marshmallow.json │ │ │ ├── marshmallow_on_a_stick.json │ │ │ ├── mashed_potatoes.json │ │ │ ├── milk_bottle.json │ │ │ ├── milk_chocolate_bar.json │ │ │ ├── milk_chocolate_bottle.json │ │ │ ├── milk_chocolate_pie.json │ │ │ ├── salad.json │ │ │ ├── sandwich.json │ │ │ ├── sweet_berry_pie.json │ │ │ ├── tea_bag.json │ │ │ ├── tea_bottle.json │ │ │ ├── toasty_marshmallow_on_a_stick.json │ │ │ ├── tomato.json │ │ │ ├── white_chocolate_bar.json │ │ │ ├── white_chocolate_bottle.json │ │ │ └── white_chocolate_pie.json │ │ ├── sounds.json │ │ ├── sounds │ │ ├── block │ │ │ └── kettle │ │ │ │ └── brew.ogg │ │ └── item │ │ │ └── tea_bottle │ │ │ └── fill │ │ │ ├── 1.ogg │ │ │ ├── 2.ogg │ │ │ └── 3.ogg │ │ └── textures │ │ ├── block │ │ ├── cauldron │ │ │ ├── cheese.png │ │ │ ├── dark_chocolate.png │ │ │ ├── milk.png │ │ │ ├── milk_chocolate.png │ │ │ └── white_chocolate.png │ │ ├── cheese_wheel │ │ │ ├── bottom.png │ │ │ ├── inside.png │ │ │ ├── side.png │ │ │ └── top.png │ │ ├── kettle │ │ │ ├── bottom.png │ │ │ ├── faucet.png │ │ │ ├── side.png │ │ │ └── top.png │ │ ├── lettuce │ │ │ ├── age_0.png │ │ │ ├── age_1.png │ │ │ ├── age_2.png │ │ │ └── age_3.png │ │ └── tomatoes │ │ │ ├── lower │ │ │ ├── age_0.png │ │ │ ├── age_1.png │ │ │ ├── age_2.png │ │ │ └── age_3.png │ │ │ └── upper │ │ │ ├── age_2.png │ │ │ └── age_3.png │ │ ├── gui │ │ ├── container │ │ │ └── kettle.png │ │ └── rei │ │ │ ├── dark_display.png │ │ │ └── display.png │ │ ├── item │ │ ├── apple_pie.png │ │ ├── blueberry_pie.png │ │ ├── cheese.png │ │ ├── cheese_wheel.png │ │ ├── chouquette.png │ │ ├── dark_chocolate_bar.png │ │ ├── dark_chocolate_bottle.png │ │ ├── dark_chocolate_pie.png │ │ ├── iron_tomato.png │ │ ├── kettle.png │ │ ├── lettuce.png │ │ ├── lettuce_seeds.png │ │ ├── marshmallow.png │ │ ├── marshmallow_on_a_stick │ │ │ ├── burnt.png │ │ │ ├── golden.png │ │ │ ├── normal.png │ │ │ └── toasty.png │ │ ├── mashed_potatoes.png │ │ ├── milk_bottle.png │ │ ├── milk_chocolate_bar.png │ │ ├── milk_chocolate_bottle.png │ │ ├── milk_chocolate_pie.png │ │ ├── salad.png │ │ ├── sandwich.png │ │ ├── sweet_berry_pie.png │ │ ├── tea_bag.png │ │ ├── tomato.png │ │ ├── white_chocolate_bar.png │ │ ├── white_chocolate_bottle.png │ │ └── white_chocolate_pie.png │ │ ├── logo.png │ │ └── mob_effect │ │ ├── foresight.png │ │ ├── fulfillment.png │ │ ├── guard.png │ │ └── poison_resistance.png │ ├── culinaire.mixins.json │ ├── data │ ├── c │ │ └── tags │ │ │ └── items │ │ │ ├── sandwich │ │ │ ├── blacklist.json │ │ │ └── bread.json │ │ │ └── tea_ingredients │ │ │ ├── bitter │ │ │ ├── normal.json │ │ │ ├── strong.json │ │ │ └── weak.json │ │ │ ├── gloopy │ │ │ └── weak.json │ │ │ ├── salty │ │ │ ├── normal.json │ │ │ └── weak.json │ │ │ ├── shining │ │ │ └── weak.json │ │ │ ├── sour │ │ │ ├── normal.json │ │ │ └── weak.json │ │ │ ├── sweet │ │ │ ├── normal.json │ │ │ ├── strong.json │ │ │ └── weak.json │ │ │ └── umami │ │ │ ├── normal.json │ │ │ └── weak.json │ ├── culinaire │ │ ├── advancements │ │ │ └── crafting │ │ │ │ ├── apple_pie.json │ │ │ │ ├── cheese_wheel.json │ │ │ │ ├── chocolate.json │ │ │ │ ├── chouquette.json │ │ │ │ ├── dark_chocolate_bar.json │ │ │ │ ├── dark_chocolate_bottle.json │ │ │ │ ├── dark_chocolate_pie.json │ │ │ │ ├── kettle.json │ │ │ │ ├── marshmallow.json │ │ │ │ ├── marshmallow_on_a_stick.json │ │ │ │ ├── mashed_potatoes.json │ │ │ │ ├── milk_chocolate_bar.json │ │ │ │ ├── milk_chocolate_bottle.json │ │ │ │ ├── milk_chocolate_pie.json │ │ │ │ ├── salad.json │ │ │ │ ├── sandwich.json │ │ │ │ ├── sweet_berry_pie.json │ │ │ │ ├── tea_bag.json │ │ │ │ ├── white_chocolate_bar.json │ │ │ │ ├── white_chocolate_bottle.json │ │ │ │ └── white_chocolate_pie.json │ │ ├── loot_tables │ │ │ └── blocks │ │ │ │ ├── cheese_cauldron.json │ │ │ │ ├── cheese_wheel.json │ │ │ │ ├── kettle.json │ │ │ │ ├── lettuce.json │ │ │ │ ├── milk_cauldron.json │ │ │ │ └── tomatoes.json │ │ ├── recipes │ │ │ └── crafting │ │ │ │ ├── apple_pie.json │ │ │ │ ├── cheese_wheel.json │ │ │ │ ├── chouquette.json │ │ │ │ ├── dark_chocolate_bar.json │ │ │ │ ├── dark_chocolate_bottle.json │ │ │ │ ├── dark_chocolate_pie.json │ │ │ │ ├── kettle.json │ │ │ │ ├── marshmallow.json │ │ │ │ ├── marshmallow_on_a_stick.json │ │ │ │ ├── mashed_potatoes.json │ │ │ │ ├── milk_chocolate_bar.json │ │ │ │ ├── milk_chocolate_bottle.json │ │ │ │ ├── milk_chocolate_pie.json │ │ │ │ ├── salad.json │ │ │ │ ├── sandwich.json │ │ │ │ ├── sweet_berry_pie.json │ │ │ │ ├── tea_bag.json │ │ │ │ ├── white_chocolate_bar.json │ │ │ │ ├── white_chocolate_bottle.json │ │ │ │ └── white_chocolate_pie.json │ │ └── tags │ │ │ └── blocks │ │ │ └── kettle_hot_blocks.json │ └── minecraft │ │ └── tags │ │ └── blocks │ │ ├── cauldrons.json │ │ ├── crops.json │ │ └── mineable │ │ ├── axe.json │ │ └── pickaxe.json │ └── fabric.mod.json └── thirdparty ├── NOTICE.txt └── licenses ├── LICENSE-APACHE-2.0.txt └── LICENSE-MIT.md /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.yml: -------------------------------------------------------------------------------- 1 | name: Bug Report 2 | description: File a bug report 3 | labels: ["bug"] 4 | body: 5 | - type: markdown 6 | attributes: 7 | value: | 8 | Thanks for taking the time to fill out this bug report! 9 | Before continuing, you must be sure to be running on the LATEST version of Culinaire. Otherwise, you have to try to reproduce the bug on the latest version of Culinaire. 10 | - type: textarea 11 | id: what-happened 12 | attributes: 13 | label: What happened? 14 | description: Also tell us, what did you expect to happen? 15 | placeholder: Tell us what has happened! 16 | validations: 17 | required: true 18 | - type: input 19 | id: dawn-version 20 | attributes: 21 | label: Dawn API version 22 | description: What version of the Dawn API are you using? 23 | placeholder: ex. 3.4.0 24 | validations: 25 | required: true 26 | - type: input 27 | id: fabric-version 28 | attributes: 29 | label: Fabric API version 30 | description: What version of the Fabric API are you using? 31 | placeholder: ex. 0.56.0+1.19 32 | validations: 33 | required: false 34 | - type: textarea 35 | id: logs 36 | attributes: 37 | label: Relevant log output 38 | description: Please copy and paste any relevant log output. This will be automatically formatted into code, so no need for backticks. 39 | render: shell 40 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | blank_issues_enabled: false 2 | contact_links: 3 | - name: Official Website 4 | url: https://dawnteammc.github.io/culinaire 5 | about: Visit the Dawn Team's official website for more information on Culinaire. 6 | - name: Discord Server 7 | url: https://discord.gg/8ksTVJu 8 | about: Join us for further real-time support and other questions about Dawn Team's mods. -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.yml: -------------------------------------------------------------------------------- 1 | name: Feature Request 2 | description: Suggest an idea for this mod 3 | labels: ["feature"] 4 | body: 5 | - type: markdown 6 | attributes: 7 | value: | 8 | Thanks for taking the time to suggest an idea for Culinaire! 9 | - type: textarea 10 | id: content 11 | attributes: 12 | label: What is your idea about? 13 | placeholder: A block, an item, a biome, an entity... anything, really! 14 | validations: 15 | required: true -------------------------------------------------------------------------------- /.github/workflows/check_build.yml: -------------------------------------------------------------------------------- 1 | # Automatically build the project and run any configured tests for every push 2 | # and submitted pull request. This can help catch issues that only occur on 3 | # certain platforms or Java versions, and provides a first line of defence 4 | # against bad commits. 5 | 6 | name: Check Build 7 | on: 8 | pull_request: 9 | types: [review_requested, ready_for_review] 10 | push: 11 | branches: [main, dev] 12 | 13 | jobs: 14 | build: 15 | strategy: 16 | matrix: 17 | java: [ 17 ] 18 | os: [ ubuntu-20.04 ] 19 | name: Build the project (Java ${{ matrix.java }}, on ${{ matrix.os }})) 20 | runs-on: ${{ matrix.os }} 21 | steps: 22 | 23 | - name: Checkout repository 24 | uses: actions/checkout@v2 25 | 26 | - name: Validate Gradle wrapper 27 | uses: gradle/wrapper-validation-action@v1 28 | 29 | - name: Setup JDK ${{ matrix.java }} 30 | uses: actions/setup-java@v1 31 | with: 32 | java-version: ${{ matrix.java }} 33 | 34 | - name: Make Gradle wrapper executable 35 | if: ${{ runner.os != 'Windows' }} 36 | run: chmod +x ./gradlew 37 | 38 | - name: Build 39 | run: ./gradlew build -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | # Automatically builds and publishes the mod when a new release is created on GitHub. 2 | # It uploads the mod to GitHub, CurseForge and Modrinth. 3 | 4 | name: Release 5 | 6 | on: 7 | release: 8 | types: [published] 9 | 10 | jobs: 11 | publish: 12 | name: Build & Publish 13 | runs-on: ubuntu-latest 14 | steps: 15 | 16 | - name: Checkout repository 17 | uses: actions/checkout@v3 18 | 19 | - name: Download translations from Crowdin 20 | uses: crowdin/github-action@v1 21 | with: 22 | upload_sources: false 23 | upload_translations: false 24 | download_translations: true 25 | create_pull_request: false 26 | push_translations: false 27 | env: 28 | CROWDIN_PERSONAL_TOKEN: ${{ secrets.CROWDIN_PERSONAL_TOKEN }} 29 | 30 | - name: Set up JDK 17 31 | uses: actions/setup-java@v1 32 | with: 33 | java-version: '17' 34 | 35 | - name: Grant execute permission for gradlew 36 | run: chmod +x ./gradlew 37 | 38 | - name: Build with Gradle 39 | run: ./gradlew clean build -Pversion=${{ github.event.release.tag_name }} 40 | 41 | - name: Read Gradle properties 42 | id: gradle_properties 43 | uses: christian-draeger/read-properties@1.1.1 44 | with: 45 | path: './gradle.properties' 46 | properties: 'mod_id mod_name mod_logo mod_color loader_name loader_icon minecraft_version' 47 | 48 | - name: Publish mod to GitHub, CurseForge and Modrinth 49 | id: publish 50 | uses: Kir-Antipov/mc-publish@v3.3 51 | with: 52 | curseforge-token: ${{ secrets.CURSEFORGE_TOKEN }} 53 | modrinth-token: ${{ secrets.MODRINTH_TOKEN }} 54 | github-token: ${{ secrets.GITHUB_TOKEN }} 55 | 56 | changelog: ${{ github.event.release.body }} 57 | java: 17 58 | 59 | modrinth-featured: false 60 | 61 | - name: Add job summary 62 | run: | 63 | echo "# Results" >> $GITHUB_STEP_SUMMARY 64 | echo "- Mod ID: ${{ steps.gradle_properties.outputs.mod_id }}" >> $GITHUB_STEP_SUMMARY 65 | echo "- Mod Name: ${{ steps.gradle_properties.outputs.mod_name }}" >> $GITHUB_STEP_SUMMARY 66 | echo "- Mod Version: ${{ github.event.release.tag_name }}" >> $GITHUB_STEP_SUMMARY 67 | echo "- Release Name: ${{ github.event.release.name }}" >> $GITHUB_STEP_SUMMARY 68 | echo "- Minecraft Version: ${{ steps.gradle_properties.outputs.minecraft_version }}" >> $GITHUB_STEP_SUMMARY 69 | echo "- [CurseForge Link](${{ steps.publish.outputs.curseforge-url }})" >> $GITHUB_STEP_SUMMARY 70 | echo "- [Modrinth Link](${{ steps.publish.outputs.modrinth-url }})" >> $GITHUB_STEP_SUMMARY 71 | echo "- [GitHub Link](${{ steps.publish.outputs.github-url }})" >> $GITHUB_STEP_SUMMARY 72 | echo "# Changelog" >> $GITHUB_STEP_SUMMARY 73 | echo "${{ github.event.release.body }}" >> $GITHUB_STEP_SUMMARY 74 | 75 | - name: Send Discord webhook 76 | uses: Ilshidur/action-discord@0.3.2 77 | env: 78 | DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }} 79 | DISCORD_EMBEDS: | 80 | [{ 81 | "title": "${{ github.event.release.name }} for ${{ steps.gradle_properties.outputs.minecraft_version }} Released", 82 | "color": ${{ steps.gradle_properties.outputs.mod_color }}, 83 | "thumbnail": { 84 | "url": "${{ steps.gradle_properties.outputs.mod_logo }}" 85 | }, 86 | "url": "${{ steps.publish.outputs.curseforge-url }}", 87 | "fields": [ 88 | { 89 | "name": "Download now:", 90 | "value": "[<:curseforge:805066577871110196> CurseForge](${{ steps.publish.outputs.curseforge-url }})\n[<:modrinth:805066578215043092> Modrinth](${{ steps.publish.outputs.modrinth-url }})\n[<:github:805066578164580392> GitHub](${{ steps.publish.outputs.github-url }})", 91 | "inline": true 92 | } 93 | ], 94 | "footer": { 95 | "text": "A ${{ steps.gradle_properties.outputs.loader_name }} Mod", 96 | "icon_url": "${{ steps.gradle_properties.outputs.loader_icon }}" 97 | } 98 | }] -------------------------------------------------------------------------------- /.github/workflows/sync.yml: -------------------------------------------------------------------------------- 1 | # Automatically upload translations to Crowdin for every push to the main or dev branch. 2 | # This allows strings to be translated before a new version is released. 3 | 4 | name: Synchronize Project 5 | 6 | on: 7 | push: 8 | paths: 9 | - 'src/main/resources/assets/culinaire/lang/en_us.json' 10 | branches: [main, dev] 11 | 12 | jobs: 13 | crowdin: 14 | runs-on: ubuntu-latest 15 | steps: 16 | 17 | - name: Checkout repository 18 | uses: actions/checkout@v3 19 | 20 | - name: Upload translations source file to Crowdin 21 | uses: crowdin/github-action@v1 22 | with: 23 | upload_sources: true 24 | upload_translations: false 25 | download_translations: false 26 | env: 27 | CROWDIN_PERSONAL_TOKEN: ${{ secrets.CROWDIN_PERSONAL_TOKEN }} -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # gradle 2 | 3 | .gradle/ 4 | build/ 5 | logs/ 6 | out/ 7 | classes/ 8 | 9 | # idea 10 | 11 | .idea/ 12 | *.iml 13 | *.ipr 14 | *.iws 15 | 16 | # vscode 17 | 18 | .settings/ 19 | .vscode/ 20 | bin/ 21 | .classpath 22 | .project 23 | 24 | # fabric 25 | 26 | run/ 27 | *.launch -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | ### Submitting translations 2 | Localization of the Dawn Team mods is managed through the [Crowdin](https://crowdin.com/project/dawnteam) project. 3 | 4 | ### Submitting ideas 5 | You can submit ideas for new features over on the [issue tracker](https://github.com/DawnTeamMC/Culinaire/issues). 6 | 7 | ### Getting started for code modification 8 | We're excited to hear that you're interested in contributing to Culinaire! 9 | 10 | Before getting started, you'll need to install the latest 64-bit version of the OpenJDK 8 for your environment. 11 | - Windows users: We **strongly** recommend you use the Hotspot OpenJDK 8 builds provided by the [AdoptOpenJDK project](https://adoptopenjdk.net/) instead of the builds provided by Oracle. 12 | - macOS and Linux users: If you are already using a package manager, OpenJDK builds should be present in your software repositories. If not, we recommend using [SDKMan](https://sdkman.io/) to install the Hotspot OpenJDK 8 builds provided by the [AdoptOpenJDK](https://adoptopenjdk.net/) project. 13 | 14 | We strongly recommend you use [IntelliJ IDEA Community Edition](https://www.jetbrains.com/idea/) when making code contributions. While other IDEs may work (in theory, anyway), you will often run into issues and other roadblocks. If you're not familiar with setting up IntelliJ IDEA for use with Fabric projects, the community of Fabric has created a wiki which runs over a lot of the basics of Fabric [here](https://fabricmc.net/wiki/doku.php). 15 | 16 | If you have any questions or issues, or would just like to discuss Culinaire development, feel free to [join us on Discord](https://discord.gg/8ksTVJu). 17 | 18 | ### Creating pull requests 19 | Please make sure before opening a pull request that: 20 | 21 | - Your pull request has an overview of the changes it makes, along with a link to the open issue(s) it resolves, if applicable. 22 | - Your changes include appropriate documentation and conform to our style guidelines. 23 | - If your merge request contains multiple commits, that you squash them before submitting. 24 | - You state in the description of your merge request that you agree to the Contributor License Agreement (CLA) found below. 25 | 26 | ### Contributor License Agreement 27 | By submitting code, assets, or documentation to the repository you are hereby agreeing that: 28 | 29 | - You grant Hugman the right to use your contributions under the [PolyForm Shield License 1.0.0](https://polyformproject.org/licenses/shield/1.0.0) license. 30 | - Your contributions are of your own work and are free of legal restrictions (such as patents or copyrights). 31 | 32 | If you have any questions about these terms, please get in contact with us. 33 | **If you do not agree to these terms, please do not submit contributions to this repository.** -------------------------------------------------------------------------------- /FUNDING.yml: -------------------------------------------------------------------------------- 1 | patreon: Hugman -------------------------------------------------------------------------------- /build.gradle: -------------------------------------------------------------------------------- 1 | plugins { 2 | id 'fabric-loom' version '1.2-SNAPSHOT' 3 | } 4 | 5 | apply from: 'https://dawnteammc.github.io/resources/gradle_scripts/fabric-mod/java-17.gradle' 6 | 7 | repositories { 8 | maven { url 'https://jitpack.io' } // Required for Dawn API 9 | 10 | maven { url 'https://maven.shedaniel.me/' } // Required for Cloth Config and Roughly Enough Items 11 | maven { url 'https://maven.terraformersmc.com/' } // Required for Mod Menu 12 | maven { url 'https://maven.ryanliptak.com/' } // Required for AppleSkin 13 | } 14 | 15 | dependencies { 16 | modApi "com.github.DawnTeamMC:DawnAPI:${dawn_version}" 17 | 18 | modApi "me.shedaniel:RoughlyEnoughItems-fabric:${rei_version}" 19 | 20 | compileOnly "com.google.code.findbugs:jsr305:3.0.2" 21 | } 22 | -------------------------------------------------------------------------------- /crowdin.yml: -------------------------------------------------------------------------------- 1 | project_id: "427504" 2 | api_token_env: "CROWDIN_PERSONAL_TOKEN" 3 | preserve_hierarchy: true 4 | 5 | files: 6 | - source: "src/main/resources/assets/culinaire/lang/en_us.json" 7 | translation: "src/main/resources/assets/culinaire/lang/%locale_with_underscore%.json" 8 | dest: "culinaire.json" -------------------------------------------------------------------------------- /ext/changelogs/v1.0-pre1.md: -------------------------------------------------------------------------------- 1 | # Common Expansion - 1.0 Pre-release 1 for 1.16.1 2 | **Fabric API version: [0.14.1 build 372](https://www.curseforge.com/minecraft/mc-mods/fabric-api/files/2993273)** 3 | 4 | ## **Additions** 5 | ### **Blocks** 6 | + You can now put milk in cauldrons 7 | + Will turn into cheese after \~1.3 to 2 days 8 | 9 | ### **Items** 10 | + Added Cheese 11 | + Added Lettuce 12 | + Added Tomato 13 | + Added Chocolate 14 | + Added Marshmallow 15 | + Added Apple Pie 16 | + Added Sweet Berry Pie 17 | + Added Salad 18 | + Added Mashed Potatoes 19 | + Added Sandwich -------------------------------------------------------------------------------- /ext/changelogs/v1.0-pre2.md: -------------------------------------------------------------------------------- 1 | # Common Expansion - 1.0 Pre-release 2 for 20w27a 2 | **Fabric API version: [0.14.1 build 373](https://www.curseforge.com/minecraft/mc-mods/fabric-api/files/2994015)** 3 | 4 | ## **Additions** 5 | ### **Items** 6 | + Added Lettuce Seeds 7 | + Added Marshmallow on a Stick 8 | + Can be cooked by sneaking and hovering your stick over a lit campfire 9 | 10 | ### **Recipes** 11 | + Added Sandwich crafting 12 | + 2 bread items in the top and bottom middle slots with ingredients of choice in the middle 13 | 14 | ## **Changes** 15 | ### **Items** 16 | + Some food items now have proper food values 17 | 18 | ## **Fixes** 19 | + Fixed milk cauldron client issues -------------------------------------------------------------------------------- /ext/changelogs/v1.0.md: -------------------------------------------------------------------------------- 1 | # Common Expansion - 1.0 for 20w27a 2 | **Fabric API version: [0.14.1 build 373](https://www.curseforge.com/minecraft/mc-mods/fabric-api/files/2994015)** 3 | 4 | ## **Additions** 5 | ### **Blocks** 6 | + You can now put milk in cauldrons 7 | + Will turn into cheese after \~1.3 to 2 days 8 | 9 | ### **Items** 10 | + Added Cheese 11 | + Added Lettuce 12 | + Added Lettuce Seeds 13 | + Added Tomato 14 | + Added Chocolate 15 | + Added Marshmallow 16 | + Added Apple Pie 17 | + Added Sweet Berry Pie 18 | + Added Salad 19 | + Added Mashed Potatoes 20 | + Added Sandwich 21 | + Added Marshmallow on a Stick 22 | + Can be cooked by sneaking and hovering your stick over a lit campfire 23 | 24 | ### **Recipes** 25 | + Added Sandwich crafting 26 | + 2 bread items in the top and bottom middle slots with ingredients of choice in the middle -------------------------------------------------------------------------------- /ext/changelogs/v1.1.md: -------------------------------------------------------------------------------- 1 | # Common Expansion - 1.1 for 1.16.3 2 | **Dawn API version: [1.4](https://www.curseforge.com/minecraft/mc-mods/dawn/files/3088572)** 3 | 4 | ## **Additions** 5 | ### **Blocks** 6 | + Added Kettle 7 | + Added Cheese Wheel 8 | 9 | ### **Items** 10 | + Added Tea Bottle 11 | + Added Tea Bag 12 | + Added Milk Bottle 13 | + Added Chouquette 14 | 15 | ### **Recipes** 16 | + Added Tea Bag crafting 17 | + 1 paper, 1 string and ingredients 18 | 19 | ### **Localization** 20 | + Added Chinese Simplified translation by qsefthuopq 21 | 22 | ### **Others** 23 | + Added mod configuration 24 | + Added ability to turn on drinkable milk buckets 25 | 26 | ## **Changes** 27 | ### **Items** 28 | + Updated some item textures 29 | + Some food items can now be composted 30 | 31 | ## **Fixes** 32 | + Fixed some food in bowls not giving bowls upon consuming/crafting -------------------------------------------------------------------------------- /gradle.properties: -------------------------------------------------------------------------------- 1 | org.gradle.jvmargs=-Xmx1G 2 | 3 | # Mod Metadata 4 | mod_id=culinaire 5 | mod_name=Culinaire 6 | mod_logo=https://dawnteammc.github.io/culinaire/images/logo.png 7 | mod_color=15849019 8 | loader_name=Fabric 9 | loader_icon=https://fabricmc.net/assets/logo.png 10 | 11 | # check these on https://fabricmc.net/develop/ 12 | minecraft_version=1.20.1 13 | yarn_mappings=1.20.1+build.8 14 | loader_version=0.14.21 15 | fabric_version=0.84.0+1.20.1 16 | # https://github.com/DawnTeamMC/DawnAPI 17 | dawn_version=5.0.0 18 | # https://maven.shedaniel.me/me/shedaniel/RoughlyEnoughItems-fabric/ 19 | rei_version=12.0.625 -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DawnTeamMC/Culinaire/14d46ba5192a31e7e4df498e009ad00743aadb67/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.1.1-bin.zip 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | -------------------------------------------------------------------------------- /gradlew.bat: -------------------------------------------------------------------------------- 1 | @rem 2 | @rem Copyright 2015 the original author or authors. 3 | @rem 4 | @rem Licensed under the Apache License, Version 2.0 (the "License"); 5 | @rem you may not use this file except in compliance with the License. 6 | @rem You may obtain a copy of the License at 7 | @rem 8 | @rem https://www.apache.org/licenses/LICENSE-2.0 9 | @rem 10 | @rem Unless required by applicable law or agreed to in writing, software 11 | @rem distributed under the License is distributed on an "AS IS" BASIS, 12 | @rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | @rem See the License for the specific language governing permissions and 14 | @rem limitations under the License. 15 | @rem 16 | 17 | @if "%DEBUG%" == "" @echo off 18 | @rem ########################################################################## 19 | @rem 20 | @rem Gradle startup script for Windows 21 | @rem 22 | @rem ########################################################################## 23 | 24 | @rem Set local scope for the variables with windows NT shell 25 | if "%OS%"=="Windows_NT" setlocal 26 | 27 | set DIRNAME=%~dp0 28 | if "%DIRNAME%" == "" set DIRNAME=. 29 | set APP_BASE_NAME=%~n0 30 | set APP_HOME=%DIRNAME% 31 | 32 | @rem Resolve any "." and ".." in APP_HOME to make it shorter. 33 | for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi 34 | 35 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 36 | set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" 37 | 38 | @rem Find java.exe 39 | if defined JAVA_HOME goto findJavaFromJavaHome 40 | 41 | set JAVA_EXE=java.exe 42 | %JAVA_EXE% -version >NUL 2>&1 43 | if "%ERRORLEVEL%" == "0" goto execute 44 | 45 | echo. 46 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 47 | echo. 48 | echo Please set the JAVA_HOME variable in your environment to match the 49 | echo location of your Java installation. 50 | 51 | goto fail 52 | 53 | :findJavaFromJavaHome 54 | set JAVA_HOME=%JAVA_HOME:"=% 55 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe 56 | 57 | if exist "%JAVA_EXE%" goto execute 58 | 59 | echo. 60 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 61 | echo. 62 | echo Please set the JAVA_HOME variable in your environment to match the 63 | echo location of your Java installation. 64 | 65 | goto fail 66 | 67 | :execute 68 | @rem Setup the command line 69 | 70 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar 71 | 72 | 73 | @rem Execute Gradle 74 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* 75 | 76 | :end 77 | @rem End local scope for the variables with windows NT shell 78 | if "%ERRORLEVEL%"=="0" goto mainEnd 79 | 80 | :fail 81 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of 82 | rem the _cmd.exe /c_ return code! 83 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 84 | exit /b 1 85 | 86 | :mainEnd 87 | if "%OS%"=="Windows_NT" endlocal 88 | 89 | :omega 90 | -------------------------------------------------------------------------------- /jitpack.yml: -------------------------------------------------------------------------------- 1 | before_install: 2 | - wget https://github.com/sormuras/bach/raw/master/install-jdk.sh 3 | - source install-jdk.sh --feature 17 -------------------------------------------------------------------------------- /modrinth.md: -------------------------------------------------------------------------------- 1 | [![Culinaire](https://dawnteammc.github.io/culinaire/images/header.png)](https://dawnteammc.github.io/culinaire) 2 | 3 | [![Discord user count](https://img.shields.io/discord/504608980799062036?label=&color=424549&labelColor=7289da&style=for-the-badge&logo=Discord&logoColor=DDE4EF)](https://discord.gg/8ksTVJu) 4 | [![Twitter followers](https://img.shields.io/twitter/follow/DawnTeamMC?label=&color=424549&labelColor=1DA1F2&style=for-the-badge&logo=Twitter&logoColor=DDE4EF)](https://twitter.com/DawnTeamMC) 5 | 6 | Culinaire is a mod for the latest version of Minecraft that adds a ton of features to the game related to food and cooking. 7 | It also brings brand new crafting recipes such as tea brewing, sandwich making and milk coagulation. 8 | 9 | **You can visit the [official website for Culinaire for more information](https://dawnteammc.github.io/culinaire).** 10 | 11 | ## 👾 Features 12 | ### Food items 13 | 14 | ![](https://dawnteammc.github.io/culinaire/images/screenshots/items.png) 15 | Culinaire adds a ton of new food items to the game, such as vegetables with crops (tomatoes, lettuce) and composed meals (pies, salads, sandwiches). 16 | New pastry-related food also have been added, such as the French chouquettes, marshmallows and more to come. 17 | 18 | ![](https://dawnteammc.github.io/culinaire/images/screenshots/kettle.png) 19 | Players are also able to craft kettles and brew tea using a source of heat, water, a bottle and a tea bag. 20 | Each flavor of tea comes with a different effect, that can vary with the amount of ingredients you put in the tea bag. 21 | 22 | ![](https://dawnteammc.github.io/culinaire/images/screenshots/milk_cauldron.png) 23 | You can also make cheese by pouring milk into a cauldron and waiting for it to finally coagulate. 24 | 25 | ## 📦 Download 26 | ### Required mods 27 | ⚠ Culinaire **needs** the following mods to be installed: 28 | 29 | - Fabric API: [GitHub](https://github.com/FabricMC/fabric) / [CurseForge](https://www.curseforge.com/minecraft/mc-mods/fabric-api) / [Modrinth](https://modrinth.com/mod/fabric-api) 30 | - Dawn API: [GitHub](https://github.com/DawnTeamMC/DawnAPI) / [CurseForge](https://www.curseforge.com/minecraft/mc-mods/dawn) / [Modrinth](https://modrinth.com/mod/dawn) 31 | 32 | ### Compatible mods 33 | Culinaire is compatible with the following mods: 34 | 35 | - AppleSkin: [GitHub](https://github.com/squeek502/AppleSkin) / [CurseForge](https://www.curseforge.com/minecraft/mc-mods/appleskin) / [Modrinth](https://modrinth.com/mod/appleskin) 36 | - Roughly Enough Items: [GitHub](https://github.com/shedaniel/RoughlyEnoughItems) / [CurseForge](https://www.curseforge.com/minecraft/mc-mods/roughly-enough-items) 37 | 38 | ## ❤️ Support 39 | [![Patreon supporters](https://img.shields.io/endpoint.svg?url=https%3A%2F%2Fshieldsio-patreon.vercel.app%2Fapi%3Fusername%3DHugman%26type%3Dpatrons&style=flat-square)](https://patreon.com/Hugman) 40 | 41 | You can support Culinaire on the [Patreon page of the founder, main developer and maintainer of the Dawn Team mods (Hugman)](https://patreon.com/Hugman). 42 | 43 | By supporting Hugman, you can get access to the following: 44 | 45 | - Vote for the next features to be added to the Dawn Team mods 46 | - Get exclusive screenshots of the next features to be added to Dawn Team mods 47 | - Get early access to the latest beta versions of Dawn Team mods with new features 48 | - Get early access to new mods from the Dawn Team mods 49 | 50 | **We do not want to lock any in-game feature of the Dawn Team mods behind a paywall, because we believe that any Minecraft mod should forever remain free to download and fully exploit/use.** 51 | Supporting via Patreon is a more of way to help Hugman to continue to improve the mods and show the gratitude you might have towards Hugman's work. 52 | Some money you donate may be used to pay for new features, such as music or art, but not all of it. 53 | 54 | ## 🌟 Special thanks 55 | - Plantkillable & Wintrius - concept for all the content (before Culinaire v2.0) 56 | - Plantkillable - textures for all the content (before Culinaire v2.0) 57 | - cydian - concept of tea system (before Culinaire v2.0) 58 | -------------------------------------------------------------------------------- /settings.gradle: -------------------------------------------------------------------------------- 1 | pluginManagement { 2 | repositories { 3 | maven { 4 | name = 'Fabric' 5 | url = 'https://maven.fabricmc.net/' 6 | } 7 | gradlePluginPortal() 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/main/java/com/hugman/culinaire/Culinaire.java: -------------------------------------------------------------------------------- 1 | package com.hugman.culinaire; 2 | 3 | import com.hugman.culinaire.block.CulinaireCauldronBehaviors; 4 | import com.hugman.culinaire.config.CulinaireConfig; 5 | import com.hugman.culinaire.loot.CulinaireLootTables; 6 | import com.hugman.culinaire.registry.content.*; 7 | import fr.hugman.dawn.Registrar; 8 | import me.shedaniel.autoconfig.AutoConfig; 9 | import me.shedaniel.autoconfig.serializer.GsonConfigSerializer; 10 | import me.shedaniel.autoconfig.serializer.PartitioningSerializer; 11 | import net.fabricmc.api.ModInitializer; 12 | import net.minecraft.util.Identifier; 13 | import org.apache.logging.log4j.LogManager; 14 | import org.apache.logging.log4j.Logger; 15 | 16 | public class Culinaire implements ModInitializer { 17 | public static final Registrar REGISTRAR = new Registrar("culinaire"); 18 | public static final Logger LOGGER = LogManager.getLogger(); 19 | public static final CulinaireConfig CONFIG = AutoConfig.register(CulinaireConfig.class, PartitioningSerializer.wrap(GsonConfigSerializer::new)).getConfig(); 20 | 21 | @Override 22 | public void onInitialize() { 23 | FruitContent.register(REGISTRAR); 24 | VegetableContent.register(REGISTRAR); 25 | DairyContent.register(REGISTRAR); 26 | 27 | CandyContent.register(REGISTRAR); 28 | PastryContent.register(REGISTRAR); 29 | 30 | MealContent.register(REGISTRAR); 31 | TeaContent.register(REGISTRAR); 32 | 33 | CulinaireCauldronBehaviors.init(); 34 | CulinaireLootTables.addToVanillaTables(); 35 | } 36 | 37 | public static Identifier id(String path) { 38 | return REGISTRAR.id(path); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /src/main/java/com/hugman/culinaire/CulinaireClient.java: -------------------------------------------------------------------------------- 1 | package com.hugman.culinaire; 2 | 3 | import com.hugman.culinaire.client.CulinaireColorsMaps; 4 | import com.hugman.culinaire.client.CulinaireScreens; 5 | import com.hugman.culinaire.registry.content.VegetableContent; 6 | import net.fabricmc.api.ClientModInitializer; 7 | import net.fabricmc.api.EnvType; 8 | import net.fabricmc.api.Environment; 9 | import net.fabricmc.fabric.api.blockrenderlayer.v1.BlockRenderLayerMap; 10 | import net.minecraft.client.render.RenderLayer; 11 | 12 | @Environment(EnvType.CLIENT) 13 | public class CulinaireClient implements ClientModInitializer { 14 | @Override 15 | public void onInitializeClient() { 16 | CulinaireColorsMaps.registerColors(); 17 | CulinaireScreens.init(); 18 | } 19 | 20 | 21 | public static void registerRenderLayers() { 22 | BlockRenderLayerMap.INSTANCE.putBlock(VegetableContent.LETTUCE_BLOCK, RenderLayer.getCutout()); 23 | BlockRenderLayerMap.INSTANCE.putBlock(VegetableContent.TOMATO_BLOCK, RenderLayer.getCutout()); 24 | 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/main/java/com/hugman/culinaire/block/CheeseCauldronBlock.java: -------------------------------------------------------------------------------- 1 | package com.hugman.culinaire.block; 2 | 3 | import com.hugman.culinaire.registry.content.DairyContent; 4 | import fr.hugman.dawn.block.ThreeLeveledCauldronBlock; 5 | import net.minecraft.block.BlockState; 6 | import net.minecraft.block.Blocks; 7 | import net.minecraft.block.ShapeContext; 8 | import net.minecraft.block.cauldron.CauldronBehavior; 9 | import net.minecraft.entity.ItemEntity; 10 | import net.minecraft.entity.player.PlayerEntity; 11 | import net.minecraft.item.Item; 12 | import net.minecraft.item.ItemStack; 13 | import net.minecraft.item.Items; 14 | import net.minecraft.stat.Stats; 15 | import net.minecraft.util.ActionResult; 16 | import net.minecraft.util.Hand; 17 | import net.minecraft.util.function.BooleanBiFunction; 18 | import net.minecraft.util.hit.BlockHitResult; 19 | import net.minecraft.util.math.BlockPos; 20 | import net.minecraft.util.shape.VoxelShape; 21 | import net.minecraft.util.shape.VoxelShapes; 22 | import net.minecraft.world.BlockView; 23 | import net.minecraft.world.World; 24 | 25 | public class CheeseCauldronBlock extends ThreeLeveledCauldronBlock { 26 | public CheeseCauldronBlock(Settings settings) { 27 | super(CauldronBehavior.createMap(), settings); 28 | } 29 | 30 | @Override 31 | public Item asItem() { 32 | return Items.CAULDRON; 33 | } 34 | 35 | @Override 36 | public ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockHitResult hit) { 37 | ActionResult result = super.onUse(state, world, pos, player, hand, hit); 38 | if (result.isAccepted()) { 39 | return result; 40 | } else if (!world.isClient) { 41 | int level = state.get(this.getLevelProperty()); 42 | player.incrementStat(Stats.USE_CAULDRON); 43 | player.incrementStat(Stats.USED.getOrCreateStat(player.getStackInHand(hand).getItem())); 44 | float f = 0.7F; 45 | double x = (world.random.nextFloat() * f) + 0.15D; 46 | double y = (world.random.nextFloat() * f) + 0.66D; 47 | double z = (world.random.nextFloat() * f) + 0.15D; 48 | ItemEntity itemEntity = new ItemEntity(world, (double) pos.getX() + x, (double) pos.getY() + y, (double) pos.getZ() + z, new ItemStack(DairyContent.CHEESE)); 49 | itemEntity.setToDefaultPickupDelay(); 50 | world.spawnEntity(itemEntity); 51 | if (level > 1) { 52 | world.setBlockState(pos, changeLevel(state, -1)); 53 | } else { 54 | world.setBlockState(pos, Blocks.CAULDRON.getDefaultState()); 55 | } 56 | } 57 | return ActionResult.success(world.isClient); 58 | } 59 | 60 | @Override 61 | public VoxelShape getRaycastShape(BlockState state, BlockView world, BlockPos pos) { 62 | return createCuboidShape(2.0D, getFluidHeight(state) * 16.0D, 2.0D, 14.0D, 16.0D, 14.0D); 63 | } 64 | 65 | @Override 66 | public VoxelShape getOutlineShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context) { 67 | return VoxelShapes.combineAndSimplify(VoxelShapes.fullCube(), VoxelShapes.union(createCuboidShape(0.0D, 0.0D, 4.0D, 16.0D, 3.0D, 12.0D), createCuboidShape(4.0D, 0.0D, 0.0D, 12.0D, 3.0D, 16.0D), createCuboidShape(2.0D, 0.0D, 2.0D, 14.0D, 3.0D, 14.0D), getRaycastShape(state, world, pos)), BooleanBiFunction.ONLY_FIRST); 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /src/main/java/com/hugman/culinaire/block/CheeseWheelBlock.java: -------------------------------------------------------------------------------- 1 | package com.hugman.culinaire.block; 2 | 3 | import com.hugman.culinaire.registry.content.DairyContent; 4 | import net.minecraft.block.Block; 5 | import net.minecraft.block.BlockState; 6 | import net.minecraft.block.Blocks; 7 | import net.minecraft.block.ShapeContext; 8 | import net.minecraft.entity.ai.pathing.NavigationType; 9 | import net.minecraft.entity.player.PlayerEntity; 10 | import net.minecraft.item.FoodComponent; 11 | import net.minecraft.item.ItemStack; 12 | import net.minecraft.stat.Stats; 13 | import net.minecraft.state.StateManager; 14 | import net.minecraft.state.property.IntProperty; 15 | import net.minecraft.util.ActionResult; 16 | import net.minecraft.util.Hand; 17 | import net.minecraft.util.hit.BlockHitResult; 18 | import net.minecraft.util.math.BlockPos; 19 | import net.minecraft.util.math.Direction; 20 | import net.minecraft.util.shape.VoxelShape; 21 | import net.minecraft.world.BlockView; 22 | import net.minecraft.world.World; 23 | import net.minecraft.world.WorldAccess; 24 | import net.minecraft.world.WorldView; 25 | 26 | public class CheeseWheelBlock extends Block { 27 | public static final IntProperty BITES = CulinaireBlockProperties.BITES_4; 28 | protected static final VoxelShape[] BITES_TO_SHAPE = new VoxelShape[]{Block.createCuboidShape(2.0D, 0.0D, 2.0D, 14.0D, 8.0D, 14.0D), Block.createCuboidShape(4.0D, 0.0D, 2.0D, 14.0D, 8.0D, 14.0D), Block.createCuboidShape(6.0D, 0.0D, 2.0D, 14.0D, 8.0D, 14.0D), Block.createCuboidShape(8.0D, 0.0D, 2.0D, 14.0D, 8.0D, 14.0D), Block.createCuboidShape(10.0D, 0.0D, 2.0D, 14.0D, 8.0D, 14.0D), Block.createCuboidShape(12.0D, 0.0D, 2.0D, 14.0D, 8.0D, 14.0D)}; 29 | 30 | public CheeseWheelBlock(Settings settings) { 31 | super(settings); 32 | this.setDefaultState(this.stateManager.getDefaultState().with(BITES, 0)); 33 | } 34 | 35 | @Override 36 | public VoxelShape getOutlineShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context) { 37 | return BITES_TO_SHAPE[state.get(BITES)]; 38 | } 39 | 40 | @Override 41 | public ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockHitResult hit) { 42 | if (world.isClient) { 43 | ItemStack itemStack = player.getStackInHand(hand); 44 | if (this.tryEat(world, pos, state, player).isAccepted()) { 45 | return ActionResult.SUCCESS; 46 | } 47 | if (itemStack.isEmpty()) { 48 | return ActionResult.CONSUME; 49 | } 50 | } 51 | return this.tryEat(world, pos, state, player); 52 | } 53 | 54 | private ActionResult tryEat(WorldAccess world, BlockPos pos, BlockState state, PlayerEntity player) { 55 | if (!player.canConsume(false)) { 56 | return ActionResult.PASS; 57 | } else { 58 | player.incrementStat(Stats.EAT_CAKE_SLICE); 59 | FoodComponent component = DairyContent.CHEESE.getFoodComponent(); 60 | if (component != null) { 61 | player.getHungerManager().add(component.getHunger(), component.getSaturationModifier()); 62 | } 63 | int i = state.get(BITES); 64 | if (i < 5) { 65 | world.setBlockState(pos, state.with(BITES, i + 1), 3); 66 | } else { 67 | world.removeBlock(pos, false); 68 | } 69 | return ActionResult.SUCCESS; 70 | } 71 | } 72 | 73 | @Override 74 | public BlockState getStateForNeighborUpdate(BlockState state, Direction direction, BlockState newState, WorldAccess world, BlockPos pos, BlockPos posFrom) { 75 | return direction == Direction.DOWN && !state.canPlaceAt(world, pos) ? Blocks.AIR.getDefaultState() : super.getStateForNeighborUpdate(state, direction, newState, world, pos, posFrom); 76 | } 77 | 78 | @Override 79 | public boolean canPlaceAt(BlockState state, WorldView world, BlockPos pos) { 80 | return world.getBlockState(pos.down()).isSolid(); 81 | } 82 | 83 | @Override 84 | protected void appendProperties(StateManager.Builder builder) { 85 | builder.add(BITES); 86 | } 87 | 88 | @Override 89 | public int getComparatorOutput(BlockState state, World world, BlockPos pos) { 90 | return (6 - state.get(BITES)) * 2; 91 | } 92 | 93 | @Override 94 | public boolean hasComparatorOutput(BlockState state) { 95 | return true; 96 | } 97 | 98 | @Override 99 | public boolean canPathfindThrough(BlockState state, BlockView world, BlockPos pos, NavigationType type) { 100 | return false; 101 | } 102 | } 103 | -------------------------------------------------------------------------------- /src/main/java/com/hugman/culinaire/block/CulinaireBlockProperties.java: -------------------------------------------------------------------------------- 1 | package com.hugman.culinaire.block; 2 | 3 | import net.minecraft.state.property.IntProperty; 4 | 5 | public class CulinaireBlockProperties { 6 | public static final IntProperty BITES_4 = IntProperty.of("bites", 0, 5); 7 | } 8 | -------------------------------------------------------------------------------- /src/main/java/com/hugman/culinaire/block/CulinaireCauldronBehaviors.java: -------------------------------------------------------------------------------- 1 | package com.hugman.culinaire.block; 2 | 3 | import com.hugman.culinaire.registry.content.CandyContent; 4 | import com.hugman.culinaire.registry.content.DairyContent; 5 | import fr.hugman.dawn.block.CauldronInteractionBuilder; 6 | import fr.hugman.dawn.block.CauldronUtil; 7 | import net.minecraft.block.cauldron.CauldronBehavior; 8 | import net.minecraft.item.Item; 9 | import net.minecraft.item.Items; 10 | import net.minecraft.sound.SoundEvents; 11 | 12 | import java.util.Map; 13 | 14 | public class CulinaireCauldronBehaviors { 15 | public static Map MILK = CauldronBehavior.createMap(); 16 | public static Map DARK_CHOCOLATE = CauldronBehavior.createMap(); 17 | public static Map MILK_CHOCOLATE = CauldronBehavior.createMap(); 18 | public static Map WHITE_CHOCOLATE = CauldronBehavior.createMap(); 19 | 20 | public static void init() { 21 | // Milk Cauldron 22 | CauldronUtil.addBottleInteractions(MILK, DairyContent.MILK_CAULDRON, DairyContent.MILK_BOTTLE); 23 | CauldronUtil.addBucketInteractions(MILK, DairyContent.MILK_CAULDRON, Items.MILK_BUCKET); 24 | MILK.put(Items.SUGAR, CauldronInteractionBuilder.create().addLevel(0).cauldron(CandyContent.WHITE_CHOCOLATE_CAULDRON).build()); 25 | 26 | // Dark Chocolate Cauldron 27 | CauldronUtil.addBottleInteractions(DARK_CHOCOLATE, CandyContent.DARK_CHOCOLATE_CAULDRON, CandyContent.DARK_CHOCOLATE_BOTTLE); 28 | DARK_CHOCOLATE.put(Items.MILK_BUCKET, CauldronInteractionBuilder.create().addLevel(3).cauldron(CandyContent.MILK_CHOCOLATE_CAULDRON).sound(SoundEvents.ITEM_BUCKET_EMPTY).build()); 29 | DARK_CHOCOLATE.put(DairyContent.MILK_BOTTLE, CauldronInteractionBuilder.create().addLevel(1).cauldron(CandyContent.MILK_CHOCOLATE_CAULDRON).sound(SoundEvents.ITEM_BOTTLE_EMPTY).build()); 30 | 31 | // Milk Chocolate Cauldron 32 | CauldronUtil.addBottleInteractions(MILK_CHOCOLATE, CandyContent.MILK_CHOCOLATE_CAULDRON, CandyContent.MILK_CHOCOLATE_BOTTLE); 33 | 34 | // White Chocolate Cauldron 35 | CauldronUtil.addBottleInteractions(WHITE_CHOCOLATE, CandyContent.WHITE_CHOCOLATE_CAULDRON, CandyContent.WHITE_CHOCOLATE_BOTTLE); 36 | WHITE_CHOCOLATE.put(Items.COCOA_BEANS, CauldronInteractionBuilder.create().addLevel(0).cauldron(CandyContent.MILK_CHOCOLATE_CAULDRON).build()); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /src/main/java/com/hugman/culinaire/block/LettuceBlock.java: -------------------------------------------------------------------------------- 1 | package com.hugman.culinaire.block; 2 | 3 | import com.hugman.culinaire.registry.content.VegetableContent; 4 | import net.fabricmc.api.EnvType; 5 | import net.fabricmc.api.Environment; 6 | import net.minecraft.block.Block; 7 | import net.minecraft.block.BlockState; 8 | import net.minecraft.block.CropBlock; 9 | import net.minecraft.block.ShapeContext; 10 | import net.minecraft.item.ItemConvertible; 11 | import net.minecraft.server.world.ServerWorld; 12 | import net.minecraft.state.StateManager; 13 | import net.minecraft.state.property.IntProperty; 14 | import net.minecraft.state.property.Properties; 15 | import net.minecraft.util.math.BlockPos; 16 | import net.minecraft.util.math.random.Random; 17 | import net.minecraft.util.shape.VoxelShape; 18 | import net.minecraft.world.BlockView; 19 | import net.minecraft.world.World; 20 | 21 | public class LettuceBlock extends CropBlock { 22 | public static final IntProperty AGE = Properties.AGE_3; 23 | private static final VoxelShape[] AGE_TO_SHAPE = new VoxelShape[]{Block.createCuboidShape(0.0D, 0.0D, 0.0D, 16.0D, 3.0D, 16.0D), Block.createCuboidShape(0.0D, 0.0D, 0.0D, 16.0D, 8.0D, 16.0D), Block.createCuboidShape(0.0D, 0.0D, 0.0D, 16.0D, 10.0D, 16.0D), Block.createCuboidShape(0.0D, 0.0D, 0.0D, 16.0D, 13.0D, 16.0D)}; 24 | 25 | public LettuceBlock(Settings settings) { 26 | super(settings); 27 | } 28 | 29 | @Override 30 | public void randomTick(BlockState state, ServerWorld world, BlockPos pos, Random random) { 31 | if (random.nextInt(3) != 0) { 32 | super.randomTick(state, world, pos, random); 33 | } 34 | } 35 | 36 | @Override 37 | public IntProperty getAgeProperty() { 38 | return AGE; 39 | } 40 | 41 | @Override 42 | public int getMaxAge() { 43 | return 3; 44 | } 45 | 46 | @Override 47 | @Environment(EnvType.CLIENT) 48 | protected ItemConvertible getSeedsItem() { 49 | return VegetableContent.LETTUCE_SEEDS; 50 | } 51 | 52 | @Override 53 | protected int getGrowthAmount(World world) { 54 | return super.getGrowthAmount(world) / 3; 55 | } 56 | 57 | @Override 58 | protected void appendProperties(StateManager.Builder builder) { 59 | builder.add(AGE); 60 | } 61 | 62 | @Override 63 | public VoxelShape getOutlineShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context) { 64 | return AGE_TO_SHAPE[state.get(this.getAgeProperty())]; 65 | } 66 | } 67 | -------------------------------------------------------------------------------- /src/main/java/com/hugman/culinaire/block/MilkCauldronBlock.java: -------------------------------------------------------------------------------- 1 | package com.hugman.culinaire.block; 2 | 3 | import com.hugman.culinaire.registry.content.DairyContent; 4 | import fr.hugman.dawn.block.ThreeLeveledCauldronBlock; 5 | import net.minecraft.block.Block; 6 | import net.minecraft.block.BlockState; 7 | import net.minecraft.block.cauldron.CauldronBehavior; 8 | import net.minecraft.entity.Entity; 9 | import net.minecraft.entity.LivingEntity; 10 | import net.minecraft.item.Item; 11 | import net.minecraft.item.Items; 12 | import net.minecraft.server.world.ServerWorld; 13 | import net.minecraft.util.math.BlockPos; 14 | import net.minecraft.util.math.random.Random; 15 | import net.minecraft.world.World; 16 | 17 | import java.util.Map; 18 | 19 | public class MilkCauldronBlock extends ThreeLeveledCauldronBlock { 20 | public MilkCauldronBlock(Map behaviorMap, Settings settings) { 21 | super(behaviorMap, settings); 22 | } 23 | 24 | @Override 25 | public Item asItem() { 26 | return Items.CAULDRON; 27 | } 28 | 29 | @Override 30 | public void onEntityCollision(BlockState state, World world, BlockPos pos, Entity entity) { 31 | if (!world.isClient && entity instanceof LivingEntity livingEntity && this.isEntityTouchingFluid(state, pos, entity)) { 32 | if (entity.canModifyAt(world, pos) && livingEntity.clearStatusEffects()) { 33 | world.setBlockState(pos, changeLevel(state, -1)); 34 | } 35 | } 36 | } 37 | 38 | @Override 39 | public boolean hasRandomTicks(BlockState state) { 40 | return super.hasRandomTicks(state); 41 | } 42 | 43 | @Override 44 | public void randomTick(BlockState state, ServerWorld world, BlockPos pos, Random random) { 45 | // Formula: 1/(x/(68.27/60)) 46 | // x = 30 (days) 47 | if (random.nextFloat() < 0.0379278F) { 48 | world.setBlockState(pos, DairyContent.CHEESE_CAULDRON.getDefaultState().with(CheeseCauldronBlock.LEVEL, getLevel(state)), Block.NOTIFY_LISTENERS); 49 | } 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /src/main/java/com/hugman/culinaire/client/CulinaireColorsMaps.java: -------------------------------------------------------------------------------- 1 | package com.hugman.culinaire.client; 2 | 3 | import com.hugman.culinaire.registry.content.TeaContent; 4 | import com.hugman.culinaire.tea.TeaHelper; 5 | import net.fabricmc.api.EnvType; 6 | import net.fabricmc.api.Environment; 7 | import net.fabricmc.fabric.api.client.rendering.v1.ColorProviderRegistry; 8 | 9 | @Environment(EnvType.CLIENT) 10 | public class CulinaireColorsMaps { 11 | public static void registerColors() { 12 | registerItemColors(); 13 | } 14 | 15 | private static void registerItemColors() { 16 | ColorProviderRegistry.ITEM.register((stack, tintIndex) -> tintIndex > 0 ? -1 : TeaHelper.getColor(stack), TeaContent.TEA_BOTTLE); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/main/java/com/hugman/culinaire/client/CulinaireScreens.java: -------------------------------------------------------------------------------- 1 | package com.hugman.culinaire.client; 2 | 3 | import com.hugman.culinaire.registry.content.TeaContent; 4 | import com.hugman.culinaire.screen.KettleScreen; 5 | import net.fabricmc.api.EnvType; 6 | import net.fabricmc.api.Environment; 7 | import net.fabricmc.fabric.api.client.screenhandler.v1.ScreenRegistry; 8 | 9 | @Environment(EnvType.CLIENT) 10 | public class CulinaireScreens { 11 | public static void init() { 12 | ScreenRegistry.register(TeaContent.KETTLE_SCREEN_HANDLER, KettleScreen::new); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/main/java/com/hugman/culinaire/compat/rei/CulinaireREIPlugin.java: -------------------------------------------------------------------------------- 1 | package com.hugman.culinaire.compat.rei; 2 | 3 | import com.hugman.culinaire.Culinaire; 4 | import com.hugman.culinaire.recipe.TeaBagMakingRecipe; 5 | import com.hugman.culinaire.registry.content.TeaContent; 6 | import com.hugman.culinaire.screen.KettleScreen; 7 | import com.hugman.culinaire.tea.TeaHelper; 8 | import com.hugman.culinaire.tea.TeaType; 9 | import me.shedaniel.math.Rectangle; 10 | import me.shedaniel.rei.api.client.REIRuntime; 11 | import me.shedaniel.rei.api.client.plugins.REIClientPlugin; 12 | import me.shedaniel.rei.api.client.registry.category.CategoryRegistry; 13 | import me.shedaniel.rei.api.client.registry.display.DisplayRegistry; 14 | import me.shedaniel.rei.api.client.registry.screen.ScreenRegistry; 15 | import me.shedaniel.rei.api.common.category.CategoryIdentifier; 16 | import me.shedaniel.rei.api.common.util.EntryStacks; 17 | import net.minecraft.item.ItemStack; 18 | import net.minecraft.recipe.Ingredient; 19 | import net.minecraft.recipe.ShapelessRecipe; 20 | import net.minecraft.recipe.book.CraftingRecipeCategory; 21 | import net.minecraft.util.Identifier; 22 | import net.minecraft.util.collection.DefaultedList; 23 | 24 | public class CulinaireREIPlugin implements REIClientPlugin { 25 | public static final CategoryIdentifier TEA_BREWING = CategoryIdentifier.of(Culinaire.id("plugins/tea_brewing")); 26 | private static final Identifier DISPLAY_TEXTURE = Culinaire.id("textures/gui/rei/display.png"); 27 | private static final Identifier DARK_DISPLAY_TEXTURE = Culinaire.id("textures/gui/rei/dark_display.png"); 28 | 29 | public static Identifier getDisplayTexture() { 30 | return REIRuntime.getInstance().isDarkThemeEnabled() ? DARK_DISPLAY_TEXTURE : DISPLAY_TEXTURE; 31 | } 32 | 33 | @Override 34 | public void registerCategories(CategoryRegistry registry) { 35 | registry.add(new TeaBrewingCategory()); 36 | 37 | registry.setPlusButtonArea(TEA_BREWING, bounds -> null); 38 | 39 | registry.addWorkstations(CulinaireREIPlugin.TEA_BREWING, EntryStacks.of(TeaContent.KETTLE)); 40 | } 41 | 42 | @Override 43 | public void registerDisplays(DisplayRegistry registry) { 44 | this.registerTeaBagDisplays(registry); 45 | this.registerTeaBottleDisplays(registry); 46 | } 47 | 48 | private void registerTeaBagDisplays(DisplayRegistry registry) { 49 | for (TeaType teaType : TeaHelper.getAllTypes()) { 50 | DefaultedList inputs = DefaultedList.of(); 51 | inputs.add(TeaBagMakingRecipe.PAPER); 52 | inputs.add(TeaBagMakingRecipe.STRING); 53 | Ingredient ingredient = Ingredient.fromTag(teaType.getTag()); 54 | if (!ingredient.isEmpty()) { 55 | inputs.add(ingredient); 56 | ItemStack output = TeaHelper.appendTeaType(new ItemStack(TeaContent.TEA_BAG), teaType); 57 | Identifier id = new Identifier("culinaire", teaType.getStrength().getName() + "_" + teaType.getFlavor().getName() + "_tea_bag"); 58 | registry.add(new ShapelessRecipe(id, "tea_bags", CraftingRecipeCategory.MISC, output, inputs)); 59 | } 60 | } 61 | } 62 | 63 | private void registerTeaBottleDisplays(DisplayRegistry registry) { 64 | for (TeaType teaType : TeaHelper.getAllTypes()) { 65 | ItemStack input = TeaHelper.appendTeaType(new ItemStack(TeaContent.TEA_BAG), teaType); 66 | ItemStack output = TeaHelper.appendTeaType(new ItemStack(TeaContent.TEA_BOTTLE), teaType); 67 | registry.add(new TeaBrewingDisplay(input, output, teaType.getFlavor().getColor())); 68 | } 69 | } 70 | 71 | @Override 72 | public void registerScreens(ScreenRegistry registry) { 73 | registry.registerContainerClickArea(new Rectangle(97, 16, 14, 30), KettleScreen.class, TEA_BREWING); 74 | } 75 | } 76 | -------------------------------------------------------------------------------- /src/main/java/com/hugman/culinaire/compat/rei/TeaBrewingCategory.java: -------------------------------------------------------------------------------- 1 | package com.hugman.culinaire.compat.rei; 2 | 3 | import com.google.common.collect.Lists; 4 | import com.hugman.culinaire.registry.content.TeaContent; 5 | import com.mojang.blaze3d.systems.RenderSystem; 6 | import me.shedaniel.math.Point; 7 | import me.shedaniel.math.Rectangle; 8 | import me.shedaniel.rei.api.client.gui.Renderer; 9 | import me.shedaniel.rei.api.client.gui.widgets.Widget; 10 | import me.shedaniel.rei.api.client.gui.widgets.Widgets; 11 | import me.shedaniel.rei.api.client.registry.display.DisplayCategory; 12 | import me.shedaniel.rei.api.common.category.CategoryIdentifier; 13 | import me.shedaniel.rei.api.common.util.EntryStacks; 14 | import net.minecraft.text.Text; 15 | import net.minecraft.util.math.MathHelper; 16 | 17 | import java.util.List; 18 | 19 | public class TeaBrewingCategory implements DisplayCategory { 20 | 21 | @Override 22 | public CategoryIdentifier getCategoryIdentifier() { 23 | return CulinaireREIPlugin.TEA_BREWING; 24 | } 25 | 26 | @Override 27 | public Renderer getIcon() { 28 | return EntryStacks.of(TeaContent.KETTLE); 29 | } 30 | 31 | @Override 32 | public Text getTitle() { 33 | return Text.translatable("rei_category.culinaire.tea_brewing"); 34 | } 35 | 36 | @Override 37 | public List setupDisplay(TeaBrewingDisplay display, Rectangle bounds) { 38 | Point startPoint = new Point(bounds.getCenterX() - 24, bounds.getCenterY() - 30); 39 | List widgets = Lists.newArrayList(); 40 | widgets.add(Widgets.createRecipeBase(bounds)); 41 | widgets.add(Widgets.createDrawableWidget((context, mouseX, mouseY, delta) -> { 42 | var texture = CulinaireREIPlugin.getDisplayTexture(); 43 | 44 | 45 | // main texture 46 | context.drawTexture(texture, startPoint.x, startPoint.y, 0, 0, 70, 60); 47 | 48 | // tea color texture 49 | int teaColor = display.getTeaColor(); 50 | float red = (teaColor >> 16 & 255) / 255.0F; 51 | float green = (teaColor >> 8 & 255) / 255.0F; 52 | float blue = (teaColor & 255) / 255.0F; 53 | RenderSystem.setShaderColor(red, green, blue, 1.0F); 54 | context.drawTexture(texture, startPoint.x + 1, startPoint.y + 32, 70, 0, 46, 16); 55 | RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); 56 | 57 | // fire texture 58 | context.drawTexture(texture, startPoint.x + 12, startPoint.y + 52, 70, 16, 24, 9); 59 | 60 | // animated arrow texture 61 | int height = MathHelper.ceil(System.currentTimeMillis() / 250d % 26d); 62 | context.drawTexture(texture, startPoint.x + 35, startPoint.y + 1, 70, 25, 7, height); 63 | })); 64 | widgets.add(Widgets.createSlot(new Point(startPoint.x + 16, startPoint.y + 1)).entries(display.getInputEntries().get(0)).disableBackground().markInput()); 65 | widgets.add(Widgets.createSlot(new Point(startPoint.x + 53, startPoint.y + 32)).entries(display.getOutputEntries().get(0)).disableBackground().markOutput()); 66 | return widgets; 67 | } 68 | 69 | @Override 70 | public int getDisplayHeight() { 71 | return 68; 72 | } 73 | } 74 | -------------------------------------------------------------------------------- /src/main/java/com/hugman/culinaire/compat/rei/TeaBrewingDisplay.java: -------------------------------------------------------------------------------- 1 | package com.hugman.culinaire.compat.rei; 2 | 3 | import me.shedaniel.rei.api.common.category.CategoryIdentifier; 4 | import me.shedaniel.rei.api.common.display.Display; 5 | import me.shedaniel.rei.api.common.entry.EntryIngredient; 6 | import me.shedaniel.rei.api.common.entry.EntryStack; 7 | import me.shedaniel.rei.api.common.util.EntryIngredients; 8 | import me.shedaniel.rei.api.common.util.EntryStacks; 9 | import net.minecraft.item.ItemStack; 10 | 11 | import java.util.Collections; 12 | import java.util.List; 13 | 14 | public class TeaBrewingDisplay implements Display { 15 | private final EntryIngredient input; 16 | private final EntryStack output; 17 | private final int teaColor; 18 | 19 | public TeaBrewingDisplay(ItemStack input, ItemStack output, int teaColor) { 20 | this.input = EntryIngredients.of(input); 21 | this.output = EntryStacks.of(output); 22 | this.teaColor = teaColor; 23 | } 24 | 25 | @Override 26 | public List getInputEntries() { 27 | return Collections.singletonList(this.input); 28 | } 29 | 30 | @Override 31 | public List getOutputEntries() { 32 | return Collections.singletonList(EntryIngredient.of(this.output)); 33 | } 34 | 35 | public int getTeaColor() { 36 | return this.teaColor; 37 | } 38 | 39 | @Override 40 | public CategoryIdentifier getCategoryIdentifier() { 41 | return CulinaireREIPlugin.TEA_BREWING; 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /src/main/java/com/hugman/culinaire/config/CulinaireConfig.java: -------------------------------------------------------------------------------- 1 | package com.hugman.culinaire.config; 2 | 3 | import me.shedaniel.autoconfig.ConfigData; 4 | import me.shedaniel.autoconfig.annotation.Config; 5 | import me.shedaniel.autoconfig.annotation.ConfigEntry; 6 | import me.shedaniel.autoconfig.serializer.PartitioningSerializer; 7 | 8 | @Config(name = "culinaire") 9 | @Config.Gui.Background("minecraft:textures/block/yellow_concrete.png") 10 | public class CulinaireConfig extends PartitioningSerializer.GlobalData { 11 | @ConfigEntry.Category("features") 12 | @ConfigEntry.Gui.TransitiveObject 13 | public FeaturesCategory features = new FeaturesCategory(); 14 | 15 | @Config(name = "features") 16 | public static class FeaturesCategory implements ConfigData { 17 | public boolean canDrinkMilkBucket = false; 18 | @ConfigEntry.Gui.RequiresRestart 19 | public int milkBottlesMaxCount = 1; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/com/hugman/culinaire/config/CulinaireModMenuIntegration.java: -------------------------------------------------------------------------------- 1 | package com.hugman.culinaire.config; 2 | 3 | import com.terraformersmc.modmenu.api.ConfigScreenFactory; 4 | import com.terraformersmc.modmenu.api.ModMenuApi; 5 | import me.shedaniel.autoconfig.AutoConfig; 6 | import net.fabricmc.api.EnvType; 7 | import net.fabricmc.api.Environment; 8 | import net.minecraft.client.gui.screen.Screen; 9 | 10 | @Environment(EnvType.CLIENT) 11 | public class CulinaireModMenuIntegration implements ModMenuApi { 12 | public ConfigScreenFactory getModConfigScreenFactory() { 13 | return (parent) -> (Screen) AutoConfig.getConfigScreen(CulinaireConfig.class, parent).get(); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/main/java/com/hugman/culinaire/item/ChocolateBottleItem.java: -------------------------------------------------------------------------------- 1 | package com.hugman.culinaire.item; 2 | 3 | import net.minecraft.advancement.criterion.Criteria; 4 | import net.minecraft.entity.LivingEntity; 5 | import net.minecraft.entity.player.PlayerEntity; 6 | import net.minecraft.item.Item; 7 | import net.minecraft.item.ItemStack; 8 | import net.minecraft.item.ItemUsage; 9 | import net.minecraft.item.Items; 10 | import net.minecraft.server.network.ServerPlayerEntity; 11 | import net.minecraft.stat.Stats; 12 | import net.minecraft.util.Hand; 13 | import net.minecraft.util.TypedActionResult; 14 | import net.minecraft.util.UseAction; 15 | import net.minecraft.world.World; 16 | 17 | public class ChocolateBottleItem extends Item { 18 | public ChocolateBottleItem(Settings settings) { 19 | super(settings); 20 | } 21 | 22 | @Override 23 | public ItemStack finishUsing(ItemStack stack, World world, LivingEntity user) { 24 | PlayerEntity playerEntity = user instanceof PlayerEntity ? (PlayerEntity) user : null; 25 | super.finishUsing(stack, world, user); 26 | if (user instanceof ServerPlayerEntity serverPlayerEntity) { 27 | Criteria.CONSUME_ITEM.trigger(serverPlayerEntity, stack); 28 | serverPlayerEntity.incrementStat(Stats.USED.getOrCreateStat(this)); 29 | } 30 | if (playerEntity != null) { 31 | playerEntity.incrementStat(Stats.USED.getOrCreateStat(this)); 32 | if (!playerEntity.getAbilities().creativeMode) { 33 | stack.decrement(1); 34 | } 35 | } 36 | if (playerEntity == null || !playerEntity.getAbilities().creativeMode) { 37 | if (stack.isEmpty()) { 38 | return new ItemStack(Items.GLASS_BOTTLE); 39 | } 40 | if (playerEntity != null) { 41 | playerEntity.getInventory().insertStack(new ItemStack(Items.GLASS_BOTTLE)); 42 | } 43 | } 44 | return stack; 45 | } 46 | 47 | @Override 48 | public int getMaxUseTime(ItemStack stack) { 49 | return 32; 50 | } 51 | 52 | @Override 53 | public UseAction getUseAction(ItemStack stack) { 54 | return UseAction.DRINK; 55 | } 56 | 57 | @Override 58 | public TypedActionResult use(World world, PlayerEntity user, Hand hand) { 59 | return ItemUsage.consumeHeldItem(world, user, hand); 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /src/main/java/com/hugman/culinaire/item/MarshmallowOnAStickItem.java: -------------------------------------------------------------------------------- 1 | package com.hugman.culinaire.item; 2 | 3 | import com.hugman.culinaire.registry.content.CandyContent; 4 | import net.minecraft.block.BlockState; 5 | import net.minecraft.block.CampfireBlock; 6 | import net.minecraft.entity.Entity; 7 | import net.minecraft.entity.LivingEntity; 8 | import net.minecraft.entity.player.PlayerEntity; 9 | import net.minecraft.item.Item; 10 | import net.minecraft.item.ItemStack; 11 | import net.minecraft.item.Items; 12 | import net.minecraft.nbt.NbtCompound; 13 | import net.minecraft.registry.Registries; 14 | import net.minecraft.util.Hand; 15 | import net.minecraft.util.Identifier; 16 | import net.minecraft.util.hit.BlockHitResult; 17 | import net.minecraft.util.hit.HitResult; 18 | import net.minecraft.util.math.Direction; 19 | import net.minecraft.world.World; 20 | 21 | public class MarshmallowOnAStickItem extends Item { 22 | public MarshmallowOnAStickItem(Settings settings) { 23 | super(settings); 24 | } 25 | 26 | public ItemStack finishUsing(ItemStack stack, World world, LivingEntity user) { 27 | ItemStack itemStack = super.finishUsing(stack, world, user); 28 | return user instanceof PlayerEntity && ((PlayerEntity) user).getAbilities().creativeMode ? itemStack : new ItemStack(Items.STICK); 29 | } 30 | 31 | public void incrementBurningTime(LivingEntity livingEntity, ItemStack stack) { 32 | int burnTime = 0; 33 | int maxBurnTime = getDefaultMaxBurnTime(stack.getItem()); 34 | Item burnItem = getDefaultBurnItem(stack.getItem()); 35 | NbtCompound compoundTag = stack.getOrCreateNbt(); 36 | if (compoundTag.contains("BurnTime")) { 37 | burnTime = compoundTag.getInt("BurnTime"); 38 | } 39 | if (compoundTag.contains("MaxBurnTime")) { 40 | maxBurnTime = compoundTag.getInt("MaxBurnTime"); 41 | } else { 42 | compoundTag.putInt("MaxBurnTime", maxBurnTime); 43 | } 44 | if (compoundTag.contains("BurnItem")) { 45 | burnItem = Registries.ITEM.get(new Identifier(compoundTag.getString("BurnItem"))); 46 | } else { 47 | compoundTag.putString("BurnItem", Registries.ITEM.getId(burnItem).toString()); 48 | } 49 | burnTime++; 50 | compoundTag.putInt("BurnTime", burnTime); 51 | if (burnTime >= maxBurnTime) { 52 | livingEntity.setStackInHand(Hand.MAIN_HAND, new ItemStack(burnItem, stack.getCount())); 53 | } 54 | } 55 | 56 | public int getDefaultMaxBurnTime(Item item) { 57 | if (item == CandyContent.MARSHMALLOW_ON_A_STICK) { 58 | return 150; 59 | } else if (item == CandyContent.TOASTY_MARSHMALLOW_ON_A_STICK) { 60 | return 75; 61 | } else if (item == CandyContent.GOLDEN_MARSHMALLOW_ON_A_STICK) { 62 | return 20; 63 | } else if (item == CandyContent.BURNT_MARSHMALLOW_ON_A_STICK) { 64 | return 30; 65 | } else { 66 | return 60; 67 | } 68 | } 69 | 70 | public Item getDefaultBurnItem(Item item) { 71 | if (item == CandyContent.MARSHMALLOW_ON_A_STICK) { 72 | return CandyContent.TOASTY_MARSHMALLOW_ON_A_STICK; 73 | } else if (item == CandyContent.TOASTY_MARSHMALLOW_ON_A_STICK) { 74 | return CandyContent.GOLDEN_MARSHMALLOW_ON_A_STICK; 75 | } else if (item == CandyContent.GOLDEN_MARSHMALLOW_ON_A_STICK) { 76 | return CandyContent.BURNT_MARSHMALLOW_ON_A_STICK; 77 | } else if (item == CandyContent.BURNT_MARSHMALLOW_ON_A_STICK) { 78 | return Items.STICK; 79 | } else { 80 | return Items.AIR; 81 | } 82 | } 83 | 84 | @Override 85 | public void inventoryTick(ItemStack stack, World world, Entity entity, int slot, boolean selected) { 86 | if (!world.isClient() && selected && entity instanceof LivingEntity && entity.isSneaking()) { 87 | HitResult hitResult = entity.raycast(1.5D, 0.0F, true); 88 | if (hitResult.getType() == HitResult.Type.BLOCK) { 89 | BlockHitResult blockHitResult = (BlockHitResult) hitResult; 90 | BlockState state = world.getBlockState(blockHitResult.getBlockPos()); 91 | if (CampfireBlock.isLitCampfire(state) && blockHitResult.getSide() != Direction.DOWN) { 92 | incrementBurningTime((LivingEntity) entity, stack); 93 | } 94 | } 95 | } 96 | super.inventoryTick(stack, world, entity, slot, selected); 97 | } 98 | } 99 | -------------------------------------------------------------------------------- /src/main/java/com/hugman/culinaire/item/MilkBottleItem.java: -------------------------------------------------------------------------------- 1 | package com.hugman.culinaire.item; 2 | 3 | import net.minecraft.advancement.criterion.Criteria; 4 | import net.minecraft.entity.LivingEntity; 5 | import net.minecraft.entity.player.PlayerEntity; 6 | import net.minecraft.item.Item; 7 | import net.minecraft.item.ItemStack; 8 | import net.minecraft.item.ItemUsage; 9 | import net.minecraft.item.Items; 10 | import net.minecraft.server.network.ServerPlayerEntity; 11 | import net.minecraft.stat.Stats; 12 | import net.minecraft.util.Hand; 13 | import net.minecraft.util.TypedActionResult; 14 | import net.minecraft.util.UseAction; 15 | import net.minecraft.world.World; 16 | 17 | public class MilkBottleItem extends Item { 18 | public MilkBottleItem(Settings settings) { 19 | super(settings); 20 | } 21 | 22 | @Override 23 | public ItemStack finishUsing(ItemStack stack, World world, LivingEntity user) { 24 | PlayerEntity playerEntity = user instanceof PlayerEntity ? (PlayerEntity) user : null; 25 | super.finishUsing(stack, world, user); 26 | if (user instanceof ServerPlayerEntity serverPlayerEntity) { 27 | Criteria.CONSUME_ITEM.trigger(serverPlayerEntity, stack); 28 | serverPlayerEntity.incrementStat(Stats.USED.getOrCreateStat(this)); 29 | } 30 | if (!world.isClient) { 31 | user.clearStatusEffects(); 32 | } 33 | if (playerEntity != null) { 34 | playerEntity.incrementStat(Stats.USED.getOrCreateStat(this)); 35 | if (!playerEntity.getAbilities().creativeMode) { 36 | stack.decrement(1); 37 | } 38 | } 39 | if (playerEntity == null || !playerEntity.getAbilities().creativeMode) { 40 | if (stack.isEmpty()) { 41 | return new ItemStack(Items.GLASS_BOTTLE); 42 | } 43 | if (playerEntity != null) { 44 | playerEntity.getInventory().insertStack(new ItemStack(Items.GLASS_BOTTLE)); 45 | } 46 | } 47 | return stack; 48 | } 49 | 50 | @Override 51 | public int getMaxUseTime(ItemStack stack) { 52 | return 32; 53 | } 54 | 55 | @Override 56 | public UseAction getUseAction(ItemStack stack) { 57 | return UseAction.DRINK; 58 | } 59 | 60 | @Override 61 | public TypedActionResult use(World world, PlayerEntity user, Hand hand) { 62 | return ItemUsage.consumeHeldItem(world, user, hand); 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /src/main/java/com/hugman/culinaire/item/SandwichItem.java: -------------------------------------------------------------------------------- 1 | package com.hugman.culinaire.item; 2 | 3 | import fr.hugman.dawn.item.DynamicFood; 4 | import net.fabricmc.api.EnvType; 5 | import net.fabricmc.api.Environment; 6 | import net.minecraft.client.item.TooltipContext; 7 | import net.minecraft.item.FoodComponent; 8 | import net.minecraft.item.Item; 9 | import net.minecraft.item.ItemStack; 10 | import net.minecraft.nbt.NbtCompound; 11 | import net.minecraft.text.Text; 12 | import net.minecraft.world.World; 13 | 14 | import javax.annotation.Nullable; 15 | import java.util.List; 16 | 17 | public class SandwichItem extends Item implements DynamicFood { 18 | public static final String SANDWICH_DATA = "SandwichData"; 19 | public static final String HUNGER = "Hunger"; 20 | public static final String SATURATION_MODIFIER = "SaturationModifier"; 21 | public static final String HAS_GLINT = "HasGlint"; 22 | public static final String INGREDIENT_LIST = "IngredientList"; 23 | 24 | public SandwichItem(Settings settings) { 25 | super(settings); 26 | } 27 | 28 | @Override 29 | public int getHunger(ItemStack stack) { 30 | NbtCompound sandwichData = stack.getSubNbt(SANDWICH_DATA); 31 | if (sandwichData != null) { 32 | if (sandwichData.contains(HUNGER)) 33 | return sandwichData.getInt(HUNGER); 34 | } else { 35 | FoodComponent foodComponent = stack.getItem().getFoodComponent(); 36 | if (foodComponent != null) { 37 | return foodComponent.getHunger(); 38 | } 39 | } 40 | return 0; 41 | } 42 | 43 | @Override 44 | public float getSaturationModifier(ItemStack stack) { 45 | NbtCompound sandwichData = stack.getSubNbt(SANDWICH_DATA); 46 | if (sandwichData != null) { 47 | if (sandwichData.contains(SATURATION_MODIFIER)) 48 | return sandwichData.getFloat(SATURATION_MODIFIER); 49 | } else { 50 | FoodComponent foodComponent = stack.getItem().getFoodComponent(); 51 | if (foodComponent != null) { 52 | return foodComponent.getSaturationModifier(); 53 | } 54 | } 55 | return 0; 56 | } 57 | 58 | @Override 59 | public boolean hasGlint(ItemStack stack) { 60 | NbtCompound sandwichData = stack.getSubNbt(SANDWICH_DATA); 61 | if (sandwichData != null) { 62 | if (sandwichData.contains(HAS_GLINT)) { 63 | return sandwichData.getBoolean(HAS_GLINT); 64 | } 65 | } 66 | return false; 67 | } 68 | 69 | @Override 70 | @Environment(EnvType.CLIENT) 71 | public void appendTooltip(ItemStack stack, @Nullable World world, List tooltip, TooltipContext context) { 72 | NbtCompound sandwichData = stack.getSubNbt(SANDWICH_DATA); 73 | if (sandwichData != null) { 74 | if (sandwichData.contains(INGREDIENT_LIST)) { 75 | tooltip.add(Text.Serializer.fromJson(sandwichData.getString(INGREDIENT_LIST))); 76 | } 77 | } 78 | } 79 | } 80 | -------------------------------------------------------------------------------- /src/main/java/com/hugman/culinaire/item/TeaBagItem.java: -------------------------------------------------------------------------------- 1 | package com.hugman.culinaire.item; 2 | 3 | import com.hugman.culinaire.tea.TeaHelper; 4 | import com.hugman.culinaire.tea.TeaType; 5 | import net.fabricmc.api.EnvType; 6 | import net.fabricmc.api.Environment; 7 | import net.minecraft.client.item.TooltipContext; 8 | import net.minecraft.item.Item; 9 | import net.minecraft.item.ItemGroup; 10 | import net.minecraft.item.ItemStack; 11 | import net.minecraft.text.Text; 12 | import net.minecraft.util.collection.DefaultedList; 13 | import net.minecraft.world.World; 14 | 15 | import javax.annotation.Nullable; 16 | import java.util.List; 17 | 18 | public class TeaBagItem extends Item { 19 | public TeaBagItem(Settings settings) { 20 | super(settings); 21 | } 22 | 23 | @Override 24 | @Environment(EnvType.CLIENT) 25 | public void appendTooltip(ItemStack stack, @Nullable World world, List tooltip, TooltipContext context) { 26 | TeaHelper.appendTeaTooltip(tooltip, TeaHelper.getTeaTypesByCompound(stack.getNbt())); 27 | } 28 | } -------------------------------------------------------------------------------- /src/main/java/com/hugman/culinaire/item/TeaBottleItem.java: -------------------------------------------------------------------------------- 1 | package com.hugman.culinaire.item; 2 | 3 | import com.hugman.culinaire.tea.TeaHelper; 4 | import com.hugman.culinaire.tea.TeaType; 5 | import net.fabricmc.api.EnvType; 6 | import net.fabricmc.api.Environment; 7 | import net.minecraft.advancement.criterion.Criteria; 8 | import net.minecraft.client.item.TooltipContext; 9 | import net.minecraft.entity.LivingEntity; 10 | import net.minecraft.entity.player.PlayerEntity; 11 | import net.minecraft.item.*; 12 | import net.minecraft.server.network.ServerPlayerEntity; 13 | import net.minecraft.stat.Stats; 14 | import net.minecraft.text.Text; 15 | import net.minecraft.util.Hand; 16 | import net.minecraft.util.TypedActionResult; 17 | import net.minecraft.util.UseAction; 18 | import net.minecraft.util.collection.DefaultedList; 19 | import net.minecraft.world.World; 20 | 21 | import javax.annotation.Nullable; 22 | import java.util.List; 23 | 24 | public class TeaBottleItem extends Item { 25 | public TeaBottleItem(Settings settings) { 26 | super(settings); 27 | } 28 | 29 | @Override 30 | @Environment(EnvType.CLIENT) 31 | public void appendTooltip(ItemStack stack, @Nullable World world, List tooltip, TooltipContext context) { 32 | TeaHelper.appendTeaTooltip(tooltip, TeaHelper.getTeaTypesByCompound(stack.getNbt())); 33 | } 34 | 35 | @Override 36 | public UseAction getUseAction(ItemStack stack) { 37 | return UseAction.DRINK; 38 | } 39 | 40 | @Override 41 | public int getMaxUseTime(ItemStack stack) { 42 | return 46; 43 | } 44 | 45 | @Override 46 | public TypedActionResult use(World world, PlayerEntity user, Hand hand) { 47 | return ItemUsage.consumeHeldItem(world, user, hand); 48 | } 49 | 50 | @Override 51 | public ItemStack finishUsing(ItemStack stack, World world, LivingEntity user) { 52 | PlayerEntity playerEntity = user instanceof PlayerEntity ? (PlayerEntity) user : null; 53 | if (user instanceof ServerPlayerEntity serverPlayerEntity) { 54 | Criteria.CONSUME_ITEM.trigger(serverPlayerEntity, stack); 55 | serverPlayerEntity.incrementStat(Stats.USED.getOrCreateStat(this)); 56 | } 57 | if (!world.isClient) { 58 | List teaTypes = TeaHelper.getTeaTypesByCompound(stack.getNbt()); 59 | if (!teaTypes.isEmpty()) { 60 | for (TeaType teaType : teaTypes) { 61 | teaType.getFlavor().getEffect().apply(user, stack, world, teaType); 62 | } 63 | } 64 | } 65 | if (playerEntity != null) { 66 | playerEntity.incrementStat(Stats.USED.getOrCreateStat(this)); 67 | if (!playerEntity.getAbilities().creativeMode) { 68 | stack.decrement(1); 69 | } 70 | } 71 | if (playerEntity == null || !playerEntity.getAbilities().creativeMode) { 72 | if (stack.isEmpty()) { 73 | return new ItemStack(Items.GLASS_BOTTLE); 74 | } 75 | if (playerEntity != null) { 76 | playerEntity.getInventory().insertStack(new ItemStack(Items.GLASS_BOTTLE)); 77 | } 78 | } 79 | return stack; 80 | } 81 | } -------------------------------------------------------------------------------- /src/main/java/com/hugman/culinaire/loot/CulinaireLootTables.java: -------------------------------------------------------------------------------- 1 | package com.hugman.culinaire.loot; 2 | 3 | import com.hugman.culinaire.registry.content.VegetableContent; 4 | import net.fabricmc.fabric.api.loot.v2.LootTableEvents; 5 | import net.minecraft.loot.LootPool; 6 | import net.minecraft.loot.LootTables; 7 | import net.minecraft.loot.condition.RandomChanceLootCondition; 8 | import net.minecraft.loot.condition.RandomChanceWithLootingLootCondition; 9 | import net.minecraft.loot.entry.ItemEntry; 10 | import net.minecraft.loot.function.SetCountLootFunction; 11 | import net.minecraft.loot.provider.number.ConstantLootNumberProvider; 12 | import net.minecraft.loot.provider.number.UniformLootNumberProvider; 13 | import net.minecraft.util.Identifier; 14 | 15 | public class CulinaireLootTables { 16 | private static final Identifier ZOMBIE_ENTITY = new Identifier("minecraft", "entities/zombie"); 17 | private static final Identifier ZOMBIE_VILLAGER_ENTITY = new Identifier("minecraft", "entities/zombie_villager"); 18 | private static final Identifier HUSK_ENTITY = new Identifier("minecraft", "entities/husk"); 19 | 20 | public static void addToVanillaTables() { 21 | LootTableEvents.MODIFY.register((resourceManager, lootManager, id, tableBuilder, source) -> { 22 | // Lettuce Seeds 23 | if (LootTables.SIMPLE_DUNGEON_CHEST.equals(id) || LootTables.ABANDONED_MINESHAFT_CHEST.equals(id) || LootTables.WOODLAND_MANSION_CHEST.equals(id)) { 24 | LootPool.Builder pool = LootPool.builder() 25 | .rolls(UniformLootNumberProvider.create(1.0F, 3.0F)) 26 | .conditionally(RandomChanceLootCondition.builder(0.3F)) 27 | .with(ItemEntry.builder(VegetableContent.LETTUCE_SEEDS).weight(10).apply(SetCountLootFunction.builder(UniformLootNumberProvider.create(2.0F, 4.0F)))); 28 | tableBuilder.pool(pool); 29 | } 30 | 31 | // Tomato 32 | if (LootTables.PILLAGER_OUTPOST_CHEST.equals(id)) { 33 | LootPool.Builder pool = LootPool.builder() 34 | .rolls(UniformLootNumberProvider.create(2.0F, 3.0F)) 35 | .conditionally(RandomChanceLootCondition.builder(0.45F)) 36 | .with(ItemEntry.builder(VegetableContent.TOMATO).weight(5).apply(SetCountLootFunction.builder(UniformLootNumberProvider.create(2.0F, 5.0F)))); 37 | tableBuilder.pool(pool); 38 | } 39 | if (LootTables.SHIPWRECK_SUPPLY_CHEST.equals(id)) { 40 | LootPool.Builder pool = LootPool.builder() 41 | .rolls(UniformLootNumberProvider.create(1.0F, 3.0F)) 42 | .conditionally(RandomChanceLootCondition.builder(0.45F)) 43 | .with(ItemEntry.builder(VegetableContent.TOMATO).weight(7).apply(SetCountLootFunction.builder(UniformLootNumberProvider.create(2.0F, 6.0F)))); 44 | tableBuilder.pool(pool); 45 | } 46 | if (LootTables.VILLAGE_TAIGA_HOUSE_CHEST.equals(id) || LootTables.VILLAGE_SNOWY_HOUSE_CHEST.equals(id) || LootTables.VILLAGE_PLAINS_CHEST.equals(id)) { 47 | LootPool.Builder pool = LootPool.builder() 48 | .rolls(UniformLootNumberProvider.create(1.0F, 3.0F)) 49 | .conditionally(RandomChanceLootCondition.builder(0.25F)) 50 | .with(ItemEntry.builder(VegetableContent.TOMATO).weight(10).apply(SetCountLootFunction.builder(UniformLootNumberProvider.create(1.0F, 4.0F)))); 51 | tableBuilder.pool(pool); 52 | } 53 | if (ZOMBIE_ENTITY.equals(id) || ZOMBIE_VILLAGER_ENTITY.equals(id) || HUSK_ENTITY.equals(id)) { 54 | LootPool.Builder pool = LootPool.builder() 55 | .rolls(ConstantLootNumberProvider.create(1)) 56 | .conditionally(RandomChanceWithLootingLootCondition.builder(0.025f, 0.01f)) 57 | .with(ItemEntry.builder(VegetableContent.TOMATO)); 58 | tableBuilder.pool(pool); 59 | } 60 | }); 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /src/main/java/com/hugman/culinaire/mixin/CowEntityMixin.java: -------------------------------------------------------------------------------- 1 | package com.hugman.culinaire.mixin; 2 | 3 | import com.hugman.culinaire.registry.content.DairyContent; 4 | import net.minecraft.entity.passive.CowEntity; 5 | import net.minecraft.entity.player.PlayerEntity; 6 | import net.minecraft.item.ItemStack; 7 | import net.minecraft.item.ItemUsage; 8 | import net.minecraft.item.Items; 9 | import net.minecraft.sound.SoundEvents; 10 | import net.minecraft.util.ActionResult; 11 | import net.minecraft.util.Hand; 12 | import org.spongepowered.asm.mixin.Mixin; 13 | import org.spongepowered.asm.mixin.injection.At; 14 | import org.spongepowered.asm.mixin.injection.Inject; 15 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; 16 | 17 | @Mixin(CowEntity.class) 18 | public class CowEntityMixin { 19 | @Inject(method = "interactMob", at = @At(value = "HEAD"), cancellable = true) 20 | public void culinaire$interactMob(PlayerEntity player, Hand hand, CallbackInfoReturnable info) { 21 | CowEntity cowEntity = (CowEntity) (Object) this; 22 | ItemStack itemStack = player.getStackInHand(hand); 23 | if (itemStack.getItem() == Items.GLASS_BOTTLE && !cowEntity.isBaby()) { 24 | player.playSound(SoundEvents.ENTITY_COW_MILK, 1.0F, 1.0F); 25 | ItemStack itemStack2 = ItemUsage.exchangeStack(itemStack, player, DairyContent.MILK_BOTTLE.getDefaultStack()); 26 | player.setStackInHand(hand, itemStack2); 27 | info.setReturnValue(ActionResult.success(cowEntity.getWorld().isClient)); 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/main/java/com/hugman/culinaire/mixin/MilkBucketMixin.java: -------------------------------------------------------------------------------- 1 | package com.hugman.culinaire.mixin; 2 | 3 | import com.hugman.culinaire.Culinaire; 4 | import net.minecraft.entity.LivingEntity; 5 | import net.minecraft.entity.player.PlayerEntity; 6 | import net.minecraft.item.ItemStack; 7 | import net.minecraft.item.MilkBucketItem; 8 | import net.minecraft.util.Hand; 9 | import net.minecraft.util.TypedActionResult; 10 | import net.minecraft.util.UseAction; 11 | import net.minecraft.world.World; 12 | import org.spongepowered.asm.mixin.Mixin; 13 | import org.spongepowered.asm.mixin.injection.At; 14 | import org.spongepowered.asm.mixin.injection.Inject; 15 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; 16 | 17 | @Mixin(MilkBucketItem.class) 18 | public class MilkBucketMixin { 19 | @Inject(method = "finishUsing", at = @At(value = "HEAD"), cancellable = true) 20 | public void culinaire$finishUsing(ItemStack stack, World world, LivingEntity user, CallbackInfoReturnable info) { 21 | if (!Culinaire.CONFIG.features.canDrinkMilkBucket) { 22 | info.setReturnValue(stack); 23 | } 24 | } 25 | 26 | @Inject(method = "getMaxUseTime", at = @At(value = "HEAD"), cancellable = true) 27 | public void culinaire$getMaxUseTime(ItemStack stack, CallbackInfoReturnable info) { 28 | if (!Culinaire.CONFIG.features.canDrinkMilkBucket) { 29 | info.setReturnValue(0); 30 | } 31 | } 32 | 33 | @Inject(method = "getUseAction", at = @At(value = "HEAD"), cancellable = true) 34 | public void culinaire$getUseAction(ItemStack stack, CallbackInfoReturnable info) { 35 | if (!Culinaire.CONFIG.features.canDrinkMilkBucket) { 36 | info.setReturnValue(UseAction.NONE); 37 | } 38 | } 39 | 40 | @Inject(method = "use", at = @At(value = "HEAD"), cancellable = true) 41 | public void culinaire$use(World world, PlayerEntity user, Hand hand, CallbackInfoReturnable> info) { 42 | if (!Culinaire.CONFIG.features.canDrinkMilkBucket) { 43 | info.setReturnValue(TypedActionResult.pass(user.getStackInHand(hand))); 44 | } 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /src/main/java/com/hugman/culinaire/mixin/client/PlayerRendererMixin.java: -------------------------------------------------------------------------------- 1 | package com.hugman.culinaire.mixin.client; 2 | 3 | import com.hugman.culinaire.item.MarshmallowOnAStickItem; 4 | import net.minecraft.block.BlockState; 5 | import net.minecraft.block.CampfireBlock; 6 | import net.minecraft.client.network.AbstractClientPlayerEntity; 7 | import net.minecraft.client.render.entity.PlayerEntityRenderer; 8 | import net.minecraft.client.render.entity.model.BipedEntityModel; 9 | import net.minecraft.item.ItemStack; 10 | import net.minecraft.util.Hand; 11 | import net.minecraft.util.hit.BlockHitResult; 12 | import net.minecraft.util.hit.HitResult; 13 | import net.minecraft.util.math.Direction; 14 | import org.spongepowered.asm.mixin.Mixin; 15 | import org.spongepowered.asm.mixin.injection.At; 16 | import org.spongepowered.asm.mixin.injection.Inject; 17 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; 18 | 19 | @Mixin(PlayerEntityRenderer.class) 20 | public class PlayerRendererMixin { 21 | @Inject(method = "getArmPose", at = @At(value = "HEAD"), cancellable = true) 22 | private static void culinaire$getArmPose(AbstractClientPlayerEntity abstractClientPlayerEntity, Hand hand, CallbackInfoReturnable info) { 23 | ItemStack itemStack = abstractClientPlayerEntity.getStackInHand(hand); 24 | if (!itemStack.isEmpty() && abstractClientPlayerEntity.isSneaking()) { 25 | if (!abstractClientPlayerEntity.handSwinging && itemStack.getItem() instanceof MarshmallowOnAStickItem) { 26 | HitResult hitResult = abstractClientPlayerEntity.raycast(1.5D, 0.0F, true); 27 | if (hitResult.getType() == HitResult.Type.BLOCK) { 28 | BlockHitResult blockHitResult = (BlockHitResult) hitResult; 29 | BlockState state = abstractClientPlayerEntity.getEntityWorld().getBlockState(blockHitResult.getBlockPos()); 30 | if (CampfireBlock.isLitCampfire(state) && blockHitResult.getSide() != Direction.DOWN) { 31 | info.setReturnValue(BipedEntityModel.ArmPose.CROSSBOW_HOLD); 32 | } 33 | } 34 | } 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/main/java/com/hugman/culinaire/recipe/serializer/SandwichRecipeSerializer.java: -------------------------------------------------------------------------------- 1 | package com.hugman.culinaire.recipe.serializer; 2 | 3 | import com.google.common.collect.Maps; 4 | import com.google.gson.JsonArray; 5 | import com.google.gson.JsonObject; 6 | import com.hugman.culinaire.recipe.SandwichRecipe; 7 | import com.hugman.culinaire.util.RecipeSerializerUtil; 8 | import net.minecraft.item.ItemStack; 9 | import net.minecraft.network.PacketByteBuf; 10 | import net.minecraft.recipe.Ingredient; 11 | import net.minecraft.recipe.RecipeSerializer; 12 | import net.minecraft.recipe.book.CraftingRecipeCategory; 13 | import net.minecraft.registry.Registries; 14 | import net.minecraft.util.Identifier; 15 | import net.minecraft.util.JsonHelper; 16 | 17 | import java.util.HashMap; 18 | import java.util.Map; 19 | 20 | public class SandwichRecipeSerializer implements RecipeSerializer { 21 | @Override 22 | public SandwichRecipe read(Identifier id, JsonObject json) { 23 | CraftingRecipeCategory category = CraftingRecipeCategory.CODEC.byId(JsonHelper.getString(json, "category", null), CraftingRecipeCategory.MISC); 24 | Ingredient bread = RecipeSerializerUtil.ingredientListOrObject(json, "bread"); 25 | Ingredient ingredientBlacklist = RecipeSerializerUtil.ingredientListOrObject(json, "ingredient_blacklist"); 26 | float hungerModifierBase = JsonHelper.getFloat(json, "hunger_modifier_base"); 27 | float hungerModifierBoosted = JsonHelper.getFloat(json, "hunger_modifier_boosted"); 28 | float saturationModifierBase = JsonHelper.getFloat(json, "saturation_modifier_base"); 29 | float saturationModifierBoosted = JsonHelper.getFloat(json, "saturation_modifier_boosted"); 30 | Map ingredientAssociations = readComplements(JsonHelper.getArray(json, "ingredient_associations", new JsonArray())); 31 | int resultCount = JsonHelper.getInt(json, "count", 1); 32 | ItemStack resultStack = new ItemStack(Registries.ITEM.get(new Identifier(JsonHelper.getString(json, "result"))), resultCount); 33 | 34 | return new SandwichRecipe(id, category, bread, ingredientBlacklist, hungerModifierBase, hungerModifierBoosted, saturationModifierBase, saturationModifierBoosted, ingredientAssociations, resultStack); 35 | } 36 | 37 | private static Map readComplements(JsonArray json) { 38 | HashMap map = Maps.newHashMap(); 39 | for (int i = 0; i < json.size(); ++i) { 40 | if (json.get(i).isJsonObject()) { 41 | JsonObject subJson = json.get(i).getAsJsonObject(); 42 | Ingredient ingredient_a = JsonHelper.hasArray(subJson, "ingredient_a") ? Ingredient.fromJson(JsonHelper.getArray(subJson, "ingredient_a")) : Ingredient.fromJson(JsonHelper.getObject(subJson, "ingredient_a")); 43 | Ingredient ingredient_b = JsonHelper.hasArray(subJson, "ingredient_b") ? Ingredient.fromJson(JsonHelper.getArray(subJson, "ingredient_b")) : Ingredient.fromJson(JsonHelper.getObject(subJson, "ingredient_b")); 44 | map.put(ingredient_a, ingredient_b); 45 | } 46 | } 47 | return map; 48 | } 49 | 50 | @Override 51 | public SandwichRecipe read(Identifier id, PacketByteBuf buf) { 52 | CraftingRecipeCategory category = buf.readEnumConstant(CraftingRecipeCategory.class); 53 | Ingredient bread = Ingredient.fromPacket(buf); 54 | Ingredient ingredientBlacklist = Ingredient.fromPacket(buf); 55 | float hungerModifierBase = buf.readFloat(); 56 | float hungerModifierBoosted = buf.readFloat(); 57 | float saturationModifierBase = buf.readFloat(); 58 | float saturationModifierBoosted = buf.readFloat(); 59 | Map ingredientAssociations = buf.readMap(Ingredient::fromPacket, Ingredient::fromPacket); 60 | ItemStack resultStack = buf.readItemStack(); 61 | 62 | return new SandwichRecipe(id, category, bread, ingredientBlacklist, hungerModifierBase, hungerModifierBoosted, saturationModifierBase, saturationModifierBoosted, ingredientAssociations, resultStack); 63 | } 64 | 65 | @Override 66 | public void write(PacketByteBuf buf, SandwichRecipe recipe) { 67 | recipe.bread.write(buf); 68 | recipe.ingredientBlacklist.write(buf); 69 | buf.writeFloat(recipe.hungerModifierBase); 70 | buf.writeFloat(recipe.hungerModifierBoosted); 71 | buf.writeFloat(recipe.saturationModifierBase); 72 | buf.writeFloat(recipe.saturationModifierBoosted); 73 | buf.writeMap(recipe.ingredientAssociations, (b, i) -> i.write(b), (b, i) -> i.write(b)); 74 | buf.writeItemStack(recipe.resultItem); 75 | } 76 | } 77 | -------------------------------------------------------------------------------- /src/main/java/com/hugman/culinaire/registry/CulinaireTags.java: -------------------------------------------------------------------------------- 1 | package com.hugman.culinaire.registry; 2 | 3 | import com.hugman.culinaire.Culinaire; 4 | import net.minecraft.block.Block; 5 | import net.minecraft.item.Item; 6 | import net.minecraft.registry.RegistryKeys; 7 | import net.minecraft.registry.tag.TagKey; 8 | 9 | public class CulinaireTags { 10 | public static class Blocks { 11 | public static final TagKey KETTLE_HOT_BLOCKS = register("kettle_hot_blocks"); 12 | 13 | private static TagKey register(String name) { 14 | return TagKey.of(RegistryKeys.BLOCK, Culinaire.id(name)); 15 | } 16 | } 17 | 18 | public static class Items { 19 | private static TagKey register(String name) { 20 | return TagKey.of(RegistryKeys.ITEM, Culinaire.id(name)); 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/com/hugman/culinaire/registry/content/DairyContent.java: -------------------------------------------------------------------------------- 1 | package com.hugman.culinaire.registry.content; 2 | 3 | import com.hugman.culinaire.Culinaire; 4 | import com.hugman.culinaire.block.CheeseCauldronBlock; 5 | import com.hugman.culinaire.block.CheeseWheelBlock; 6 | import com.hugman.culinaire.block.CulinaireCauldronBehaviors; 7 | import com.hugman.culinaire.block.MilkCauldronBlock; 8 | import com.hugman.culinaire.item.MilkBottleItem; 9 | import fr.hugman.dawn.Registrar; 10 | import fr.hugman.dawn.block.DawnBlockSettings; 11 | import fr.hugman.dawn.item.DawnItemSettings; 12 | import fr.hugman.dawn.item.ItemGroupHelper; 13 | import net.minecraft.block.Block; 14 | import net.minecraft.block.Blocks; 15 | import net.minecraft.item.FoodComponent; 16 | import net.minecraft.item.Item; 17 | import net.minecraft.item.ItemGroups; 18 | import net.minecraft.item.Items; 19 | 20 | public class DairyContent { 21 | public static final Item MILK_BOTTLE = new MilkBottleItem(new Item.Settings().maxCount(Culinaire.CONFIG.features.milkBottlesMaxCount).recipeRemainder(Items.GLASS_BOTTLE)); 22 | public static final Block MILK_CAULDRON = new MilkCauldronBlock(CulinaireCauldronBehaviors.MILK, DawnBlockSettings.copy(Blocks.CAULDRON).ticksRandomly()); 23 | 24 | private static final FoodComponent CHEESE_FOOD = new FoodComponent.Builder().hunger(5).saturationModifier(0.5f).build(); 25 | 26 | public static final Item CHEESE = new Item(new DawnItemSettings().food(CHEESE_FOOD).compostingChance(0.5f)); 27 | public static final Block CHEESE_WHEEL = new CheeseWheelBlock(DawnBlockSettings.copy(Blocks.CAKE).item()); 28 | public static final Block CHEESE_CAULDRON = new CheeseCauldronBlock(DawnBlockSettings.copy(Blocks.CAULDRON)); 29 | 30 | public static void register(Registrar r) { 31 | r.add("milk_bottle", MILK_BOTTLE); 32 | r.add("milk_cauldron", MILK_CAULDRON); 33 | 34 | r.add("cheese", CHEESE); 35 | r.add("cheese_wheel", CHEESE_WHEEL); 36 | r.add("cheese_cauldron", CHEESE_CAULDRON); 37 | 38 | ItemGroupHelper.append(ItemGroups.FOOD_AND_DRINK, entries -> entries.addAfter(Items.MILK_BUCKET, MILK_BOTTLE, CHEESE, CHEESE_WHEEL)); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /src/main/java/com/hugman/culinaire/registry/content/FruitContent.java: -------------------------------------------------------------------------------- 1 | package com.hugman.culinaire.registry.content; 2 | 3 | import fr.hugman.dawn.Registrar; 4 | 5 | public class FruitContent { 6 | public static void register(Registrar r) { 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/main/java/com/hugman/culinaire/registry/content/MealContent.java: -------------------------------------------------------------------------------- 1 | package com.hugman.culinaire.registry.content; 2 | 3 | import com.hugman.culinaire.item.SandwichItem; 4 | import com.hugman.culinaire.recipe.serializer.SandwichRecipeSerializer; 5 | import fr.hugman.dawn.Registrar; 6 | import fr.hugman.dawn.item.DawnItemSettings; 7 | import fr.hugman.dawn.item.ItemGroupHelper; 8 | import net.minecraft.item.*; 9 | import net.minecraft.registry.Registries; 10 | import net.minecraft.registry.Registry; 11 | 12 | public class MealContent { 13 | private static final FoodComponent SALAD_FOOD = new FoodComponent.Builder().hunger(10).saturationModifier(0.4F).build(); 14 | private static final FoodComponent MASHED_POTATOES_FOOD = new FoodComponent.Builder().hunger(9).saturationModifier(0.6F).build(); 15 | 16 | public static final Item SALAD = new StewItem(new Item.Settings().maxCount(1).food(SALAD_FOOD)); 17 | public static final Item MASHED_POTATOES = new StewItem(new Item.Settings().food(MASHED_POTATOES_FOOD).maxCount(1)); 18 | 19 | private static final FoodComponent EMPTY_SANDWICH_FOOD = new FoodComponent.Builder().hunger(5).saturationModifier(0.7F).build(); 20 | public static final SandwichRecipeSerializer SANDWICH_CRAFTING = new SandwichRecipeSerializer(); 21 | public static final Item SANDWICH = new SandwichItem(new DawnItemSettings().food(EMPTY_SANDWICH_FOOD).maxCount(1).compostingChance(1.0f)); 22 | 23 | public static void register(Registrar r) { 24 | r.add("salad", SALAD); 25 | r.add("mashed_potatoes", MASHED_POTATOES); 26 | 27 | Registry.register(Registries.RECIPE_SERIALIZER, r.id("crafting/sandwich"), SANDWICH_CRAFTING); //TODO: add a method for recipe serializers to Dawn API 28 | r.add("sandwich", SANDWICH); 29 | 30 | ItemGroupHelper.append(ItemGroups.FOOD_AND_DRINK, entries -> entries.addBefore(Items.MUSHROOM_STEW, SALAD, MASHED_POTATOES)); 31 | //TODO: add sandwich to food and drink group 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/main/java/com/hugman/culinaire/registry/content/PastryContent.java: -------------------------------------------------------------------------------- 1 | package com.hugman.culinaire.registry.content; 2 | 3 | import fr.hugman.dawn.Registrar; 4 | import fr.hugman.dawn.item.DawnItemSettings; 5 | import fr.hugman.dawn.item.ItemGroupHelper; 6 | import net.minecraft.item.FoodComponent; 7 | import net.minecraft.item.Item; 8 | import net.minecraft.item.ItemGroups; 9 | import net.minecraft.item.Items; 10 | 11 | public class PastryContent { 12 | public static final FoodComponent CHOUQUETTE_FOOD = new FoodComponent.Builder().hunger(3).saturationModifier(0.1F).snack().build(); 13 | 14 | public static final Item CHOUQUETTE = new Item(new DawnItemSettings().food(CHOUQUETTE_FOOD).compostingChance(0.3f)); 15 | 16 | private static final FoodComponent APPLE_PIE_FOOD = new FoodComponent.Builder().hunger(8).saturationModifier(0.4F).build(); 17 | private static final FoodComponent SWEET_BERRY_PIE_FOOD = new FoodComponent.Builder().hunger(7).saturationModifier(0.4F).build(); 18 | 19 | public static final Item APPLE_PIE = new Item(new DawnItemSettings().food(APPLE_PIE_FOOD).compostingChance(1.0f)); 20 | public static final Item SWEET_BERRY_PIE = new Item(new DawnItemSettings().food(SWEET_BERRY_PIE_FOOD).compostingChance(1.0f)); 21 | 22 | public static void register(Registrar r) { 23 | r.add("chouquette", CHOUQUETTE); 24 | r.add("apple_pie", APPLE_PIE); 25 | r.add("sweet_berry_pie", SWEET_BERRY_PIE); 26 | 27 | ItemGroupHelper.append(ItemGroups.FOOD_AND_DRINK, entries -> entries.addAfter(Items.BREAD, CHOUQUETTE)); 28 | ItemGroupHelper.append(ItemGroups.FOOD_AND_DRINK, entries -> entries.addBefore(Items.PUMPKIN_PIE, APPLE_PIE, SWEET_BERRY_PIE)); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/main/java/com/hugman/culinaire/registry/content/TeaContent.java: -------------------------------------------------------------------------------- 1 | package com.hugman.culinaire.registry.content; 2 | 3 | import com.hugman.culinaire.Culinaire; 4 | import com.hugman.culinaire.block.KettleBlock; 5 | import com.hugman.culinaire.block.entity.KettleBlockEntity; 6 | import com.hugman.culinaire.item.TeaBagItem; 7 | import com.hugman.culinaire.item.TeaBottleItem; 8 | import com.hugman.culinaire.recipe.TeaBagMakingRecipe; 9 | import com.hugman.culinaire.screen.handler.KettleScreenHandler; 10 | import fr.hugman.dawn.Registrar; 11 | import fr.hugman.dawn.block.DawnBlockSettings; 12 | import fr.hugman.dawn.item.ItemGroupHelper; 13 | import net.fabricmc.fabric.api.object.builder.v1.block.entity.FabricBlockEntityTypeBuilder; 14 | import net.minecraft.block.Block; 15 | import net.minecraft.block.Blocks; 16 | import net.minecraft.block.MapColor; 17 | import net.minecraft.block.entity.BlockEntityType; 18 | import net.minecraft.block.piston.PistonBehavior; 19 | import net.minecraft.item.Item; 20 | import net.minecraft.item.ItemGroups; 21 | import net.minecraft.item.Items; 22 | import net.minecraft.recipe.SpecialRecipeSerializer; 23 | import net.minecraft.registry.Registries; 24 | import net.minecraft.registry.Registry; 25 | import net.minecraft.resource.featuretoggle.FeatureFlags; 26 | import net.minecraft.screen.ScreenHandlerType; 27 | import net.minecraft.sound.BlockSoundGroup; 28 | import net.minecraft.sound.SoundEvent; 29 | import net.minecraft.util.Identifier; 30 | 31 | public class TeaContent { 32 | public static final Item TEA_BAG = new TeaBagItem(new Item.Settings().maxCount(16)); 33 | public static final SpecialRecipeSerializer TEA_BAG_MAKING = new SpecialRecipeSerializer<>(TeaBagMakingRecipe::new); 34 | 35 | public static final Item TEA_BOTTLE = new TeaBottleItem(new Item.Settings().maxCount(1).recipeRemainder(Items.GLASS_BOTTLE)); 36 | 37 | public static final SoundEvent TEA_BOTTLE_FILL_SOUND = SoundEvent.of(Culinaire.id("item.tea_bottle.fill")); 38 | 39 | public static final Block KETTLE = new KettleBlock(DawnBlockSettings.create().mapColor(MapColor.IRON_GRAY).requiresTool().strength(5.0F, 1200.0F).sounds(BlockSoundGroup.STONE).pistonBehavior(PistonBehavior.BLOCK).item()); 40 | public static final ScreenHandlerType KETTLE_SCREEN_HANDLER = new ScreenHandlerType<>(KettleScreenHandler::new, FeatureFlags.VANILLA_FEATURES); 41 | public static final BlockEntityType KETTLE_ENTITY = FabricBlockEntityTypeBuilder.create(KettleBlockEntity::new, KETTLE).build(); 42 | public static final Identifier KETTLE_INTERACTION_STAT = Culinaire.id("interact_with_kettle"); 43 | public static final SoundEvent KETTLE_BREW_SOUND = SoundEvent.of(Culinaire.id("block.kettle.brew")); 44 | 45 | public static void register(Registrar r) { 46 | r.add("tea_bag", TEA_BAG); 47 | Registry.register(Registries.RECIPE_SERIALIZER, r.id("tea_bag_making"), TEA_BAG_MAKING); //TODO: add a method for recipe serializers to Dawn API 48 | r.add("tea_bottle", TEA_BOTTLE); 49 | 50 | r.add("kettle", KETTLE); 51 | r.add("kettle", KETTLE_SCREEN_HANDLER); 52 | r.add("kettle", KETTLE_ENTITY); 53 | Registry.register(Registries.CUSTOM_STAT, KETTLE_INTERACTION_STAT, KETTLE_INTERACTION_STAT); 54 | Registrar.add(KETTLE_BREW_SOUND); 55 | 56 | ItemGroupHelper.append(ItemGroups.FUNCTIONAL, entries -> entries.addAfter(Blocks.BLAST_FURNACE, KETTLE)); 57 | 58 | //TODO: append all tea types to creative tab 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /src/main/java/com/hugman/culinaire/registry/content/VegetableContent.java: -------------------------------------------------------------------------------- 1 | package com.hugman.culinaire.registry.content; 2 | 3 | import com.hugman.culinaire.block.LettuceBlock; 4 | import com.hugman.culinaire.block.TomatoesBlock; 5 | import fr.hugman.dawn.Registrar; 6 | import fr.hugman.dawn.item.DawnItemSettings; 7 | import fr.hugman.dawn.item.ItemGroupHelper; 8 | import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; 9 | import net.minecraft.block.Block; 10 | import net.minecraft.block.MapColor; 11 | import net.minecraft.block.piston.PistonBehavior; 12 | import net.minecraft.item.*; 13 | import net.minecraft.sound.BlockSoundGroup; 14 | 15 | public class VegetableContent { 16 | private static final FoodComponent LETTUCE_FOOD = new FoodComponent.Builder().hunger(2).saturationModifier(0.2F).build(); 17 | public static final Block LETTUCE_BLOCK = new LettuceBlock(FabricBlockSettings.create().mapColor(MapColor.DARK_GREEN).noCollision().ticksRandomly().breakInstantly().sounds(BlockSoundGroup.CROP).pistonBehavior(PistonBehavior.DESTROY)); 18 | public static final Item LETTUCE_SEEDS = new AliasedBlockItem(LETTUCE_BLOCK, new DawnItemSettings().compostingChance(0.3f)); 19 | public static final Item LETTUCE = new Item(new DawnItemSettings().food(LETTUCE_FOOD).compostingChance(0.3f)); 20 | 21 | private static final FoodComponent TOMATO_FOOD = new FoodComponent.Builder().hunger(3).saturationModifier(0.5F).build(); 22 | public static final Block TOMATO_BLOCK = new TomatoesBlock(FabricBlockSettings.create().mapColor(MapColor.DARK_GREEN).noCollision().ticksRandomly().breakInstantly().sounds(BlockSoundGroup.CROP).pistonBehavior(PistonBehavior.DESTROY)); 23 | public static final Item TOMATO = new AliasedBlockItem(TOMATO_BLOCK, new DawnItemSettings().food(TOMATO_FOOD).compostingChance(0.3f)); 24 | 25 | public static void register(Registrar r) { 26 | r.add("lettuce", LETTUCE_BLOCK); 27 | r.add("lettuce_seeds", LETTUCE_SEEDS); 28 | r.add("lettuce", LETTUCE); 29 | r.add("tomatoes", TOMATO_BLOCK); 30 | r.add("tomato", TOMATO); 31 | 32 | 33 | ItemGroupHelper.append(ItemGroups.FOOD_AND_DRINK, entries -> entries.addBefore(Items.CARROT, LETTUCE, TOMATO)); 34 | ItemGroupHelper.append(ItemGroups.NATURAL, entries -> entries.addBefore(Items.BEETROOT_SEEDS, LETTUCE_SEEDS)); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /src/main/java/com/hugman/culinaire/screen/KettleScreen.java: -------------------------------------------------------------------------------- 1 | package com.hugman.culinaire.screen; 2 | 3 | import com.hugman.culinaire.Culinaire; 4 | import com.hugman.culinaire.screen.handler.KettleScreenHandler; 5 | import com.mojang.blaze3d.systems.RenderSystem; 6 | import net.fabricmc.api.EnvType; 7 | import net.fabricmc.api.Environment; 8 | import net.minecraft.client.gui.DrawContext; 9 | import net.minecraft.client.gui.screen.ingame.HandledScreen; 10 | import net.minecraft.entity.player.PlayerInventory; 11 | import net.minecraft.text.Text; 12 | import net.minecraft.util.Identifier; 13 | 14 | @Environment(EnvType.CLIENT) 15 | public class KettleScreen extends HandledScreen { 16 | private static final Identifier TEXTURE = Culinaire.id("textures/gui/container/kettle.png"); 17 | 18 | public KettleScreen(KettleScreenHandler handler, PlayerInventory inventory, Text title) { 19 | super(handler, inventory, title); 20 | } 21 | 22 | @Override 23 | protected void init() { 24 | super.init(); 25 | this.titleX = (this.backgroundWidth - this.textRenderer.getWidth(this.title)) / 2; 26 | } 27 | 28 | @Override 29 | public void render(DrawContext context, int mouseX, int mouseY, float delta) { 30 | this.renderBackground(context); 31 | super.render(context, mouseX, mouseY, delta); 32 | this.drawMouseoverTooltip(context, mouseX, mouseY); 33 | } 34 | 35 | @Override 36 | protected void drawBackground(DrawContext context, float delta, int mouseX, int mouseY) { 37 | int brewTime = this.handler.getBrewTime(); 38 | int totalBrewTime = this.handler.getTotalBrewTime(); 39 | int fluidLevel = this.handler.getFluidLevel(); 40 | int fluid = this.handler.getFluid(); 41 | boolean isHot = this.handler.isHot(); 42 | int i = (this.width - this.backgroundWidth) / 2; 43 | int j = (this.height - this.backgroundHeight) / 2; 44 | context.drawTexture(TEXTURE, i, j, 0, 0, this.backgroundWidth, this.backgroundHeight); 45 | if (brewTime > 0) { 46 | int brewBarHeight = (int) (27.0F * (1.0F - (float) brewTime / totalBrewTime)); 47 | if (brewBarHeight > 0) { 48 | context.drawTexture(TEXTURE, i + 99, j + 17, 222, 0, 7, brewBarHeight); 49 | } 50 | } 51 | if (fluid == 0) { 52 | context.drawTexture(TEXTURE, i + 65, j + 48, 176, 0, 46, 16); 53 | } else { 54 | if (fluidLevel > 0) { 55 | int teaColor; 56 | if (fluid == 2) { 57 | teaColor = this.handler.getTeaColor(); 58 | } else { 59 | teaColor = 3694022; 60 | } 61 | float red = (float) (teaColor >> 16 & 255) / 255.0F; 62 | float green = (float) (teaColor >> 8 & 255) / 255.0F; 63 | float blue = (float) (teaColor & 255) / 255.0F; 64 | RenderSystem.setShaderColor(red, green, blue, 1.0F); 65 | int fluidHeight = (int) (12.0F * (float) fluidLevel / 3.0F) + 4; 66 | context.drawTexture(TEXTURE, i + 65, j + 64 - fluidHeight, 176, 16, 46, fluidHeight); 67 | } 68 | } 69 | RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); 70 | if (isHot) { 71 | context.drawTexture(TEXTURE, i + 76, j + 68, 176, 32, 24, 9); 72 | } 73 | } 74 | } 75 | -------------------------------------------------------------------------------- /src/main/java/com/hugman/culinaire/tea/TeaEffect.java: -------------------------------------------------------------------------------- 1 | package com.hugman.culinaire.tea; 2 | 3 | import net.minecraft.entity.LivingEntity; 4 | import net.minecraft.item.ItemStack; 5 | import net.minecraft.world.World; 6 | 7 | public interface TeaEffect { 8 | void apply(LivingEntity user, ItemStack stack, World world, TeaType teaType); 9 | } 10 | -------------------------------------------------------------------------------- /src/main/java/com/hugman/culinaire/tea/TeaHelper.java: -------------------------------------------------------------------------------- 1 | package com.hugman.culinaire.tea; 2 | 3 | import com.hugman.culinaire.Culinaire; 4 | import net.fabricmc.api.EnvType; 5 | import net.fabricmc.api.Environment; 6 | import net.minecraft.item.ItemStack; 7 | import net.minecraft.nbt.NbtCompound; 8 | import net.minecraft.nbt.NbtList; 9 | import net.minecraft.recipe.Ingredient; 10 | import net.minecraft.text.Text; 11 | import net.minecraft.util.Formatting; 12 | 13 | import java.util.ArrayList; 14 | import java.util.Collections; 15 | import java.util.List; 16 | 17 | public class TeaHelper { 18 | @Environment(EnvType.CLIENT) 19 | public static void appendTeaTooltip(List tooltips, List teaTypes) { 20 | for (TeaType teaType : teaTypes) { 21 | tooltips.add(Text.translatable("tea_type." + Culinaire.REGISTRAR.modId() + "." + teaType.getFlavor().getName() + "." + teaType.getStrength().getName()).formatted(Formatting.GRAY)); 22 | } 23 | } 24 | 25 | public static ItemStack appendTeaType(ItemStack stack, TeaType teaTypes) { 26 | return appendTeaTypes(stack, new ArrayList<>(Collections.singleton(teaTypes))); 27 | } 28 | 29 | public static ItemStack appendTeaTypes(ItemStack stack, List teaTypes) { 30 | NbtList NbtList = new NbtList(); 31 | for (TeaType teaType : teaTypes) { 32 | NbtCompound typeTag = new NbtCompound(); 33 | typeTag.putString("Flavor", teaType.getFlavor().getName()); 34 | typeTag.putString("Strength", teaType.getStrength().getName()); 35 | NbtList.add(typeTag); 36 | } 37 | NbtCompound nbtCompound = stack.getOrCreateNbt(); 38 | nbtCompound.put("TeaTypes", NbtList); 39 | return stack; 40 | } 41 | 42 | public static List getIngredientTypes(ItemStack stack) { 43 | List teaTypes = new ArrayList<>(); 44 | for (TeaType teaType : getAllTypes()) { 45 | if (Ingredient.fromTag(teaType.getTag()).test(stack)) { 46 | teaTypes.add(teaType); 47 | } 48 | } 49 | return teaTypes; 50 | } 51 | 52 | public static List getAllTypes() { 53 | List teaTypes = new ArrayList<>(); 54 | for (TeaType.Flavor flavor : TeaType.Flavor.values()) { 55 | for (TeaType.Strength strength : TeaType.Strength.values()) { 56 | teaTypes.add(new TeaType(strength, flavor)); 57 | } 58 | } 59 | return teaTypes; 60 | } 61 | 62 | public static List getTeaTypesByCompound(NbtCompound nbtCompound) { 63 | List list = new ArrayList<>(); 64 | if (nbtCompound != null) { 65 | if (nbtCompound.contains("TeaTypes")) { 66 | NbtList teaTypeList = nbtCompound.getList("TeaTypes", 10); 67 | if (!teaTypeList.isEmpty()) { 68 | for (int i = 0; i < teaTypeList.size(); ++i) { 69 | NbtCompound typeTag = teaTypeList.getCompound(i); 70 | TeaType teaType = new TeaType(typeTag.getString("Strength"), typeTag.getString("Flavor")); 71 | if (teaType.isCorrect()) { 72 | list.add(teaType); 73 | } 74 | } 75 | } 76 | } 77 | } 78 | return list; 79 | } 80 | 81 | public static int getColor(ItemStack stack) { 82 | return getColor(getTeaTypesByCompound(stack.getNbt())); 83 | } 84 | 85 | public static int getColor(List teaTypes) { 86 | if (teaTypes.isEmpty()) { 87 | return 15112486; 88 | } else { 89 | float f = 0.0F; 90 | float g = 0.0F; 91 | float h = 0.0F; 92 | int j = 0; 93 | for (TeaType teaType : teaTypes) { 94 | int k = teaType.getFlavor().getColor(); 95 | int l = teaType.getStrength().getPotency() + 1; 96 | f += (float) (l * (k >> 16 & 255)) / 255.0F; 97 | g += (float) (l * (k >> 8 & 255)) / 255.0F; 98 | h += (float) (l * (k >> 0 & 255)) / 255.0F; 99 | j += l; 100 | } 101 | if (j == 0) { 102 | return 0; 103 | } else { 104 | f = f / (float) j * 255.0F; 105 | g = g / (float) j * 255.0F; 106 | h = h / (float) j * 255.0F; 107 | return (int) f << 16 | (int) g << 8 | (int) h; 108 | } 109 | } 110 | } 111 | } 112 | -------------------------------------------------------------------------------- /src/main/java/com/hugman/culinaire/util/FoodUtil.java: -------------------------------------------------------------------------------- 1 | package com.hugman.culinaire.util; 2 | 3 | import fr.hugman.dawn.item.DynamicFood; 4 | import net.minecraft.item.FoodComponent; 5 | import net.minecraft.item.ItemStack; 6 | 7 | public final class FoodUtil { 8 | public static int getHunger(ItemStack stack) { 9 | if (stack.getItem() instanceof DynamicFood dynamicFood) { 10 | return dynamicFood.getHunger(stack); 11 | } else { 12 | FoodComponent foodComponent = stack.getItem().getFoodComponent(); 13 | if (foodComponent != null) return foodComponent.getHunger(); 14 | } 15 | return 0; 16 | } 17 | 18 | public static float getSaturationPoints(ItemStack stack) { 19 | if (stack.getItem() instanceof DynamicFood dynamicFood) { 20 | return dynamicFood.getSaturationModifier(stack); 21 | } else { 22 | FoodComponent foodComponent = stack.getItem().getFoodComponent(); 23 | if (foodComponent != null) return foodComponent.getSaturationModifier(); 24 | } 25 | return 0; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/main/java/com/hugman/culinaire/util/RecipeSerializerUtil.java: -------------------------------------------------------------------------------- 1 | package com.hugman.culinaire.util; 2 | 3 | import com.google.gson.JsonArray; 4 | import com.google.gson.JsonObject; 5 | import net.minecraft.network.PacketByteBuf; 6 | import net.minecraft.recipe.Ingredient; 7 | import net.minecraft.util.JsonHelper; 8 | import net.minecraft.util.collection.DefaultedList; 9 | 10 | public class RecipeSerializerUtil { 11 | public static Ingredient ingredientListOrObject(JsonObject json, String name) { 12 | return JsonHelper.hasArray(json, name) ? Ingredient.fromJson(JsonHelper.getArray(json, name)) : Ingredient.fromJson(JsonHelper.getObject(json, name)); 13 | } 14 | 15 | public static DefaultedList ingredientListFromJson(JsonObject json, String name) { 16 | JsonArray array = JsonHelper.getArray(json, "ingredients"); 17 | DefaultedList defaultedList = DefaultedList.of(); 18 | for (int i = 0; i < array.size(); ++i) { 19 | Ingredient ingredient = Ingredient.fromJson(array.get(i)); 20 | if (ingredient.isEmpty()) continue; 21 | defaultedList.add(ingredient); 22 | } 23 | return defaultedList; 24 | } 25 | 26 | public static DefaultedList ingredientListFromBuffer(PacketByteBuf buf) { 27 | int ingredientAmount = buf.readVarInt(); 28 | DefaultedList list = DefaultedList.ofSize(ingredientAmount, Ingredient.EMPTY); 29 | list.replaceAll(ignored -> Ingredient.fromPacket(buf)); 30 | return list; 31 | } 32 | 33 | public static void ingredientListToBuffer(PacketByteBuf buf, DefaultedList list) { 34 | buf.writeVarInt(list.size()); 35 | for (Ingredient ingredient : list) { 36 | ingredient.write(buf); 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/blockstates/cheese_cauldron.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "level=1": { 4 | "model": "culinaire:block/cheese_cauldron/level/1" 5 | }, 6 | "level=2": { 7 | "model": "culinaire:block/cheese_cauldron/level/2" 8 | }, 9 | "level=3": { 10 | "model": "culinaire:block/cheese_cauldron/level/3" 11 | } 12 | } 13 | } -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/blockstates/cheese_wheel.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "bites=0": { 4 | "model": "culinaire:block/cheese_wheel/bites/0" 5 | }, 6 | "bites=1": { 7 | "model": "culinaire:block/cheese_wheel/bites/1" 8 | }, 9 | "bites=2": { 10 | "model": "culinaire:block/cheese_wheel/bites/2" 11 | }, 12 | "bites=3": { 13 | "model": "culinaire:block/cheese_wheel/bites/3" 14 | }, 15 | "bites=4": { 16 | "model": "culinaire:block/cheese_wheel/bites/4" 17 | }, 18 | "bites=5": { 19 | "model": "culinaire:block/cheese_wheel/bites/5" 20 | } 21 | } 22 | } -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/blockstates/dark_chocolate_cauldron.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "level=1": { 4 | "model": "culinaire:block/dark_chocolate_cauldron/level/1" 5 | }, 6 | "level=2": { 7 | "model": "culinaire:block/dark_chocolate_cauldron/level/2" 8 | }, 9 | "level=3": { 10 | "model": "culinaire:block/dark_chocolate_cauldron/level/3" 11 | } 12 | } 13 | } -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/blockstates/kettle.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "facing=east": { 4 | "model": "culinaire:block/kettle", 5 | "y": 90 6 | }, 7 | "facing=north": { 8 | "model": "culinaire:block/kettle" 9 | }, 10 | "facing=south": { 11 | "model": "culinaire:block/kettle", 12 | "y": 180 13 | }, 14 | "facing=west": { 15 | "model": "culinaire:block/kettle", 16 | "y": 270 17 | } 18 | } 19 | } -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/blockstates/lettuce.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "age=0": { 4 | "model": "culinaire:block/lettuce/age/0" 5 | }, 6 | "age=1": { 7 | "model": "culinaire:block/lettuce/age/1" 8 | }, 9 | "age=2": { 10 | "model": "culinaire:block/lettuce/age/2" 11 | }, 12 | "age=3": { 13 | "model": "culinaire:block/lettuce/age/3" 14 | } 15 | } 16 | } -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/blockstates/milk_cauldron.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "level=1": { 4 | "model": "culinaire:block/milk_cauldron/level/1" 5 | }, 6 | "level=2": { 7 | "model": "culinaire:block/milk_cauldron/level/2" 8 | }, 9 | "level=3": { 10 | "model": "culinaire:block/milk_cauldron/level/3" 11 | } 12 | } 13 | } -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/blockstates/milk_chocolate_cauldron.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "level=1": { 4 | "model": "culinaire:block/milk_chocolate_cauldron/level/1" 5 | }, 6 | "level=2": { 7 | "model": "culinaire:block/milk_chocolate_cauldron/level/2" 8 | }, 9 | "level=3": { 10 | "model": "culinaire:block/milk_chocolate_cauldron/level/3" 11 | } 12 | } 13 | } -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/blockstates/tomatoes.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "half=lower,age=0": { 4 | "model": "culinaire:block/tomatoes/lower/age/0" 5 | }, 6 | "half=lower,age=1": { 7 | "model": "culinaire:block/tomatoes/lower/age/1" 8 | }, 9 | "half=lower,age=2": { 10 | "model": "culinaire:block/tomatoes/lower/age/2" 11 | }, 12 | "half=lower,age=3": { 13 | "model": "culinaire:block/tomatoes/lower/age/3" 14 | }, 15 | "half=upper,age=0": { 16 | "model": "minecraft:block/air" 17 | }, 18 | "half=upper,age=1": { 19 | "model": "minecraft:block/air" 20 | }, 21 | "half=upper,age=2": { 22 | "model": "culinaire:block/tomatoes/upper/age/2" 23 | }, 24 | "half=upper,age=3": { 25 | "model": "culinaire:block/tomatoes/upper/age/3" 26 | } 27 | } 28 | } -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/blockstates/white_chocolate_cauldron.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "level=1": { 4 | "model": "culinaire:block/white_chocolate_cauldron/level/1" 5 | }, 6 | "level=2": { 7 | "model": "culinaire:block/white_chocolate_cauldron/level/2" 8 | }, 9 | "level=3": { 10 | "model": "culinaire:block/white_chocolate_cauldron/level/3" 11 | } 12 | } 13 | } -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/lang/en_us.json: -------------------------------------------------------------------------------- 1 | { 2 | "modmenu.descriptionTranslation.culinaire": "An expansion onto the existing foodstuffs in Minecraft with intricate, well-made additions.\nIt includes an innovative sandwich system, the creation of cheese in cauldrons and brewing of tea in kettles.", 3 | 4 | "block.culinaire.lettuce": "Lettuce", 5 | "block.culinaire.tomatoes": "Tomatoes", 6 | "block.culinaire.milk_cauldron": "Milk Cauldron", 7 | "block.culinaire.cheese_cauldron": "Cheese Cauldron", 8 | "block.culinaire.cheese_wheel": "Cheese Wheel", 9 | "block.culinaire.kettle": "Kettle", 10 | 11 | "block.culinaire.dark_chocolate_cauldron": "Dark Chocolate Cauldron", 12 | "block.culinaire.milk_chocolate_cauldron": "Milk Chocolate Cauldron", 13 | "block.culinaire.white_chocolate_cauldron": "White Chocolate Cauldron", 14 | 15 | "item.culinaire.cheese": "Cheese", 16 | "item.culinaire.lettuce": "Lettuce", 17 | "item.culinaire.lettuce_seeds": "Lettuce Seeds", 18 | "item.culinaire.tomato": "Tomato", 19 | "item.culinaire.chocolate": "Chocolate", 20 | "item.culinaire.marshmallow": "Marshmallow", 21 | "item.culinaire.chouquette": "Chouquette", 22 | "item.culinaire.apple_pie": "Apple Pie", 23 | "item.culinaire.sweet_berry_pie": "Sweet Berry Pie", 24 | "item.culinaire.salad": "Salad", 25 | "item.culinaire.mashed_potatoes": "Mashed Potatoes", 26 | "item.culinaire.sandwich": "Sandwich", 27 | "item.culinaire.marshmallow_on_a_stick": "Marshmallow on a Stick", 28 | "item.culinaire.toasty_marshmallow_on_a_stick": "Toasty Marshmallow on a Stick", 29 | "item.culinaire.golden_marshmallow_on_a_stick": "Golden Marshmallow on a Stick", 30 | "item.culinaire.burnt_marshmallow_on_a_stick": "Burnt Marshmallow on a Stick", 31 | "item.culinaire.milk_bottle": "Milk Bottle", 32 | "item.culinaire.tea_bag": "Tea Bag", 33 | "item.culinaire.tea_bottle": "Tea Bottle", 34 | 35 | "item.culinaire.dark_chocolate_bottle": "Dark Chocolate Bottle", 36 | "item.culinaire.milk_chocolate_bottle": "Milk Chocolate Bottle", 37 | "item.culinaire.white_chocolate_bottle": "White Chocolate Bottle", 38 | 39 | "item.culinaire.dark_chocolate_bar": "Dark Chocolate Bar", 40 | "item.culinaire.milk_chocolate_bar": "Milk Chocolate Bar", 41 | "item.culinaire.white_chocolate_bar": "White Chocolate Bar", 42 | 43 | "item.culinaire.dark_chocolate_pie": "Dark Chocolate Pie", 44 | "item.culinaire.milk_chocolate_pie": "Milk Chocolate Pie", 45 | "item.culinaire.white_chocolate_pie": "White Chocolate Pie", 46 | 47 | "effect.culinaire.foresight": "Foresight", 48 | "effect.culinaire.fulfillment": "Fulfillment", 49 | "effect.culinaire.guard": "Guard", 50 | "effect.culinaire.poison_resistance": "Poison Resistance", 51 | 52 | "container.culinaire.kettle": "Kettle", 53 | 54 | "tea_type.culinaire.bitter.normal": "Bitter", 55 | "tea_type.culinaire.bitter.strong": "Very Bitter", 56 | "tea_type.culinaire.bitter.weak": "Slightly Bitter", 57 | "tea_type.culinaire.gloopy.normal": "Gloopy", 58 | "tea_type.culinaire.gloopy.strong": "Very Gloopy", 59 | "tea_type.culinaire.gloopy.weak": "Slightly Gloopy", 60 | "tea_type.culinaire.salty.normal": "Salty", 61 | "tea_type.culinaire.salty.strong": "Very Salty", 62 | "tea_type.culinaire.salty.weak": "Slightly Salty", 63 | "tea_type.culinaire.shining.normal": "Shining", 64 | "tea_type.culinaire.shining.strong": "Very Shining", 65 | "tea_type.culinaire.shining.weak": "Slightly Shining", 66 | "tea_type.culinaire.sour.normal": "Sour", 67 | "tea_type.culinaire.sour.strong": "Very Sour", 68 | "tea_type.culinaire.sour.weak": "Slightly Sour", 69 | "tea_type.culinaire.sweet.normal": "Sweet", 70 | "tea_type.culinaire.sweet.strong": "Very Sweet", 71 | "tea_type.culinaire.sweet.weak": "Slightly Sweet", 72 | "tea_type.culinaire.umami.normal": "Umami", 73 | "tea_type.culinaire.umami.strong": "Very Umami", 74 | "tea_type.culinaire.umami.weak": "Slightly Umami", 75 | 76 | "subtitles.culinaire.block.kettle.brew": "Kettle whistles", 77 | "subtitles.culinaire.item.tea_bottle.fill": "Tea Bottle fills", 78 | 79 | "stat.culinaire.interact_with_kettle": "Interactions with Kettle", 80 | 81 | "rei_category.culinaire.tea_brewing": "Tea Brewing", 82 | 83 | "text.autoconfig.culinaire.title": "Culinaire Configuration", 84 | "text.autoconfig.culinaire.category.features": "Features", 85 | "text.autoconfig.culinaire.option.features.canDrinkMilkBucket": "Drinkable Milk Buckets", 86 | "text.autoconfig.culinaire.option.features.milkBottlesMaxCount": "Maximum Stack Size of Milk Bottles" 87 | } -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/models/block/cheese_cauldron/level/1.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "culinaire:block/cauldron/level_height/5", 3 | "textures": { 4 | "content": "culinaire:block/cauldron/cheese" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/models/block/cheese_cauldron/level/2.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "culinaire:block/cauldron/level_height/8", 3 | "textures": { 4 | "content": "culinaire:block/cauldron/cheese" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/models/block/cheese_cauldron/level/3.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "culinaire:block/cauldron/level_height/11", 3 | "textures": { 4 | "content": "culinaire:block/cauldron/cheese" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/models/block/cheese_wheel/bites/0.json: -------------------------------------------------------------------------------- 1 | { 2 | "textures": { 3 | "particle": "culinaire:block/cheese_wheel/side", 4 | "bottom": "culinaire:block/cheese_wheel/bottom", 5 | "top": "culinaire:block/cheese_wheel/top", 6 | "side": "culinaire:block/cheese_wheel/side" 7 | }, 8 | "elements": [ 9 | { 10 | "from": [ 11 | 2, 12 | 0, 13 | 2 14 | ], 15 | "to": [ 16 | 14, 17 | 8, 18 | 14 19 | ], 20 | "faces": { 21 | "down": { 22 | "texture": "#bottom", 23 | "cullface": "down" 24 | }, 25 | "up": { 26 | "texture": "#top" 27 | }, 28 | "north": { 29 | "texture": "#side" 30 | }, 31 | "south": { 32 | "texture": "#side" 33 | }, 34 | "west": { 35 | "texture": "#side" 36 | }, 37 | "east": { 38 | "texture": "#side" 39 | } 40 | } 41 | } 42 | ] 43 | } 44 | -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/models/block/cheese_wheel/bites/1.json: -------------------------------------------------------------------------------- 1 | { 2 | "textures": { 3 | "particle": "culinaire:block/cheese_wheel/side", 4 | "bottom": "culinaire:block/cheese_wheel/bottom", 5 | "top": "culinaire:block/cheese_wheel/top", 6 | "side": "culinaire:block/cheese_wheel/side", 7 | "inside": "culinaire:block/cheese_wheel/inside" 8 | }, 9 | "elements": [ 10 | { 11 | "from": [ 12 | 4, 13 | 0, 14 | 2 15 | ], 16 | "to": [ 17 | 14, 18 | 8, 19 | 14 20 | ], 21 | "faces": { 22 | "down": { 23 | "texture": "#bottom", 24 | "cullface": "down" 25 | }, 26 | "up": { 27 | "texture": "#top" 28 | }, 29 | "north": { 30 | "texture": "#side" 31 | }, 32 | "south": { 33 | "texture": "#side" 34 | }, 35 | "west": { 36 | "texture": "#inside" 37 | }, 38 | "east": { 39 | "texture": "#side" 40 | } 41 | } 42 | } 43 | ] 44 | } 45 | -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/models/block/cheese_wheel/bites/2.json: -------------------------------------------------------------------------------- 1 | { 2 | "textures": { 3 | "particle": "culinaire:block/cheese_wheel/side", 4 | "bottom": "culinaire:block/cheese_wheel/bottom", 5 | "top": "culinaire:block/cheese_wheel/top", 6 | "side": "culinaire:block/cheese_wheel/side", 7 | "inside": "culinaire:block/cheese_wheel/inside" 8 | }, 9 | "elements": [ 10 | { 11 | "from": [ 12 | 6, 13 | 0, 14 | 2 15 | ], 16 | "to": [ 17 | 14, 18 | 8, 19 | 14 20 | ], 21 | "faces": { 22 | "down": { 23 | "texture": "#bottom", 24 | "cullface": "down" 25 | }, 26 | "up": { 27 | "texture": "#top" 28 | }, 29 | "north": { 30 | "texture": "#side" 31 | }, 32 | "south": { 33 | "texture": "#side" 34 | }, 35 | "west": { 36 | "texture": "#inside" 37 | }, 38 | "east": { 39 | "texture": "#side" 40 | } 41 | } 42 | } 43 | ] 44 | } 45 | -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/models/block/cheese_wheel/bites/3.json: -------------------------------------------------------------------------------- 1 | { 2 | "textures": { 3 | "particle": "culinaire:block/cheese_wheel/side", 4 | "bottom": "culinaire:block/cheese_wheel/bottom", 5 | "top": "culinaire:block/cheese_wheel/top", 6 | "side": "culinaire:block/cheese_wheel/side", 7 | "inside": "culinaire:block/cheese_wheel/inside" 8 | }, 9 | "elements": [ 10 | { 11 | "from": [ 12 | 8, 13 | 0, 14 | 2 15 | ], 16 | "to": [ 17 | 14, 18 | 8, 19 | 14 20 | ], 21 | "faces": { 22 | "down": { 23 | "texture": "#bottom", 24 | "cullface": "down" 25 | }, 26 | "up": { 27 | "texture": "#top" 28 | }, 29 | "north": { 30 | "texture": "#side" 31 | }, 32 | "south": { 33 | "texture": "#side" 34 | }, 35 | "west": { 36 | "texture": "#inside" 37 | }, 38 | "east": { 39 | "texture": "#side" 40 | } 41 | } 42 | } 43 | ] 44 | } 45 | -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/models/block/cheese_wheel/bites/4.json: -------------------------------------------------------------------------------- 1 | { 2 | "textures": { 3 | "particle": "culinaire:block/cheese_wheel/side", 4 | "bottom": "culinaire:block/cheese_wheel/bottom", 5 | "top": "culinaire:block/cheese_wheel/top", 6 | "side": "culinaire:block/cheese_wheel/side", 7 | "inside": "culinaire:block/cheese_wheel/inside" 8 | }, 9 | "elements": [ 10 | { 11 | "from": [ 12 | 10, 13 | 0, 14 | 2 15 | ], 16 | "to": [ 17 | 14, 18 | 8, 19 | 14 20 | ], 21 | "faces": { 22 | "down": { 23 | "texture": "#bottom", 24 | "cullface": "down" 25 | }, 26 | "up": { 27 | "texture": "#top" 28 | }, 29 | "north": { 30 | "texture": "#side" 31 | }, 32 | "south": { 33 | "texture": "#side" 34 | }, 35 | "west": { 36 | "texture": "#inside" 37 | }, 38 | "east": { 39 | "texture": "#side" 40 | } 41 | } 42 | } 43 | ] 44 | } 45 | -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/models/block/cheese_wheel/bites/5.json: -------------------------------------------------------------------------------- 1 | { 2 | "textures": { 3 | "particle": "culinaire:block/cheese_wheel/side", 4 | "bottom": "culinaire:block/cheese_wheel/bottom", 5 | "top": "culinaire:block/cheese_wheel/top", 6 | "side": "culinaire:block/cheese_wheel/side", 7 | "inside": "culinaire:block/cheese_wheel/inside" 8 | }, 9 | "elements": [ 10 | { 11 | "from": [ 12 | 12, 13 | 0, 14 | 2 15 | ], 16 | "to": [ 17 | 14, 18 | 8, 19 | 14 20 | ], 21 | "faces": { 22 | "down": { 23 | "texture": "#bottom", 24 | "cullface": "down" 25 | }, 26 | "up": { 27 | "texture": "#top" 28 | }, 29 | "north": { 30 | "texture": "#side" 31 | }, 32 | "south": { 33 | "texture": "#side" 34 | }, 35 | "west": { 36 | "texture": "#inside" 37 | }, 38 | "east": { 39 | "texture": "#side" 40 | } 41 | } 42 | } 43 | ] 44 | } 45 | -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/models/block/dark_chocolate_cauldron/level/1.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "culinaire:block/cauldron/level_height/5", 3 | "textures": { 4 | "content": "culinaire:block/cauldron/dark_chocolate" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/models/block/dark_chocolate_cauldron/level/2.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "culinaire:block/cauldron/level_height/8", 3 | "textures": { 4 | "content": "culinaire:block/cauldron/dark_chocolate" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/models/block/dark_chocolate_cauldron/level/3.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "culinaire:block/cauldron/level_height/11", 3 | "textures": { 4 | "content": "culinaire:block/cauldron/dark_chocolate" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/models/block/lettuce/age/0.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/crop", 3 | "textures": { 4 | "crop": "culinaire:block/lettuce/age_0" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/models/block/lettuce/age/1.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/crop", 3 | "textures": { 4 | "crop": "culinaire:block/lettuce/age_1" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/models/block/lettuce/age/2.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/crop", 3 | "textures": { 4 | "crop": "culinaire:block/lettuce/age_2" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/models/block/lettuce/age/3.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/crop", 3 | "textures": { 4 | "crop": "culinaire:block/lettuce/age_3" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/models/block/milk_cauldron/level/1.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "culinaire:block/cauldron/level_height/5", 3 | "textures": { 4 | "content": "culinaire:block/cauldron/milk" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/models/block/milk_cauldron/level/2.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "culinaire:block/cauldron/level_height/8", 3 | "textures": { 4 | "content": "culinaire:block/cauldron/milk" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/models/block/milk_cauldron/level/3.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "culinaire:block/cauldron/level_height/11", 3 | "textures": { 4 | "content": "culinaire:block/cauldron/milk" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/models/block/milk_chocolate_cauldron/level/1.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "culinaire:block/cauldron/level_height/5", 3 | "textures": { 4 | "content": "culinaire:block/cauldron/milk_chocolate" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/models/block/milk_chocolate_cauldron/level/2.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "culinaire:block/cauldron/level_height/8", 3 | "textures": { 4 | "content": "culinaire:block/cauldron/milk_chocolate" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/models/block/milk_chocolate_cauldron/level/3.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "culinaire:block/cauldron/level_height/11", 3 | "textures": { 4 | "content": "culinaire:block/cauldron/milk_chocolate" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/models/block/tomatoes/lower/age/0.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/crop", 3 | "textures": { 4 | "crop": "culinaire:block/tomatoes/lower/age_0" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/models/block/tomatoes/lower/age/1.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/crop", 3 | "textures": { 4 | "crop": "culinaire:block/tomatoes/lower/age_1" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/models/block/tomatoes/lower/age/2.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/crop", 3 | "textures": { 4 | "crop": "culinaire:block/tomatoes/lower/age_2" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/models/block/tomatoes/lower/age/3.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/crop", 3 | "textures": { 4 | "crop": "culinaire:block/tomatoes/lower/age_3" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/models/block/tomatoes/upper/age/2.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/crop", 3 | "textures": { 4 | "crop": "culinaire:block/tomatoes/upper/age_2" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/models/block/tomatoes/upper/age/3.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/crop", 3 | "textures": { 4 | "crop": "culinaire:block/tomatoes/upper/age_3" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/models/block/white_chocolate_cauldron/level/1.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "culinaire:block/cauldron/level_height/5", 3 | "textures": { 4 | "content": "culinaire:block/cauldron/white_chocolate" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/models/block/white_chocolate_cauldron/level/2.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "culinaire:block/cauldron/level_height/8", 3 | "textures": { 4 | "content": "culinaire:block/cauldron/white_chocolate" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/models/block/white_chocolate_cauldron/level/3.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "culinaire:block/cauldron/level_height/11", 3 | "textures": { 4 | "content": "culinaire:block/cauldron/white_chocolate" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/models/item/apple_pie.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "item/generated", 3 | "textures": { 4 | "layer0": "culinaire:item/apple_pie" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/models/item/burnt_marshmallow_on_a_stick.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "item/handheld", 3 | "textures": { 4 | "layer0": "culinaire:item/marshmallow_on_a_stick/burnt" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/models/item/cheese.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "item/generated", 3 | "textures": { 4 | "layer0": "culinaire:item/cheese" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/models/item/cheese_wheel.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "item/generated", 3 | "textures": { 4 | "layer0": "culinaire:item/cheese_wheel" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/models/item/chocolate.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "item/generated", 3 | "textures": { 4 | "layer0": "culinaire:item/chocolate" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/models/item/chouquette.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "item/generated", 3 | "textures": { 4 | "layer0": "culinaire:item/chouquette" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/models/item/dark_chocolate_bar.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "item/generated", 3 | "textures": { 4 | "layer0": "culinaire:item/dark_chocolate_bar" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/models/item/dark_chocolate_bottle.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "item/generated", 3 | "textures": { 4 | "layer0": "culinaire:item/dark_chocolate_bottle" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/models/item/dark_chocolate_pie.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "item/generated", 3 | "textures": { 4 | "layer0": "culinaire:item/dark_chocolate_pie" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/models/item/golden_marshmallow_on_a_stick.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "item/handheld", 3 | "textures": { 4 | "layer0": "culinaire:item/marshmallow_on_a_stick/golden" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/models/item/iron_tomato.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "item/generated", 3 | "textures": { 4 | "layer0": "culinaire:item/iron_tomato" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/models/item/kettle.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "item/generated", 3 | "textures": { 4 | "layer0": "culinaire:item/kettle" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/models/item/lettuce.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "item/generated", 3 | "textures": { 4 | "layer0": "culinaire:item/lettuce" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/models/item/lettuce_seeds.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "item/generated", 3 | "textures": { 4 | "layer0": "culinaire:item/lettuce_seeds" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/models/item/marshmallow.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "item/generated", 3 | "textures": { 4 | "layer0": "culinaire:item/marshmallow" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/models/item/marshmallow_on_a_stick.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "item/handheld", 3 | "textures": { 4 | "layer0": "culinaire:item/marshmallow_on_a_stick/normal" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/models/item/mashed_potatoes.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "item/generated", 3 | "textures": { 4 | "layer0": "culinaire:item/mashed_potatoes" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/models/item/milk_bottle.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "item/generated", 3 | "textures": { 4 | "layer0": "culinaire:item/milk_bottle" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/models/item/milk_chocolate_bar.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "item/generated", 3 | "textures": { 4 | "layer0": "culinaire:item/milk_chocolate_bar" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/models/item/milk_chocolate_bottle.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "item/generated", 3 | "textures": { 4 | "layer0": "culinaire:item/milk_chocolate_bottle" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/models/item/milk_chocolate_pie.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "item/generated", 3 | "textures": { 4 | "layer0": "culinaire:item/milk_chocolate_pie" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/models/item/salad.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "item/generated", 3 | "textures": { 4 | "layer0": "culinaire:item/salad" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/models/item/sandwich.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "item/generated", 3 | "textures": { 4 | "layer0": "culinaire:item/sandwich" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/models/item/sweet_berry_pie.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "item/generated", 3 | "textures": { 4 | "layer0": "culinaire:item/sweet_berry_pie" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/models/item/tea_bag.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "item/generated", 3 | "textures": { 4 | "layer0": "culinaire:item/tea_bag" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/models/item/tea_bottle.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "item/generated", 3 | "textures": { 4 | "layer0": "minecraft:item/potion_overlay", 5 | "layer1": "minecraft:item/potion" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/models/item/toasty_marshmallow_on_a_stick.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "item/handheld", 3 | "textures": { 4 | "layer0": "culinaire:item/marshmallow_on_a_stick/toasty" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/models/item/tomato.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "item/generated", 3 | "textures": { 4 | "layer0": "culinaire:item/tomato" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/models/item/white_chocolate_bar.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "item/generated", 3 | "textures": { 4 | "layer0": "culinaire:item/white_chocolate_bar" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/models/item/white_chocolate_bottle.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "item/generated", 3 | "textures": { 4 | "layer0": "culinaire:item/white_chocolate_bottle" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/models/item/white_chocolate_pie.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "item/generated", 3 | "textures": { 4 | "layer0": "culinaire:item/white_chocolate_pie" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/sounds.json: -------------------------------------------------------------------------------- 1 | { 2 | "block.kettle.brew": { 3 | "subtitle": "subtitles.culinaire.block.kettle.brew", 4 | "sounds": [ 5 | "culinaire:block/kettle/brew" 6 | ] 7 | }, 8 | "item.tea_bottle.fill": { 9 | "subtitle": "subtitles.culinaire.item.tea_bottle.fill", 10 | "sounds": [ 11 | "culinaire:item/tea_bottle/fill/1", 12 | "culinaire:item/tea_bottle/fill/2", 13 | "culinaire:item/tea_bottle/fill/3" 14 | ] 15 | } 16 | } -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/sounds/block/kettle/brew.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DawnTeamMC/Culinaire/14d46ba5192a31e7e4df498e009ad00743aadb67/src/main/resources/assets/culinaire/sounds/block/kettle/brew.ogg -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/sounds/item/tea_bottle/fill/1.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DawnTeamMC/Culinaire/14d46ba5192a31e7e4df498e009ad00743aadb67/src/main/resources/assets/culinaire/sounds/item/tea_bottle/fill/1.ogg -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/sounds/item/tea_bottle/fill/2.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DawnTeamMC/Culinaire/14d46ba5192a31e7e4df498e009ad00743aadb67/src/main/resources/assets/culinaire/sounds/item/tea_bottle/fill/2.ogg -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/sounds/item/tea_bottle/fill/3.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DawnTeamMC/Culinaire/14d46ba5192a31e7e4df498e009ad00743aadb67/src/main/resources/assets/culinaire/sounds/item/tea_bottle/fill/3.ogg -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/textures/block/cauldron/cheese.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DawnTeamMC/Culinaire/14d46ba5192a31e7e4df498e009ad00743aadb67/src/main/resources/assets/culinaire/textures/block/cauldron/cheese.png -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/textures/block/cauldron/dark_chocolate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DawnTeamMC/Culinaire/14d46ba5192a31e7e4df498e009ad00743aadb67/src/main/resources/assets/culinaire/textures/block/cauldron/dark_chocolate.png -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/textures/block/cauldron/milk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DawnTeamMC/Culinaire/14d46ba5192a31e7e4df498e009ad00743aadb67/src/main/resources/assets/culinaire/textures/block/cauldron/milk.png -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/textures/block/cauldron/milk_chocolate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DawnTeamMC/Culinaire/14d46ba5192a31e7e4df498e009ad00743aadb67/src/main/resources/assets/culinaire/textures/block/cauldron/milk_chocolate.png -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/textures/block/cauldron/white_chocolate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DawnTeamMC/Culinaire/14d46ba5192a31e7e4df498e009ad00743aadb67/src/main/resources/assets/culinaire/textures/block/cauldron/white_chocolate.png -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/textures/block/cheese_wheel/bottom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DawnTeamMC/Culinaire/14d46ba5192a31e7e4df498e009ad00743aadb67/src/main/resources/assets/culinaire/textures/block/cheese_wheel/bottom.png -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/textures/block/cheese_wheel/inside.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DawnTeamMC/Culinaire/14d46ba5192a31e7e4df498e009ad00743aadb67/src/main/resources/assets/culinaire/textures/block/cheese_wheel/inside.png -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/textures/block/cheese_wheel/side.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DawnTeamMC/Culinaire/14d46ba5192a31e7e4df498e009ad00743aadb67/src/main/resources/assets/culinaire/textures/block/cheese_wheel/side.png -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/textures/block/cheese_wheel/top.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DawnTeamMC/Culinaire/14d46ba5192a31e7e4df498e009ad00743aadb67/src/main/resources/assets/culinaire/textures/block/cheese_wheel/top.png -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/textures/block/kettle/bottom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DawnTeamMC/Culinaire/14d46ba5192a31e7e4df498e009ad00743aadb67/src/main/resources/assets/culinaire/textures/block/kettle/bottom.png -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/textures/block/kettle/faucet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DawnTeamMC/Culinaire/14d46ba5192a31e7e4df498e009ad00743aadb67/src/main/resources/assets/culinaire/textures/block/kettle/faucet.png -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/textures/block/kettle/side.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DawnTeamMC/Culinaire/14d46ba5192a31e7e4df498e009ad00743aadb67/src/main/resources/assets/culinaire/textures/block/kettle/side.png -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/textures/block/kettle/top.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DawnTeamMC/Culinaire/14d46ba5192a31e7e4df498e009ad00743aadb67/src/main/resources/assets/culinaire/textures/block/kettle/top.png -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/textures/block/lettuce/age_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DawnTeamMC/Culinaire/14d46ba5192a31e7e4df498e009ad00743aadb67/src/main/resources/assets/culinaire/textures/block/lettuce/age_0.png -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/textures/block/lettuce/age_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DawnTeamMC/Culinaire/14d46ba5192a31e7e4df498e009ad00743aadb67/src/main/resources/assets/culinaire/textures/block/lettuce/age_1.png -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/textures/block/lettuce/age_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DawnTeamMC/Culinaire/14d46ba5192a31e7e4df498e009ad00743aadb67/src/main/resources/assets/culinaire/textures/block/lettuce/age_2.png -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/textures/block/lettuce/age_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DawnTeamMC/Culinaire/14d46ba5192a31e7e4df498e009ad00743aadb67/src/main/resources/assets/culinaire/textures/block/lettuce/age_3.png -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/textures/block/tomatoes/lower/age_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DawnTeamMC/Culinaire/14d46ba5192a31e7e4df498e009ad00743aadb67/src/main/resources/assets/culinaire/textures/block/tomatoes/lower/age_0.png -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/textures/block/tomatoes/lower/age_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DawnTeamMC/Culinaire/14d46ba5192a31e7e4df498e009ad00743aadb67/src/main/resources/assets/culinaire/textures/block/tomatoes/lower/age_1.png -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/textures/block/tomatoes/lower/age_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DawnTeamMC/Culinaire/14d46ba5192a31e7e4df498e009ad00743aadb67/src/main/resources/assets/culinaire/textures/block/tomatoes/lower/age_2.png -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/textures/block/tomatoes/lower/age_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DawnTeamMC/Culinaire/14d46ba5192a31e7e4df498e009ad00743aadb67/src/main/resources/assets/culinaire/textures/block/tomatoes/lower/age_3.png -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/textures/block/tomatoes/upper/age_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DawnTeamMC/Culinaire/14d46ba5192a31e7e4df498e009ad00743aadb67/src/main/resources/assets/culinaire/textures/block/tomatoes/upper/age_2.png -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/textures/block/tomatoes/upper/age_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DawnTeamMC/Culinaire/14d46ba5192a31e7e4df498e009ad00743aadb67/src/main/resources/assets/culinaire/textures/block/tomatoes/upper/age_3.png -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/textures/gui/container/kettle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DawnTeamMC/Culinaire/14d46ba5192a31e7e4df498e009ad00743aadb67/src/main/resources/assets/culinaire/textures/gui/container/kettle.png -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/textures/gui/rei/dark_display.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DawnTeamMC/Culinaire/14d46ba5192a31e7e4df498e009ad00743aadb67/src/main/resources/assets/culinaire/textures/gui/rei/dark_display.png -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/textures/gui/rei/display.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DawnTeamMC/Culinaire/14d46ba5192a31e7e4df498e009ad00743aadb67/src/main/resources/assets/culinaire/textures/gui/rei/display.png -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/textures/item/apple_pie.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DawnTeamMC/Culinaire/14d46ba5192a31e7e4df498e009ad00743aadb67/src/main/resources/assets/culinaire/textures/item/apple_pie.png -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/textures/item/blueberry_pie.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DawnTeamMC/Culinaire/14d46ba5192a31e7e4df498e009ad00743aadb67/src/main/resources/assets/culinaire/textures/item/blueberry_pie.png -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/textures/item/cheese.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DawnTeamMC/Culinaire/14d46ba5192a31e7e4df498e009ad00743aadb67/src/main/resources/assets/culinaire/textures/item/cheese.png -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/textures/item/cheese_wheel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DawnTeamMC/Culinaire/14d46ba5192a31e7e4df498e009ad00743aadb67/src/main/resources/assets/culinaire/textures/item/cheese_wheel.png -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/textures/item/chouquette.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DawnTeamMC/Culinaire/14d46ba5192a31e7e4df498e009ad00743aadb67/src/main/resources/assets/culinaire/textures/item/chouquette.png -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/textures/item/dark_chocolate_bar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DawnTeamMC/Culinaire/14d46ba5192a31e7e4df498e009ad00743aadb67/src/main/resources/assets/culinaire/textures/item/dark_chocolate_bar.png -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/textures/item/dark_chocolate_bottle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DawnTeamMC/Culinaire/14d46ba5192a31e7e4df498e009ad00743aadb67/src/main/resources/assets/culinaire/textures/item/dark_chocolate_bottle.png -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/textures/item/dark_chocolate_pie.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DawnTeamMC/Culinaire/14d46ba5192a31e7e4df498e009ad00743aadb67/src/main/resources/assets/culinaire/textures/item/dark_chocolate_pie.png -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/textures/item/iron_tomato.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DawnTeamMC/Culinaire/14d46ba5192a31e7e4df498e009ad00743aadb67/src/main/resources/assets/culinaire/textures/item/iron_tomato.png -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/textures/item/kettle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DawnTeamMC/Culinaire/14d46ba5192a31e7e4df498e009ad00743aadb67/src/main/resources/assets/culinaire/textures/item/kettle.png -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/textures/item/lettuce.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DawnTeamMC/Culinaire/14d46ba5192a31e7e4df498e009ad00743aadb67/src/main/resources/assets/culinaire/textures/item/lettuce.png -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/textures/item/lettuce_seeds.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DawnTeamMC/Culinaire/14d46ba5192a31e7e4df498e009ad00743aadb67/src/main/resources/assets/culinaire/textures/item/lettuce_seeds.png -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/textures/item/marshmallow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DawnTeamMC/Culinaire/14d46ba5192a31e7e4df498e009ad00743aadb67/src/main/resources/assets/culinaire/textures/item/marshmallow.png -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/textures/item/marshmallow_on_a_stick/burnt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DawnTeamMC/Culinaire/14d46ba5192a31e7e4df498e009ad00743aadb67/src/main/resources/assets/culinaire/textures/item/marshmallow_on_a_stick/burnt.png -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/textures/item/marshmallow_on_a_stick/golden.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DawnTeamMC/Culinaire/14d46ba5192a31e7e4df498e009ad00743aadb67/src/main/resources/assets/culinaire/textures/item/marshmallow_on_a_stick/golden.png -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/textures/item/marshmallow_on_a_stick/normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DawnTeamMC/Culinaire/14d46ba5192a31e7e4df498e009ad00743aadb67/src/main/resources/assets/culinaire/textures/item/marshmallow_on_a_stick/normal.png -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/textures/item/marshmallow_on_a_stick/toasty.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DawnTeamMC/Culinaire/14d46ba5192a31e7e4df498e009ad00743aadb67/src/main/resources/assets/culinaire/textures/item/marshmallow_on_a_stick/toasty.png -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/textures/item/mashed_potatoes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DawnTeamMC/Culinaire/14d46ba5192a31e7e4df498e009ad00743aadb67/src/main/resources/assets/culinaire/textures/item/mashed_potatoes.png -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/textures/item/milk_bottle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DawnTeamMC/Culinaire/14d46ba5192a31e7e4df498e009ad00743aadb67/src/main/resources/assets/culinaire/textures/item/milk_bottle.png -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/textures/item/milk_chocolate_bar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DawnTeamMC/Culinaire/14d46ba5192a31e7e4df498e009ad00743aadb67/src/main/resources/assets/culinaire/textures/item/milk_chocolate_bar.png -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/textures/item/milk_chocolate_bottle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DawnTeamMC/Culinaire/14d46ba5192a31e7e4df498e009ad00743aadb67/src/main/resources/assets/culinaire/textures/item/milk_chocolate_bottle.png -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/textures/item/milk_chocolate_pie.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DawnTeamMC/Culinaire/14d46ba5192a31e7e4df498e009ad00743aadb67/src/main/resources/assets/culinaire/textures/item/milk_chocolate_pie.png -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/textures/item/salad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DawnTeamMC/Culinaire/14d46ba5192a31e7e4df498e009ad00743aadb67/src/main/resources/assets/culinaire/textures/item/salad.png -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/textures/item/sandwich.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DawnTeamMC/Culinaire/14d46ba5192a31e7e4df498e009ad00743aadb67/src/main/resources/assets/culinaire/textures/item/sandwich.png -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/textures/item/sweet_berry_pie.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DawnTeamMC/Culinaire/14d46ba5192a31e7e4df498e009ad00743aadb67/src/main/resources/assets/culinaire/textures/item/sweet_berry_pie.png -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/textures/item/tea_bag.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DawnTeamMC/Culinaire/14d46ba5192a31e7e4df498e009ad00743aadb67/src/main/resources/assets/culinaire/textures/item/tea_bag.png -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/textures/item/tomato.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DawnTeamMC/Culinaire/14d46ba5192a31e7e4df498e009ad00743aadb67/src/main/resources/assets/culinaire/textures/item/tomato.png -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/textures/item/white_chocolate_bar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DawnTeamMC/Culinaire/14d46ba5192a31e7e4df498e009ad00743aadb67/src/main/resources/assets/culinaire/textures/item/white_chocolate_bar.png -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/textures/item/white_chocolate_bottle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DawnTeamMC/Culinaire/14d46ba5192a31e7e4df498e009ad00743aadb67/src/main/resources/assets/culinaire/textures/item/white_chocolate_bottle.png -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/textures/item/white_chocolate_pie.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DawnTeamMC/Culinaire/14d46ba5192a31e7e4df498e009ad00743aadb67/src/main/resources/assets/culinaire/textures/item/white_chocolate_pie.png -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/textures/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DawnTeamMC/Culinaire/14d46ba5192a31e7e4df498e009ad00743aadb67/src/main/resources/assets/culinaire/textures/logo.png -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/textures/mob_effect/foresight.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DawnTeamMC/Culinaire/14d46ba5192a31e7e4df498e009ad00743aadb67/src/main/resources/assets/culinaire/textures/mob_effect/foresight.png -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/textures/mob_effect/fulfillment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DawnTeamMC/Culinaire/14d46ba5192a31e7e4df498e009ad00743aadb67/src/main/resources/assets/culinaire/textures/mob_effect/fulfillment.png -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/textures/mob_effect/guard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DawnTeamMC/Culinaire/14d46ba5192a31e7e4df498e009ad00743aadb67/src/main/resources/assets/culinaire/textures/mob_effect/guard.png -------------------------------------------------------------------------------- /src/main/resources/assets/culinaire/textures/mob_effect/poison_resistance.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DawnTeamMC/Culinaire/14d46ba5192a31e7e4df498e009ad00743aadb67/src/main/resources/assets/culinaire/textures/mob_effect/poison_resistance.png -------------------------------------------------------------------------------- /src/main/resources/culinaire.mixins.json: -------------------------------------------------------------------------------- 1 | { 2 | "required": true, 3 | "package": "com.hugman.culinaire.mixin", 4 | "compatibilityLevel": "JAVA_16", 5 | "mixins": ["CowEntityMixin", "MilkBucketMixin"], 6 | "client": [ 7 | "client.PlayerRendererMixin" 8 | ], 9 | "injectors": { 10 | "defaultRequire": 1 11 | } 12 | } -------------------------------------------------------------------------------- /src/main/resources/data/c/tags/items/sandwich/blacklist.json: -------------------------------------------------------------------------------- 1 | { 2 | "replace": false, 3 | "values": [ 4 | "#c:sandwich/bread", 5 | "culinaire:sandwich", 6 | "minecraft:mushroom_stew", 7 | "minecraft:rabbit_stew", 8 | "minecraft:beetroot_soup", 9 | "culinaire:apple_pie", 10 | "culinaire:sweet_berry_pie", 11 | "culinaire:dark_chocolate_pie", 12 | "culinaire:milk_chocolate_pie", 13 | "culinaire:white_chocolate_pie", 14 | "culinaire:salad", 15 | "culinaire:mashed_potatoes" 16 | ] 17 | } -------------------------------------------------------------------------------- /src/main/resources/data/c/tags/items/sandwich/bread.json: -------------------------------------------------------------------------------- 1 | { 2 | "replace": false, 3 | "values": [ 4 | "minecraft:bread" 5 | ] 6 | } -------------------------------------------------------------------------------- /src/main/resources/data/c/tags/items/tea_ingredients/bitter/normal.json: -------------------------------------------------------------------------------- 1 | { 2 | "replace": false, 3 | "values": [ 4 | "minecraft:cocoa_beans", 5 | "minecraft:dead_bush" 6 | ] 7 | } -------------------------------------------------------------------------------- /src/main/resources/data/c/tags/items/tea_ingredients/bitter/strong.json: -------------------------------------------------------------------------------- 1 | { 2 | "replace": false, 3 | "values": [ 4 | "minecraft:wither_rose", 5 | "minecraft:gunpowder", 6 | "minecraft:pufferfish", 7 | "minecraft:fermented_spider_eye" 8 | ] 9 | } -------------------------------------------------------------------------------- /src/main/resources/data/c/tags/items/tea_ingredients/bitter/weak.json: -------------------------------------------------------------------------------- 1 | { 2 | "replace": false, 3 | "values": [ 4 | "minecraft:bamboo", 5 | "minecraft:cactus", 6 | "minecraft:snowball" 7 | ] 8 | } -------------------------------------------------------------------------------- /src/main/resources/data/c/tags/items/tea_ingredients/gloopy/weak.json: -------------------------------------------------------------------------------- 1 | { 2 | "replace": false, 3 | "values": [ 4 | "minecraft:chorus_fruit" 5 | ] 6 | } -------------------------------------------------------------------------------- /src/main/resources/data/c/tags/items/tea_ingredients/salty/normal.json: -------------------------------------------------------------------------------- 1 | { 2 | "replace": false, 3 | "values": [ 4 | "minecraft:warped_roots", 5 | "minecraft:seagrass", 6 | "minecraft:kelp", 7 | "culinaire:tomato" 8 | ] 9 | } -------------------------------------------------------------------------------- /src/main/resources/data/c/tags/items/tea_ingredients/salty/weak.json: -------------------------------------------------------------------------------- 1 | { 2 | "replace": false, 3 | "values": [ 4 | "minecraft:pumpkin_seeds", 5 | "minecraft:nether_sprouts", 6 | "minecraft:warped_fungus", 7 | "minecraft:dried_kelp" 8 | ] 9 | } -------------------------------------------------------------------------------- /src/main/resources/data/c/tags/items/tea_ingredients/shining/weak.json: -------------------------------------------------------------------------------- 1 | { 2 | "replace": false, 3 | "values": [ 4 | "minecraft:glowstone_dust", 5 | "minecraft:amethyst_shard" 6 | ] 7 | } -------------------------------------------------------------------------------- /src/main/resources/data/c/tags/items/tea_ingredients/sour/normal.json: -------------------------------------------------------------------------------- 1 | { 2 | "replace": false, 3 | "values": [ 4 | "minecraft:fern", 5 | "minecraft:large_fern" 6 | ] 7 | } -------------------------------------------------------------------------------- /src/main/resources/data/c/tags/items/tea_ingredients/sour/weak.json: -------------------------------------------------------------------------------- 1 | { 2 | "replace": false, 3 | "values": [ 4 | "minecraft:red_mushroom", 5 | "minecraft:brown_mushroom" 6 | ] 7 | } -------------------------------------------------------------------------------- /src/main/resources/data/c/tags/items/tea_ingredients/sweet/normal.json: -------------------------------------------------------------------------------- 1 | { 2 | "replace": false, 3 | "values": [ 4 | "minecraft:melon_seeds", 5 | "minecraft:sweet_berries", 6 | "culinaire:chouquette" 7 | ] 8 | } -------------------------------------------------------------------------------- /src/main/resources/data/c/tags/items/tea_ingredients/sweet/strong.json: -------------------------------------------------------------------------------- 1 | { 2 | "replace": false, 3 | "values": [ 4 | "minecraft:honeycomb", 5 | "culinaire:cheese", 6 | "culinaire:white_chocolate_bar", 7 | "culinaire:milk_chocolate_bar", 8 | "culinaire:dark_chocolate_bar" 9 | ] 10 | } -------------------------------------------------------------------------------- /src/main/resources/data/c/tags/items/tea_ingredients/sweet/weak.json: -------------------------------------------------------------------------------- 1 | { 2 | "replace": false, 3 | "values": [ 4 | "minecraft:pumpkin_seeds", 5 | "minecraft:beetroot_seeds", 6 | "minecraft:sugar", 7 | "culinaire:marshmallow" 8 | ] 9 | } -------------------------------------------------------------------------------- /src/main/resources/data/c/tags/items/tea_ingredients/umami/normal.json: -------------------------------------------------------------------------------- 1 | { 2 | "replace": false, 3 | "values": [ 4 | "minecraft:crimson_roots" 5 | ] 6 | } -------------------------------------------------------------------------------- /src/main/resources/data/c/tags/items/tea_ingredients/umami/weak.json: -------------------------------------------------------------------------------- 1 | { 2 | "replace": false, 3 | "values": [ 4 | "minecraft:carrot", 5 | "minecraft:crimson_fungus", 6 | "culinaire:lettuce_seeds" 7 | ] 8 | } -------------------------------------------------------------------------------- /src/main/resources/data/culinaire/advancements/crafting/apple_pie.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:recipes/root", 3 | "rewards": { 4 | "recipes": [ 5 | "culinaire:crafting/apple_pie" 6 | ] 7 | }, 8 | "criteria": { 9 | "has_apple": { 10 | "trigger": "minecraft:inventory_changed", 11 | "conditions": { 12 | "items": [ 13 | { 14 | "items": ["minecraft:apple"] 15 | } 16 | ] 17 | } 18 | }, 19 | "has_the_recipe": { 20 | "trigger": "minecraft:recipe_unlocked", 21 | "conditions": { 22 | "recipe": "culinaire:crafting/apple_pie" 23 | } 24 | } 25 | }, 26 | "requirements": [ 27 | [ 28 | "has_apple", 29 | "has_the_recipe" 30 | ] 31 | ] 32 | } -------------------------------------------------------------------------------- /src/main/resources/data/culinaire/advancements/crafting/cheese_wheel.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:recipes/root", 3 | "rewards": { 4 | "recipes": [ 5 | "culinaire:crafting/cheese_wheel" 6 | ] 7 | }, 8 | "criteria": { 9 | "has_cheese": { 10 | "trigger": "minecraft:inventory_changed", 11 | "conditions": { 12 | "items": [ 13 | { 14 | "items": ["culinaire:cheese"] 15 | } 16 | ] 17 | } 18 | }, 19 | "has_the_recipe": { 20 | "trigger": "minecraft:recipe_unlocked", 21 | "conditions": { 22 | "recipe": "culinaire:crafting/cheese_wheel" 23 | } 24 | } 25 | }, 26 | "requirements": [ 27 | [ 28 | "has_cheese", 29 | "has_the_recipe" 30 | ] 31 | ] 32 | } -------------------------------------------------------------------------------- /src/main/resources/data/culinaire/advancements/crafting/chocolate.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:recipes/root", 3 | "rewards": { 4 | "recipes": [ 5 | "culinaire:crafting/chocolate" 6 | ] 7 | }, 8 | "criteria": { 9 | "has_sugar": { 10 | "trigger": "minecraft:inventory_changed", 11 | "conditions": { 12 | "items": [ 13 | { 14 | "items": ["minecraft:sugar"] 15 | } 16 | ] 17 | } 18 | }, 19 | "has_the_recipe": { 20 | "trigger": "minecraft:recipe_unlocked", 21 | "conditions": { 22 | "recipe": "culinaire:crafting/chocolate" 23 | } 24 | } 25 | }, 26 | "requirements": [ 27 | [ 28 | "has_sugar", 29 | "has_the_recipe" 30 | ] 31 | ] 32 | } -------------------------------------------------------------------------------- /src/main/resources/data/culinaire/advancements/crafting/chouquette.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:recipes/root", 3 | "rewards": { 4 | "recipes": [ 5 | "culinaire:crafting/chouquette" 6 | ] 7 | }, 8 | "criteria": { 9 | "has_sugar": { 10 | "trigger": "minecraft:inventory_changed", 11 | "conditions": { 12 | "items": [ 13 | { 14 | "items": ["minecraft:sugar"] 15 | } 16 | ] 17 | } 18 | }, 19 | "has_the_recipe": { 20 | "trigger": "minecraft:recipe_unlocked", 21 | "conditions": { 22 | "recipe": "culinaire:crafting/chouquette" 23 | } 24 | } 25 | }, 26 | "requirements": [ 27 | [ 28 | "has_sugar", 29 | "has_the_recipe" 30 | ] 31 | ] 32 | } -------------------------------------------------------------------------------- /src/main/resources/data/culinaire/advancements/crafting/dark_chocolate_bar.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:recipes/root", 3 | "rewards": { 4 | "recipes": [ 5 | "culinaire:crafting/dark_chocolate_bar" 6 | ] 7 | }, 8 | "criteria": { 9 | "has_chocolate_bottle": { 10 | "trigger": "minecraft:inventory_changed", 11 | "conditions": { 12 | "items": [ 13 | { 14 | "items": ["culinaire:dark_chocolate_bottle"] 15 | } 16 | ] 17 | } 18 | }, 19 | "has_the_recipe": { 20 | "trigger": "minecraft:recipe_unlocked", 21 | "conditions": { 22 | "recipe": "culinaire:crafting/dark_chocolate_bar" 23 | } 24 | } 25 | }, 26 | "requirements": [ 27 | [ 28 | "has_chocolate_bottle", 29 | "has_the_recipe" 30 | ] 31 | ] 32 | } -------------------------------------------------------------------------------- /src/main/resources/data/culinaire/advancements/crafting/dark_chocolate_bottle.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:recipes/root", 3 | "rewards": { 4 | "recipes": [ 5 | "culinaire:crafting/dark_chocolate_bottle" 6 | ] 7 | }, 8 | "criteria": { 9 | "has_cocoa_beans": { 10 | "trigger": "minecraft:inventory_changed", 11 | "conditions": { 12 | "items": [ 13 | { 14 | "items": ["minecraft:cocoa_beans"] 15 | } 16 | ] 17 | } 18 | }, 19 | "has_sugar": { 20 | "trigger": "minecraft:inventory_changed", 21 | "conditions": { 22 | "items": [ 23 | { 24 | "items": ["minecraft:sugar"] 25 | } 26 | ] 27 | } 28 | }, 29 | "has_the_recipe": { 30 | "trigger": "minecraft:recipe_unlocked", 31 | "conditions": { 32 | "recipe": "culinaire:crafting/dark_chocolate_bottle" 33 | } 34 | } 35 | }, 36 | "requirements": [ 37 | [ 38 | "has_cocoa_beans", 39 | "has_sugar", 40 | "has_the_recipe" 41 | ] 42 | ] 43 | } -------------------------------------------------------------------------------- /src/main/resources/data/culinaire/advancements/crafting/dark_chocolate_pie.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:recipes/root", 3 | "rewards": { 4 | "recipes": [ 5 | "culinaire:crafting/dark_chocolate_pie" 6 | ] 7 | }, 8 | "criteria": { 9 | "has_chocolate_bottle": { 10 | "trigger": "minecraft:inventory_changed", 11 | "conditions": { 12 | "items": [ 13 | { 14 | "items": ["culinaire:dark_chocolate_bottle"] 15 | } 16 | ] 17 | } 18 | }, 19 | "has_the_recipe": { 20 | "trigger": "minecraft:recipe_unlocked", 21 | "conditions": { 22 | "recipe": "culinaire:crafting/dark_chocolate_pie" 23 | } 24 | } 25 | }, 26 | "requirements": [ 27 | [ 28 | "has_chocolate_bottle", 29 | "has_the_recipe" 30 | ] 31 | ] 32 | } -------------------------------------------------------------------------------- /src/main/resources/data/culinaire/advancements/crafting/kettle.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:recipes/root", 3 | "rewards": { 4 | "recipes": [ 5 | "culinaire:crafting/kettle" 6 | ] 7 | }, 8 | "criteria": { 9 | "has_iron_ingot": { 10 | "trigger": "minecraft:inventory_changed", 11 | "conditions": { 12 | "items": [ 13 | { 14 | "items": ["minecraft:iron_ingot"] 15 | } 16 | ] 17 | } 18 | }, 19 | "has_the_recipe": { 20 | "trigger": "minecraft:recipe_unlocked", 21 | "conditions": { 22 | "recipe": "culinaire:crafting/kettle" 23 | } 24 | } 25 | }, 26 | "requirements": [ 27 | [ 28 | "has_iron_ingot", 29 | "has_the_recipe" 30 | ] 31 | ] 32 | } -------------------------------------------------------------------------------- /src/main/resources/data/culinaire/advancements/crafting/marshmallow.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:recipes/root", 3 | "rewards": { 4 | "recipes": [ 5 | "culinaire:crafting/marshmallow" 6 | ] 7 | }, 8 | "criteria": { 9 | "has_sugar": { 10 | "trigger": "minecraft:inventory_changed", 11 | "conditions": { 12 | "items": [ 13 | { 14 | "items": ["minecraft:sugar"] 15 | } 16 | ] 17 | } 18 | }, 19 | "has_the_recipe": { 20 | "trigger": "minecraft:recipe_unlocked", 21 | "conditions": { 22 | "recipe": "culinaire:crafting/marshmallow" 23 | } 24 | } 25 | }, 26 | "requirements": [ 27 | [ 28 | "has_sugar", 29 | "has_the_recipe" 30 | ] 31 | ] 32 | } -------------------------------------------------------------------------------- /src/main/resources/data/culinaire/advancements/crafting/marshmallow_on_a_stick.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:recipes/root", 3 | "rewards": { 4 | "recipes": [ 5 | "culinaire:crafting/marshmallow_on_a_stick" 6 | ] 7 | }, 8 | "criteria": { 9 | "has_marshmallow": { 10 | "trigger": "minecraft:inventory_changed", 11 | "conditions": { 12 | "items": [ 13 | { 14 | "items": ["culinaire:marshmallow"] 15 | } 16 | ] 17 | } 18 | }, 19 | "has_the_recipe": { 20 | "trigger": "minecraft:recipe_unlocked", 21 | "conditions": { 22 | "recipe": "culinaire:crafting/marshmallow_on_a_stick" 23 | } 24 | } 25 | }, 26 | "requirements": [ 27 | [ 28 | "has_marshmallow", 29 | "has_the_recipe" 30 | ] 31 | ] 32 | } -------------------------------------------------------------------------------- /src/main/resources/data/culinaire/advancements/crafting/mashed_potatoes.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:recipes/root", 3 | "rewards": { 4 | "recipes": [ 5 | "culinaire:crafting/mashed_potatoes" 6 | ] 7 | }, 8 | "criteria": { 9 | "has_baked_potato": { 10 | "trigger": "minecraft:inventory_changed", 11 | "conditions": { 12 | "items": [ 13 | { 14 | "items": ["minecraft:baked_potato"] 15 | } 16 | ] 17 | } 18 | }, 19 | "has_the_recipe": { 20 | "trigger": "minecraft:recipe_unlocked", 21 | "conditions": { 22 | "recipe": "culinaire:crafting/mashed_potatoes" 23 | } 24 | } 25 | }, 26 | "requirements": [ 27 | [ 28 | "has_baked_potato", 29 | "has_the_recipe" 30 | ] 31 | ] 32 | } -------------------------------------------------------------------------------- /src/main/resources/data/culinaire/advancements/crafting/milk_chocolate_bar.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:recipes/root", 3 | "rewards": { 4 | "recipes": [ 5 | "culinaire:crafting/milk_chocolate_bar" 6 | ] 7 | }, 8 | "criteria": { 9 | "has_chocolate_bottle": { 10 | "trigger": "minecraft:inventory_changed", 11 | "conditions": { 12 | "items": [ 13 | { 14 | "items": ["culinaire:milk_chocolate_bottle"] 15 | } 16 | ] 17 | } 18 | }, 19 | "has_the_recipe": { 20 | "trigger": "minecraft:recipe_unlocked", 21 | "conditions": { 22 | "recipe": "culinaire:crafting/milk_chocolate_bar" 23 | } 24 | } 25 | }, 26 | "requirements": [ 27 | [ 28 | "has_chocolate_bottle", 29 | "has_the_recipe" 30 | ] 31 | ] 32 | } -------------------------------------------------------------------------------- /src/main/resources/data/culinaire/advancements/crafting/milk_chocolate_bottle.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:recipes/root", 3 | "rewards": { 4 | "recipes": [ 5 | "culinaire:crafting/milk_chocolate_bottle" 6 | ] 7 | }, 8 | "criteria": { 9 | "has_cocoa_beans": { 10 | "trigger": "minecraft:inventory_changed", 11 | "conditions": { 12 | "items": [ 13 | { 14 | "items": ["minecraft:cocoa_beans"] 15 | } 16 | ] 17 | } 18 | }, 19 | "has_sugar": { 20 | "trigger": "minecraft:inventory_changed", 21 | "conditions": { 22 | "items": [ 23 | { 24 | "items": ["minecraft:sugar"] 25 | } 26 | ] 27 | } 28 | }, 29 | "has_milk_bottle": { 30 | "trigger": "minecraft:inventory_changed", 31 | "conditions": { 32 | "items": [ 33 | { 34 | "items": ["culinaire:milk_bottle"] 35 | } 36 | ] 37 | } 38 | }, 39 | "has_the_recipe": { 40 | "trigger": "minecraft:recipe_unlocked", 41 | "conditions": { 42 | "recipe": "culinaire:crafting/milk_chocolate_bottle" 43 | } 44 | } 45 | }, 46 | "requirements": [ 47 | [ 48 | "has_cocoa_beans", 49 | "has_sugar", 50 | "has_milk_bottle", 51 | "has_the_recipe" 52 | ] 53 | ] 54 | } 55 | -------------------------------------------------------------------------------- /src/main/resources/data/culinaire/advancements/crafting/milk_chocolate_pie.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:recipes/root", 3 | "rewards": { 4 | "recipes": [ 5 | "culinaire:crafting/milk_chocolate_pie" 6 | ] 7 | }, 8 | "criteria": { 9 | "has_chocolate_bottle": { 10 | "trigger": "minecraft:inventory_changed", 11 | "conditions": { 12 | "items": [ 13 | { 14 | "items": ["culinaire:milk_chocolate_bottle"] 15 | } 16 | ] 17 | } 18 | }, 19 | "has_the_recipe": { 20 | "trigger": "minecraft:recipe_unlocked", 21 | "conditions": { 22 | "recipe": "culinaire:crafting/milk_chocolate_pie" 23 | } 24 | } 25 | }, 26 | "requirements": [ 27 | [ 28 | "has_chocolate_bottle", 29 | "has_the_recipe" 30 | ] 31 | ] 32 | } -------------------------------------------------------------------------------- /src/main/resources/data/culinaire/advancements/crafting/salad.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:recipes/root", 3 | "rewards": { 4 | "recipes": [ 5 | "culinaire:crafting/salad" 6 | ] 7 | }, 8 | "criteria": { 9 | "has_lettuce": { 10 | "trigger": "minecraft:inventory_changed", 11 | "conditions": { 12 | "items": [ 13 | { 14 | "items": ["culinaire:lettuce"] 15 | } 16 | ] 17 | } 18 | }, 19 | "has_the_recipe": { 20 | "trigger": "minecraft:recipe_unlocked", 21 | "conditions": { 22 | "recipe": "culinaire:crafting/salad" 23 | } 24 | } 25 | }, 26 | "requirements": [ 27 | [ 28 | "has_lettuce", 29 | "has_the_recipe" 30 | ] 31 | ] 32 | } -------------------------------------------------------------------------------- /src/main/resources/data/culinaire/advancements/crafting/sandwich.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:recipes/root", 3 | "rewards": { 4 | "recipes": [ 5 | "culinaire:crafting/sandwich" 6 | ] 7 | }, 8 | "criteria": { 9 | "has_bread": { 10 | "trigger": "minecraft:inventory_changed", 11 | "conditions": { 12 | "items": [ 13 | { 14 | "tag": "c:sandwich/bread" 15 | } 16 | ] 17 | } 18 | }, 19 | "has_the_recipe": { 20 | "trigger": "minecraft:recipe_unlocked", 21 | "conditions": { 22 | "recipe": "culinaire:crafting/sandwich" 23 | } 24 | } 25 | }, 26 | "requirements": [ 27 | [ 28 | "has_bread", 29 | "has_the_recipe" 30 | ] 31 | ] 32 | } -------------------------------------------------------------------------------- /src/main/resources/data/culinaire/advancements/crafting/sweet_berry_pie.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:recipes/root", 3 | "rewards": { 4 | "recipes": [ 5 | "culinaire:crafting/sweet_berry_pie" 6 | ] 7 | }, 8 | "criteria": { 9 | "has_sweet_berries": { 10 | "trigger": "minecraft:inventory_changed", 11 | "conditions": { 12 | "items": [ 13 | { 14 | "items": ["minecraft:sweet_berries"] 15 | } 16 | ] 17 | } 18 | }, 19 | "has_the_recipe": { 20 | "trigger": "minecraft:recipe_unlocked", 21 | "conditions": { 22 | "recipe": "culinaire:crafting/sweet_berry_pie" 23 | } 24 | } 25 | }, 26 | "requirements": [ 27 | [ 28 | "has_sweet_berries", 29 | "has_the_recipe" 30 | ] 31 | ] 32 | } -------------------------------------------------------------------------------- /src/main/resources/data/culinaire/advancements/crafting/tea_bag.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:recipes/root", 3 | "rewards": { 4 | "recipes": [ 5 | "culinaire:crafting/tea_bag" 6 | ] 7 | }, 8 | "criteria": { 9 | "has_paper": { 10 | "trigger": "minecraft:inventory_changed", 11 | "conditions": { 12 | "items": [ 13 | { 14 | "items": ["minecraft:paper"] 15 | } 16 | ] 17 | } 18 | }, 19 | "has_the_recipe": { 20 | "trigger": "minecraft:recipe_unlocked", 21 | "conditions": { 22 | "recipe": "culinaire:crafting/tea_bag" 23 | } 24 | } 25 | }, 26 | "requirements": [ 27 | [ 28 | "has_paper", 29 | "has_the_recipe" 30 | ] 31 | ] 32 | } -------------------------------------------------------------------------------- /src/main/resources/data/culinaire/advancements/crafting/white_chocolate_bar.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:recipes/root", 3 | "rewards": { 4 | "recipes": [ 5 | "culinaire:crafting/white_chocolate_bar" 6 | ] 7 | }, 8 | "criteria": { 9 | "has_chocolate_bottle": { 10 | "trigger": "minecraft:inventory_changed", 11 | "conditions": { 12 | "items": [ 13 | { 14 | "items": ["culinaire:white_chocolate_bottle"] 15 | } 16 | ] 17 | } 18 | }, 19 | "has_the_recipe": { 20 | "trigger": "minecraft:recipe_unlocked", 21 | "conditions": { 22 | "recipe": "culinaire:crafting/white_chocolate_bar" 23 | } 24 | } 25 | }, 26 | "requirements": [ 27 | [ 28 | "has_chocolate_bottle", 29 | "has_the_recipe" 30 | ] 31 | ] 32 | } -------------------------------------------------------------------------------- /src/main/resources/data/culinaire/advancements/crafting/white_chocolate_bottle.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:recipes/root", 3 | "rewards": { 4 | "recipes": [ 5 | "culinaire:crafting/white_chocolate_bottle" 6 | ] 7 | }, 8 | "criteria": { 9 | "has_sugar": { 10 | "trigger": "minecraft:inventory_changed", 11 | "conditions": { 12 | "items": [ 13 | { 14 | "items": ["minecraft:sugar"] 15 | } 16 | ] 17 | } 18 | }, 19 | "has_milk_bottle": { 20 | "trigger": "minecraft:inventory_changed", 21 | "conditions": { 22 | "items": [ 23 | { 24 | "items": ["culinaire:milk_bottle"] 25 | } 26 | ] 27 | } 28 | }, 29 | "has_the_recipe": { 30 | "trigger": "minecraft:recipe_unlocked", 31 | "conditions": { 32 | "recipe": "culinaire:crafting/white_chocolate_bottle" 33 | } 34 | } 35 | }, 36 | "requirements": [ 37 | [ 38 | "has_sugar", 39 | "has_milk_bottle", 40 | "has_the_recipe" 41 | ] 42 | ] 43 | } 44 | -------------------------------------------------------------------------------- /src/main/resources/data/culinaire/advancements/crafting/white_chocolate_pie.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:recipes/root", 3 | "rewards": { 4 | "recipes": [ 5 | "culinaire:crafting/white_chocolate_pie" 6 | ] 7 | }, 8 | "criteria": { 9 | "has_chocolate_bottle": { 10 | "trigger": "minecraft:inventory_changed", 11 | "conditions": { 12 | "items": [ 13 | { 14 | "items": ["culinaire:white_chocolate_bottle"] 15 | } 16 | ] 17 | } 18 | }, 19 | "has_the_recipe": { 20 | "trigger": "minecraft:recipe_unlocked", 21 | "conditions": { 22 | "recipe": "culinaire:crafting/white_chocolate_pie" 23 | } 24 | } 25 | }, 26 | "requirements": [ 27 | [ 28 | "has_chocolate_bottle", 29 | "has_the_recipe" 30 | ] 31 | ] 32 | } -------------------------------------------------------------------------------- /src/main/resources/data/culinaire/loot_tables/blocks/cheese_cauldron.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:block", 3 | "pools": [ 4 | { 5 | "rolls": 1, 6 | "entries": [ 7 | { 8 | "type": "minecraft:item", 9 | "name": "minecraft:cauldron" 10 | } 11 | ], 12 | "conditions": [ 13 | { 14 | "condition": "minecraft:survives_explosion" 15 | } 16 | ] 17 | }, 18 | { 19 | "rolls": 1, 20 | "entries": [ 21 | { 22 | "type": "minecraft:item", 23 | "name": "culinaire:cheese" 24 | } 25 | ], 26 | "functions": [ 27 | { 28 | "function": "minecraft:set_count", 29 | "count": 1 30 | }, 31 | { 32 | "function": "minecraft:set_count", 33 | "count": 2, 34 | "conditions": [ 35 | { 36 | "condition": "minecraft:block_state_property", 37 | "block": "culinaire:cheese_cauldron", 38 | "properties": { 39 | "level": "2" 40 | } 41 | } 42 | ] 43 | }, 44 | { 45 | "function": "minecraft:set_count", 46 | "count": 3, 47 | "conditions": [ 48 | { 49 | "condition": "minecraft:block_state_property", 50 | "block": "culinaire:cheese_cauldron", 51 | "properties": { 52 | "level": "3" 53 | } 54 | } 55 | ] 56 | } 57 | ] 58 | } 59 | ] 60 | } -------------------------------------------------------------------------------- /src/main/resources/data/culinaire/loot_tables/blocks/cheese_wheel.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:block" 3 | } -------------------------------------------------------------------------------- /src/main/resources/data/culinaire/loot_tables/blocks/kettle.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:block", 3 | "pools": [ 4 | { 5 | "rolls": 1, 6 | "entries": [ 7 | { 8 | "type": "minecraft:item", 9 | "name": "culinaire:kettle" 10 | } 11 | ], 12 | "conditions": [ 13 | { 14 | "condition": "minecraft:survives_explosion" 15 | } 16 | ] 17 | } 18 | ] 19 | } -------------------------------------------------------------------------------- /src/main/resources/data/culinaire/loot_tables/blocks/lettuce.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:block", 3 | "pools": [ 4 | { 5 | "rolls": 1, 6 | "entries": [ 7 | { 8 | "type": "minecraft:alternatives", 9 | "children": [ 10 | { 11 | "type": "minecraft:item", 12 | "conditions": [ 13 | { 14 | "condition": "minecraft:block_state_property", 15 | "block": "culinaire:lettuce", 16 | "properties": { 17 | "age": "3" 18 | } 19 | } 20 | ], 21 | "name": "culinaire:lettuce" 22 | }, 23 | { 24 | "type": "minecraft:item", 25 | "name": "culinaire:lettuce_seeds" 26 | } 27 | ] 28 | } 29 | ] 30 | }, 31 | { 32 | "rolls": 1, 33 | "entries": [ 34 | { 35 | "type": "minecraft:item", 36 | "functions": [ 37 | { 38 | "function": "minecraft:apply_bonus", 39 | "enchantment": "minecraft:fortune", 40 | "formula": "minecraft:binomial_with_bonus_count", 41 | "parameters": { 42 | "extra": 3, 43 | "probability": 0.5714286 44 | } 45 | } 46 | ], 47 | "name": "culinaire:lettuce_seeds" 48 | } 49 | ], 50 | "conditions": [ 51 | { 52 | "condition": "minecraft:block_state_property", 53 | "block": "culinaire:lettuce", 54 | "properties": { 55 | "age": "3" 56 | } 57 | } 58 | ] 59 | } 60 | ], 61 | "functions": [ 62 | { 63 | "function": "minecraft:explosion_decay" 64 | } 65 | ] 66 | } -------------------------------------------------------------------------------- /src/main/resources/data/culinaire/loot_tables/blocks/milk_cauldron.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:block", 3 | "pools": [ 4 | { 5 | "rolls": 1, 6 | "entries": [ 7 | { 8 | "type": "minecraft:item", 9 | "name": "minecraft:cauldron" 10 | } 11 | ], 12 | "conditions": [ 13 | { 14 | "condition": "minecraft:survives_explosion" 15 | } 16 | ] 17 | } 18 | ] 19 | } -------------------------------------------------------------------------------- /src/main/resources/data/culinaire/loot_tables/blocks/tomatoes.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:block", 3 | "pools": [ 4 | { 5 | "rolls": 1, 6 | "entries": [ 7 | { 8 | "type": "minecraft:item", 9 | "name": "culinaire:tomato" 10 | } 11 | ], 12 | "conditions": [ 13 | { 14 | "condition": "minecraft:block_state_property", 15 | "block": "culinaire:tomatoes", 16 | "properties": { 17 | "half": "lower" 18 | } 19 | } 20 | ] 21 | }, 22 | { 23 | "rolls": 1.0, 24 | "entries": [ 25 | { 26 | "type": "minecraft:item", 27 | "name": "culinaire:tomato", 28 | "functions": [ 29 | { 30 | "function": "minecraft:apply_bonus", 31 | "enchantment": "minecraft:fortune", 32 | "formula": "minecraft:binomial_with_bonus_count", 33 | "parameters": { 34 | "extra": 3, 35 | "probability": 0.5714286 36 | } 37 | } 38 | ] 39 | } 40 | ], 41 | "conditions": [ 42 | { 43 | "condition": "minecraft:block_state_property", 44 | "block": "culinaire:tomatoes", 45 | "properties": { 46 | "age": "3", 47 | "half": "lower" 48 | } 49 | } 50 | ] 51 | } 52 | ], 53 | "functions": [ 54 | { 55 | "function": "minecraft:explosion_decay" 56 | } 57 | ] 58 | } -------------------------------------------------------------------------------- /src/main/resources/data/culinaire/recipes/crafting/apple_pie.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shapeless", 3 | "ingredients": [ 4 | { 5 | "item": "minecraft:apple" 6 | }, 7 | { 8 | "item": "minecraft:apple" 9 | }, 10 | { 11 | "item": "minecraft:sugar" 12 | }, 13 | { 14 | "item": "minecraft:egg" 15 | } 16 | ], 17 | "result": { 18 | "item": "culinaire:apple_pie" 19 | } 20 | } -------------------------------------------------------------------------------- /src/main/resources/data/culinaire/recipes/crafting/cheese_wheel.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shaped", 3 | "pattern": [ 4 | "###", 5 | "###" 6 | ], 7 | "key": { 8 | "#": { 9 | "item": "culinaire:cheese" 10 | } 11 | }, 12 | "result": { 13 | "item": "culinaire:cheese_wheel" 14 | } 15 | } -------------------------------------------------------------------------------- /src/main/resources/data/culinaire/recipes/crafting/chouquette.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shapeless", 3 | "ingredients": [ 4 | { 5 | "item": "minecraft:sugar" 6 | }, 7 | { 8 | "item": "minecraft:wheat" 9 | } 10 | ], 11 | "result": { 12 | "item": "culinaire:chouquette", 13 | "count": 2 14 | } 15 | } -------------------------------------------------------------------------------- /src/main/resources/data/culinaire/recipes/crafting/dark_chocolate_bar.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shapeless", 3 | "group": "culinaire:chocolate_bars", 4 | "ingredients": [ 5 | { 6 | "item": "culinaire:dark_chocolate_bottle" 7 | } 8 | ], 9 | "result": { 10 | "item": "culinaire:dark_chocolate_bar", 11 | "count": 2 12 | } 13 | } -------------------------------------------------------------------------------- /src/main/resources/data/culinaire/recipes/crafting/dark_chocolate_bottle.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shapeless", 3 | "ingredients": [ 4 | { 5 | "item": "minecraft:glass_bottle" 6 | }, 7 | { 8 | "item": "minecraft:sugar" 9 | }, 10 | { 11 | "item": "minecraft:cocoa_beans" 12 | } 13 | ], 14 | "result": { 15 | "item": "culinaire:dark_chocolate_bottle" 16 | } 17 | } -------------------------------------------------------------------------------- /src/main/resources/data/culinaire/recipes/crafting/dark_chocolate_pie.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shapeless", 3 | "ingredients": [ 4 | { 5 | "item": "culinaire:dark_chocolate_bottle" 6 | }, 7 | { 8 | "item": "culinaire:dark_chocolate_bottle" 9 | }, 10 | { 11 | "item": "minecraft:sugar" 12 | }, 13 | { 14 | "item": "minecraft:egg" 15 | } 16 | ], 17 | "result": { 18 | "item": "culinaire:dark_chocolate_pie" 19 | } 20 | } -------------------------------------------------------------------------------- /src/main/resources/data/culinaire/recipes/crafting/kettle.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shaped", 3 | "pattern": [ 4 | " T ", 5 | "X X", 6 | "XXX" 7 | ], 8 | "key": { 9 | "X": { 10 | "item": "minecraft:iron_ingot" 11 | }, 12 | "T": { 13 | "item": "minecraft:iron_trapdoor" 14 | } 15 | }, 16 | "result": { 17 | "item": "culinaire:kettle" 18 | } 19 | } -------------------------------------------------------------------------------- /src/main/resources/data/culinaire/recipes/crafting/marshmallow.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shaped", 3 | "pattern": [ 4 | "#" 5 | ], 6 | "key": { 7 | "#": { 8 | "item": "minecraft:sugar" 9 | } 10 | }, 11 | "result": { 12 | "item": "culinaire:marshmallow" 13 | } 14 | } -------------------------------------------------------------------------------- /src/main/resources/data/culinaire/recipes/crafting/marshmallow_on_a_stick.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shaped", 3 | "pattern": [ 4 | " #", 5 | "I " 6 | ], 7 | "key": { 8 | "I": { 9 | "item": "minecraft:stick" 10 | }, 11 | "#": { 12 | "item": "culinaire:marshmallow" 13 | } 14 | }, 15 | "result": { 16 | "item": "culinaire:marshmallow_on_a_stick" 17 | } 18 | } -------------------------------------------------------------------------------- /src/main/resources/data/culinaire/recipes/crafting/mashed_potatoes.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shapeless", 3 | "ingredients": [ 4 | { 5 | "item": "minecraft:baked_potato" 6 | }, 7 | { 8 | "item": "minecraft:baked_potato" 9 | }, 10 | { 11 | "item": "minecraft:bowl" 12 | } 13 | ], 14 | "result": { 15 | "item": "culinaire:mashed_potatoes" 16 | } 17 | } -------------------------------------------------------------------------------- /src/main/resources/data/culinaire/recipes/crafting/milk_chocolate_bar.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shapeless", 3 | "group": "culinaire:chocolate_bars", 4 | "ingredients": [ 5 | { 6 | "item": "culinaire:milk_chocolate_bottle" 7 | } 8 | ], 9 | "result": { 10 | "item": "culinaire:milk_chocolate_bar", 11 | "count": 2 12 | } 13 | } -------------------------------------------------------------------------------- /src/main/resources/data/culinaire/recipes/crafting/milk_chocolate_bottle.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shapeless", 3 | "ingredients": [ 4 | { 5 | "item": "culinaire:milk_bottle" 6 | }, 7 | { 8 | "item": "minecraft:sugar" 9 | }, 10 | { 11 | "item": "minecraft:cocoa_beans" 12 | } 13 | ], 14 | "result": { 15 | "item": "culinaire:milk_chocolate_bottle" 16 | } 17 | } -------------------------------------------------------------------------------- /src/main/resources/data/culinaire/recipes/crafting/milk_chocolate_pie.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shapeless", 3 | "ingredients": [ 4 | { 5 | "item": "culinaire:milk_chocolate_bottle" 6 | }, 7 | { 8 | "item": "culinaire:milk_chocolate_bottle" 9 | }, 10 | { 11 | "item": "minecraft:sugar" 12 | }, 13 | { 14 | "item": "minecraft:egg" 15 | } 16 | ], 17 | "result": { 18 | "item": "culinaire:milk_chocolate_pie" 19 | } 20 | } -------------------------------------------------------------------------------- /src/main/resources/data/culinaire/recipes/crafting/salad.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shapeless", 3 | "ingredients": [ 4 | { 5 | "item": "culinaire:lettuce" 6 | }, 7 | { 8 | "item": "culinaire:tomato" 9 | }, 10 | { 11 | "item": "culinaire:cheese" 12 | }, 13 | { 14 | "item": "minecraft:bowl" 15 | } 16 | ], 17 | "result": { 18 | "item": "culinaire:salad" 19 | } 20 | } -------------------------------------------------------------------------------- /src/main/resources/data/culinaire/recipes/crafting/sandwich.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "culinaire:crafting/sandwich", 3 | "hunger_modifier_base": 0.5, 4 | "hunger_modifier_boosted": 1.0, 5 | "saturation_modifier_base": 0.2, 6 | "saturation_modifier_boosted": 0.5, 7 | "bread": { 8 | "tag": "c:sandwich/bread" 9 | }, 10 | "ingredient_blacklist": { 11 | "tag": "c:sandwich/blacklist" 12 | }, 13 | "result": "culinaire:sandwich", 14 | "ingredient_associations": [ 15 | { 16 | "ingredient_a": { 17 | "item": "minecraft:apple" 18 | }, 19 | "ingredient_b": { 20 | "item": "culinaire:milk_chocolate_bar" 21 | } 22 | }, 23 | { 24 | "ingredient_a": { 25 | "item": "minecraft:cooked_chicken" 26 | }, 27 | "ingredient_b": { 28 | "item": "minecraft:honey_bottle" 29 | } 30 | }, 31 | { 32 | "ingredient_a": { 33 | "item": "minecraft:cooked_beef" 34 | }, 35 | "ingredient_b": { 36 | "item": "culinaire:cheese" 37 | } 38 | }, 39 | { 40 | "ingredient_a": { 41 | "item": "minecraft:golden_apple" 42 | }, 43 | "ingredient_b": { 44 | "item": "minecraft:dried_kelp" 45 | } 46 | }, 47 | { 48 | "ingredient_a": { 49 | "item": "culinaire:marshmallow" 50 | }, 51 | "ingredient_b": [ 52 | { 53 | "item": "culinaire:milk_chocolate_bar" 54 | }, 55 | { 56 | "item": "minecraft:honey_bottle" 57 | } 58 | ] 59 | }, 60 | { 61 | "ingredient_a": { 62 | "item": "minecraft:rabbit" 63 | }, 64 | "ingredient_b": { 65 | "item": "minecraft:beetroot" 66 | } 67 | }, 68 | { 69 | "ingredient_a": { 70 | "item": "minecraft:spider_eye" 71 | }, 72 | "ingredient_b": { 73 | "item": "culinaire:dark_chocolate_bar" 74 | } 75 | }, 76 | { 77 | "ingredient_a": { 78 | "item": "culinaire:tomato" 79 | }, 80 | "ingredient_b": [ 81 | { 82 | "item": "culinaire:cheese" 83 | }, 84 | { 85 | "item": "culinaire:lettuce" 86 | }, 87 | { 88 | "item": "minecraft:cooked_chicken" 89 | } 90 | ] 91 | } 92 | ] 93 | } -------------------------------------------------------------------------------- /src/main/resources/data/culinaire/recipes/crafting/sweet_berry_pie.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shapeless", 3 | "ingredients": [ 4 | { 5 | "item": "minecraft:sweet_berries" 6 | }, 7 | { 8 | "item": "minecraft:sweet_berries" 9 | }, 10 | { 11 | "item": "minecraft:sweet_berries" 12 | }, 13 | { 14 | "item": "minecraft:sugar" 15 | }, 16 | { 17 | "item": "minecraft:egg" 18 | } 19 | ], 20 | "result": { 21 | "item": "culinaire:sweet_berry_pie" 22 | } 23 | } -------------------------------------------------------------------------------- /src/main/resources/data/culinaire/recipes/crafting/tea_bag.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "culinaire:tea_bag_making" 3 | } -------------------------------------------------------------------------------- /src/main/resources/data/culinaire/recipes/crafting/white_chocolate_bar.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shapeless", 3 | "group": "culinaire:chocolate_bars", 4 | "ingredients": [ 5 | { 6 | "item": "culinaire:white_chocolate_bottle" 7 | } 8 | ], 9 | "result": { 10 | "item": "culinaire:white_chocolate_bar", 11 | "count": 2 12 | } 13 | } -------------------------------------------------------------------------------- /src/main/resources/data/culinaire/recipes/crafting/white_chocolate_bottle.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shapeless", 3 | "ingredients": [ 4 | { 5 | "item": "culinaire:milk_bottle" 6 | }, 7 | { 8 | "item": "minecraft:sugar" 9 | } 10 | ], 11 | "result": { 12 | "item": "culinaire:white_chocolate_bottle" 13 | } 14 | } -------------------------------------------------------------------------------- /src/main/resources/data/culinaire/recipes/crafting/white_chocolate_pie.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shapeless", 3 | "ingredients": [ 4 | { 5 | "item": "culinaire:white_chocolate_bottle" 6 | }, 7 | { 8 | "item": "culinaire:white_chocolate_bottle" 9 | }, 10 | { 11 | "item": "minecraft:sugar" 12 | }, 13 | { 14 | "item": "minecraft:egg" 15 | } 16 | ], 17 | "result": { 18 | "item": "culinaire:white_chocolate_pie" 19 | } 20 | } -------------------------------------------------------------------------------- /src/main/resources/data/culinaire/tags/blocks/kettle_hot_blocks.json: -------------------------------------------------------------------------------- 1 | { 2 | "replace": false, 3 | "values": [ 4 | "#minecraft:campfires", 5 | "#minecraft:fire", 6 | "minecraft:magma_block", 7 | "minecraft:lava", 8 | "minecraft:lava_cauldron" 9 | ] 10 | } -------------------------------------------------------------------------------- /src/main/resources/data/minecraft/tags/blocks/cauldrons.json: -------------------------------------------------------------------------------- 1 | { 2 | "replace": false, 3 | "values": [ 4 | "culinaire:milk_cauldron", 5 | "culinaire:cheese_cauldron", 6 | "culinaire:dark_chocolate_cauldron", 7 | "culinaire:milk_chocolate_cauldron", 8 | "culinaire:white_chocolate_cauldron" 9 | ] 10 | } -------------------------------------------------------------------------------- /src/main/resources/data/minecraft/tags/blocks/crops.json: -------------------------------------------------------------------------------- 1 | { 2 | "replace": false, 3 | "values": [ 4 | "culinaire:lettuce", 5 | "culinaire:tomatoes" 6 | ] 7 | } -------------------------------------------------------------------------------- /src/main/resources/data/minecraft/tags/blocks/mineable/axe.json: -------------------------------------------------------------------------------- 1 | { 2 | "replace": false, 3 | "values": [ 4 | "culinaire:lettuce", 5 | "culinaire:tomatoes" 6 | ] 7 | } -------------------------------------------------------------------------------- /src/main/resources/data/minecraft/tags/blocks/mineable/pickaxe.json: -------------------------------------------------------------------------------- 1 | { 2 | "replace": false, 3 | "values": [ 4 | "culinaire:kettle" 5 | ] 6 | } -------------------------------------------------------------------------------- /src/main/resources/fabric.mod.json: -------------------------------------------------------------------------------- 1 | { 2 | "schemaVersion": 1, 3 | "name": "Culinaire", 4 | "id": "culinaire", 5 | "version": "${version}", 6 | "icon": "assets/culinaire/textures/logo.png", 7 | "authors": [ 8 | "Hugman", 9 | "YanisBft" 10 | ], 11 | "contributors": [ 12 | "Plantkillable", 13 | "Cydian", 14 | "Wintrius" 15 | ], 16 | "contact": { 17 | "homepage": "https://dawnteammc.github.io/culinaire", 18 | "sources": "https://github.com/DawnTeamMC/Culinaire", 19 | "issues": "https://github.com/DawnTeamMC/Culinaire/issues" 20 | }, 21 | "environment": "*", 22 | "entrypoints": { 23 | "main": [ 24 | "com.hugman.culinaire.Culinaire" 25 | ], 26 | "client": [ 27 | "com.hugman.culinaire.CulinaireClient" 28 | ], 29 | "modmenu": [ 30 | "com.hugman.culinaire.config.CulinaireModMenuIntegration" 31 | ], 32 | "rei_client": [ 33 | "com.hugman.culinaire.compat.rei.CulinaireREIPlugin" 34 | ] 35 | }, 36 | "mixins": [ 37 | "culinaire.mixins.json" 38 | ], 39 | "depends": { 40 | "minecraft": "1.20.x", 41 | "dawn": ">=5.0.0", 42 | "fabric": "*", 43 | "cloth-config": "*" 44 | }, 45 | "suggests": { 46 | "roughlyenoughitems": "*", 47 | "appleskin": "*" 48 | }, 49 | "custom": { 50 | "modmenu": { 51 | "links": { 52 | "modmenu.twitter": "https://twitter.com/DawnTeamMC", 53 | "modmenu.discord": "https://discord.gg/8ksTVJu", 54 | "modmenu.curseforge": "https://www.curseforge.com/minecraft/mc-mods/culinaire", 55 | "modmenu.modrinth": "https://modrinth.com/mod/culinaire", 56 | "modmenu.github_releases": "https://github.com/DawnTeamMC/Culinaire/releases/", 57 | "modmenu.crowdin": "https://crowdin.com/project/dawnteam", 58 | "modmenu.wiki": "https://github.com/DawnTeamMC/Culinaire/wiki/" 59 | } 60 | }, 61 | "modupdater": { 62 | "strategy": "curseforge", 63 | "projectID": 390675 64 | }, 65 | "mc-publish": { 66 | "curseforge": 390675, 67 | "modrinth": "MO1ODvmm", 68 | "loaders": [ 69 | "fabric", 70 | "quilt" 71 | ], 72 | "dependencies": [ 73 | "roughlyenoughitems(optional){curseforge:roughly-enough-items}{modrinth:rei}", 74 | "cloth-config(embedded)" 75 | ] 76 | } 77 | }, 78 | "license": "PolyForm Shield License 1.0.0" 79 | } 80 | -------------------------------------------------------------------------------- /thirdparty/NOTICE.txt: -------------------------------------------------------------------------------- 1 | Third-Party License Notice 2 | ======================================= 3 | 4 | This project contains source code based upon, or includes source code from, the following third-party 5 | projects. 6 | 7 | The complete text for each software license can be found in the directory "thirdparty/licenses". 8 | 9 | * Fabric API libraries 10 | * Copyright (c) 2016 FabricMC 11 | * License: Apache 2.0 (SPDX: Apache-2.0) 12 | * Original Source: 13 | * https://github.com/FabricMC/fabric 14 | 15 | * RoughlyEnoughItems mod 16 | * Copyright (c) 2018, 2019, 2020, 2021, 2022, 2023 shedaniel 17 | * License: MIT (SPDX: MIT) 18 | * Original Source: 19 | * https://github.com/shedaniel/RoughlyEnoughItems 20 | 21 | This project also contains assets from the following third-party members: 22 | * Plantkillable 23 | * All files from the following directories: 24 | * src/main/resources/assets/culinaire/textures/block/cauldron 25 | * src/main/resources/assets/culinaire/textures/block/cheese_wheel 26 | * src/main/resources/assets/culinaire/textures/block/kettle 27 | * src/main/resources/assets/culinaire/textures/block/lettuce 28 | * src/main/resources/assets/culinaire/textures/block/tomatoes 29 | * src/main/resources/assets/culinaire/textures/item/marshmallow_on_a_stick 30 | * And the following files: 31 | * src/main/resources/assets/culinaire/textures/item/apple_pie.png 32 | * src/main/resources/assets/culinaire/textures/item/cheese.png 33 | * src/main/resources/assets/culinaire/textures/item/cheese_wheel.png 34 | * src/main/resources/assets/culinaire/textures/item/kettle.png 35 | * src/main/resources/assets/culinaire/textures/item/lettuce.png 36 | * src/main/resources/assets/culinaire/textures/item/lettuce_seeds.png 37 | * src/main/resources/assets/culinaire/textures/item/marshmallow.png 38 | * src/main/resources/assets/culinaire/textures/item/mashed_potatoes.png 39 | * src/main/resources/assets/culinaire/textures/item/salad.png 40 | * src/main/resources/assets/culinaire/textures/item/sandwich.png 41 | * src/main/resources/assets/culinaire/textures/item/sweet_berry_pie.png 42 | * src/main/resources/assets/culinaire/textures/item/tea_bag.png 43 | * src/main/resources/assets/culinaire/textures/item/tomato.png 44 | * src/main/resources/assets/culinaire/textures/item/tomato.png 45 | * src/main/resources/assets/culinaire/textures/mob_effect/foresight.png 46 | * src/main/resources/assets/culinaire/textures/mob_effect/fulfillment.png 47 | * src/main/resources/assets/culinaire/textures/mob_effect/guard.png 48 | * src/main/resources/assets/culinaire/textures/mob_effect/poison_resistance.png 49 | * cydian 50 | * All files from the following directories: 51 | * src/main/resources/assets/culinaire/sounds/block/kettle 52 | * src/main/resources/assets/culinaire/sounds/item/tea_bottle/fill -------------------------------------------------------------------------------- /thirdparty/licenses/LICENSE-MIT.md: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | ===================== 3 | 4 | Copyright © `` `` 5 | 6 | Permission is hereby granted, free of charge, to any person 7 | obtaining a copy of this software and associated documentation 8 | files (the “Software”), to deal in the Software without 9 | restriction, including without limitation the rights to use, 10 | copy, modify, merge, publish, distribute, sublicense, and/or sell 11 | copies of the Software, and to permit persons to whom the 12 | Software is furnished to do so, subject to the following 13 | conditions: 14 | 15 | The above copyright notice and this permission notice shall be 16 | included in all copies or substantial portions of the Software. 17 | 18 | THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, 19 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 20 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 21 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 22 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 23 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 24 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 25 | OTHER DEALINGS IN THE SOFTWARE. 26 | --------------------------------------------------------------------------------