From b567e830df2cd4251a9976ea1c0d82c49e566d29 Mon Sep 17 00:00:00 2001 From: panda Date: Sun, 14 Jul 2024 20:24:04 +0300 Subject: [PATCH] Initial Commit --- .gitignore | 118 ++++++++ LICENSE | 21 ++ build.gradle | 51 ++++ common/build.gradle | 56 ++++ .../emiletsdocompat/Emi_letsdo_compat.java | 286 ++++++++++++++++++ .../bakery/BakingStationRecipe.java | 44 +++ .../bakery/CraftingBowlRecipe.java | 44 +++ .../bakery/PotCookingRecipe.java | 44 +++ .../emiletsdocompat/bakery/StoveRecipe.java | 44 +++ .../beachparty/MiniFridgeMixingRecipe.java | 44 +++ .../beachparty/TikiBarMixingRecipe.java | 44 +++ .../brewery/BrewingRecipe.java | 44 +++ .../emiletsdocompat/brewery/DryingRecipe.java | 44 +++ .../candlelight/PanCookingRecipe.java | 44 +++ .../candlelight/PotCookingRecipe.java | 44 +++ .../herbalbrews/CauldronBrewingRecipe.java | 44 +++ .../herbalbrews/TeaKettleBrewingRecipe.java | 44 +++ .../meadow/CheeseFormRecipe.java | 44 +++ .../meadow/CookingCauldronRecipe.java | 44 +++ .../emiletsdocompat/meadow/FondueRecipe.java | 44 +++ .../meadow/WoodcuttingRecipe.java | 44 +++ .../emiletsdocompat/utils/DisplayUtils.java | 47 +++ .../vinery/ApplePressingRecipe.java | 44 +++ .../vinery/FermentationRecipe.java | 44 +++ .../assets/emi_letsdo_compat/lang/en_us.json | 20 ++ .../emi_letsdo_compat-common.mixins.json | 13 + fabric/build.gradle | 93 ++++++ .../fabric/Emi_letsdo_compatFabric.java | 9 + .../resources/emi_letsdo_compat.mixins.json | 13 + fabric/src/main/resources/fabric.mod.json | 28 ++ forge/build.gradle | 101 +++++++ forge/gradle.properties | 1 + .../forge/Emi_letsdo_compatForge.java | 14 + forge/src/main/resources/META-INF/mods.toml | 66 ++++ .../resources/emi_letsdo_compat.mixins.json | 13 + forge/src/main/resources/pack.mcmeta | 7 + gradle.properties | 16 + gradle/wrapper/gradle-wrapper.properties | 1 + settings.gradle | 12 + 39 files changed, 1778 insertions(+) create mode 100644 .gitignore create mode 100644 LICENSE create mode 100644 build.gradle create mode 100644 common/build.gradle create mode 100644 common/src/main/java/com/pandaismyname1/emiletsdocompat/Emi_letsdo_compat.java create mode 100644 common/src/main/java/com/pandaismyname1/emiletsdocompat/bakery/BakingStationRecipe.java create mode 100644 common/src/main/java/com/pandaismyname1/emiletsdocompat/bakery/CraftingBowlRecipe.java create mode 100644 common/src/main/java/com/pandaismyname1/emiletsdocompat/bakery/PotCookingRecipe.java create mode 100644 common/src/main/java/com/pandaismyname1/emiletsdocompat/bakery/StoveRecipe.java create mode 100644 common/src/main/java/com/pandaismyname1/emiletsdocompat/beachparty/MiniFridgeMixingRecipe.java create mode 100644 common/src/main/java/com/pandaismyname1/emiletsdocompat/beachparty/TikiBarMixingRecipe.java create mode 100644 common/src/main/java/com/pandaismyname1/emiletsdocompat/brewery/BrewingRecipe.java create mode 100644 common/src/main/java/com/pandaismyname1/emiletsdocompat/brewery/DryingRecipe.java create mode 100644 common/src/main/java/com/pandaismyname1/emiletsdocompat/candlelight/PanCookingRecipe.java create mode 100644 common/src/main/java/com/pandaismyname1/emiletsdocompat/candlelight/PotCookingRecipe.java create mode 100644 common/src/main/java/com/pandaismyname1/emiletsdocompat/herbalbrews/CauldronBrewingRecipe.java create mode 100644 common/src/main/java/com/pandaismyname1/emiletsdocompat/herbalbrews/TeaKettleBrewingRecipe.java create mode 100644 common/src/main/java/com/pandaismyname1/emiletsdocompat/meadow/CheeseFormRecipe.java create mode 100644 common/src/main/java/com/pandaismyname1/emiletsdocompat/meadow/CookingCauldronRecipe.java create mode 100644 common/src/main/java/com/pandaismyname1/emiletsdocompat/meadow/FondueRecipe.java create mode 100644 common/src/main/java/com/pandaismyname1/emiletsdocompat/meadow/WoodcuttingRecipe.java create mode 100644 common/src/main/java/com/pandaismyname1/emiletsdocompat/utils/DisplayUtils.java create mode 100644 common/src/main/java/com/pandaismyname1/emiletsdocompat/vinery/ApplePressingRecipe.java create mode 100644 common/src/main/java/com/pandaismyname1/emiletsdocompat/vinery/FermentationRecipe.java create mode 100644 common/src/main/resources/assets/emi_letsdo_compat/lang/en_us.json create mode 100644 common/src/main/resources/emi_letsdo_compat-common.mixins.json create mode 100644 fabric/build.gradle create mode 100644 fabric/src/main/java/com/pandaismyname1/emiletsdocompat/fabric/Emi_letsdo_compatFabric.java create mode 100644 fabric/src/main/resources/emi_letsdo_compat.mixins.json create mode 100644 fabric/src/main/resources/fabric.mod.json create mode 100644 forge/build.gradle create mode 100644 forge/gradle.properties create mode 100644 forge/src/main/java/com/pandaismyname1/emiletsdocompat/forge/Emi_letsdo_compatForge.java create mode 100644 forge/src/main/resources/META-INF/mods.toml create mode 100644 forge/src/main/resources/emi_letsdo_compat.mixins.json create mode 100644 forge/src/main/resources/pack.mcmeta create mode 100644 gradle.properties create mode 100644 gradle/wrapper/gradle-wrapper.properties create mode 100644 settings.gradle diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3c37caf --- /dev/null +++ b/.gitignore @@ -0,0 +1,118 @@ +# User-specific stuff +.idea/ + +*.iml +*.ipr +*.iws + +# IntelliJ +out/ +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Compiled class file +*.class + +# Log file +*.log + +# BlueJ files +*.ctxt + +# Package Files # +*.jar +*.war +*.nar +*.ear +*.zip +*.tar.gz +*.rar + +# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml +hs_err_pid* + +*~ + +# temporary files which can be created if a process still has a handle open of a deleted file +.fuse_hidden* + +# KDE directory preferences +.directory + +# Linux trash folder which might appear on any partition or disk +.Trash-* + +# .nfs files are created when an open file is removed but is still being accessed +.nfs* + +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +# Windows thumbnail cache files +Thumbs.db +Thumbs.db:encryptable +ehthumbs.db +ehthumbs_vista.db + +# Dump file +*.stackdump + +# Folder config file +[Dd]esktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Windows Installer files +*.cab +*.msi +*.msix +*.msm +*.msp + +# Windows shortcuts +*.lnk + +.gradle +build/ + +# Ignore Gradle GUI config +gradle-app.setting + +# Cache of project +.gradletasknamecache + +**/build/ + +# Common working directory +run/ + +# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored) +!gradle-wrapper.jar diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..c986429 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2024 + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/build.gradle b/build.gradle new file mode 100644 index 0000000..501e554 --- /dev/null +++ b/build.gradle @@ -0,0 +1,51 @@ +plugins { + id "architectury-plugin" version "3.4-SNAPSHOT" + id "dev.architectury.loom" version "1.6-SNAPSHOT" apply false +} + +architectury { + minecraft = rootProject.minecraft_version +} + +subprojects { + apply plugin: "dev.architectury.loom" + + loom { + silentMojangMappingsLicense() + } + + dependencies { + minecraft "com.mojang:minecraft:${rootProject.minecraft_version}" + // The following line declares the mojmap mappings, you may use other mappings as well + mappings loom.officialMojangMappings() + // The following line declares the yarn mappings you may select this one as well. + // mappings "net.fabricmc:yarn:@YARN_MAPPINGS@:v2" + } +} + +allprojects { + apply plugin: "java" + apply plugin: "architectury-plugin" + apply plugin: "maven-publish" + + archivesBaseName = rootProject.archives_base_name + version = rootProject.mod_version + group = rootProject.maven_group + + repositories { + // Add repositories to retrieve artifacts from in here. + // You should only use this when depending on other mods because + // Loom adds the essential maven repositories to download Minecraft and libraries from automatically. + // See https://docs.gradle.org/current/userguide/declaring_repositories.html + // for more information about repositories. + } + + tasks.withType(JavaCompile) { + options.encoding = "UTF-8" + options.release.set(17) + } + + java { + withSourcesJar() + } +} diff --git a/common/build.gradle b/common/build.gradle new file mode 100644 index 0000000..04dc8dc --- /dev/null +++ b/common/build.gradle @@ -0,0 +1,56 @@ +architectury { + common(rootProject.enabled_platforms.split(",")) +} + +dependencies { + repositories { + maven { + name = "TerraformersMC" + url = "https://maven.terraformersmc.com/" + } + maven { + url "https://cursemaven.com" + } + } + // We depend on fabric loader here to use the fabric @Environment annotations and get the mixin dependencies + // Do NOT use other classes from fabric loader + modImplementation "net.fabricmc:fabric-loader:${rootProject.fabric_loader_version}" + // Remove the next line if you don't want to depend on the API + modApi "dev.architectury:architectury:${rootProject.architectury_version}" + + modCompileOnly "dev.emi:emi-xplat-intermediary:${rootProject.emi_version}+${rootProject.minecraft_version}:api" + // Fabric + modImplementation "curse.maven:lets-do-vinery-704465:5504122" + modImplementation "curse.maven:lets-do-bakery-886559:5528401" + modImplementation "curse.maven:lets-do-meadow-821483:5504104" + modImplementation "curse.maven:lets-do-nethervinery-930072:5467443" + modImplementation "curse.maven:lets-do-candlelight-846962:5427654" + modImplementation "curse.maven:lets-do-brewery-971636:5427505" + modImplementation "curse.maven:lets-do-herbal-brews-951221:5400096" + modImplementation "curse.maven:lets-do-beachparty-858691:5320667" + + + // Forge + modImplementation "curse.maven:lets-do-vinery-704465:5504123" + modImplementation "curse.maven:lets-do-bakery-886559:5528402" + modImplementation "curse.maven:lets-do-meadow-821483:5504102" + modImplementation "curse.maven:lets-do-nethervinery-930072:5467444" + modImplementation "curse.maven:lets-do-candlelight-846962:5427646" + modImplementation "curse.maven:lets-do-brewery-971636:5427504" + modImplementation "curse.maven:lets-do-herbal-brews-951221:5397666" + modImplementation "curse.maven:lets-do-beachparty-858691:5320668" +} + +publishing { + publications { + mavenCommon(MavenPublication) { + artifactId = rootProject.archives_base_name + from components.java + } + } + + // See https://docs.gradle.org/current/userguide/publishing_maven.html for information on how to set up publishing. + repositories { + // Add repositories to publish to here. + } +} diff --git a/common/src/main/java/com/pandaismyname1/emiletsdocompat/Emi_letsdo_compat.java b/common/src/main/java/com/pandaismyname1/emiletsdocompat/Emi_letsdo_compat.java new file mode 100644 index 0000000..81815a3 --- /dev/null +++ b/common/src/main/java/com/pandaismyname1/emiletsdocompat/Emi_letsdo_compat.java @@ -0,0 +1,286 @@ +package com.pandaismyname1.emiletsdocompat; + +import com.pandaismyname1.emiletsdocompat.bakery.BakingStationRecipe; +import com.pandaismyname1.emiletsdocompat.bakery.CraftingBowlRecipe; +import com.pandaismyname1.emiletsdocompat.bakery.PotCookingRecipe; +import com.pandaismyname1.emiletsdocompat.bakery.StoveRecipe; +import com.pandaismyname1.emiletsdocompat.beachparty.MiniFridgeMixingRecipe; +import com.pandaismyname1.emiletsdocompat.beachparty.TikiBarMixingRecipe; +import com.pandaismyname1.emiletsdocompat.brewery.BrewingRecipe; +import com.pandaismyname1.emiletsdocompat.brewery.DryingRecipe; +import com.pandaismyname1.emiletsdocompat.vinery.ApplePressingRecipe; +import com.pandaismyname1.emiletsdocompat.vinery.FermentationRecipe; +import dev.emi.emi.api.EmiEntrypoint; +import dev.emi.emi.api.EmiPlugin; +import dev.emi.emi.api.EmiRegistry; +import dev.emi.emi.api.recipe.EmiRecipeCategory; +import dev.emi.emi.api.render.EmiTexture; +import dev.emi.emi.api.stack.EmiStack; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.crafting.RecipeManager; +import net.satisfy.bakery.Bakery; +import net.satisfy.bakery.registry.ObjectRegistry; +import net.satisfy.brewery.Brewery; +import net.satisfy.brewery.registry.RecipeTypeRegistry; +import net.satisfy.candlelight.Candlelight; +import net.satisfy.meadow.Meadow; +import net.satisfy.vinery.Vinery; +import net.satisfy.vinery.registry.RecipeTypesRegistry; +import satisfy.beachparty.Beachparty; +import satisfy.beachparty.registry.RecipeRegistry; +import satisfy.herbalbrews.HerbalBrews; + +@EmiEntrypoint +public class Emi_letsdo_compat implements EmiPlugin { + public static final String MOD_ID = "emi_letsdo_compat"; + /* + fermentation + apple press + + baking station + crafting bowl + stove + pot cooking + + mini fridge mixing + tiki bar mixing + + brewing + drying + + pan cooking + pot cooking + + cauldron brewing + tea kettle brewing + + cheese forming + cooking cauldron + fondue + woodcutting + */ + + // Textures + public static final ResourceLocation FERMENTATION_TEXTURE = new ResourceLocation("vinery", "textures/item/apple_juice.png"); + public static final ResourceLocation APPLE_PRESS_TEXTURE = new ResourceLocation("vinery", "textures/item/apple_wine.png"); + public static final ResourceLocation BAKING_STATION_TEXTURE = new ResourceLocation("bakery", "textures/item/strawberry_cake.png"); + public static final ResourceLocation CRAFTING_BOWL_TEXTURE = new ResourceLocation("bakery", "textures/item/dough.png"); + public static final ResourceLocation STOVE_TEXTURE = new ResourceLocation("bakery", "textures/item/baguette.png"); + public static final ResourceLocation BAKERY_POT_COOKING_TEXTURE = new ResourceLocation("bakery", "textures/item/small_pot_cooking.png"); + public static final ResourceLocation MINI_FRIDGE_MIXING_TEXTURE = new ResourceLocation("beachparty", "textures/item/mini_fridge.png"); + public static final ResourceLocation TIKI_BAR_MIXING_TEXTURE = new ResourceLocation("beachparty", "textures/item/melon_cocktail.png"); + public static final ResourceLocation BREWING_TEXTURE = new ResourceLocation("brewery", "textures/item/beer_mug.png"); + public static final ResourceLocation DRYING_TEXTURE = new ResourceLocation("brewery", "textures/item/silo_wood.png"); + public static final ResourceLocation PAN_COOKING_TEXTURE = new ResourceLocation("candlelight", "textures/item/cooking_pan.png"); + public static final ResourceLocation CANDLELIGHT_POT_COOKING_TEXTURE = new ResourceLocation("candlelight", "textures/item/cooking_pot.png"); + public static final ResourceLocation CAULDRON_BREWING_TEXTURE = new ResourceLocation("herbalbrews", "textures/item/cauldron.png"); + public static final ResourceLocation TEA_KETTLE_BREWING_TEXTURE = new ResourceLocation("herbalbrews", "textures/item/tea_kettle.png"); + public static final ResourceLocation CHEESE_FORMING_TEXTURE = new ResourceLocation("meadow", "textures/item/cheese_form.png"); + public static final ResourceLocation COOKING_CAULDRON_TEXTURE = new ResourceLocation("meadow", "textures/item/cooking_cauldron.png"); + public static final ResourceLocation FONDUE_TEXTURE = new ResourceLocation("meadow", "textures/item/fondue.png"); + public static final ResourceLocation WOODCUTTING_TEXTURE = new ResourceLocation("meadow", "textures/item/woodcutter.png"); + + /* + Additiona Stoves: + + public static final RegistrySupplier COBBLESTONE_STOVE; + public static final RegistrySupplier SANDSTONE_STOVE; + public static final RegistrySupplier STONE_BRICKS_STOVE; + public static final RegistrySupplier DEEPSLATE_STOVE; + public static final RegistrySupplier GRANITE_STOVE; + public static final RegistrySupplier END_STOVE; + public static final RegistrySupplier MUD_STOVE; + public static final RegistrySupplier QUARTZ_STOVE; + public static final RegistrySupplier RED_NETHER_BRICKS_STOVE; + */ + + + // Workstations + public static final EmiStack FERMENTATION_WORKSTATION = EmiStack.of(net.satisfy.vinery.registry.ObjectRegistry.FERMENTATION_BARREL.get()); + public static final EmiStack APPLE_PRESS_WORKSTATION = EmiStack.of(net.satisfy.vinery.registry.ObjectRegistry.APPLE_PRESS.get()); + public static final EmiStack BAKING_STATION_WORKSTATION = EmiStack.of(ObjectRegistry.BAKER_STATION.get()); + public static final EmiStack CRAFTING_BOWL_WORKSTATION = EmiStack.of(net.satisfy.bakery.registry.ObjectRegistry.CRAFTING_BOWL.get()); + public static final EmiStack STOVE_WORKSTATION = EmiStack.of(ObjectRegistry.BRICK_STOVE.get()); + public static final EmiStack COBBLE_STOVE_WORKSTATION = EmiStack.of(ObjectRegistry.COBBLESTONE_STOVE.get()); + public static final EmiStack SANDSTONE_STOVE_WORKSTATION = EmiStack.of(ObjectRegistry.SANDSTONE_STOVE.get()); + public static final EmiStack STONE_BRICKS_STOVE_WORKSTATION = EmiStack.of(ObjectRegistry.STONE_BRICKS_STOVE.get()); + public static final EmiStack DEEPSLATE_STOVE_WORKSTATION = EmiStack.of(ObjectRegistry.DEEPSLATE_STOVE.get()); + public static final EmiStack GRANITE_STOVE_WORKSTATION = EmiStack.of(ObjectRegistry.GRANITE_STOVE.get()); + public static final EmiStack END_STOVE_WORKSTATION = EmiStack.of(ObjectRegistry.END_STOVE.get()); + public static final EmiStack MUD_STOVE_WORKSTATION = EmiStack.of(ObjectRegistry.MUD_STOVE.get()); + public static final EmiStack QUARTZ_STOVE_WORKSTATION = EmiStack.of(ObjectRegistry.QUARTZ_STOVE.get()); + public static final EmiStack RED_NETHER_BRICKS_STOVE_WORKSTATION = EmiStack.of(ObjectRegistry.RED_NETHER_BRICKS_STOVE.get()); + public static final EmiStack BAKERY_POT_COOKING_WORKSTATION = EmiStack.of(ObjectRegistry.SMALL_COOKING_POT.get()); + public static final EmiStack MINI_FRIDGE_MIXING_WORKSTATION = EmiStack.of(satisfy.beachparty.registry.ObjectRegistry.MINI_FRIDGE.get()); + public static final EmiStack TIKI_BAR_MIXING_WORKSTATION = EmiStack.of(satisfy.beachparty.registry.ObjectRegistry.TIKI_BAR.get()); + public static final EmiStack BREWING_WORKSTATION = EmiStack.of(net.satisfy.brewery.registry.ObjectRegistry.WOODEN_BREWINGSTATION.get()); + public static final EmiStack COPPER_BREWING_WORKSTATION = EmiStack.of(net.satisfy.brewery.registry.ObjectRegistry.COPPER_BREWINGSTATION.get()); + public static final EmiStack NETHERITE_BREWING_WORKSTATION = EmiStack.of(net.satisfy.brewery.registry.ObjectRegistry.NETHERITE_BREWINGSTATION.get()); + public static final EmiStack DRYING_WORKSTATION = EmiStack.of(net.satisfy.brewery.registry.ObjectRegistry.SILO_WOOD.get()); + public static final EmiStack COPPER_DRYING_WORKSTATION = EmiStack.of(net.satisfy.brewery.registry.ObjectRegistry.SILO_COPPER.get()); + public static final EmiStack PAN_COOKING_WORKSTATION = EmiStack.of(net.satisfy.candlelight.registry.ObjectRegistry.COOKING_PAN.get()); + public static final EmiStack CANDLELIGHT_POT_COOKING_WORKSTATION = EmiStack.of(net.satisfy.candlelight.registry.ObjectRegistry.COOKING_POT.get()); + public static final EmiStack CAULDRON_BREWING_WORKSTATION = EmiStack.of(satisfy.herbalbrews.registry.ObjectRegistry.CAULDRON.get()); + public static final EmiStack TEA_KETTLE_BREWING_WORKSTATION = EmiStack.of(satisfy.herbalbrews.registry.ObjectRegistry.TEA_KETTLE.get()); + public static final EmiStack CHEESE_FORMING_WORKSTATION = EmiStack.of(net.satisfy.meadow.registry.ObjectRegistry.CHEESE_FORM.get()); + public static final EmiStack COOKING_CAULDRON_WORKSTATION = EmiStack.of(net.satisfy.meadow.registry.ObjectRegistry.COOKING_CAULDRON.get()); + public static final EmiStack FONDUE_WORKSTATION = EmiStack.of(net.satisfy.meadow.registry.ObjectRegistry.FONDUE.get()); + public static final EmiStack WOODCUTTING_WORKSTATION = EmiStack.of(net.satisfy.meadow.registry.ObjectRegistry.WOODCUTTER.get()); + + // Categories + public static final EmiRecipeCategory FERMENTATION + = new EmiRecipeCategory(new ResourceLocation(Vinery.MOD_ID, "fermentation"), EmiStack.of(net.satisfy.vinery.registry.ObjectRegistry.FERMENTATION_BARREL.get())); + public static final EmiRecipeCategory APPLE_PRESS + = new EmiRecipeCategory(new ResourceLocation(Vinery.MOD_ID, "apple_mashing"), EmiStack.of(net.satisfy.vinery.registry.ObjectRegistry.APPLE_PRESS.get())); + public static final EmiRecipeCategory BAKING_STATION + = new EmiRecipeCategory(new ResourceLocation(Bakery.MOD_ID, "baking_station"), EmiStack.of(ObjectRegistry.BAKER_STATION.get())); + public static final EmiRecipeCategory CRAFTING_BOWL + = new EmiRecipeCategory(new ResourceLocation(Bakery.MOD_ID, "crafting_bowl"), EmiStack.of(net.satisfy.bakery.registry.ObjectRegistry.CRAFTING_BOWL.get())); + public static final EmiRecipeCategory STOVE + = new EmiRecipeCategory(new ResourceLocation(Bakery.MOD_ID, "stove"), EmiStack.of(ObjectRegistry.BRICK_STOVE.get())); + public static final EmiRecipeCategory BAKERY_POT_COOKING + = new EmiRecipeCategory(new ResourceLocation(Bakery.MOD_ID, "pot_cooking"), EmiStack.of(ObjectRegistry.SMALL_COOKING_POT.get())); + public static final EmiRecipeCategory MINI_FRIDGE_MIXING + = new EmiRecipeCategory(new ResourceLocation(Beachparty.MOD_ID, "mini_fridge_mixing"), EmiStack.of(satisfy.beachparty.registry.ObjectRegistry.MINI_FRIDGE.get())); + public static final EmiRecipeCategory TIKI_BAR_MIXING + = new EmiRecipeCategory(new ResourceLocation(Beachparty.MOD_ID, "tiki_bar_mixing"), EmiStack.of(satisfy.beachparty.registry.ObjectRegistry.TIKI_BAR.get())); + public static final EmiRecipeCategory BREWING + = new EmiRecipeCategory(new ResourceLocation(Brewery.MOD_ID, "brewing"), EmiStack.of(net.satisfy.brewery.registry.ObjectRegistry.WOODEN_BREWINGSTATION.get())); + public static final EmiRecipeCategory DRYING + = new EmiRecipeCategory(new ResourceLocation(Brewery.MOD_ID, "drying"), EmiStack.of(net.satisfy.brewery.registry.ObjectRegistry.SILO_WOOD.get())); + public static final EmiRecipeCategory PAN_COOKING + = new EmiRecipeCategory(new ResourceLocation(Candlelight.MOD_ID, "pan_cooking"), EmiStack.of(net.satisfy.candlelight.registry.ObjectRegistry.COOKING_PAN.get())); + public static final EmiRecipeCategory CANDLELIGHT_POT_COOKING + = new EmiRecipeCategory(new ResourceLocation(Candlelight.MOD_ID, "pot_cooking"), EmiStack.of(net.satisfy.candlelight.registry.ObjectRegistry.COOKING_POT.get())); + public static final EmiRecipeCategory CAULDRON_BREWING + = new EmiRecipeCategory(new ResourceLocation(HerbalBrews.MOD_ID, "cauldron_brewing"), EmiStack.of(satisfy.herbalbrews.registry.ObjectRegistry.CAULDRON.get())); + public static final EmiRecipeCategory TEA_KETTLE_BREWING + = new EmiRecipeCategory(new ResourceLocation(HerbalBrews.MOD_ID, "kettle_brewing"), EmiStack.of(satisfy.herbalbrews.registry.ObjectRegistry.TEA_KETTLE.get())); + public static final EmiRecipeCategory CHEESE_FORMING + = new EmiRecipeCategory(new ResourceLocation(Meadow.MOD_ID, "cheese"), EmiStack.of(net.satisfy.meadow.registry.ObjectRegistry.CHEESE_FORM.get())); + public static final EmiRecipeCategory COOKING_CAULDRON + = new EmiRecipeCategory(new ResourceLocation(Meadow.MOD_ID, "cooking"), EmiStack.of(net.satisfy.meadow.registry.ObjectRegistry.COOKING_CAULDRON.get())); + public static final EmiRecipeCategory FONDUE + = new EmiRecipeCategory(new ResourceLocation(Meadow.MOD_ID, "fondue"), EmiStack.of(net.satisfy.meadow.registry.ObjectRegistry.FONDUE.get())); + public static final EmiRecipeCategory WOODCUTTING + = new EmiRecipeCategory(new ResourceLocation(Meadow.MOD_ID, "woodcutting"), EmiStack.of(net.satisfy.meadow.registry.ObjectRegistry.WOODCUTTER.get())); + + @Override + public void register(EmiRegistry registry) { + // Tell EMI to add a tab for your category + registry.addCategory(FERMENTATION); + registry.addCategory(APPLE_PRESS); + registry.addCategory(BAKING_STATION); + registry.addCategory(CRAFTING_BOWL); + registry.addCategory(STOVE); + registry.addCategory(BAKERY_POT_COOKING); + registry.addCategory(MINI_FRIDGE_MIXING); + registry.addCategory(TIKI_BAR_MIXING); + registry.addCategory(BREWING); + registry.addCategory(DRYING); + registry.addCategory(PAN_COOKING); + registry.addCategory(CANDLELIGHT_POT_COOKING); + registry.addCategory(CAULDRON_BREWING); + registry.addCategory(TEA_KETTLE_BREWING); + registry.addCategory(CHEESE_FORMING); + registry.addCategory(COOKING_CAULDRON); + registry.addCategory(FONDUE); + registry.addCategory(WOODCUTTING); + + // Add all the workstations your category uses + registry.addWorkstation(FERMENTATION, FERMENTATION_WORKSTATION); + registry.addWorkstation(APPLE_PRESS, APPLE_PRESS_WORKSTATION); + registry.addWorkstation(BAKING_STATION, BAKING_STATION_WORKSTATION); + registry.addWorkstation(CRAFTING_BOWL, CRAFTING_BOWL_WORKSTATION); + registry.addWorkstation(STOVE, STOVE_WORKSTATION); + registry.addWorkstation(STOVE, COBBLE_STOVE_WORKSTATION); + registry.addWorkstation(STOVE, SANDSTONE_STOVE_WORKSTATION); + registry.addWorkstation(STOVE, STONE_BRICKS_STOVE_WORKSTATION); + registry.addWorkstation(STOVE, DEEPSLATE_STOVE_WORKSTATION); + registry.addWorkstation(STOVE, GRANITE_STOVE_WORKSTATION); + registry.addWorkstation(STOVE, END_STOVE_WORKSTATION); + registry.addWorkstation(STOVE, MUD_STOVE_WORKSTATION); + registry.addWorkstation(STOVE, QUARTZ_STOVE_WORKSTATION); + registry.addWorkstation(STOVE, RED_NETHER_BRICKS_STOVE_WORKSTATION); + registry.addWorkstation(BAKERY_POT_COOKING, BAKERY_POT_COOKING_WORKSTATION); + registry.addWorkstation(MINI_FRIDGE_MIXING, MINI_FRIDGE_MIXING_WORKSTATION); + registry.addWorkstation(TIKI_BAR_MIXING, TIKI_BAR_MIXING_WORKSTATION); + registry.addWorkstation(BREWING, BREWING_WORKSTATION); + registry.addWorkstation(BREWING, COPPER_BREWING_WORKSTATION); + registry.addWorkstation(BREWING, NETHERITE_BREWING_WORKSTATION); + registry.addWorkstation(DRYING, DRYING_WORKSTATION); + registry.addWorkstation(DRYING, COPPER_DRYING_WORKSTATION); + registry.addWorkstation(PAN_COOKING, PAN_COOKING_WORKSTATION); + registry.addWorkstation(CANDLELIGHT_POT_COOKING, CANDLELIGHT_POT_COOKING_WORKSTATION); + registry.addWorkstation(CAULDRON_BREWING, CAULDRON_BREWING_WORKSTATION); + registry.addWorkstation(TEA_KETTLE_BREWING, TEA_KETTLE_BREWING_WORKSTATION); + registry.addWorkstation(CHEESE_FORMING, CHEESE_FORMING_WORKSTATION); + registry.addWorkstation(COOKING_CAULDRON, COOKING_CAULDRON_WORKSTATION); + registry.addWorkstation(FONDUE, FONDUE_WORKSTATION); + registry.addWorkstation(WOODCUTTING, WOODCUTTING_WORKSTATION); + + RecipeManager manager = registry.getRecipeManager(); + + // Use vanilla's concept of your recipes and pass them to your EmiRecipe representation + for (net.satisfy.vinery.recipe.FermentationBarrelRecipe recipe : manager.getAllRecipesFor(RecipeTypesRegistry.FERMENTATION_BARREL_RECIPE_TYPE.get())) { + registry.addRecipe(new FermentationRecipe(recipe)); + } + for (net.satisfy.vinery.recipe.ApplePressRecipe recipe : manager.getAllRecipesFor(RecipeTypesRegistry.APPLE_PRESS_RECIPE_TYPE.get())) { + registry.addRecipe(new ApplePressingRecipe(recipe)); + } + + for (net.satisfy.bakery.recipe.BakingStationRecipe recipe : manager.getAllRecipesFor(net.satisfy.bakery.registry.RecipeTypeRegistry.BAKING_STATION_RECIPE_TYPE.get())) { + registry.addRecipe(new BakingStationRecipe(recipe)); + } + for (net.satisfy.bakery.recipe.CraftingBowlRecipe recipe : manager.getAllRecipesFor(net.satisfy.bakery.registry.RecipeTypeRegistry.CRAFTING_BOWL_RECIPE_TYPE.get())) { + registry.addRecipe(new CraftingBowlRecipe(recipe)); + } + for (net.satisfy.bakery.recipe.StoveRecipe recipe : manager.getAllRecipesFor(net.satisfy.bakery.registry.RecipeTypeRegistry.STOVE_RECIPE_TYPE.get())) { + registry.addRecipe(new StoveRecipe(recipe)); + } + for (net.satisfy.bakery.recipe.CookingPotRecipe recipe : manager.getAllRecipesFor(net.satisfy.bakery.registry.RecipeTypeRegistry.COOKING_POT_RECIPE_TYPE.get())) { + registry.addRecipe(new PotCookingRecipe(recipe)); + } + + for (satisfy.beachparty.recipe.MiniFridgeRecipe recipe : manager.getAllRecipesFor(RecipeRegistry.MINI_FRIDGE_RECIPE_TYPE.get())) { + registry.addRecipe(new MiniFridgeMixingRecipe(recipe)); + } + for (satisfy.beachparty.recipe.TikiBarRecipe recipe : manager.getAllRecipesFor(RecipeRegistry.TIKI_BAR_RECIPE_TYPE.get())) { + registry.addRecipe(new TikiBarMixingRecipe(recipe)); + } + + for (net.satisfy.brewery.recipe.BrewingRecipe recipe : manager.getAllRecipesFor(RecipeTypeRegistry.BREWING_RECIPE_TYPE.get())) { + registry.addRecipe(new BrewingRecipe(recipe)); + } + for (net.satisfy.brewery.recipe.SiloRecipe recipe : manager.getAllRecipesFor(RecipeTypeRegistry.SILO_RECIPE_TYPE.get())) { + registry.addRecipe(new DryingRecipe(recipe)); + } + + for (net.satisfy.candlelight.recipe.CookingPanRecipe recipe : manager.getAllRecipesFor(net.satisfy.candlelight.registry.RecipeTypeRegistry.COOKING_PAN_RECIPE_TYPE.get())) { + registry.addRecipe(new com.pandaismyname1.emiletsdocompat.candlelight.PanCookingRecipe(recipe)); + } + for (net.satisfy.candlelight.recipe.CookingPotRecipe recipe : manager.getAllRecipesFor(net.satisfy.candlelight.registry.RecipeTypeRegistry.COOKING_POT_RECIPE_TYPE.get())) { + registry.addRecipe(new com.pandaismyname1.emiletsdocompat.candlelight.PotCookingRecipe(recipe)); + } + + for (satisfy.herbalbrews.recipe.CauldronRecipe recipe : manager.getAllRecipesFor(satisfy.herbalbrews.registry.RecipeTypeRegistry.CAULDRON_RECIPE_TYPE.get())) { + registry.addRecipe(new com.pandaismyname1.emiletsdocompat.herbalbrews.CauldronBrewingRecipe(recipe)); + } + for (satisfy.herbalbrews.recipe.TeaKettleRecipe recipe : manager.getAllRecipesFor(satisfy.herbalbrews.registry.RecipeTypeRegistry.TEA_KETTLE_RECIPE_TYPE.get())) { + registry.addRecipe(new com.pandaismyname1.emiletsdocompat.herbalbrews.TeaKettleBrewingRecipe(recipe)); + } + + for (net.satisfy.meadow.recipes.CheeseFormRecipe recipe : manager.getAllRecipesFor(net.satisfy.meadow.registry.RecipeRegistry.CHEESE.get())) { + registry.addRecipe(new com.pandaismyname1.emiletsdocompat.meadow.CheeseFormRecipe(recipe)); + } + for (net.satisfy.meadow.recipes.CookingCauldronRecipe recipe : manager.getAllRecipesFor(net.satisfy.meadow.registry.RecipeRegistry.COOKING.get())) { + registry.addRecipe(new com.pandaismyname1.emiletsdocompat.meadow.CookingCauldronRecipe(recipe)); + } + for (net.satisfy.meadow.recipes.FondueRecipe recipe : manager.getAllRecipesFor(net.satisfy.meadow.registry.RecipeRegistry.FONDUE.get())) { + registry.addRecipe(new com.pandaismyname1.emiletsdocompat.meadow.FondueRecipe(recipe)); + } + for (net.satisfy.meadow.recipes.WoodcuttingRecipe recipe : manager.getAllRecipesFor(net.satisfy.meadow.registry.RecipeRegistry.WOODCUTTING.get())) { + registry.addRecipe(new com.pandaismyname1.emiletsdocompat.meadow.WoodcuttingRecipe(recipe)); + } + } +} diff --git a/common/src/main/java/com/pandaismyname1/emiletsdocompat/bakery/BakingStationRecipe.java b/common/src/main/java/com/pandaismyname1/emiletsdocompat/bakery/BakingStationRecipe.java new file mode 100644 index 0000000..0b094c3 --- /dev/null +++ b/common/src/main/java/com/pandaismyname1/emiletsdocompat/bakery/BakingStationRecipe.java @@ -0,0 +1,44 @@ +package com.pandaismyname1.emiletsdocompat.bakery; + +import com.pandaismyname1.emiletsdocompat.Emi_letsdo_compat; +import com.pandaismyname1.emiletsdocompat.utils.DisplayUtils; +import dev.architectury.utils.EnvExecutor; +import dev.architectury.utils.GameInstance; +import dev.emi.emi.api.recipe.BasicEmiRecipe; +import dev.emi.emi.api.render.EmiTexture; +import dev.emi.emi.api.stack.EmiIngredient; +import dev.emi.emi.api.stack.EmiStack; +import dev.emi.emi.api.widget.WidgetHolder; +import net.minecraft.core.RegistryAccess; + +import java.util.function.Supplier; + +public class BakingStationRecipe extends BasicEmiRecipe { + protected static final Supplier REGISTRY_ACCESS = + EnvExecutor.getEnvSpecific(() -> () -> () -> GameInstance.getClient().player.level().registryAccess(), + () -> () -> () -> GameInstance.getServer().registryAccess()); + + public BakingStationRecipe(net.satisfy.bakery.recipe.BakingStationRecipe recipe) { + super(Emi_letsdo_compat.BAKING_STATION, recipe.getId(), 70, 18); + var ingredients = recipe.getIngredients(); + for (var ingredient : ingredients) { + this.inputs.add(EmiIngredient.of(ingredient)); + } + this.outputs.add(EmiStack.of(recipe.getResultItem(REGISTRY_ACCESS.get()))); + } + + @Override + public void addWidgets(WidgetHolder widgets) { + DisplayUtils.CreateWidget(this, widgets, this.inputs, this.outputs); + } + + @Override + public int getDisplayHeight() { + return 40; + } + + @Override + public int getDisplayWidth() { + return 140; + } +} \ No newline at end of file diff --git a/common/src/main/java/com/pandaismyname1/emiletsdocompat/bakery/CraftingBowlRecipe.java b/common/src/main/java/com/pandaismyname1/emiletsdocompat/bakery/CraftingBowlRecipe.java new file mode 100644 index 0000000..9c6a1c2 --- /dev/null +++ b/common/src/main/java/com/pandaismyname1/emiletsdocompat/bakery/CraftingBowlRecipe.java @@ -0,0 +1,44 @@ +package com.pandaismyname1.emiletsdocompat.bakery; + +import com.pandaismyname1.emiletsdocompat.Emi_letsdo_compat; +import com.pandaismyname1.emiletsdocompat.utils.DisplayUtils; +import dev.architectury.utils.EnvExecutor; +import dev.architectury.utils.GameInstance; +import dev.emi.emi.api.recipe.BasicEmiRecipe; +import dev.emi.emi.api.render.EmiTexture; +import dev.emi.emi.api.stack.EmiIngredient; +import dev.emi.emi.api.stack.EmiStack; +import dev.emi.emi.api.widget.WidgetHolder; +import net.minecraft.core.RegistryAccess; + +import java.util.function.Supplier; + +public class CraftingBowlRecipe extends BasicEmiRecipe { + protected static final Supplier REGISTRY_ACCESS = + EnvExecutor.getEnvSpecific(() -> () -> () -> GameInstance.getClient().player.level().registryAccess(), + () -> () -> () -> GameInstance.getServer().registryAccess()); + + public CraftingBowlRecipe(net.satisfy.bakery.recipe.CraftingBowlRecipe recipe) { + super(Emi_letsdo_compat.CRAFTING_BOWL, recipe.getId(), 70, 18); + var ingredients = recipe.getIngredients(); + for (var ingredient : ingredients) { + this.inputs.add(EmiIngredient.of(ingredient)); + } + this.outputs.add(EmiStack.of(recipe.getResultItem(REGISTRY_ACCESS.get()))); + } + + @Override + public void addWidgets(WidgetHolder widgets) { + DisplayUtils.CreateWidget(this, widgets, this.inputs, this.outputs); + } + + @Override + public int getDisplayHeight() { + return 40; + } + + @Override + public int getDisplayWidth() { + return 140; + } +} \ No newline at end of file diff --git a/common/src/main/java/com/pandaismyname1/emiletsdocompat/bakery/PotCookingRecipe.java b/common/src/main/java/com/pandaismyname1/emiletsdocompat/bakery/PotCookingRecipe.java new file mode 100644 index 0000000..1c4480d --- /dev/null +++ b/common/src/main/java/com/pandaismyname1/emiletsdocompat/bakery/PotCookingRecipe.java @@ -0,0 +1,44 @@ +package com.pandaismyname1.emiletsdocompat.bakery; + +import com.pandaismyname1.emiletsdocompat.Emi_letsdo_compat; +import com.pandaismyname1.emiletsdocompat.utils.DisplayUtils; +import dev.architectury.utils.EnvExecutor; +import dev.architectury.utils.GameInstance; +import dev.emi.emi.api.recipe.BasicEmiRecipe; +import dev.emi.emi.api.render.EmiTexture; +import dev.emi.emi.api.stack.EmiIngredient; +import dev.emi.emi.api.stack.EmiStack; +import dev.emi.emi.api.widget.WidgetHolder; +import net.minecraft.core.RegistryAccess; + +import java.util.function.Supplier; + +public class PotCookingRecipe extends BasicEmiRecipe { + protected static final Supplier REGISTRY_ACCESS = + EnvExecutor.getEnvSpecific(() -> () -> () -> GameInstance.getClient().player.level().registryAccess(), + () -> () -> () -> GameInstance.getServer().registryAccess()); + + public PotCookingRecipe(net.satisfy.bakery.recipe.CookingPotRecipe recipe) { + super(Emi_letsdo_compat.BAKERY_POT_COOKING, recipe.getId(), 70, 18); + var ingredients = recipe.getIngredients(); + for (var ingredient : ingredients) { + this.inputs.add(EmiIngredient.of(ingredient)); + } + this.outputs.add(EmiStack.of(recipe.getResultItem(REGISTRY_ACCESS.get()))); + } + + @Override + public void addWidgets(WidgetHolder widgets) { + DisplayUtils.CreateWidget(this, widgets, this.inputs, this.outputs); + } + + @Override + public int getDisplayHeight() { + return 40; + } + + @Override + public int getDisplayWidth() { + return 140; + } +} \ No newline at end of file diff --git a/common/src/main/java/com/pandaismyname1/emiletsdocompat/bakery/StoveRecipe.java b/common/src/main/java/com/pandaismyname1/emiletsdocompat/bakery/StoveRecipe.java new file mode 100644 index 0000000..fd1a2cc --- /dev/null +++ b/common/src/main/java/com/pandaismyname1/emiletsdocompat/bakery/StoveRecipe.java @@ -0,0 +1,44 @@ +package com.pandaismyname1.emiletsdocompat.bakery; + +import com.pandaismyname1.emiletsdocompat.Emi_letsdo_compat; +import com.pandaismyname1.emiletsdocompat.utils.DisplayUtils; +import dev.architectury.utils.EnvExecutor; +import dev.architectury.utils.GameInstance; +import dev.emi.emi.api.recipe.BasicEmiRecipe; +import dev.emi.emi.api.render.EmiTexture; +import dev.emi.emi.api.stack.EmiIngredient; +import dev.emi.emi.api.stack.EmiStack; +import dev.emi.emi.api.widget.WidgetHolder; +import net.minecraft.core.RegistryAccess; + +import java.util.function.Supplier; + +public class StoveRecipe extends BasicEmiRecipe { + protected static final Supplier REGISTRY_ACCESS = + EnvExecutor.getEnvSpecific(() -> () -> () -> GameInstance.getClient().player.level().registryAccess(), + () -> () -> () -> GameInstance.getServer().registryAccess()); + + public StoveRecipe(net.satisfy.bakery.recipe.StoveRecipe recipe) { + super(Emi_letsdo_compat.STOVE, recipe.getId(), 70, 18); + var ingredients = recipe.getIngredients(); + for (var ingredient : ingredients) { + this.inputs.add(EmiIngredient.of(ingredient)); + } + this.outputs.add(EmiStack.of(recipe.getResultItem(REGISTRY_ACCESS.get()))); + } + + @Override + public void addWidgets(WidgetHolder widgets) { + DisplayUtils.CreateWidget(this, widgets, this.inputs, this.outputs); + } + + @Override + public int getDisplayHeight() { + return 40; + } + + @Override + public int getDisplayWidth() { + return 140; + } +} \ No newline at end of file diff --git a/common/src/main/java/com/pandaismyname1/emiletsdocompat/beachparty/MiniFridgeMixingRecipe.java b/common/src/main/java/com/pandaismyname1/emiletsdocompat/beachparty/MiniFridgeMixingRecipe.java new file mode 100644 index 0000000..b823b6a --- /dev/null +++ b/common/src/main/java/com/pandaismyname1/emiletsdocompat/beachparty/MiniFridgeMixingRecipe.java @@ -0,0 +1,44 @@ +package com.pandaismyname1.emiletsdocompat.beachparty; + +import com.pandaismyname1.emiletsdocompat.Emi_letsdo_compat; +import com.pandaismyname1.emiletsdocompat.utils.DisplayUtils; +import dev.architectury.utils.EnvExecutor; +import dev.architectury.utils.GameInstance; +import dev.emi.emi.api.recipe.BasicEmiRecipe; +import dev.emi.emi.api.render.EmiTexture; +import dev.emi.emi.api.stack.EmiIngredient; +import dev.emi.emi.api.stack.EmiStack; +import dev.emi.emi.api.widget.WidgetHolder; +import net.minecraft.core.RegistryAccess; + +import java.util.function.Supplier; + +public class MiniFridgeMixingRecipe extends BasicEmiRecipe { + protected static final Supplier REGISTRY_ACCESS = + EnvExecutor.getEnvSpecific(() -> () -> () -> GameInstance.getClient().player.level().registryAccess(), + () -> () -> () -> GameInstance.getServer().registryAccess()); + + public MiniFridgeMixingRecipe(satisfy.beachparty.recipe.MiniFridgeRecipe recipe) { + super(Emi_letsdo_compat.MINI_FRIDGE_MIXING, recipe.getId(), 70, 18); + var ingredients = recipe.getIngredients(); + for (var ingredient : ingredients) { + this.inputs.add(EmiIngredient.of(ingredient)); + } + this.outputs.add(EmiStack.of(recipe.getResultItem(REGISTRY_ACCESS.get()))); + } + + @Override + public void addWidgets(WidgetHolder widgets) { + DisplayUtils.CreateWidget(this, widgets, this.inputs, this.outputs); + } + + @Override + public int getDisplayHeight() { + return 40; + } + + @Override + public int getDisplayWidth() { + return 140; + } +} \ No newline at end of file diff --git a/common/src/main/java/com/pandaismyname1/emiletsdocompat/beachparty/TikiBarMixingRecipe.java b/common/src/main/java/com/pandaismyname1/emiletsdocompat/beachparty/TikiBarMixingRecipe.java new file mode 100644 index 0000000..7dfce68 --- /dev/null +++ b/common/src/main/java/com/pandaismyname1/emiletsdocompat/beachparty/TikiBarMixingRecipe.java @@ -0,0 +1,44 @@ +package com.pandaismyname1.emiletsdocompat.beachparty; + +import com.pandaismyname1.emiletsdocompat.Emi_letsdo_compat; +import com.pandaismyname1.emiletsdocompat.utils.DisplayUtils; +import dev.architectury.utils.EnvExecutor; +import dev.architectury.utils.GameInstance; +import dev.emi.emi.api.recipe.BasicEmiRecipe; +import dev.emi.emi.api.render.EmiTexture; +import dev.emi.emi.api.stack.EmiIngredient; +import dev.emi.emi.api.stack.EmiStack; +import dev.emi.emi.api.widget.WidgetHolder; +import net.minecraft.core.RegistryAccess; + +import java.util.function.Supplier; + +public class TikiBarMixingRecipe extends BasicEmiRecipe { + protected static final Supplier REGISTRY_ACCESS = + EnvExecutor.getEnvSpecific(() -> () -> () -> GameInstance.getClient().player.level().registryAccess(), + () -> () -> () -> GameInstance.getServer().registryAccess()); + + public TikiBarMixingRecipe(satisfy.beachparty.recipe.TikiBarRecipe recipe) { + super(Emi_letsdo_compat.TIKI_BAR_MIXING, recipe.getId(), 70, 18); + var ingredients = recipe.getIngredients(); + for (var ingredient : ingredients) { + this.inputs.add(EmiIngredient.of(ingredient)); + } + this.outputs.add(EmiStack.of(recipe.getResultItem(REGISTRY_ACCESS.get()))); + } + + @Override + public void addWidgets(WidgetHolder widgets) { + DisplayUtils.CreateWidget(this, widgets, this.inputs, this.outputs); + } + + @Override + public int getDisplayHeight() { + return 40; + } + + @Override + public int getDisplayWidth() { + return 140; + } +} \ No newline at end of file diff --git a/common/src/main/java/com/pandaismyname1/emiletsdocompat/brewery/BrewingRecipe.java b/common/src/main/java/com/pandaismyname1/emiletsdocompat/brewery/BrewingRecipe.java new file mode 100644 index 0000000..2a46e19 --- /dev/null +++ b/common/src/main/java/com/pandaismyname1/emiletsdocompat/brewery/BrewingRecipe.java @@ -0,0 +1,44 @@ +package com.pandaismyname1.emiletsdocompat.brewery; + +import com.pandaismyname1.emiletsdocompat.Emi_letsdo_compat; +import com.pandaismyname1.emiletsdocompat.utils.DisplayUtils; +import dev.architectury.utils.EnvExecutor; +import dev.architectury.utils.GameInstance; +import dev.emi.emi.api.recipe.BasicEmiRecipe; +import dev.emi.emi.api.render.EmiTexture; +import dev.emi.emi.api.stack.EmiIngredient; +import dev.emi.emi.api.stack.EmiStack; +import dev.emi.emi.api.widget.WidgetHolder; +import net.minecraft.core.RegistryAccess; + +import java.util.function.Supplier; + +public class BrewingRecipe extends BasicEmiRecipe { + protected static final Supplier REGISTRY_ACCESS = + EnvExecutor.getEnvSpecific(() -> () -> () -> GameInstance.getClient().player.level().registryAccess(), + () -> () -> () -> GameInstance.getServer().registryAccess()); + + public BrewingRecipe(net.satisfy.brewery.recipe.BrewingRecipe recipe) { + super(Emi_letsdo_compat.BREWING, recipe.getId(), 70, 18); + var ingredients = recipe.getIngredients(); + for (var ingredient : ingredients) { + this.inputs.add(EmiIngredient.of(ingredient)); + } + this.outputs.add(EmiStack.of(recipe.getResultItem(REGISTRY_ACCESS.get()))); + } + + @Override + public void addWidgets(WidgetHolder widgets) { + DisplayUtils.CreateWidget(this, widgets, this.inputs, this.outputs); + } + + @Override + public int getDisplayHeight() { + return 40; + } + + @Override + public int getDisplayWidth() { + return 140; + } +} \ No newline at end of file diff --git a/common/src/main/java/com/pandaismyname1/emiletsdocompat/brewery/DryingRecipe.java b/common/src/main/java/com/pandaismyname1/emiletsdocompat/brewery/DryingRecipe.java new file mode 100644 index 0000000..9510b9f --- /dev/null +++ b/common/src/main/java/com/pandaismyname1/emiletsdocompat/brewery/DryingRecipe.java @@ -0,0 +1,44 @@ +package com.pandaismyname1.emiletsdocompat.brewery; + +import com.pandaismyname1.emiletsdocompat.Emi_letsdo_compat; +import com.pandaismyname1.emiletsdocompat.utils.DisplayUtils; +import dev.architectury.utils.EnvExecutor; +import dev.architectury.utils.GameInstance; +import dev.emi.emi.api.recipe.BasicEmiRecipe; +import dev.emi.emi.api.render.EmiTexture; +import dev.emi.emi.api.stack.EmiIngredient; +import dev.emi.emi.api.stack.EmiStack; +import dev.emi.emi.api.widget.WidgetHolder; +import net.minecraft.core.RegistryAccess; + +import java.util.function.Supplier; + +public class DryingRecipe extends BasicEmiRecipe { + protected static final Supplier REGISTRY_ACCESS = + EnvExecutor.getEnvSpecific(() -> () -> () -> GameInstance.getClient().player.level().registryAccess(), + () -> () -> () -> GameInstance.getServer().registryAccess()); + + public DryingRecipe(net.satisfy.brewery.recipe.SiloRecipe recipe) { + super(Emi_letsdo_compat.DRYING, recipe.getId(), 70, 18); + var ingredients = recipe.getIngredients(); + for (var ingredient : ingredients) { + this.inputs.add(EmiIngredient.of(ingredient)); + } + this.outputs.add(EmiStack.of(recipe.getResultItem(REGISTRY_ACCESS.get()))); + } + + @Override + public void addWidgets(WidgetHolder widgets) { + DisplayUtils.CreateWidget(this, widgets, this.inputs, this.outputs); + } + + @Override + public int getDisplayHeight() { + return 40; + } + + @Override + public int getDisplayWidth() { + return 140; + } +} \ No newline at end of file diff --git a/common/src/main/java/com/pandaismyname1/emiletsdocompat/candlelight/PanCookingRecipe.java b/common/src/main/java/com/pandaismyname1/emiletsdocompat/candlelight/PanCookingRecipe.java new file mode 100644 index 0000000..8a64503 --- /dev/null +++ b/common/src/main/java/com/pandaismyname1/emiletsdocompat/candlelight/PanCookingRecipe.java @@ -0,0 +1,44 @@ +package com.pandaismyname1.emiletsdocompat.candlelight; + +import com.pandaismyname1.emiletsdocompat.Emi_letsdo_compat; +import com.pandaismyname1.emiletsdocompat.utils.DisplayUtils; +import dev.architectury.utils.EnvExecutor; +import dev.architectury.utils.GameInstance; +import dev.emi.emi.api.recipe.BasicEmiRecipe; +import dev.emi.emi.api.render.EmiTexture; +import dev.emi.emi.api.stack.EmiIngredient; +import dev.emi.emi.api.stack.EmiStack; +import dev.emi.emi.api.widget.WidgetHolder; +import net.minecraft.core.RegistryAccess; + +import java.util.function.Supplier; + +public class PanCookingRecipe extends BasicEmiRecipe { + protected static final Supplier REGISTRY_ACCESS = + EnvExecutor.getEnvSpecific(() -> () -> () -> GameInstance.getClient().player.level().registryAccess(), + () -> () -> () -> GameInstance.getServer().registryAccess()); + + public PanCookingRecipe(net.satisfy.candlelight.recipe.CookingPanRecipe recipe) { + super(Emi_letsdo_compat.PAN_COOKING, recipe.getId(), 70, 18); + var ingredients = recipe.getIngredients(); + for (var ingredient : ingredients) { + this.inputs.add(EmiIngredient.of(ingredient)); + } + this.outputs.add(EmiStack.of(recipe.getResultItem(REGISTRY_ACCESS.get()))); + } + + @Override + public void addWidgets(WidgetHolder widgets) { + DisplayUtils.CreateWidget(this, widgets, this.inputs, this.outputs); + } + + @Override + public int getDisplayHeight() { + return 40; + } + + @Override + public int getDisplayWidth() { + return 140; + } +} \ No newline at end of file diff --git a/common/src/main/java/com/pandaismyname1/emiletsdocompat/candlelight/PotCookingRecipe.java b/common/src/main/java/com/pandaismyname1/emiletsdocompat/candlelight/PotCookingRecipe.java new file mode 100644 index 0000000..bc231e9 --- /dev/null +++ b/common/src/main/java/com/pandaismyname1/emiletsdocompat/candlelight/PotCookingRecipe.java @@ -0,0 +1,44 @@ +package com.pandaismyname1.emiletsdocompat.candlelight; + +import com.pandaismyname1.emiletsdocompat.Emi_letsdo_compat; +import com.pandaismyname1.emiletsdocompat.utils.DisplayUtils; +import dev.architectury.utils.EnvExecutor; +import dev.architectury.utils.GameInstance; +import dev.emi.emi.api.recipe.BasicEmiRecipe; +import dev.emi.emi.api.render.EmiTexture; +import dev.emi.emi.api.stack.EmiIngredient; +import dev.emi.emi.api.stack.EmiStack; +import dev.emi.emi.api.widget.WidgetHolder; +import net.minecraft.core.RegistryAccess; + +import java.util.function.Supplier; + +public class PotCookingRecipe extends BasicEmiRecipe { + protected static final Supplier REGISTRY_ACCESS = + EnvExecutor.getEnvSpecific(() -> () -> () -> GameInstance.getClient().player.level().registryAccess(), + () -> () -> () -> GameInstance.getServer().registryAccess()); + + public PotCookingRecipe(net.satisfy.candlelight.recipe.CookingPotRecipe recipe) { + super(Emi_letsdo_compat.CANDLELIGHT_POT_COOKING, recipe.getId(), 70, 18); + var ingredients = recipe.getIngredients(); + for (var ingredient : ingredients) { + this.inputs.add(EmiIngredient.of(ingredient)); + } + this.outputs.add(EmiStack.of(recipe.getResultItem(REGISTRY_ACCESS.get()))); + } + + @Override + public void addWidgets(WidgetHolder widgets) { + DisplayUtils.CreateWidget(this, widgets, this.inputs, this.outputs); + } + + @Override + public int getDisplayHeight() { + return 40; + } + + @Override + public int getDisplayWidth() { + return 140; + } +} \ No newline at end of file diff --git a/common/src/main/java/com/pandaismyname1/emiletsdocompat/herbalbrews/CauldronBrewingRecipe.java b/common/src/main/java/com/pandaismyname1/emiletsdocompat/herbalbrews/CauldronBrewingRecipe.java new file mode 100644 index 0000000..4c5c235 --- /dev/null +++ b/common/src/main/java/com/pandaismyname1/emiletsdocompat/herbalbrews/CauldronBrewingRecipe.java @@ -0,0 +1,44 @@ +package com.pandaismyname1.emiletsdocompat.herbalbrews; + +import com.pandaismyname1.emiletsdocompat.Emi_letsdo_compat; +import com.pandaismyname1.emiletsdocompat.utils.DisplayUtils; +import dev.architectury.utils.EnvExecutor; +import dev.architectury.utils.GameInstance; +import dev.emi.emi.api.recipe.BasicEmiRecipe; +import dev.emi.emi.api.render.EmiTexture; +import dev.emi.emi.api.stack.EmiIngredient; +import dev.emi.emi.api.stack.EmiStack; +import dev.emi.emi.api.widget.WidgetHolder; +import net.minecraft.core.RegistryAccess; + +import java.util.function.Supplier; + +public class CauldronBrewingRecipe extends BasicEmiRecipe { + protected static final Supplier REGISTRY_ACCESS = + EnvExecutor.getEnvSpecific(() -> () -> () -> GameInstance.getClient().player.level().registryAccess(), + () -> () -> () -> GameInstance.getServer().registryAccess()); + + public CauldronBrewingRecipe(satisfy.herbalbrews.recipe.CauldronRecipe recipe) { + super(Emi_letsdo_compat.CAULDRON_BREWING, recipe.getId(), 70, 18); + var ingredients = recipe.getIngredients(); + for (var ingredient : ingredients) { + this.inputs.add(EmiIngredient.of(ingredient)); + } + this.outputs.add(EmiStack.of(recipe.getResultItem(REGISTRY_ACCESS.get()))); + } + + @Override + public void addWidgets(WidgetHolder widgets) { + DisplayUtils.CreateWidget(this, widgets, this.inputs, this.outputs); + } + + @Override + public int getDisplayHeight() { + return 40; + } + + @Override + public int getDisplayWidth() { + return 140; + } +} \ No newline at end of file diff --git a/common/src/main/java/com/pandaismyname1/emiletsdocompat/herbalbrews/TeaKettleBrewingRecipe.java b/common/src/main/java/com/pandaismyname1/emiletsdocompat/herbalbrews/TeaKettleBrewingRecipe.java new file mode 100644 index 0000000..2353cd5 --- /dev/null +++ b/common/src/main/java/com/pandaismyname1/emiletsdocompat/herbalbrews/TeaKettleBrewingRecipe.java @@ -0,0 +1,44 @@ +package com.pandaismyname1.emiletsdocompat.herbalbrews; + +import com.pandaismyname1.emiletsdocompat.Emi_letsdo_compat; +import com.pandaismyname1.emiletsdocompat.utils.DisplayUtils; +import dev.architectury.utils.EnvExecutor; +import dev.architectury.utils.GameInstance; +import dev.emi.emi.api.recipe.BasicEmiRecipe; +import dev.emi.emi.api.render.EmiTexture; +import dev.emi.emi.api.stack.EmiIngredient; +import dev.emi.emi.api.stack.EmiStack; +import dev.emi.emi.api.widget.WidgetHolder; +import net.minecraft.core.RegistryAccess; + +import java.util.function.Supplier; + +public class TeaKettleBrewingRecipe extends BasicEmiRecipe { + protected static final Supplier REGISTRY_ACCESS = + EnvExecutor.getEnvSpecific(() -> () -> () -> GameInstance.getClient().player.level().registryAccess(), + () -> () -> () -> GameInstance.getServer().registryAccess()); + + public TeaKettleBrewingRecipe(satisfy.herbalbrews.recipe.TeaKettleRecipe recipe) { + super(Emi_letsdo_compat.TEA_KETTLE_BREWING, recipe.getId(), 70, 18); + var ingredients = recipe.getIngredients(); + for (var ingredient : ingredients) { + this.inputs.add(EmiIngredient.of(ingredient)); + } + this.outputs.add(EmiStack.of(recipe.getResultItem(REGISTRY_ACCESS.get()))); + } + + @Override + public void addWidgets(WidgetHolder widgets) { + DisplayUtils.CreateWidget(this, widgets, this.inputs, this.outputs); + } + + @Override + public int getDisplayHeight() { + return 40; + } + + @Override + public int getDisplayWidth() { + return 140; + } +} \ No newline at end of file diff --git a/common/src/main/java/com/pandaismyname1/emiletsdocompat/meadow/CheeseFormRecipe.java b/common/src/main/java/com/pandaismyname1/emiletsdocompat/meadow/CheeseFormRecipe.java new file mode 100644 index 0000000..8cf9850 --- /dev/null +++ b/common/src/main/java/com/pandaismyname1/emiletsdocompat/meadow/CheeseFormRecipe.java @@ -0,0 +1,44 @@ +package com.pandaismyname1.emiletsdocompat.meadow; + +import com.pandaismyname1.emiletsdocompat.Emi_letsdo_compat; +import com.pandaismyname1.emiletsdocompat.utils.DisplayUtils; +import dev.architectury.utils.EnvExecutor; +import dev.architectury.utils.GameInstance; +import dev.emi.emi.api.recipe.BasicEmiRecipe; +import dev.emi.emi.api.render.EmiTexture; +import dev.emi.emi.api.stack.EmiIngredient; +import dev.emi.emi.api.stack.EmiStack; +import dev.emi.emi.api.widget.WidgetHolder; +import net.minecraft.core.RegistryAccess; + +import java.util.function.Supplier; + +public class CheeseFormRecipe extends BasicEmiRecipe { + protected static final Supplier REGISTRY_ACCESS = + EnvExecutor.getEnvSpecific(() -> () -> () -> GameInstance.getClient().player.level().registryAccess(), + () -> () -> () -> GameInstance.getServer().registryAccess()); + + public CheeseFormRecipe(net.satisfy.meadow.recipes.CheeseFormRecipe recipe) { + super(Emi_letsdo_compat.CHEESE_FORMING, recipe.getId(), 70, 18); + var ingredients = recipe.getIngredients(); + for (var ingredient : ingredients) { + this.inputs.add(EmiIngredient.of(ingredient)); + } + this.outputs.add(EmiStack.of(recipe.getResultItem(REGISTRY_ACCESS.get()))); + } + + @Override + public void addWidgets(WidgetHolder widgets) { + DisplayUtils.CreateWidget(this, widgets, this.inputs, this.outputs); + } + + @Override + public int getDisplayHeight() { + return 40; + } + + @Override + public int getDisplayWidth() { + return 140; + } +} \ No newline at end of file diff --git a/common/src/main/java/com/pandaismyname1/emiletsdocompat/meadow/CookingCauldronRecipe.java b/common/src/main/java/com/pandaismyname1/emiletsdocompat/meadow/CookingCauldronRecipe.java new file mode 100644 index 0000000..8d39bb0 --- /dev/null +++ b/common/src/main/java/com/pandaismyname1/emiletsdocompat/meadow/CookingCauldronRecipe.java @@ -0,0 +1,44 @@ +package com.pandaismyname1.emiletsdocompat.meadow; + +import com.pandaismyname1.emiletsdocompat.Emi_letsdo_compat; +import com.pandaismyname1.emiletsdocompat.utils.DisplayUtils; +import dev.architectury.utils.EnvExecutor; +import dev.architectury.utils.GameInstance; +import dev.emi.emi.api.recipe.BasicEmiRecipe; +import dev.emi.emi.api.render.EmiTexture; +import dev.emi.emi.api.stack.EmiIngredient; +import dev.emi.emi.api.stack.EmiStack; +import dev.emi.emi.api.widget.WidgetHolder; +import net.minecraft.core.RegistryAccess; + +import java.util.function.Supplier; + +public class CookingCauldronRecipe extends BasicEmiRecipe { + protected static final Supplier REGISTRY_ACCESS = + EnvExecutor.getEnvSpecific(() -> () -> () -> GameInstance.getClient().player.level().registryAccess(), + () -> () -> () -> GameInstance.getServer().registryAccess()); + + public CookingCauldronRecipe(net.satisfy.meadow.recipes.CookingCauldronRecipe recipe) { + super(Emi_letsdo_compat.COOKING_CAULDRON, recipe.getId(), 70, 18); + var ingredients = recipe.getIngredients(); + for (var ingredient : ingredients) { + this.inputs.add(EmiIngredient.of(ingredient)); + } + this.outputs.add(EmiStack.of(recipe.getResultItem(REGISTRY_ACCESS.get()))); + } + + @Override + public void addWidgets(WidgetHolder widgets) { + DisplayUtils.CreateWidget(this, widgets, this.inputs, this.outputs); + } + + @Override + public int getDisplayHeight() { + return 40; + } + + @Override + public int getDisplayWidth() { + return 140; + } +} \ No newline at end of file diff --git a/common/src/main/java/com/pandaismyname1/emiletsdocompat/meadow/FondueRecipe.java b/common/src/main/java/com/pandaismyname1/emiletsdocompat/meadow/FondueRecipe.java new file mode 100644 index 0000000..1bbae67 --- /dev/null +++ b/common/src/main/java/com/pandaismyname1/emiletsdocompat/meadow/FondueRecipe.java @@ -0,0 +1,44 @@ +package com.pandaismyname1.emiletsdocompat.meadow; + +import com.pandaismyname1.emiletsdocompat.Emi_letsdo_compat; +import com.pandaismyname1.emiletsdocompat.utils.DisplayUtils; +import dev.architectury.utils.EnvExecutor; +import dev.architectury.utils.GameInstance; +import dev.emi.emi.api.recipe.BasicEmiRecipe; +import dev.emi.emi.api.render.EmiTexture; +import dev.emi.emi.api.stack.EmiIngredient; +import dev.emi.emi.api.stack.EmiStack; +import dev.emi.emi.api.widget.WidgetHolder; +import net.minecraft.core.RegistryAccess; + +import java.util.function.Supplier; + +public class FondueRecipe extends BasicEmiRecipe { + protected static final Supplier REGISTRY_ACCESS = + EnvExecutor.getEnvSpecific(() -> () -> () -> GameInstance.getClient().player.level().registryAccess(), + () -> () -> () -> GameInstance.getServer().registryAccess()); + + public FondueRecipe(net.satisfy.meadow.recipes.FondueRecipe recipe) { + super(Emi_letsdo_compat.FONDUE, recipe.getId(), 70, 18); + var ingredients = recipe.getIngredients(); + for (var ingredient : ingredients) { + this.inputs.add(EmiIngredient.of(ingredient)); + } + this.outputs.add(EmiStack.of(recipe.getResultItem(REGISTRY_ACCESS.get()))); + } + + @Override + public void addWidgets(WidgetHolder widgets) { + DisplayUtils.CreateWidget(this, widgets, this.inputs, this.outputs); + } + + @Override + public int getDisplayHeight() { + return 40; + } + + @Override + public int getDisplayWidth() { + return 140; + } +} \ No newline at end of file diff --git a/common/src/main/java/com/pandaismyname1/emiletsdocompat/meadow/WoodcuttingRecipe.java b/common/src/main/java/com/pandaismyname1/emiletsdocompat/meadow/WoodcuttingRecipe.java new file mode 100644 index 0000000..b7aee9e --- /dev/null +++ b/common/src/main/java/com/pandaismyname1/emiletsdocompat/meadow/WoodcuttingRecipe.java @@ -0,0 +1,44 @@ +package com.pandaismyname1.emiletsdocompat.meadow; + +import com.pandaismyname1.emiletsdocompat.Emi_letsdo_compat; +import com.pandaismyname1.emiletsdocompat.utils.DisplayUtils; +import dev.architectury.utils.EnvExecutor; +import dev.architectury.utils.GameInstance; +import dev.emi.emi.api.recipe.BasicEmiRecipe; +import dev.emi.emi.api.render.EmiTexture; +import dev.emi.emi.api.stack.EmiIngredient; +import dev.emi.emi.api.stack.EmiStack; +import dev.emi.emi.api.widget.WidgetHolder; +import net.minecraft.core.RegistryAccess; + +import java.util.function.Supplier; + +public class WoodcuttingRecipe extends BasicEmiRecipe { + protected static final Supplier REGISTRY_ACCESS = + EnvExecutor.getEnvSpecific(() -> () -> () -> GameInstance.getClient().player.level().registryAccess(), + () -> () -> () -> GameInstance.getServer().registryAccess()); + + public WoodcuttingRecipe(net.satisfy.meadow.recipes.WoodcuttingRecipe recipe) { + super(Emi_letsdo_compat.WOODCUTTING, recipe.getId(), 70, 18); + var ingredients = recipe.getIngredients(); + for (var ingredient : ingredients) { + this.inputs.add(EmiIngredient.of(ingredient)); + } + this.outputs.add(EmiStack.of(recipe.getResultItem(REGISTRY_ACCESS.get()))); + } + + @Override + public void addWidgets(WidgetHolder widgets) { + DisplayUtils.CreateWidget(this, widgets, this.inputs, this.outputs); + } + + @Override + public int getDisplayHeight() { + return 40; + } + + @Override + public int getDisplayWidth() { + return 140; + } +} \ No newline at end of file diff --git a/common/src/main/java/com/pandaismyname1/emiletsdocompat/utils/DisplayUtils.java b/common/src/main/java/com/pandaismyname1/emiletsdocompat/utils/DisplayUtils.java new file mode 100644 index 0000000..e2ad744 --- /dev/null +++ b/common/src/main/java/com/pandaismyname1/emiletsdocompat/utils/DisplayUtils.java @@ -0,0 +1,47 @@ +package com.pandaismyname1.emiletsdocompat.utils; + +import dev.emi.emi.api.recipe.BasicEmiRecipe; +import dev.emi.emi.api.render.EmiTexture; +import dev.emi.emi.api.stack.EmiIngredient; +import dev.emi.emi.api.stack.EmiStack; +import dev.emi.emi.api.widget.WidgetHolder; + +import java.util.List; + +public class DisplayUtils { + public static void CreateWidget(BasicEmiRecipe recipe, WidgetHolder display, List inputs, List outputs) { + var inputCount = inputs.size(); + var outputCount = outputs.size(); + var inputCols = inputCount > 1 ? 2 : 1; + var outputCols = outputCount > 1 ? 2 : 1; + var inputX = 0; + var inputY = 0; + var itemSize = 20; + var spacing = 2; + for (var i = 0; i < inputCount; i++) { + var input = inputs.get(i); + display.addSlot(input, inputX, inputY); + inputX += itemSize + spacing; + if (inputX >= itemSize * inputCols) { + inputX = 0; + inputY += itemSize + spacing; + } + } + + // Add an arrow texture to indicate processing + display.addTexture(EmiTexture.EMPTY_ARROW, 60, 10); + + var outputX = 140 - (itemSize * outputCols) - (spacing * (outputCols - 1)); + var outputY = 0; + for (var i = 0; i < outputCount; i++) { + var output = outputs.get(i); + display.addSlot(output, outputX, outputY).recipeContext(recipe); + outputX += itemSize + spacing; + if (outputX >= itemSize * outputCols) { + outputX = inputX + 30; + outputY += itemSize + spacing; + } + } + + } +} diff --git a/common/src/main/java/com/pandaismyname1/emiletsdocompat/vinery/ApplePressingRecipe.java b/common/src/main/java/com/pandaismyname1/emiletsdocompat/vinery/ApplePressingRecipe.java new file mode 100644 index 0000000..1b600aa --- /dev/null +++ b/common/src/main/java/com/pandaismyname1/emiletsdocompat/vinery/ApplePressingRecipe.java @@ -0,0 +1,44 @@ +package com.pandaismyname1.emiletsdocompat.vinery; + +import com.pandaismyname1.emiletsdocompat.Emi_letsdo_compat; +import com.pandaismyname1.emiletsdocompat.utils.DisplayUtils; +import dev.architectury.utils.EnvExecutor; +import dev.architectury.utils.GameInstance; +import dev.emi.emi.api.recipe.BasicEmiRecipe; +import dev.emi.emi.api.render.EmiTexture; +import dev.emi.emi.api.stack.EmiIngredient; +import dev.emi.emi.api.stack.EmiStack; +import dev.emi.emi.api.widget.WidgetHolder; +import net.minecraft.core.RegistryAccess; + +import java.util.function.Supplier; + +public class ApplePressingRecipe extends BasicEmiRecipe { + protected static final Supplier REGISTRY_ACCESS = + EnvExecutor.getEnvSpecific(() -> () -> () -> GameInstance.getClient().player.level().registryAccess(), + () -> () -> () -> GameInstance.getServer().registryAccess()); + + public ApplePressingRecipe(net.satisfy.vinery.recipe.ApplePressRecipe recipe) { + super(Emi_letsdo_compat.APPLE_PRESS, recipe.getId(), 70, 18); + var ingredients = recipe.getIngredients(); + for (var ingredient : ingredients) { + this.inputs.add(EmiIngredient.of(ingredient)); + } + this.outputs.add(EmiStack.of(recipe.getResultItem(REGISTRY_ACCESS.get()))); + } + + @Override + public void addWidgets(WidgetHolder widgets) { + DisplayUtils.CreateWidget(this, widgets, this.inputs, this.outputs); + } + + @Override + public int getDisplayHeight() { + return 40; + } + + @Override + public int getDisplayWidth() { + return 140; + } +} \ No newline at end of file diff --git a/common/src/main/java/com/pandaismyname1/emiletsdocompat/vinery/FermentationRecipe.java b/common/src/main/java/com/pandaismyname1/emiletsdocompat/vinery/FermentationRecipe.java new file mode 100644 index 0000000..0203305 --- /dev/null +++ b/common/src/main/java/com/pandaismyname1/emiletsdocompat/vinery/FermentationRecipe.java @@ -0,0 +1,44 @@ +package com.pandaismyname1.emiletsdocompat.vinery; + +import com.pandaismyname1.emiletsdocompat.Emi_letsdo_compat; +import com.pandaismyname1.emiletsdocompat.utils.DisplayUtils; +import dev.architectury.utils.EnvExecutor; +import dev.architectury.utils.GameInstance; +import dev.emi.emi.api.recipe.BasicEmiRecipe; +import dev.emi.emi.api.render.EmiTexture; +import dev.emi.emi.api.stack.EmiIngredient; +import dev.emi.emi.api.stack.EmiStack; +import dev.emi.emi.api.widget.WidgetHolder; +import net.minecraft.core.RegistryAccess; + +import java.util.function.Supplier; + +public class FermentationRecipe extends BasicEmiRecipe { + protected static final Supplier REGISTRY_ACCESS = + EnvExecutor.getEnvSpecific(() -> () -> () -> GameInstance.getClient().player.level().registryAccess(), + () -> () -> () -> GameInstance.getServer().registryAccess()); + + public FermentationRecipe(net.satisfy.vinery.recipe.FermentationBarrelRecipe recipe) { + super(Emi_letsdo_compat.FERMENTATION, recipe.getId(), 70, 18); + var ingredients = recipe.getIngredients(); + for (var ingredient : ingredients) { + this.inputs.add(EmiIngredient.of(ingredient)); + } + this.outputs.add(EmiStack.of(recipe.getResultItem(REGISTRY_ACCESS.get()))); + } + + @Override + public void addWidgets(WidgetHolder widgets) { + DisplayUtils.CreateWidget(this, widgets, this.inputs, this.outputs); + } + + @Override + public int getDisplayHeight() { + return 40; + } + + @Override + public int getDisplayWidth() { + return 140; + } +} \ No newline at end of file diff --git a/common/src/main/resources/assets/emi_letsdo_compat/lang/en_us.json b/common/src/main/resources/assets/emi_letsdo_compat/lang/en_us.json new file mode 100644 index 0000000..852dbda --- /dev/null +++ b/common/src/main/resources/assets/emi_letsdo_compat/lang/en_us.json @@ -0,0 +1,20 @@ +{ + "emi.category.vinery.fermentation": "Fermentation", + "emi.category.vinery.apple_mashing": "Apple Mashing", + "emi.category.bakery.baking_station": "Baking Station", + "emi.category.bakery.crafting_bowl": "Crafting Bowl", + "emi.category.bakery.stove": "Stove", + "emi.category.bakery.pot_cooking": "Pot Cooking", + "emi.category.beachparty.mini_fridge_mixing": "Mini Fridge Mixing", + "emi.category.beachparty.tiki_bar_mixing": "Tiki Bar Mixing", + "emi.category.brewery.brewing": "Brewing", + "emi.category.brewery.drying": "Drying", + "emi.category.candlelight.pan_cooking": "Pan Cooking", + "emi.category.candlelight.pot_cooking": "Pot Cooking", + "emi.category.herbalbrews.cauldron_brewing": "Cauldron Brewing", + "emi.category.herbalbrews.kettle_brewing": "Kettle Brewing", + "emi.category.meadow.cheese": "Cheese Forming", + "emi.category.meadow.cooking": "Cooking Cauldron", + "emi.category.meadow.fondue": "Fondue", + "emi.category.meadow.woodcutting": "Woodcutting" +} \ No newline at end of file diff --git a/common/src/main/resources/emi_letsdo_compat-common.mixins.json b/common/src/main/resources/emi_letsdo_compat-common.mixins.json new file mode 100644 index 0000000..59eeefb --- /dev/null +++ b/common/src/main/resources/emi_letsdo_compat-common.mixins.json @@ -0,0 +1,13 @@ +{ + "required": true, + "minVersion": "0.8", + "package": "com.pandaismyname1.emi_letsdo_compat.mixin", + "compatibilityLevel": "JAVA_17", + "mixins": [ + ], + "client": [ + ], + "injectors": { + "defaultRequire": 1 + } +} diff --git a/fabric/build.gradle b/fabric/build.gradle new file mode 100644 index 0000000..0897c6c --- /dev/null +++ b/fabric/build.gradle @@ -0,0 +1,93 @@ +plugins { + id "com.github.johnrengelman.shadow" version "7.1.2" +} + +architectury { + platformSetupLoomIde() + fabric() +} + +configurations { + common + shadowCommon // Don't use shadow from the shadow plugin since it *excludes* files. + compileClasspath.extendsFrom common + runtimeClasspath.extendsFrom common + developmentFabric.extendsFrom common +} + +dependencies { + repositories { + maven { + name = "TerraformersMC" + url = "https://maven.terraformersmc.com/" + } + maven { + url "https://cursemaven.com" + } + } + modImplementation "net.fabricmc:fabric-loader:${rootProject.fabric_loader_version}" + modApi "net.fabricmc.fabric-api:fabric-api:${rootProject.fabric_api_version}" + // Remove the next line if you don't want to depend on the API + modApi "dev.architectury:architectury-fabric:${rootProject.architectury_version}" + + common(project(path: ":common", configuration: "namedElements")) { transitive false } + shadowCommon(project(path: ":common", configuration: "transformProductionFabric")) { transitive false } + modImplementation "curse.maven:lets-do-vinery-704465:5504122" + modImplementation "curse.maven:lets-do-bakery-886559:5528401" + modImplementation "curse.maven:lets-do-meadow-821483:5504104" + modImplementation "curse.maven:lets-do-nethervinery-930072:5467443" + modImplementation "curse.maven:lets-do-candlelight-846962:5427654" + modImplementation "curse.maven:lets-do-brewery-971636:5427505" + modImplementation "curse.maven:lets-do-herbal-brews-951221:5400096" + modImplementation "curse.maven:lets-do-beachparty-858691:5320667" +} + +processResources { + inputs.property "version", project.version + + filesMatching("fabric.mod.json") { + expand "version": project.version + } +} + +shadowJar { + configurations = [project.configurations.shadowCommon] + archiveClassifier = "dev-shadow" +} + +remapJar { + injectAccessWidener = true + inputFile.set(shadowJar.archiveFile) + dependsOn shadowJar + archiveClassifier = null +} + +jar { + archiveClassifier.set("dev") +} + +sourcesJar { + def commonSources = project(":common").sourcesJar + dependsOn commonSources + from commonSources.archiveFile.map { zipTree(it) } +} + +components.java { + withVariantsFromConfiguration(project.configurations.shadowRuntimeElements) { + skip() + } +} + +publishing { + publications { + mavenFabric(MavenPublication) { + artifactId = rootProject.archives_base_name + "-" + project.name + from components.java + } + } + + // See https://docs.gradle.org/current/userguide/publishing_maven.html for information on how to set up publishing. + repositories { + // Add repositories to publish to here. + } +} diff --git a/fabric/src/main/java/com/pandaismyname1/emiletsdocompat/fabric/Emi_letsdo_compatFabric.java b/fabric/src/main/java/com/pandaismyname1/emiletsdocompat/fabric/Emi_letsdo_compatFabric.java new file mode 100644 index 0000000..3387276 --- /dev/null +++ b/fabric/src/main/java/com/pandaismyname1/emiletsdocompat/fabric/Emi_letsdo_compatFabric.java @@ -0,0 +1,9 @@ +package com.pandaismyname1.emiletsdocompat.fabric; + +import net.fabricmc.api.ModInitializer; + +public class Emi_letsdo_compatFabric implements ModInitializer { + @Override + public void onInitialize() { + } +} \ No newline at end of file diff --git a/fabric/src/main/resources/emi_letsdo_compat.mixins.json b/fabric/src/main/resources/emi_letsdo_compat.mixins.json new file mode 100644 index 0000000..6e14eb0 --- /dev/null +++ b/fabric/src/main/resources/emi_letsdo_compat.mixins.json @@ -0,0 +1,13 @@ +{ + "required": true, + "minVersion": "0.8", + "package": "com.pandaismyname1.emi_letsdo_compat.fabric.mixin", + "compatibilityLevel": "JAVA_17", + "mixins": [ + ], + "client": [ + ], + "injectors": { + "defaultRequire": 1 + } +} diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json new file mode 100644 index 0000000..75b2aab --- /dev/null +++ b/fabric/src/main/resources/fabric.mod.json @@ -0,0 +1,28 @@ +{ + "schemaVersion": 1, + "id": "emi_letsdo_compat", + "version": "${version}", + + "name": "emi-letsdo-compat", + "description": "", + "authors": [], + "contact": {}, + + "license": "MIT", + "icon": "icon.png", + + "environment": "*", + "entrypoints": { + "main": [ + "com.pandaismyname1.emi_letsdo_compat.fabric.Emi_letsdo_compatFabric" + ] + }, + "mixins": [ + "emi_letsdo_compat.mixins.json", + "emi_letsdo_compat-common.mixins.json" + ], + "depends": { + "fabricloader": ">=0.16.0", + "minecraft": ">=1.20.1" + } +} diff --git a/forge/build.gradle b/forge/build.gradle new file mode 100644 index 0000000..91e883d --- /dev/null +++ b/forge/build.gradle @@ -0,0 +1,101 @@ +plugins { + id "com.github.johnrengelman.shadow" version "7.1.2" +} +loom { + forge { + mixinConfig "emi_letsdo_compat-common.mixins.json" + mixinConfig "emi_letsdo_compat.mixins.json" + } +} +architectury { + platformSetupLoomIde() + forge() +} + +configurations { + common + shadowCommon // Don't use shadow from the shadow plugin since it *excludes* files. + compileClasspath.extendsFrom common + runtimeClasspath.extendsFrom common + developmentForge.extendsFrom common +} + +dependencies { + repositories { + maven { + name = "TerraformersMC" + url = "https://maven.terraformersmc.com/" + } + repositories { + maven { + url "https://cursemaven.com" + } + } + } + + forge "net.minecraftforge:forge:${rootProject.forge_version}" + // Remove the next line if you don't want to depend on the API + modApi "dev.architectury:architectury-forge:${rootProject.architectury_version}" + + common(project(path: ":common", configuration: "namedElements")) { transitive false } + shadowCommon(project(path: ":common", configuration: "transformProductionForge")) { transitive = false } + modImplementation "curse.maven:lets-do-vinery-704465:5504123" + modImplementation "curse.maven:lets-do-bakery-886559:5528402" + modImplementation "curse.maven:lets-do-meadow-821483:5504102" + modImplementation "curse.maven:lets-do-nethervinery-930072:5467444" + modImplementation "curse.maven:lets-do-candlelight-846962:5427646" + modImplementation "curse.maven:lets-do-brewery-971636:5427504" + modImplementation "curse.maven:lets-do-herbal-brews-951221:5397666" + modImplementation "curse.maven:lets-do-beachparty-858691:5320668" +} + +processResources { + inputs.property "version", project.version + + filesMatching("META-INF/mods.toml") { + expand "version": project.version + } +} + +shadowJar { + exclude "fabric.mod.json" + + configurations = [project.configurations.shadowCommon] + archiveClassifier = "dev-shadow" +} + +remapJar { + inputFile.set(shadowJar.archiveFile) + dependsOn shadowJar + archiveClassifier.set(null) +} + +jar { + archiveClassifier.set("dev") +} + +sourcesJar { + def commonSources = project(":common").sourcesJar + dependsOn commonSources + from commonSources.archiveFile.map { zipTree(it) } +} + +components.java { + withVariantsFromConfiguration(project.configurations.shadowRuntimeElements) { + skip() + } +} + +publishing { + publications { + mavenForge(MavenPublication) { + artifactId = rootProject.archives_base_name + "-" + project.name + from components.java + } + } + + // See https://docs.gradle.org/current/userguide/publishing_maven.html for information on how to set up publishing. + repositories { + // Add repositories to publish to here. + } +} diff --git a/forge/gradle.properties b/forge/gradle.properties new file mode 100644 index 0000000..32f842a --- /dev/null +++ b/forge/gradle.properties @@ -0,0 +1 @@ +loom.platform=forge \ No newline at end of file diff --git a/forge/src/main/java/com/pandaismyname1/emiletsdocompat/forge/Emi_letsdo_compatForge.java b/forge/src/main/java/com/pandaismyname1/emiletsdocompat/forge/Emi_letsdo_compatForge.java new file mode 100644 index 0000000..3f579a1 --- /dev/null +++ b/forge/src/main/java/com/pandaismyname1/emiletsdocompat/forge/Emi_letsdo_compatForge.java @@ -0,0 +1,14 @@ +package com.pandaismyname1.emiletsdocompat.forge; + +import com.pandaismyname1.emiletsdocompat.Emi_letsdo_compat; +import dev.architectury.platform.forge.EventBuses; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; + +@Mod(Emi_letsdo_compat.MOD_ID) +public class Emi_letsdo_compatForge { + public Emi_letsdo_compatForge() { + // Submit our event bus to let architectury register our content on the right time + EventBuses.registerModEventBus(Emi_letsdo_compat.MOD_ID, FMLJavaModLoadingContext.get().getModEventBus()); + } +} \ No newline at end of file diff --git a/forge/src/main/resources/META-INF/mods.toml b/forge/src/main/resources/META-INF/mods.toml new file mode 100644 index 0000000..207ab3f --- /dev/null +++ b/forge/src/main/resources/META-INF/mods.toml @@ -0,0 +1,66 @@ +# This is an example mods.toml file. It contains the data relating to the loading mods. +# There are several mandatory fields (#mandatory), and many more that are optional (#optional). +# The overall format is standard TOML format, v0.5.0. +# Note that there are a couple of TOML lists in this file. +# Find more information on toml format here: https://github.com/toml-lang/toml +# The name of the mod loader type to load - for regular FML @Mod mods it should be javafml +modLoader="javafml" #mandatory +# A version range to match for said mod loader - for regular FML @Mod it will be the forge version +loaderVersion="[47,)" #mandatory This is typically bumped every Minecraft version by Forge. See our download page for lists of versions. +# The license for you mod. This is mandatory metadata and allows for easier comprehension of your redistributive properties. +# Review your options at https://choosealicense.com/. All rights reserved is the default copyright stance, and is thus the default here. +license="MIT" +# A URL to refer people to when problems occur with this mod +issueTrackerURL="https://github.emi-letsdo-compatom/pandaismyname1/originvisuals/issues" +# A list of mods - how many allowed here is determined by the individual mod loader +[[mods]] #mandatory +# The modid of the mod +modId="emi_letsdo_compat" #mandatory +# The version number of the mod - there's a few well known ${} variables useable here or just hardcode it +# ${version} will substitute the value of the Implementation-Version as read from the mod's JAR file metadata +# see the associated build.gradle script for how to populate this completely automatically during a build +version="${version}" #mandatory +# A display name for the mod +displayName="emi-letsdo-compat" #mandatory +# A URL to query for updates for this mod. See the JSON update specification +#updateJSONURL="http://myurl.me/" #optional +# A URL for the "homepage" for this mod, displayed in the mod UI +#displayURL="http://example.com/" #optional +# A file name (in the root of the mod JAR) containing a logo for display +logoFile="icon.png" #optional +# A text field displayed in the mod UI +#credits="Thanks for this example mod goes to Java" #optional +# A text field displayed in the mod UI +#authors="Love, Cheese and small house plants" #optional +# Display Test controls the display for your mod in the server connection screen +# MATCH_VERSION means that your mod will cause a red X if the versions on client and server differ. This is the default behaviour and should be what you choose if you have server and client elements to your mod. +# IGNORE_SERVER_VERSION means that your mod will not cause a red X if it's present on the server but not on the client. This is what you should use if you're a server only mod. +# IGNORE_ALL_VERSION means that your mod will not cause a red X if it's present on the client or the server. This is a special case and should only be used if your mod has no server component. +# NONE means that no display test is set on your mod. You need to do this yourself, see IExtensionPoint.DisplayTest for more information. You can define any scheme you wish with this value. +# IMPORTANT NOTE: this is NOT an instruction as to which environments (CLIENT or DEDICATED SERVER) your mod loads on. Your mod should load (and maybe do nothing!) whereever it finds itself. +#displayTest="MATCH_VERSION" # MATCH_VERSION is the default if nothing is specified (#optional) + +# The description text for the mod (multi line!) (#mandatory) +description=''' + +''' +# A dependency - use the . to indicate dependency for a specific modid. Dependencies are optional. +[[dependencies.emi_letsdo_compat]] #optional + # the modid of the dependency + modId="forge" #mandatory + # Does this dependency have to exist - if not, ordering below must be specified + mandatory=true #mandatory + # The version range of the dependency + versionRange="[47,)" #mandatory + # An ordering relationship for the dependency - BEFORE or AFTER required if the relationship is not mandatory + ordering="NONE" + # Side this dependency is applied on - BOTH, CLIENT or SERVER + side="BOTH" +# Here's another dependency +[[dependencies.emi_letsdo_compat]] + modId="minecraft" + mandatory=true + # This version range declares a minimum of the current minecraft version up to but not including the next major version + versionRange="[1.20.1,1.21)" + ordering="NONE" + side="BOTH" diff --git a/forge/src/main/resources/emi_letsdo_compat.mixins.json b/forge/src/main/resources/emi_letsdo_compat.mixins.json new file mode 100644 index 0000000..170f2ba --- /dev/null +++ b/forge/src/main/resources/emi_letsdo_compat.mixins.json @@ -0,0 +1,13 @@ +{ + "required": true, + "minVersion": "0.8", + "package": "com.pandaismyname1.emi_letsdo_compat.forge.mixin", + "compatibilityLevel": "JAVA_17", + "mixins": [ + ], + "client": [ + ], + "injectors": { + "defaultRequire": 1 + } +} diff --git a/forge/src/main/resources/pack.mcmeta b/forge/src/main/resources/pack.mcmeta new file mode 100644 index 0000000..44cfbdc --- /dev/null +++ b/forge/src/main/resources/pack.mcmeta @@ -0,0 +1,7 @@ +{ + "pack": { + "description": "emi-letsdo-compat resources", + "pack_format": 15, + "forge:server_data_pack_format": 12 + } +} diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 0000000..c3a9807 --- /dev/null +++ b/gradle.properties @@ -0,0 +1,16 @@ +org.gradle.jvmargs=-Xmx2048M + +minecraft_version=1.20.1 +enabled_platforms=fabric,forge + +archives_base_name=emi-letsdo-compat +mod_version=1.0 +maven_group=com.pandaismyname1 + +architectury_version=9.2.14 + +fabric_loader_version=0.16.0 +fabric_api_version=0.92.2+1.20.1 + +forge_version=1.20.1-47.2.20 +emi_version=1.0.5 \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..e4b762d --- /dev/null +++ b/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1 @@ +distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip diff --git a/settings.gradle b/settings.gradle new file mode 100644 index 0000000..06a89e4 --- /dev/null +++ b/settings.gradle @@ -0,0 +1,12 @@ +pluginManagement { + repositories { + maven { url "https://maven.fabricmc.net/" } + maven { url "https://maven.architectury.dev/" } + maven { url "https://maven.minecraftforge.net/" } + gradlePluginPortal() + } +} + +include("common") +include("fabric") +include("forge") \ No newline at end of file