Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,7 @@ dependencies {
}
}
implementation "maven.modrinth:create-aeronautics:1.1.3+mc1.21.1"
implementation "curse.maven:wooden-tools-are-dumb-736942:5695358"
compileOnly "curse.maven:wooden-tools-are-dumb-736942:5695358"
implementation "curse.maven:selene-499980:7708176"
runtimeOnly "curse.maven:mmmmmmmmmmmm-225738:7206981"
/*modImplementation "curse.maven:biolith-852512:7074761"
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
package net.stirdrem.overgeared.compat.emi;

import dev.emi.emi.api.recipe.EmiRecipe;
import dev.emi.emi.api.recipe.EmiRecipeCategory;
import dev.emi.emi.api.recipe.VanillaEmiRecipeCategories;
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.resources.ResourceLocation;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.crafting.Ingredient;
import net.stirdrem.overgeared.BlueprintQuality;
import net.stirdrem.overgeared.OvergearedMod;
import net.stirdrem.overgeared.components.BlueprintData;
import net.stirdrem.overgeared.components.ModComponents;
import net.stirdrem.overgeared.item.ModItems;

import java.util.List;

/**
* EMI recipe display for Blueprint Cloning (crafting table).
* One entry per quality tier: shows [quality blueprint] + [empty blueprint] → [downgraded blueprint x2].
*/
public class BlueprintCloningEmiRecipe implements EmiRecipe {

private final ResourceLocation id;
private final List<EmiIngredient> inputs;
private final List<EmiStack> outputs;

public BlueprintCloningEmiRecipe(BlueprintQuality quality) {
this.id = OvergearedMod.loc("blueprint_cloning/" + quality.getId());

// Input: blueprint at this quality tier
ItemStack inputStack = new ItemStack(ModItems.BLUEPRINT.get());
BlueprintData inputData = BlueprintData.createDefault().withQuality(quality.getId());
inputStack.set(ModComponents.BLUEPRINT_DATA, inputData);

// Output: blueprint at the downgraded quality (x2).
BlueprintQuality outputQuality = BlueprintQuality.getPrevious(quality);
if (outputQuality == null || outputQuality == BlueprintQuality.NONE) outputQuality = quality;

ItemStack outputStack = new ItemStack(ModItems.BLUEPRINT.get(), 2);
BlueprintData outputData = BlueprintData.createDefault().withQuality(outputQuality.getId());
outputStack.set(ModComponents.BLUEPRINT_DATA, outputData);

this.inputs = List.of(
EmiStack.of(inputStack),
EmiIngredient.of(Ingredient.of(ModItems.EMPTY_BLUEPRINT.get()))
);
this.outputs = List.of(EmiStack.of(outputStack));
}

@Override
public EmiRecipeCategory getCategory() {
return VanillaEmiRecipeCategories.CRAFTING;
}

@Override
public ResourceLocation getId() {
return id;
}

@Override
public List<EmiIngredient> getInputs() {
return inputs;
}

@Override
public List<EmiStack> getOutputs() {
return outputs;
}

@Override
public int getDisplayWidth() {
return 116;
}

@Override
public int getDisplayHeight() {
return 54;
}

@Override
public void addWidgets(WidgetHolder widgets) {

widgets.addSlot(inputs.get(0), 0, 0);
widgets.addSlot(inputs.get(1), 18, 0);
widgets.addSlot(EmiStack.EMPTY, 36, 0);
widgets.addSlot(EmiStack.EMPTY, 0, 18);
widgets.addSlot(EmiStack.EMPTY, 18, 18);
widgets.addSlot(EmiStack.EMPTY, 36, 18);
widgets.addSlot(EmiStack.EMPTY, 0, 36);
widgets.addSlot(EmiStack.EMPTY, 18, 36);
widgets.addSlot(EmiStack.EMPTY, 36, 36);

// Arrow
widgets.addTexture(EmiTexture.EMPTY_ARROW, 60, 18);

// Output
widgets.addSlot(outputs.getFirst(), 90, 14).large(true).recipeContext(this);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
package net.stirdrem.overgeared.compat.emi;

import dev.emi.emi.api.recipe.EmiRecipe;
import dev.emi.emi.api.recipe.EmiRecipeCategory;
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.ChatFormatting;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.Font;
import net.minecraft.network.chat.Component;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.util.FormattedCharSequence;
import net.minecraft.world.item.crafting.Ingredient;
import net.stirdrem.overgeared.OvergearedMod;
import net.stirdrem.overgeared.block.ModBlocks;
import net.stirdrem.overgeared.item.ModItems;
import org.jetbrains.annotations.Nullable;

import java.util.List;

public class DraftingTableEmiRecipe implements EmiRecipe {

private final EmiIngredient input;
private final EmiStack output;

public DraftingTableEmiRecipe() {
this.input = EmiIngredient.of(Ingredient.of(ModItems.EMPTY_BLUEPRINT.get()));
this.output = EmiStack.of(ModItems.BLUEPRINT.get());
}

@Override
public EmiRecipeCategory getCategory() {
return OvergearedEmiPlugin.DRAFTING_TABLE_CATEGORY;
}

@Override
public @Nullable ResourceLocation getId() {
return OvergearedMod.loc("explanation/drafting_table");
}

@Override
public List<EmiIngredient> getInputs() {
return List.of(input);
}

@Override
public List<EmiStack> getOutputs() {
return List.of(output);
}

@Override
public int getDisplayWidth() {
return 150;
}

@Override
public int getDisplayHeight() {
return 150;
}

@Override
public void addWidgets(WidgetHolder widgets) {
int startY = 10;

int slotSize = 18;
int arrowWidth = 24;
int gap = 6;

int totalWidth = slotSize + gap + arrowWidth + gap + slotSize;
int startX = (getDisplayWidth() - totalWidth) / 2;

int inputX = startX;
int arrowX = inputX + slotSize + gap;
int outputX = arrowX + arrowWidth + gap;

// Input slot (empty blueprint)
widgets.addSlot(input, inputX, startY).drawBack(true);

// Arrow
widgets.addTexture(EmiTexture.EMPTY_ARROW, arrowX, startY + 1);

// Output slot (blueprint)
widgets.addSlot(output, outputX, startY).drawBack(true).recipeContext(this);

// Explanation text
int textWidth = getDisplayWidth() - 20;
int textX = 10;
int textY = startY + 30;

Component text = Component.translatable("jei.overgeared.drafting_table.description");

Font font = Minecraft.getInstance().font;
List<FormattedCharSequence> lines = font.split(text, textWidth);

for (FormattedCharSequence line : lines) {
widgets.addText(line, textX, textY, ChatFormatting.DARK_GRAY.getColor(), false);
textY += 10;
}
}
}
Loading