Skip to content

Commit

Permalink
Make recipe viewers display each chance for an item separately
Browse files Browse the repository at this point in the history
  • Loading branch information
MattiDragon committed Jul 12, 2023
1 parent dbc28a3 commit 26964fd
Show file tree
Hide file tree
Showing 5 changed files with 27 additions and 32 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,7 @@ public EmiSieveRecipe(SieveRecipeKey key, SieveRecipeOutputs outputs) {
if (key.waterlogged()) catalysts.add(EmiStack.of(Fluids.WATER));
this.key = key;

outputs.outputs().forEach((stack, chances) ->
this.outputs.add(EmiStack.of(stack).setChance((float) chances.stream().mapToDouble(Double::doubleValue).sum())));
outputs.outputs().forEach((stack, chance) -> this.outputs.add(EmiStack.of(stack).setChance((float)(double)chance)));
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,43 +2,40 @@

import dev.emi.emi.api.recipe.BasicEmiRecipe;
import dev.emi.emi.api.stack.EmiIngredient;
import dev.emi.emi.api.stack.EmiStack;
import dev.emi.emi.api.widget.WidgetHolder;
import net.minecraft.util.Identifier;
import wraith.fabricaeexnihilo.compatibility.emi.EmiIngredientUtil;
import wraith.fabricaeexnihilo.compatibility.emi.FENEmiPlugin;
import wraith.fabricaeexnihilo.recipe.ToolRecipe;

import java.util.List;

import static wraith.fabricaeexnihilo.FabricaeExNihilo.id;

public class EmiToolRecipe extends BasicEmiRecipe {
private static final int WIDTH = 90;
private static final int HEIGHT = 30;
private static final int CENTER_X = WIDTH / 2;
private static final int CENTER_Y = HEIGHT / 2;
private static final int OFFSET = 16;
private static final int HEIGHT = 18;

private static final Identifier GLYPHS = id("textures/gui/rei/glyphs.png");
private final EmiIngredient block;
private final EmiStack result;
private final int glyphU;

public EmiToolRecipe(ToolRecipe recipe) {
super(recipe.getTool() == ToolRecipe.ToolType.HAMMER ? FENEmiPlugin.HAMMERING_CATEGORY : FENEmiPlugin.CROOKING_CATEGORY,
recipe.getId(), WIDTH, HEIGHT);
recipe.getId(), calcWidth(recipe), HEIGHT);
block = EmiIngredientUtil.ingredientOf(recipe.getBlock());
result = EmiStack.of(recipe.getResult().stack()).setChance((float) recipe.getResult().chances().stream().mapToDouble(Double::doubleValue).sum());
inputs.add(block);
outputs.add(result);
outputs.addAll(EmiIngredientUtil.stacksOf(recipe.getResult()));
glyphU = (recipe.getTool() == ToolRecipe.ToolType.HAMMER) ? 16 : 32;
}

private static int calcWidth(ToolRecipe recipe) {
return 18 * 2 + recipe.getResult().chances().size() * 18;
}

@Override
public void addWidgets(WidgetHolder widgets) {
widgets.addSlot(block, CENTER_X - OFFSET - 18, CENTER_Y - 9);
widgets.addTexture(GLYPHS, CENTER_X - 8, CENTER_Y - 8, 16, 16, glyphU, 0);
widgets.addSlot(result, CENTER_X + OFFSET, CENTER_Y - 13).large(true).recipeContext(this);
widgets.addSlot(block, 0, 0);
widgets.addTexture(GLYPHS, 18 + 1, 1, 16, 16, glyphU, 0);
for (int i = 0; i < outputs.size(); i++) {
widgets.addSlot(outputs.get(i), 18 * (2 + i), 0).recipeContext(this);
}
}
}
Original file line number Diff line number Diff line change
@@ -1,22 +1,26 @@
package wraith.fabricaeexnihilo.compatibility.recipeviewer;

import com.google.common.collect.HashMultimap;
import com.google.common.collect.ImmutableMultimap;
import net.minecraft.item.ItemStack;
import net.minecraft.util.Identifier;
import wraith.fabricaeexnihilo.recipe.SieveRecipe;

import java.util.ArrayList;
import java.util.List;

public record SieveRecipeOutputs(HashMultimap<ItemStack, List<Double>> outputs) {
public record SieveRecipeOutputs(HashMultimap<ItemStack, Double> outputs) {
public static SieveRecipeOutputs of(SieveRecipe recipe, Identifier mesh) {
return new SieveRecipeOutputs(HashMultimap.create(ImmutableMultimap.of(recipe.getResult(), recipe.getRolls().get(mesh))));
var map = HashMultimap.<ItemStack, Double>create();
for (var chance : recipe.getRolls().get(mesh)) {
map.put(recipe.getResult(), chance);
}

return new SieveRecipeOutputs(map);
}

public List<SieveRecipeOutputs> split(int targetSize) {
var results = new ArrayList<SieveRecipeOutputs>();
var outputs = HashMultimap.<ItemStack, List<Double>>create();
var outputs = HashMultimap.<ItemStack, Double>create();

int currentSize = 0;
for (var entry : this.outputs.entries()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -116,16 +116,11 @@ public List<Widget> setupDisplay(SieveDisplay display, Rectangle bounds) {
if (index < outputs.size()) {
var output = outputs.get(index);
List<Tooltip.Entry> tooltips = new ArrayList<>();
var chances = display.outputs.get(output);
for (var chance : chances) {
if (chance <= 0) continue;
tooltips.add(Tooltip.entry(Text.literal(chance * 100 + "%").formatted(Formatting.GRAY)));
}

if (!tooltips.isEmpty()) {
applyTooltip(output, tooltips);
slot.entries(output);
}
var chance = display.outputs.get(output);
tooltips.add(Tooltip.entry(Text.literal(chance * 100 + "%").formatted(Formatting.GRAY)));

applyTooltip(output, tooltips);
slot.entries(output);
}
widgets.add(slot);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ public class SieveDisplay implements Display {
public final boolean waterlogged;
public final EntryIngredient input;
public final EntryIngredient mesh;
public final Map<EntryIngredient, List<Double>> outputs;
public final Map<EntryIngredient, Double> outputs;

public SieveDisplay(SieveRecipeKey key, SieveRecipeOutputs outputs) {
this.waterlogged = key.waterlogged();
Expand Down

0 comments on commit 26964fd

Please sign in to comment.