EMI

EMI

14M Downloads

[Feature] Define 'interchangable items' and search recipes/uses on them

KaiaSage opened this issue ยท 3 comments

commented

This is coming from a gregtech perspective, but I think it's common across much of modded minecraft. I have a crafting tree like this:

Diagram of zinc usage. Zinc sources produce zinc variants, which can make other zinc variants interchangeably, and then zinc can make zinc products like brass and item filters.

  • There are many different types of zinc, e.g. ingots, plates, rods, nuggets, liquid zinc, etc.
  • There are various ways to produce zinc, in ingot and dust forms.
  • Zinc items can (past a certain point in progression) be converted back and forth freely. E.g. a plate can be melted down and re-cast into an ingot, which can then be pressed back into a plate. These are not 100% identical between materials, but fairly predictable.
  • There are various ways to use zinc to make other things. Different recipes call for different zinc variants.

It seems to me like the primary questions I want EMI to answer are:

  • I need zinc (and don't have any), how can I get some?
  • I have zinc! What can I do with it?

Current state:

Right now it's difficult to answer either of those questions, because the recipe list is dominated by irrelevant zinc-to-zinc conversions:

Image

Desired state

It's obviously important to see how to make a zinc plate, but it would be nice if there was an additional way to see uses/recipes for a group of items.

  • See all recipes that produce a zinc variant that do not require zinc variants.
  • See all recipes that use zinc variants that produce something other than a zinc variant.
  • Support for liquids (e.g. show recipes that use liquid zinc)

It seems like there's two main ways to do this:

  1. multi-select, e.g. the player somehow shift-selects a number of items, then presses U/R to see recipes that use/produce that set (but not "internal" recipes)
  2. configured by modpack developer, e.g. as a tag
commented

what you're saying makes no sense. whatever you've tried to communicate here has fallen very short, speaking as someone else who plays GT-packs

none of these things are interchangeable unless the mod recipes use the tag system

do you just not know how to use emi/jei? are you just complaining it's cluttered? are you even using "set as default recipe" or the recipe tree?

and recipes sort by non-tag recipes first, for example U->Oak Planks will show Oak Fence/Stair/etc before showing something using #minecraft:planks like a basic chest or barrel

why on earth would you want to see 3 copper dust + 1 zinc ingot = 3 bronze dust when that isn't a real recipe in the pack? they're not interchangeable and if they were (i.e. was a tag) then it already works like that

like you're literally just describing the tag system and seem to have gotten this idea in your head that because gt provides recipes to grind zinc rings into dust then combine then smelt back into ingot EMI should show a zinc ring where you need a zinc dust ??
though again you can already do this with the recipe tree and choosing your defaults, even though it makes no sense and is completely impractical and useless

if i've misunderstood, you really need to find a clearer way to communicate what you're asking and what the use-case is for. you can already use a tag in the recipe tree by just not setting a default for it, for examples:

Image Image

and for anything to show below the * tag items is nonsensical, how is EMI supposed to know which item you want? (like Iron Wrench vs Ultimet Wrench (HV) which have wildly different recipes-- ignore the fact they don't consume for the moment, it's just convenient recipes)

also liquids already work fine in EMI? ??? I feel like you just don't know how to use EMI/JEI because I see all the liquid zinc recipes plain as day??

seems like you're asking: a way to personally or through config set a pseudo-tag to group items and see any recipes that any of the group members are used in excepting group members as output.... like pseudo-tagging all logs/plank/stick types and have it show every stair/fence/door variant but not 4xplank/4xsticks.

or maybe you're asking for: show any recipe/output that contains an item from this [set of tags], as in, show me all results combined that would show if I individually searched the tags: forge:rings/zinc + forge:tiny_dust/zinc + forge:plates/zinc + forge:foils/zinc + forge:ingots/zinc .... and just merge the results in one display

I just can't figure out what your use case even is here, or how it helps you, or if you just don't realize how useless it would be; and any of what i've suggested sounds like feature-bloat lmao

commented

Here's a visualization I hacked together in kubejs:

ServerEvents.tags("item", (event) => {
  event.add('kaia:zinc_class', '#forge:ingots/zinc');
  event.add('kaia:zinc_class', '#forge:foils/zinc');
  event.add('kaia:zinc_class', '#forge:dusts/zinc');
  event.add('kaia:zinc_class', '#forge:plates/zinc');
  event.add('kaia:zinc_class', '#forge:rings/zinc');
  event.add('kaia:zinc_class', '#forge:rods/zinc');
  event.add('kaia:zinc_class', '#forge:fine_wires/zinc');
  event.add('kaia:zinc_class', '#forge:double_plates/zinc');
  event.add('kaia:zinc_class', '#forge:small_dusts/zinc');
  event.add('kaia:zinc_class', '#forge:tiny_dusts/zinc');
  event.add('kaia:zinc_class', '#forge:nuggets/zinc');
  event.add('kaia:zinc_class', '#forge:storage_blocks/zinc');
  // Liquids, unfortunately, do not work here.
  event.add('kaia:zinc_class', '#forge:zinc');
});

ServerEvents.recipes(event => {
  event.replaceInput(
    { 
      input: '#kaia:zinc_class',
      not: {
        output: '#kaia:zinc_class'
      }
    },
    '#kaia:zinc_class',
    '#kaia:zinc_class'
  )
});

You can then press "U" on the tag itself and see only the things zinc can be made to use. (Obviously this isn't a real solution since it's actually changing the recipes, and since it only displays the tag icon and not which specific zinc product is used.)

commented

If this is something that already has a solution elsewhere let me know! If it's not, and it seems like a reasonable idea, I'd be willing to try and contribute a proof-of-concept PR?