From 2411b9bb1ffc7bddb1b1804903c594f595d7803a Mon Sep 17 00:00:00 2001 From: MerchantPug <81167232+MerchantPug@users.noreply.github.com> Date: Sat, 24 Aug 2024 04:10:05 +1000 Subject: [PATCH 1/9] Add EMI compat. --- build.gradle | 6 + gradle.properties | 3 +- .../integration/emi/EMIPlugin.java | 42 ++++++ .../integration/emi/FDRecipeCategories.java | 20 +++ .../integration/emi/FDRecipeWorkstations.java | 10 ++ .../handler/CookingPotEmiRecipeHandler.java | 49 +++++++ .../emi/recipe/CookingPotEmiRecipe.java | 130 ++++++++++++++++++ .../emi/recipe/CuttingEmiRecipe.java | 87 ++++++++++++ .../emi/recipe/DecompositionEmiRecipe.java | 90 ++++++++++++ .../assets/farmersdelight/lang/en_us.json | 68 ++++++++- .../textures/gui/emi/simplified.png | Bin 0 -> 177 bytes 11 files changed, 503 insertions(+), 2 deletions(-) create mode 100644 src/main/java/vectorwing/farmersdelight/integration/emi/EMIPlugin.java create mode 100644 src/main/java/vectorwing/farmersdelight/integration/emi/FDRecipeCategories.java create mode 100644 src/main/java/vectorwing/farmersdelight/integration/emi/FDRecipeWorkstations.java create mode 100644 src/main/java/vectorwing/farmersdelight/integration/emi/handler/CookingPotEmiRecipeHandler.java create mode 100644 src/main/java/vectorwing/farmersdelight/integration/emi/recipe/CookingPotEmiRecipe.java create mode 100644 src/main/java/vectorwing/farmersdelight/integration/emi/recipe/CuttingEmiRecipe.java create mode 100644 src/main/java/vectorwing/farmersdelight/integration/emi/recipe/DecompositionEmiRecipe.java create mode 100644 src/main/resources/assets/farmersdelight/textures/gui/emi/simplified.png diff --git a/build.gradle b/build.gradle index a6dd1fa55..6a2370afe 100644 --- a/build.gradle +++ b/build.gradle @@ -108,6 +108,10 @@ repositories { url = "https://maven.blamejared.com/" } maven { url "https://maven.ryanliptak.com/" } + maven { + // EMI + url = "https://maven.terraformersmc.com/" + } } sourceSets.main.resources { @@ -126,6 +130,8 @@ dependencies { compileOnly fg.deobf("squeek.appleskin:appleskin-forge:${appleskin_version}:api") runtimeOnly fg.deobf("squeek.appleskin:appleskin-forge:${appleskin_version}") + compileOnly fg.deobf("dev.emi:emi-forge:${emi_version}:api") + def ctDep = fg.deobf("com.blamejared.crafttweaker:CraftTweaker-forge-1.20.1:${crafttweaker_version}") compileOnly ctDep runtimeOnly ctDep diff --git a/gradle.properties b/gradle.properties index 93104419b..954ecb81e 100644 --- a/gradle.properties +++ b/gradle.properties @@ -10,6 +10,7 @@ forge_version=47.1.0 # Dependency Info jei_version=15.0.0.12 +emi_version=1.1.12+1.20.1 appleskin_version=mc1.20.1-2.5.0 crafttweaker_version=14.0.6 -crafttweaker_ap_version=3.0.0.15 +crafttweaker_ap_version=3.0.0.15 \ No newline at end of file diff --git a/src/main/java/vectorwing/farmersdelight/integration/emi/EMIPlugin.java b/src/main/java/vectorwing/farmersdelight/integration/emi/EMIPlugin.java new file mode 100644 index 000000000..943bd40cf --- /dev/null +++ b/src/main/java/vectorwing/farmersdelight/integration/emi/EMIPlugin.java @@ -0,0 +1,42 @@ +package vectorwing.farmersdelight.integration.emi; + +import dev.emi.emi.api.EmiEntrypoint; +import dev.emi.emi.api.EmiPlugin; +import dev.emi.emi.api.EmiRegistry; +import dev.emi.emi.api.stack.EmiIngredient; +import dev.emi.emi.api.stack.EmiStack; +import net.minecraft.client.Minecraft; +import vectorwing.farmersdelight.common.crafting.CookingPotRecipe; +import vectorwing.farmersdelight.common.crafting.CuttingBoardRecipe; +import vectorwing.farmersdelight.common.registry.ModMenuTypes; +import vectorwing.farmersdelight.common.registry.ModRecipeTypes; +import vectorwing.farmersdelight.integration.emi.handler.CookingPotEmiRecipeHandler; +import vectorwing.farmersdelight.integration.emi.recipe.CookingPotEmiRecipe; +import vectorwing.farmersdelight.integration.emi.recipe.CuttingEmiRecipe; +import vectorwing.farmersdelight.integration.emi.recipe.DecompositionEmiRecipe; + +@EmiEntrypoint +public class EMIPlugin implements EmiPlugin { + + @Override + public void register(EmiRegistry registry) { + registry.addCategory(FDRecipeCategories.COOKING); + registry.addCategory(FDRecipeCategories.CUTTING); + registry.addCategory(FDRecipeCategories.DECOMPOSITION); + + registry.addWorkstation(FDRecipeCategories.COOKING, FDRecipeWorkstations.COOKING_POT); + registry.addWorkstation(FDRecipeCategories.CUTTING, FDRecipeWorkstations.CUTTING_BOARD); + registry.addRecipeHandler(ModMenuTypes.COOKING_POT.get(), new CookingPotEmiRecipeHandler()); + + for (CookingPotRecipe recipe : registry.getRecipeManager().getAllRecipesFor(ModRecipeTypes.COOKING.get())) { + registry.addRecipe(new CookingPotEmiRecipe(recipe.getId(), recipe.getIngredients().stream().map(EmiIngredient::of).toList(), + EmiStack.of(recipe.getResultItem(Minecraft.getInstance().level.registryAccess())), EmiStack.of(recipe.getOutputContainer()), recipe.getCookTime(), recipe.getExperience())); + } + + for (CuttingBoardRecipe recipe : registry.getRecipeManager().getAllRecipesFor(ModRecipeTypes.CUTTING.get())) { + registry.addRecipe(new CuttingEmiRecipe(recipe.getId(), EmiIngredient.of(recipe.getTool()), EmiIngredient.of(recipe.getIngredients().get(0)), + recipe.getRollableResults().stream().map(chanceResult -> EmiStack.of(chanceResult.getStack()).setChance(chanceResult.getChance())).toList())); + } + registry.addRecipe(new DecompositionEmiRecipe()); + } +} diff --git a/src/main/java/vectorwing/farmersdelight/integration/emi/FDRecipeCategories.java b/src/main/java/vectorwing/farmersdelight/integration/emi/FDRecipeCategories.java new file mode 100644 index 000000000..d2a379eec --- /dev/null +++ b/src/main/java/vectorwing/farmersdelight/integration/emi/FDRecipeCategories.java @@ -0,0 +1,20 @@ +package vectorwing.farmersdelight.integration.emi; + +import dev.emi.emi.api.recipe.EmiRecipeCategory; +import dev.emi.emi.api.render.EmiRenderable; +import net.minecraft.resources.ResourceLocation; +import vectorwing.farmersdelight.FarmersDelight; + +public class FDRecipeCategories { + private static final ResourceLocation SIMPLIFIED_TEXTURES = new ResourceLocation(FarmersDelight.MODID, "textures/gui/emi/simplified.png"); + + public static final EmiRecipeCategory COOKING = new EmiRecipeCategory(new ResourceLocation(FarmersDelight.MODID, "cooking"), FDRecipeWorkstations.COOKING_POT, simplifiedRenderer(0, 0)); + public static final EmiRecipeCategory CUTTING = new EmiRecipeCategory(new ResourceLocation(FarmersDelight.MODID, "cutting"), FDRecipeWorkstations.CUTTING_BOARD, simplifiedRenderer(16, 0)); + public static final EmiRecipeCategory DECOMPOSITION = new EmiRecipeCategory(new ResourceLocation(FarmersDelight.MODID, "decomposition"), FDRecipeWorkstations.ORGANIC_COMPOST, simplifiedRenderer(32, 0)); + + private static EmiRenderable simplifiedRenderer(int u, int v) { + return (draw, x, y, delta) -> { + draw.blit(SIMPLIFIED_TEXTURES, x, y, u, v, 16, 16, 48, 16); + }; + } +} diff --git a/src/main/java/vectorwing/farmersdelight/integration/emi/FDRecipeWorkstations.java b/src/main/java/vectorwing/farmersdelight/integration/emi/FDRecipeWorkstations.java new file mode 100644 index 000000000..7a2125bd5 --- /dev/null +++ b/src/main/java/vectorwing/farmersdelight/integration/emi/FDRecipeWorkstations.java @@ -0,0 +1,10 @@ +package vectorwing.farmersdelight.integration.emi; + +import dev.emi.emi.api.stack.EmiStack; +import vectorwing.farmersdelight.common.registry.ModItems; + +public class FDRecipeWorkstations { + public static final EmiStack COOKING_POT = EmiStack.of(ModItems.COOKING_POT.get()); + public static final EmiStack CUTTING_BOARD = EmiStack.of(ModItems.CUTTING_BOARD.get()); + public static final EmiStack ORGANIC_COMPOST = EmiStack.of(ModItems.ORGANIC_COMPOST.get()); +} diff --git a/src/main/java/vectorwing/farmersdelight/integration/emi/handler/CookingPotEmiRecipeHandler.java b/src/main/java/vectorwing/farmersdelight/integration/emi/handler/CookingPotEmiRecipeHandler.java new file mode 100644 index 000000000..a2540588a --- /dev/null +++ b/src/main/java/vectorwing/farmersdelight/integration/emi/handler/CookingPotEmiRecipeHandler.java @@ -0,0 +1,49 @@ +package vectorwing.farmersdelight.integration.emi.handler; + +import dev.emi.emi.api.recipe.EmiRecipe; +import dev.emi.emi.api.recipe.handler.StandardRecipeHandler; +import net.minecraft.world.inventory.Slot; +import org.jetbrains.annotations.Nullable; +import vectorwing.farmersdelight.common.block.entity.container.CookingPotMenu; +import vectorwing.farmersdelight.integration.emi.FDRecipeCategories; + +import java.util.ArrayList; +import java.util.List; + +public class CookingPotEmiRecipeHandler implements StandardRecipeHandler { + @Override + public List getInputSources(CookingPotMenu handler) { + List slots = new ArrayList<>(); + + for (int i = 0; i < 7; ++i) { + slots.add(handler.getSlot(i)); + } + + for (int i = 9; i < 9 + 36; ++i) { + slots.add(handler.getSlot(i)); + } + + return slots; + } + + @Override + public List getCraftingSlots(CookingPotMenu handler) { + List slots = new ArrayList<>(); + + for (int i = 0; i < 7; ++i) { + slots.add(handler.getSlot(i)); + } + + return slots; + } + + @Override + public @Nullable Slot getOutputSlot(CookingPotMenu handler) { + return handler.slots.get(8); + } + + @Override + public boolean supportsRecipe(EmiRecipe recipe) { + return recipe.getCategory() == FDRecipeCategories.COOKING && recipe.supportsRecipeTree(); + } +} diff --git a/src/main/java/vectorwing/farmersdelight/integration/emi/recipe/CookingPotEmiRecipe.java b/src/main/java/vectorwing/farmersdelight/integration/emi/recipe/CookingPotEmiRecipe.java new file mode 100644 index 000000000..718c28019 --- /dev/null +++ b/src/main/java/vectorwing/farmersdelight/integration/emi/recipe/CookingPotEmiRecipe.java @@ -0,0 +1,130 @@ +package vectorwing.farmersdelight.integration.emi.recipe; + +import dev.emi.emi.api.recipe.EmiRecipe; +import dev.emi.emi.api.recipe.EmiRecipeCategory; +import dev.emi.emi.api.stack.EmiIngredient; +import dev.emi.emi.api.stack.EmiStack; +import dev.emi.emi.api.widget.SlotWidget; +import dev.emi.emi.api.widget.WidgetHolder; +import net.minecraft.client.gui.screens.inventory.tooltip.ClientTooltipComponent; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; +import org.jetbrains.annotations.Nullable; +import vectorwing.farmersdelight.FarmersDelight; +import vectorwing.farmersdelight.common.utility.ClientRenderUtils; +import vectorwing.farmersdelight.integration.emi.FDRecipeCategories; + +import java.util.ArrayList; +import java.util.List; + +public class CookingPotEmiRecipe implements EmiRecipe { + private static final ResourceLocation BACKGROUND = new ResourceLocation(FarmersDelight.MODID, "textures/gui/cooking_pot.png"); + + private final ResourceLocation id; + private final List inputs; + private final EmiStack output; + private final EmiStack container; + private final int cookTime; + private final float experience; + private final List tooltipComponents; + + public CookingPotEmiRecipe(ResourceLocation id, List inputs, EmiStack output, + EmiStack container, int cookTime, float experience) { + this.id = id; + this.inputs = inputs; + this.output = output; + this.container = container; + this.cookTime = cookTime; + this.experience = experience; + this.tooltipComponents = createTooltipComponents(); + } + + private List createTooltipComponents() { + List tooltipStrings = new ArrayList<>(); + + if (cookTime > 0) { + int cookTimeSeconds = cookTime / 20; + tooltipStrings.add(ClientTooltipComponent.create(Component.translatable("emi.cooking.time", cookTimeSeconds).getVisualOrderText())); + } + if (experience > 0) { + tooltipStrings.add(ClientTooltipComponent.create(Component.translatable("emi.cooking.experience", experience).getVisualOrderText())); + } + + return tooltipStrings; + } + + @Override + public EmiRecipeCategory getCategory() { + return FDRecipeCategories.COOKING; + } + + @Override + public @Nullable ResourceLocation getId() { + return id; + } + + @Override + public List getInputs() { + return inputs; + } + + @Override + public List getOutputs() { + return List.of(output); + } + + @Override + public List getCatalysts() { + return List.of(container); + } + + @Override + public int getDisplayWidth() { + return 117; + } + + @Override + public int getDisplayHeight() { + return 56; + } + + @Override + public void addWidgets(WidgetHolder widgets) { + widgets.addTexture(BACKGROUND, 0, 0, 116, 56, 29, 16); + + int borderSlotSize = 18; + for (int row = 0; row < 2; ++row) { + for (int column = 0; column < 3; ++column) { + int inputIndex = row * 3 + column; + if (inputIndex < inputs.size()) { + addSlot(widgets, inputs.get(inputIndex), (column * borderSlotSize), (row * borderSlotSize)); + } + } + } + addSlot(widgets, output, 94, 9); + addSlot(widgets, container, 62, 38); + addSlot(widgets, output, 94, 38).recipeContext(this); + + // Arrow + widgets.addAnimatedTexture(BACKGROUND, 60, 9, 24, 17, 176, 15, 1000 * 10, true, false, false); + // Heat Indicator + widgets.addTexture(BACKGROUND, 18, 39, 17, 15, 176, 0); + // Time Icon + widgets.addTexture(BACKGROUND, 64, 2, 8, 11, 176, 32); + // Experience Icon + if (experience > 0) { + widgets.addTexture(BACKGROUND, 63,21, 9, 9, 176, 43); + } + + widgets.addTooltip((mouseX, mouseY) -> { + if (ClientRenderUtils.isCursorInsideBounds(60, 2, 22, 28, mouseX, mouseY)) { + return tooltipComponents; + } + return List.of(); + }, 0, 0, widgets.getWidth(), widgets.getHeight()); + } + + private SlotWidget addSlot(WidgetHolder widgets, EmiIngredient ingredient, int x, int y) { + return widgets.addSlot(ingredient, x, y).drawBack(false); + } +} diff --git a/src/main/java/vectorwing/farmersdelight/integration/emi/recipe/CuttingEmiRecipe.java b/src/main/java/vectorwing/farmersdelight/integration/emi/recipe/CuttingEmiRecipe.java new file mode 100644 index 000000000..471a0b04a --- /dev/null +++ b/src/main/java/vectorwing/farmersdelight/integration/emi/recipe/CuttingEmiRecipe.java @@ -0,0 +1,87 @@ +package vectorwing.farmersdelight.integration.emi.recipe; + +import dev.emi.emi.api.recipe.EmiRecipe; +import dev.emi.emi.api.recipe.EmiRecipeCategory; +import dev.emi.emi.api.stack.EmiIngredient; +import dev.emi.emi.api.stack.EmiStack; +import dev.emi.emi.api.widget.WidgetHolder; +import net.minecraft.resources.ResourceLocation; +import org.jetbrains.annotations.Nullable; +import vectorwing.farmersdelight.FarmersDelight; +import vectorwing.farmersdelight.integration.emi.FDRecipeCategories; + +import java.util.List; + +public class CuttingEmiRecipe implements EmiRecipe { + private static final ResourceLocation BACKGROUND = new ResourceLocation(FarmersDelight.MODID, "textures/gui/jei/cutting_board.png"); + public static final int OUTPUT_GRID_X = 69; + public static final int OUTPUT_GRID_Y = 3; + + private final ResourceLocation id; + private final EmiIngredient tool; + private final EmiIngredient input; + private final List outputs; + + public CuttingEmiRecipe(ResourceLocation id, EmiIngredient tool, EmiIngredient input, List outputs) { + this.id = id; + this.tool = tool; + this.input = input; + this.outputs = outputs; + + } + + @Override + public EmiRecipeCategory getCategory() { + return FDRecipeCategories.CUTTING; + } + + @Override + public @Nullable ResourceLocation getId() { + return id; + } + + @Override + public List getInputs() { + return List.of(input); + } + + @Override + public List getOutputs() { + return outputs; + } + + @Override + public List getCatalysts() { + return List.of(tool); + } + + @Override + public int getDisplayWidth() { + return 111; + } + + @Override + public int getDisplayHeight() { + return 44; + } + + @Override + public void addWidgets(WidgetHolder widgets) { + widgets.addTexture(BACKGROUND, 0, 0, 111, 44, 4, 7); + + widgets.addSlot(tool, 11, 0).drawBack(false); + widgets.addSlot(input, 11, 19).drawBack(false); + + int size = outputs.size(); + int centerX = size > 1 ? 1 : 10; + int centerY = size > 2 ? 1 : 10; + + for (int i = 0; i < size; i++) { + int xOffset = centerX + (i % 2 == 0 ? 0 : 19); + int yOffset = centerY + ((i / 2) * 19); + + EmiIngredient output = outputs.get(i); + widgets.addSlot(output, OUTPUT_GRID_X + xOffset, OUTPUT_GRID_Y + yOffset).backgroundTexture(BACKGROUND, output.getChance() < 1 ? 18 : 0, 58).recipeContext(this); + } + } +} diff --git a/src/main/java/vectorwing/farmersdelight/integration/emi/recipe/DecompositionEmiRecipe.java b/src/main/java/vectorwing/farmersdelight/integration/emi/recipe/DecompositionEmiRecipe.java new file mode 100644 index 000000000..3b55c70c3 --- /dev/null +++ b/src/main/java/vectorwing/farmersdelight/integration/emi/recipe/DecompositionEmiRecipe.java @@ -0,0 +1,90 @@ +package vectorwing.farmersdelight.integration.emi.recipe; + +import dev.emi.emi.api.recipe.EmiRecipe; +import dev.emi.emi.api.recipe.EmiRecipeCategory; +import dev.emi.emi.api.stack.EmiIngredient; +import dev.emi.emi.api.stack.EmiStack; +import dev.emi.emi.api.widget.SlotWidget; +import dev.emi.emi.api.widget.WidgetHolder; +import net.minecraft.client.gui.screens.inventory.tooltip.ClientTooltipComponent; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import vectorwing.farmersdelight.FarmersDelight; +import vectorwing.farmersdelight.common.registry.ModItems; +import vectorwing.farmersdelight.common.tag.ModTags; +import vectorwing.farmersdelight.common.utility.ClientRenderUtils; +import vectorwing.farmersdelight.integration.emi.FDRecipeCategories; +import vectorwing.farmersdelight.integration.emi.FDRecipeWorkstations; + +import java.util.List; + +public class DecompositionEmiRecipe implements EmiRecipe { + private static final ResourceLocation BACKGROUND = new ResourceLocation(FarmersDelight.MODID, "textures/gui/jei/decomposition.png"); + + private static final EmiStack RICH_SOIL = EmiStack.of(ModItems.RICH_SOIL.get()); + private static final EmiIngredient ACCELERATORS = EmiIngredient.of(ModTags.COMPOST_ACTIVATORS); + + private static final ClientTooltipComponent LIGHT_TOOLTIP = createTooltip(".light"); + private static final ClientTooltipComponent FLUID_TOOLTIP = createTooltip(".fluid"); + private static final ClientTooltipComponent ACCELERATORS_TOOLTIP = createTooltip(".accelerators"); + + @Override + public EmiRecipeCategory getCategory() { + return FDRecipeCategories.DECOMPOSITION; + } + + @Override + public @Nullable ResourceLocation getId() { + return new ResourceLocation(FarmersDelight.MODID, "decomposition/dummy"); + } + + @Override + public List getInputs() { + return List.of(FDRecipeWorkstations.ORGANIC_COMPOST); + } + + @Override + public List getOutputs() { + return List.of(RICH_SOIL); + } + + @Override + public int getDisplayWidth() { + return 102; + } + + @Override + public int getDisplayHeight() { + return 62; + } + + @Override + public void addWidgets(WidgetHolder widgets) { + widgets.addTexture(BACKGROUND, 0, 0, 102, 41, 8, 9); + + addSlot(widgets, FDRecipeWorkstations.ORGANIC_COMPOST, 0, 16); + addSlot(widgets, RICH_SOIL, 84, 16).recipeContext(this); + addSlot(widgets, ACCELERATORS, 55, 44); + + widgets.addTooltip((mouseX, mouseY) -> { + if (ClientRenderUtils.isCursorInsideBounds(32, 30, 11, 11, mouseX, mouseY)) { + return List.of(LIGHT_TOOLTIP); + } else if (ClientRenderUtils.isCursorInsideBounds(45, 30, 11, 11, mouseX, mouseY)) { + return List.of(FLUID_TOOLTIP); + } else if (ClientRenderUtils.isCursorInsideBounds(59, 30, 11, 11, mouseX, mouseY)) { + return List.of(ACCELERATORS_TOOLTIP); + } + return List.of(); + }, 0, 0, widgets.getWidth(), widgets.getHeight()); + } + + private SlotWidget addSlot(WidgetHolder widgets, EmiIngredient ingredient, int x, int y) { + return widgets.addSlot(ingredient, x, y).backgroundTexture(BACKGROUND, 119, 0); + } + + private static ClientTooltipComponent createTooltip(@NotNull String suffix) { + return ClientTooltipComponent.create(Component.translatable(FarmersDelight.MODID + ".jei.decomposition" + suffix).getVisualOrderText()); + } +} diff --git a/src/main/resources/assets/farmersdelight/lang/en_us.json b/src/main/resources/assets/farmersdelight/lang/en_us.json index cb6c7f1ff..6bd3b66fe 100644 --- a/src/main/resources/assets/farmersdelight/lang/en_us.json +++ b/src/main/resources/assets/farmersdelight/lang/en_us.json @@ -318,5 +318,71 @@ "farmersdelight.jei.info.wild_onions": "Onions can be commonly found as a wild plant in temperate lands, such as plains and forests.", "farmersdelight.jei.info.wild_potatoes": "Potatoes can be commonly found as a wild plant in cold lands, such as mountains and taigas.", "farmersdelight.jei.info.wild_tomatoes": "Tomatoes can be commonly found as a wild plant in arid lands, such as savannas and deserts.", - "farmersdelight.jei.info.wild_rice": "Rice can be commonly found as a wild plant in the ponds of wet lands, such as swamps and jungles." + "farmersdelight.jei.info.wild_rice": "Rice can be commonly found as a wild plant in the ponds of wet lands, such as swamps and jungles.", + + "emi.category.farmersdelight.cooking": "Cooking", + "emi.category.farmersdelight.cutting": "Cutting Board", + "emi.category.farmersdelight.decomposition": "Decomposition", + + "tag.item.forge.berries": "Berries", + "tag.item.forge.bread": "Bread", + "tag.item.forge.bread.wheat": "Wheat Breads", + "tag.item.forge.cooked_bacon": "Cooked Bacons", + "tag.item.forge.cooked_beef": "Cooked Beef", + "tag.item.forge.cooked_chicken": "Cooked Chickens", + "tag.item.forge.cooked_eggs": "Cooked Eggs", + "tag.item.forge.cooked_fishes": "Cooked Fishes", + "tag.item.forge.cooked_fishes.cod": "Cooked Cods", + "tag.item.forge.cooked_fishes.salmon": "Cooked Salmons", + "tag.item.forge.cooked_mutton": "Cooked Mutton", + "tag.item.forge.cooked_pork": "Cooked Pork", + "tag.item.forge.crops.cabbage": "Cabbages", + "tag.item.forge.crops.onion": "Onions", + "tag.item.forge.crops.rice": "Rice", + "tag.item.forge.crops.tomato": "Tomatoes", + "tag.item.forge.dough": "Doughs", + "tag.item.forge.dough.wheat": "Wheat Doughs", + "tag.item.forge.grain": "Grains", + "tag.item.forge.grain.rice": "Rice Grains", + "tag.item.forge.grain.wheat": "Wheat Grains", + "tag.item.forge.milk": "Milks", + "tag.item.forge.milk.milk": "Milk Buckets", + "tag.item.forge.milk.milk_bottle": "Milk Bottles", + "tag.item.forge.pasta": "Pastas", + "tag.item.forge.pasta.raw_pasta": "Raw Pastas", + "tag.item.forge.raw_bacon": "Raw Bacons", + "tag.item.forge.raw_beef": "Raw Beef", + "tag.item.forge.raw_chicken": "Raw Chickens", + "tag.item.forge.raw_eggs": "Raw Eggs", + "tag.item.forge.raw_fishes": "Raw Fishes", + "tag.item.forge.raw_fishes.cod": "Raw Cods", + "tag.item.forge.raw_fishes.salmon": "Raw Salmon", + "tag.item.forge.raw_fishes.tropical_fish": "Tropical Fish", + "tag.item.forge.raw_mutton": "Raw Mutton", + "tag.item.forge.raw_pork": "Raw Pork", + "tag.item.forge.salad_ingredients": "Salad Ingredients", + "tag.item.forge.salad_ingredients.cabbage": "Cabbage Salad Ingredients", + "tag.item.forge.seeds.cabbage": "Cabbage Seeds", + "tag.item.forge.seeds.rice": "Rice Seeds", + "tag.item.forge.seeds.tomato": "Tomato Seeds", + "tag.item.forge.tools.knives": "Knives", + "tag.item.forge.vegetables": "Vegetables", + "tag.item.forge.vegetables.beetroot": "Beetroots", + "tag.item.forge.vegetables.carrot": "Carrots", + "tag.item.forge.vegetables.onion": "Onions", + "tag.item.forge.vegetables.potato": "Potatoes", + "tag.item.forge.vegetables.tomato": "Tomatoes", + + "tag.item.farmersdelight.cabbage_roll_ingredients": "Cabbage Roll Ingredients", + "tag.item.farmersdelight.cabinets": "Cabinets", + "tag.item.farmersdelight.cabinets.wooden": "Wooden Cabinets", + "tag.item.farmersdelight.canvas_signs": "Canvas Signs", + "tag.item.farmersdelight.flat_on_cutting_board": "Flat on Cutting Board", + "tag.item.farmersdelight.hanging_canvas_signs": "Hanging Canvas Signs", + "tag.item.farmersdelight.offhand_equipment": "Offhand Equipment", + "tag.item.farmersdelight.serving_containers": "Serving Containers", + "tag.item.farmersdelight.straw_harvesters": "Straw Harvesters", + "tag.item.farmersdelight.tools.knives": "Knives", + "tag.item.farmersdelight.wild_crops": "Wild Crops", + "tag.item.farmersdelight.wolf_prey": "Wolf Prey" } diff --git a/src/main/resources/assets/farmersdelight/textures/gui/emi/simplified.png b/src/main/resources/assets/farmersdelight/textures/gui/emi/simplified.png new file mode 100644 index 0000000000000000000000000000000000000000..9b8d08db2555dba2996516e0220267a3e810d767 GIT binary patch literal 177 zcmeAS@N?(olHy`uVBq!ia0vp^20$#p$P6U267oI)DYgKg5LY1m|NsA`H|O64vKUK( z{DK)Ap4~_Taw0ul978JNk`oes@Uu9qYTP(c*vIs=kq5&{_BT9A4zHNCnZ+k$C9tew z4(5(%oTAgRDYfFjy#qH6pILC=(t#UCIF|gfH)~kIcaU{X!aX*(4Kd2f&41_rcVJ+c XRI1?g?0hjh&=LkuS3j3^P6 Date: Sat, 24 Aug 2024 04:30:15 +1000 Subject: [PATCH 2/9] Consistentify with 1.21 branch translations. --- src/main/resources/assets/farmersdelight/lang/en_us.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/assets/farmersdelight/lang/en_us.json b/src/main/resources/assets/farmersdelight/lang/en_us.json index 6bd3b66fe..e30f893ff 100644 --- a/src/main/resources/assets/farmersdelight/lang/en_us.json +++ b/src/main/resources/assets/farmersdelight/lang/en_us.json @@ -327,7 +327,7 @@ "tag.item.forge.berries": "Berries", "tag.item.forge.bread": "Bread", "tag.item.forge.bread.wheat": "Wheat Breads", - "tag.item.forge.cooked_bacon": "Cooked Bacons", + "tag.item.forge.cooked_bacon": "Cooked Bacon", "tag.item.forge.cooked_beef": "Cooked Beef", "tag.item.forge.cooked_chicken": "Cooked Chickens", "tag.item.forge.cooked_eggs": "Cooked Eggs", @@ -350,7 +350,7 @@ "tag.item.forge.milk.milk_bottle": "Milk Bottles", "tag.item.forge.pasta": "Pastas", "tag.item.forge.pasta.raw_pasta": "Raw Pastas", - "tag.item.forge.raw_bacon": "Raw Bacons", + "tag.item.forge.raw_bacon": "Raw Bacon", "tag.item.forge.raw_beef": "Raw Beef", "tag.item.forge.raw_chicken": "Raw Chickens", "tag.item.forge.raw_eggs": "Raw Eggs", From 18d12ab93f591c316eb41f40dc2a45b2f500af4d Mon Sep 17 00:00:00 2001 From: MerchantPug <81167232+MerchantPug@users.noreply.github.com> Date: Sat, 24 Aug 2024 04:40:51 +1000 Subject: [PATCH 3/9] Minor lang fixes. --- src/main/resources/assets/farmersdelight/lang/en_us.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/resources/assets/farmersdelight/lang/en_us.json b/src/main/resources/assets/farmersdelight/lang/en_us.json index e30f893ff..0f6c54861 100644 --- a/src/main/resources/assets/farmersdelight/lang/en_us.json +++ b/src/main/resources/assets/farmersdelight/lang/en_us.json @@ -329,11 +329,11 @@ "tag.item.forge.bread.wheat": "Wheat Breads", "tag.item.forge.cooked_bacon": "Cooked Bacon", "tag.item.forge.cooked_beef": "Cooked Beef", - "tag.item.forge.cooked_chicken": "Cooked Chickens", + "tag.item.forge.cooked_chicken": "Cooked Chicken", "tag.item.forge.cooked_eggs": "Cooked Eggs", "tag.item.forge.cooked_fishes": "Cooked Fishes", "tag.item.forge.cooked_fishes.cod": "Cooked Cods", - "tag.item.forge.cooked_fishes.salmon": "Cooked Salmons", + "tag.item.forge.cooked_fishes.salmon": "Cooked Salmon", "tag.item.forge.cooked_mutton": "Cooked Mutton", "tag.item.forge.cooked_pork": "Cooked Pork", "tag.item.forge.crops.cabbage": "Cabbages", @@ -352,7 +352,7 @@ "tag.item.forge.pasta.raw_pasta": "Raw Pastas", "tag.item.forge.raw_bacon": "Raw Bacon", "tag.item.forge.raw_beef": "Raw Beef", - "tag.item.forge.raw_chicken": "Raw Chickens", + "tag.item.forge.raw_chicken": "Raw Chicken", "tag.item.forge.raw_eggs": "Raw Eggs", "tag.item.forge.raw_fishes": "Raw Fishes", "tag.item.forge.raw_fishes.cod": "Raw Cods", From beffb2742054203ce1f14e89bf59bd0b9ade3f53 Mon Sep 17 00:00:00 2001 From: MerchantPug <81167232+MerchantPug@users.noreply.github.com> Date: Sat, 24 Aug 2024 04:43:54 +1000 Subject: [PATCH 4/9] Fix Cod plural. --- src/main/resources/assets/farmersdelight/lang/en_us.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/assets/farmersdelight/lang/en_us.json b/src/main/resources/assets/farmersdelight/lang/en_us.json index 0f6c54861..dbe151bf4 100644 --- a/src/main/resources/assets/farmersdelight/lang/en_us.json +++ b/src/main/resources/assets/farmersdelight/lang/en_us.json @@ -332,7 +332,7 @@ "tag.item.forge.cooked_chicken": "Cooked Chicken", "tag.item.forge.cooked_eggs": "Cooked Eggs", "tag.item.forge.cooked_fishes": "Cooked Fishes", - "tag.item.forge.cooked_fishes.cod": "Cooked Cods", + "tag.item.forge.cooked_fishes.cod": "Cooked Cod", "tag.item.forge.cooked_fishes.salmon": "Cooked Salmon", "tag.item.forge.cooked_mutton": "Cooked Mutton", "tag.item.forge.cooked_pork": "Cooked Pork", @@ -355,7 +355,7 @@ "tag.item.forge.raw_chicken": "Raw Chicken", "tag.item.forge.raw_eggs": "Raw Eggs", "tag.item.forge.raw_fishes": "Raw Fishes", - "tag.item.forge.raw_fishes.cod": "Raw Cods", + "tag.item.forge.raw_fishes.cod": "Raw Cod", "tag.item.forge.raw_fishes.salmon": "Raw Salmon", "tag.item.forge.raw_fishes.tropical_fish": "Tropical Fish", "tag.item.forge.raw_mutton": "Raw Mutton", From 3d62a6d94804dd7fef8d9f81a8a371b707af91e1 Mon Sep 17 00:00:00 2001 From: MerchantPug <81167232+MerchantPug@users.noreply.github.com> Date: Sat, 24 Aug 2024 08:16:51 +1000 Subject: [PATCH 5/9] Fix crops tag translation values. --- src/main/resources/assets/farmersdelight/lang/en_us.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/resources/assets/farmersdelight/lang/en_us.json b/src/main/resources/assets/farmersdelight/lang/en_us.json index dbe151bf4..f40030e93 100644 --- a/src/main/resources/assets/farmersdelight/lang/en_us.json +++ b/src/main/resources/assets/farmersdelight/lang/en_us.json @@ -336,10 +336,10 @@ "tag.item.forge.cooked_fishes.salmon": "Cooked Salmon", "tag.item.forge.cooked_mutton": "Cooked Mutton", "tag.item.forge.cooked_pork": "Cooked Pork", - "tag.item.forge.crops.cabbage": "Cabbages", - "tag.item.forge.crops.onion": "Onions", - "tag.item.forge.crops.rice": "Rice", - "tag.item.forge.crops.tomato": "Tomatoes", + "tag.item.forge.crops.cabbage": "Cabbage Crops", + "tag.item.forge.crops.onion": "Onion Crops", + "tag.item.forge.crops.rice": "Rice Crops", + "tag.item.forge.crops.tomato": "Tomato Crops", "tag.item.forge.dough": "Doughs", "tag.item.forge.dough.wheat": "Wheat Doughs", "tag.item.forge.grain": "Grains", From e5f2d3d5a27e80340207832c141658f6a734d83f Mon Sep 17 00:00:00 2001 From: MerchantPug Date: Wed, 19 Mar 2025 17:07:17 +1100 Subject: [PATCH 6/9] Add default EMI recipes, remove TODO comment in EMIPlugin. --- .../emi/recipe/defaults/farmersdelight.json | 151 ++++++++++++++++++ 1 file changed, 151 insertions(+) create mode 100644 src/main/resources/assets/emi/recipe/defaults/farmersdelight.json diff --git a/src/main/resources/assets/emi/recipe/defaults/farmersdelight.json b/src/main/resources/assets/emi/recipe/defaults/farmersdelight.json new file mode 100644 index 000000000..730239b2f --- /dev/null +++ b/src/main/resources/assets/emi/recipe/defaults/farmersdelight.json @@ -0,0 +1,151 @@ +{ + "added": [ + "farmersdelight:skillet", + "farmersdelight:cutting/cooked_mutton", + "farmersdelight:magenta_hanging_canvas_sign", + "farmersdelight:yellow_hanging_canvas_sign", + "farmersdelight:oak_cabinet", + "farmersdelight:lime_canvas_sign", + "farmersdelight:carrot_crate", + "farmersdelight:diamond_knife", + "farmersdelight:fruit_salad", + "farmersdelight:beetroot_crate", + "farmersdelight:cooking/pasta_with_meatballs", + "farmersdelight:iron_knife", + "farmersdelight:chicken_sandwich", + "farmersdelight:pie_crust", + "farmersdelight:milk_bottle", + "farmersdelight:cooking/fried_rice", + "farmersdelight:half_tatami_mat", + "farmersdelight:organic_compost_from_rotten_flesh", + "farmersdelight:safety_net", + "farmersdelight:tatami_block_from_full", + "farmersdelight:honey_glazed_ham_block", + "emi:/world/tilling/farmersdelight/rich_soil", + "farmersdelight:melon_juice", + "farmersdelight:beef_patty", + "farmersdelight:cooking/vegetable_soup", + "farmersdelight:mixed_salad", + "farmersdelight:brown_canvas_sign", + "farmersdelight:orange_canvas_sign", + "farmersdelight:birch_cabinet", + "farmersdelight:yellow_canvas_sign", + "farmersdelight:cyan_hanging_canvas_sign", + "farmersdelight:cutting/mutton", + "farmersdelight:salmon_roll", + "farmersdelight:egg_sandwich", + "farmersdelight:cutting/chocolate_pie", + "farmersdelight:light_gray_canvas_sign", + "farmersdelight:light_gray_hanging_canvas_sign", + "farmersdelight:golden_knife", + "farmersdelight:bacon_sandwich", + "farmersdelight:cutting/apple_pie", + "farmersdelight:cooking/dumplings", + "farmersdelight:cooking/cabbage_rolls", + "farmersdelight:purple_canvas_sign", + "farmersdelight:acacia_cabinet", + "farmersdelight:cooking/chicken_soup", + "farmersdelight:purple_hanging_canvas_sign", + "farmersdelight:grilled_salmon", + "farmersdelight:cutting_board", + "farmersdelight:cherry_cabinet", + "farmersdelight:shepherds_pie_block", + "farmersdelight:crimson_cabinet", + "farmersdelight:stove", + "farmersdelight:lime_hanging_canvas_sign", + "farmersdelight:wheat_dough_from_water", + "farmersdelight:cooking/apple_cider", + "farmersdelight:rice_roll_medley_block", + "farmersdelight:magenta_canvas_sign", + "farmersdelight:cooking/mushroom_rice", + "farmersdelight:light_blue_canvas_sign", + "farmersdelight:honey_cookie", + "farmersdelight:spruce_cabinet", + "farmersdelight:cooking/hot_cocoa", + "farmersdelight:barbecue_stick", + "farmersdelight:cooking/bone_broth", + "farmersdelight:potato_crate", + "farmersdelight:pink_hanging_canvas_sign", + "farmersdelight:horse_feed", + "farmersdelight:cooking/stuffed_pumpkin_block", + "farmersdelight:sweet_berry_cheesecake", + "farmersdelight:melon_popsicle", + "farmersdelight:straw_bale", + "farmersdelight:mutton_wrap", + "farmersdelight:cooking/noodle_soup", + "farmersdelight:cutting/cabbage", + "farmersdelight:cutting/sweet_berry_cheesecake", + "farmersdelight:cooking/dog_food", + "farmersdelight:red_hanging_canvas_sign", + "farmersdelight:warped_cabinet", + "farmersdelight:cooking/vegetable_noodles", + "farmersdelight:cod_roll", + "farmersdelight:cooking/pasta_with_mutton_chop", + "farmersdelight:green_hanging_canvas_sign", + "farmersdelight:green_canvas_sign", + "farmersdelight:basket", + "farmersdelight:bacon_and_eggs", + "farmersdelight:cutting/tag_dough", + "farmersdelight:mangrove_cabinet", + "farmersdelight:canvas_sign", + "farmersdelight:orange_hanging_canvas_sign", + "farmersdelight:roasted_mutton_chops", + "farmersdelight:cutting/chicken", + "farmersdelight:cooking/fish_stew", + "farmersdelight:canvas_from_canvas_rug", + "farmersdelight:apple_pie", + "farmersdelight:bamboo_cabinet", + "farmersdelight:/decomposition/dummy", + "farmersdelight:hanging_canvas_sign", + "farmersdelight:nether_salad", + "farmersdelight:cutting/pumpkin", + "farmersdelight:jungle_cabinet", + "farmersdelight:roast_chicken_block", + "farmersdelight:smoked_ham", + "farmersdelight:cooking/cooked_rice", + "farmersdelight:cutting/porkchop", + "farmersdelight:fried_egg", + "farmersdelight:rice_bale", + "farmersdelight:steak_and_potatoes", + "farmersdelight:flint_knife", + "farmersdelight:rope_from_safety_net", + "farmersdelight:cooking/baked_cod_stew", + "farmersdelight:dark_oak_cabinet", + "farmersdelight:chocolate_pie", + "farmersdelight:cooking/pumpkin_soup", + "farmersdelight:blue_canvas_sign", + "farmersdelight:black_hanging_canvas_sign", + "farmersdelight:gray_canvas_sign", + "farmersdelight:red_canvas_sign", + "farmersdelight:cooking/beef_stew", + "farmersdelight:full_tatami_mat", + "farmersdelight:white_hanging_canvas_sign", + "farmersdelight:black_canvas_sign", + "farmersdelight:cooking_pot", + "farmersdelight:tomato_crate", + "farmersdelight:rice_bag", + "farmersdelight:canvas_rug", + "farmersdelight:cabbage_crate", + "farmersdelight:light_blue_hanging_canvas_sign", + "farmersdelight:cooking/squid_ink_pasta", + "farmersdelight:onion_crate", + "farmersdelight:netherite_knife_smithing", + "farmersdelight:pink_canvas_sign", + "farmersdelight:cutting/beef", + "farmersdelight:gray_hanging_canvas_sign", + "farmersdelight:cutting/kelp_roll", + "farmersdelight:kelp_roll", + "farmersdelight:hamburger", + "farmersdelight:stuffed_potato", + "farmersdelight:cooking/ratatouille", + "farmersdelight:cyan_canvas_sign", + "farmersdelight:blue_hanging_canvas_sign", + "farmersdelight:brown_hanging_canvas_sign", + "farmersdelight:cooking/tomato_sauce", + "farmersdelight:cooked_bacon", + "farmersdelight:cutting/cake", + "farmersdelight:cooking/glow_berry_custard", + "farmersdelight:white_canvas_sign", + "farmersdelight:sweet_berry_cookie" + ] +} \ No newline at end of file From dbb686d775684cb45c03aaf2c1daa6b8b44cb09b Mon Sep 17 00:00:00 2001 From: MerchantPug Date: Thu, 28 Nov 2024 12:37:32 +1100 Subject: [PATCH 7/9] Fix DecompositionEmiRecipe recipe id. --- .../integration/emi/recipe/DecompositionEmiRecipe.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/vectorwing/farmersdelight/integration/emi/recipe/DecompositionEmiRecipe.java b/src/main/java/vectorwing/farmersdelight/integration/emi/recipe/DecompositionEmiRecipe.java index 3b55c70c3..94c555165 100644 --- a/src/main/java/vectorwing/farmersdelight/integration/emi/recipe/DecompositionEmiRecipe.java +++ b/src/main/java/vectorwing/farmersdelight/integration/emi/recipe/DecompositionEmiRecipe.java @@ -21,7 +21,7 @@ import java.util.List; public class DecompositionEmiRecipe implements EmiRecipe { - private static final ResourceLocation BACKGROUND = new ResourceLocation(FarmersDelight.MODID, "textures/gui/jei/decomposition.png"); + private static final ResourceLocation BACKGROUND = ResourceLocation.fromNamespaceAndPath(FarmersDelight.MODID, "textures/gui/jei/decomposition.png"); private static final EmiStack RICH_SOIL = EmiStack.of(ModItems.RICH_SOIL.get()); private static final EmiIngredient ACCELERATORS = EmiIngredient.of(ModTags.COMPOST_ACTIVATORS); @@ -37,7 +37,7 @@ public EmiRecipeCategory getCategory() { @Override public @Nullable ResourceLocation getId() { - return new ResourceLocation(FarmersDelight.MODID, "decomposition/dummy"); + return new ResourceLocation(FarmersDelight.MODID, "/decomposition/dummy"); } @Override From 75b291204777b83296b248b4941f09e5245fe9d0 Mon Sep 17 00:00:00 2001 From: MerchantPug Date: Sat, 29 Mar 2025 02:30:58 +1100 Subject: [PATCH 8/9] Fix DecompositionEmiRecipe ID to use a field. --- .../integration/emi/recipe/DecompositionEmiRecipe.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/vectorwing/farmersdelight/integration/emi/recipe/DecompositionEmiRecipe.java b/src/main/java/vectorwing/farmersdelight/integration/emi/recipe/DecompositionEmiRecipe.java index 94c555165..d767367ae 100644 --- a/src/main/java/vectorwing/farmersdelight/integration/emi/recipe/DecompositionEmiRecipe.java +++ b/src/main/java/vectorwing/farmersdelight/integration/emi/recipe/DecompositionEmiRecipe.java @@ -21,7 +21,8 @@ import java.util.List; public class DecompositionEmiRecipe implements EmiRecipe { - private static final ResourceLocation BACKGROUND = ResourceLocation.fromNamespaceAndPath(FarmersDelight.MODID, "textures/gui/jei/decomposition.png"); + public static final ResourceLocation ID = new ResourceLocation(FarmersDelight.MODID, "/decomposition/dummy"); + private static final ResourceLocation BACKGROUND = new ResourceLocation(FarmersDelight.MODID, "textures/gui/jei/decomposition.png"); private static final EmiStack RICH_SOIL = EmiStack.of(ModItems.RICH_SOIL.get()); private static final EmiIngredient ACCELERATORS = EmiIngredient.of(ModTags.COMPOST_ACTIVATORS); @@ -37,7 +38,7 @@ public EmiRecipeCategory getCategory() { @Override public @Nullable ResourceLocation getId() { - return new ResourceLocation(FarmersDelight.MODID, "/decomposition/dummy"); + return ID; } @Override From ac76e9cc8189bbb79bc2eeef15b6728a395f0168 Mon Sep 17 00:00:00 2001 From: Anastasia Chrysanthemum Date: Mon, 9 Feb 2026 16:12:24 +1100 Subject: [PATCH 9/9] Add extra EMI recipe defaults. --- .../assets/emi/recipe/defaults/farmersdelight.json | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/resources/assets/emi/recipe/defaults/farmersdelight.json b/src/main/resources/assets/emi/recipe/defaults/farmersdelight.json index 730239b2f..3fb780595 100644 --- a/src/main/resources/assets/emi/recipe/defaults/farmersdelight.json +++ b/src/main/resources/assets/emi/recipe/defaults/farmersdelight.json @@ -146,6 +146,10 @@ "farmersdelight:cutting/cake", "farmersdelight:cooking/glow_berry_custard", "farmersdelight:white_canvas_sign", - "farmersdelight:sweet_berry_cookie" + "farmersdelight:sweet_berry_cookie", + "farmersdelight:cooked_chicken_cuts", + "farmersdelight:cooked_cod_slice", + "farmersdelight:cooked_salmon_slice", + "farmersdelight:wheat_dough_from_egg" ] } \ No newline at end of file