Skip to content

Commit 706f0ad

Browse files
committed
fix EMI warnings about IDs
1 parent f334259 commit 706f0ad

10 files changed

+104
-34
lines changed

src/main/java/com/simibubi/create/compat/emi/CreateEmiPlugin.java

Lines changed: 23 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import com.simibubi.create.compat.emi.recipes.AutomaticPackingEmiRecipe;
1717
import com.simibubi.create.compat.emi.recipes.BlockCuttingEmiRecipe;
1818
import com.simibubi.create.compat.emi.recipes.BlockCuttingEmiRecipe.CondensedBlockCuttingRecipe;
19+
import com.simibubi.create.compat.emi.recipes.ConversionRecipe;
1920
import com.simibubi.create.compat.emi.recipes.CreateEmiRecipe;
2021
import com.simibubi.create.compat.emi.recipes.CrushingEmiRecipe;
2122
import com.simibubi.create.compat.emi.recipes.DeployingEmiRecipe;
@@ -38,7 +39,6 @@
3839
import com.simibubi.create.compat.emi.recipes.fan.FanSmokingEmiRecipe;
3940
import com.simibubi.create.compat.emi.recipes.fan.FanWashingEmiRecipe;
4041
import com.simibubi.create.compat.recipeViewerCommon.HiddenItems;
41-
import com.simibubi.create.compat.rei.ConversionRecipe;
4242
import com.simibubi.create.compat.rei.ToolboxColoringRecipeMaker;
4343
import com.simibubi.create.content.decoration.palettes.AllPaletteStoneTypes;
4444
import com.simibubi.create.content.equipment.blueprint.BlueprintScreen;
@@ -321,21 +321,14 @@ private void addLavaCollision(EmiRegistry registry, FluidEntry<?> fluid, AllPale
321321

322322
registry.addRecipe(
323323
EmiWorldInteractionRecipe.builder()
324-
.id(synthetic("emi/fluid_interaction/" + blockName))
324+
.id(synthetic("fluid_interaction/" + blockName))
325325
.leftInput(fluidStack)
326326
.rightInput(lava, false)
327327
.output(output)
328328
.build()
329329
);
330330
}
331331

332-
private static ResourceLocation synthetic(String path) {
333-
if (path.startsWith("/"))
334-
throw new IllegalArgumentException("Starting slash is added automatically");
335-
// EMI recommends starting synthetic IDs with a slash so that they can't possibly conflict with data packs.
336-
return Create.asResource('/' + path);
337-
}
338-
339332
private void addDeferredRecipes(Consumer<EmiRecipe> consumer) {
340333
List<Fluid> fluids = EmiApi.getIndexStacks().stream()
341334
.filter(s -> s.getKey() instanceof Fluid)
@@ -351,14 +344,14 @@ private void addDeferredRecipes(Consumer<EmiRecipe> consumer) {
351344
ResourceLocation iid = BuiltInRegistries.ITEM.getKey(i);
352345
ResourceLocation pid = BuiltInRegistries.POTION.getKey(PotionUtils.getPotion(is));
353346
consumer.accept(new SpoutEmiRecipe(new ProcessingRecipeBuilder<>(FillingRecipe::new,
354-
new ResourceLocation("emi", "create/potion_filling/" + pid.getNamespace() + "/" + pid.getPath()
347+
synthetic("potion_filling/" + pid.getNamespace() + "/" + pid.getPath()
355348
+ "/from/" + iid.getNamespace() + "/" + iid.getPath()))
356349
.withItemIngredients(bottle)
357350
.withFluidIngredients(FluidIngredient.fromFluidStack(potion))
358351
.withSingleItemOutput(is.copy())
359352
.build()));
360353
consumer.accept(new DrainEmiRecipe(new ProcessingRecipeBuilder<>(EmptyingRecipe::new,
361-
new ResourceLocation("emi", "create/potion_draining/" + pid.getNamespace() + "/" + pid.getPath()
354+
synthetic("potion_draining/" + pid.getNamespace() + "/" + pid.getPath()
362355
+ "/from/" + iid.getNamespace() + "/" + iid.getPath()))
363356
.withItemIngredients(Ingredient.of(is))
364357
.withFluidOutputs(potion)
@@ -388,7 +381,7 @@ private void addDeferredRecipes(Consumer<EmiRecipe> consumer) {
388381
ResourceLocation itemId = BuiltInRegistries.ITEM.getKey(is.getItem());
389382
ResourceLocation fluidId = BuiltInRegistries.FLUID.getKey(fs.getFluid());
390383
consumer.accept(new SpoutEmiRecipe(new ProcessingRecipeBuilder<>(FillingRecipe::new,
391-
new ResourceLocation("emi", "create/filling/" + itemId.getNamespace() + "/" + itemId.getPath()
384+
synthetic("filling/" + itemId.getNamespace() + "/" + itemId.getPath()
392385
+ "/with/" + fluidId.getNamespace() + "/" + fluidId.getPath()))
393386
.withItemIngredients(bucket)
394387
.withFluidIngredients(FluidIngredient.fromFluidStack(fs))
@@ -407,7 +400,7 @@ private void addDeferredRecipes(Consumer<EmiRecipe> consumer) {
407400
ResourceLocation itemId = BuiltInRegistries.ITEM.getKey(is.getItem());
408401
ResourceLocation fluidId = BuiltInRegistries.FLUID.getKey(extracted.getFluid());
409402
consumer.accept(new DrainEmiRecipe(new ProcessingRecipeBuilder<>(EmptyingRecipe::new,
410-
new ResourceLocation("emi", "create/draining/" + itemId.getNamespace() + "/" + itemId.getPath()
403+
synthetic("draining/" + itemId.getNamespace() + "/" + itemId.getPath()
411404
+ "/from/" + fluidId.getNamespace() + "/" + fluidId.getPath()))
412405
.withItemIngredients(Ingredient.of(is))
413406
.withFluidOutputs(extracted)
@@ -436,11 +429,11 @@ public void registerGeneratedRecipes(EmiRegistry registry) {
436429
if (toolbox == null || dye == null) return;
437430
ResourceLocation toolboxId = BuiltInRegistries.ITEM.getKey(toolbox.getItem());
438431
ResourceLocation dyeId = BuiltInRegistries.ITEM.getKey(dye.getItem());
439-
String recipeName = "create/toolboxes/%s/%s/%s/%s"
432+
String recipeName = "toolboxes/%s/%s/%s/%s"
440433
.formatted(toolboxId.getNamespace(), toolboxId.getPath(), dyeId.getNamespace(), dyeId.getPath());
441434
registry.addRecipe(new EmiCraftingRecipe(
442435
r.getIngredients().stream().map(EmiIngredient::of).toList(),
443-
CreateEmiRecipe.getResultEmi(r), new ResourceLocation("emi", recipeName)));
436+
CreateEmiRecipe.getResultEmi(r), synthetic(recipeName)));
444437
});
445438
// for EMI we don't do this since it already has a category, World Interaction
446439
// LogStrippingFakeRecipes.createRecipes().forEach(r -> {
@@ -460,6 +453,21 @@ public static boolean doInputsMatch(Recipe<?> a, Recipe<?> b) {
460453
return false;
461454
}
462455

456+
public static ResourceLocation synthetic(String path) {
457+
if (path.startsWith("/"))
458+
throw new IllegalArgumentException("Starting slash is added automatically");
459+
// EMI recommends starting synthetic IDs with a slash so that they can't possibly conflict with data packs.
460+
return Create.asResource('/' + path);
461+
}
462+
463+
public static ResourceLocation synthetic(ResourceLocation id) {
464+
return id.withPrefix("/");
465+
}
466+
467+
public static ResourceLocation syntheticOf(String prefix, ResourceLocation base) {
468+
return synthetic(prefix + '/' + base.getNamespace() + '/' + base.getPath());
469+
}
470+
463471
private static EmiRecipeCategory register(String name, EmiRenderable icon) {
464472
ResourceLocation id = Create.asResource(name);
465473
EmiRecipeCategory category = new EmiRecipeCategory(id, icon);

src/main/java/com/simibubi/create/compat/emi/recipes/AutomaticPackingEmiRecipe.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
import dev.emi.emi.api.stack.EmiIngredient;
1010
import dev.emi.emi.api.widget.WidgetHolder;
1111
import net.minecraft.core.NonNullList;
12-
import net.minecraft.resources.ResourceLocation;
1312
import net.minecraft.world.item.crafting.Ingredient;
1413

1514
public class AutomaticPackingEmiRecipe extends CreateEmiRecipe<BasinRecipe> {
@@ -19,8 +18,7 @@ public AutomaticPackingEmiRecipe(BasinRecipe recipe) {
1918
if (recipe.getRequiredHeat() == HeatCondition.NONE) {
2019
height = 90;
2120
}
22-
ResourceLocation id = recipe.getId();
23-
this.id = new ResourceLocation("emi", "create/automatic_packing/" + id.getNamespace() + "/" + id.getPath());
21+
this.id = CreateEmiPlugin.syntheticOf("automatic_packing", recipe.getId());
2422
}
2523

2624
@Override
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package com.simibubi.create.compat.emi.recipes;
2+
3+
import javax.annotation.ParametersAreNonnullByDefault;
4+
5+
import com.simibubi.create.AllRecipeTypes;
6+
import com.simibubi.create.compat.emi.CreateEmiPlugin;
7+
import com.simibubi.create.content.processing.recipe.ProcessingRecipe;
8+
import com.simibubi.create.content.processing.recipe.ProcessingRecipeBuilder;
9+
import com.simibubi.create.content.processing.recipe.ProcessingRecipeBuilder.ProcessingRecipeParams;
10+
11+
import net.minecraft.resources.ResourceLocation;
12+
import net.minecraft.world.Container;
13+
import net.minecraft.world.item.ItemStack;
14+
import net.minecraft.world.item.crafting.Ingredient;
15+
import net.minecraft.world.level.Level;
16+
17+
/**
18+
* Helper recipe type for displaying an item relationship in JEI
19+
*/
20+
@ParametersAreNonnullByDefault
21+
public class ConversionRecipe extends ProcessingRecipe<Container> {
22+
23+
static int counter = 0;
24+
25+
public static ConversionRecipe create(ItemStack from, ItemStack to) {
26+
ResourceLocation recipeId = CreateEmiPlugin.synthetic("conversion_" + counter++);
27+
return new ProcessingRecipeBuilder<>(ConversionRecipe::new, recipeId)
28+
.withItemIngredients(Ingredient.of(from))
29+
.withSingleItemOutput(to)
30+
.build();
31+
}
32+
33+
public ConversionRecipe(ProcessingRecipeParams params) {
34+
super(AllRecipeTypes.CONVERSION, params);
35+
}
36+
37+
@Override
38+
public boolean matches(Container inv, Level worldIn) {
39+
return false;
40+
}
41+
42+
@Override
43+
protected int getMaxInputCount() {
44+
return 1;
45+
}
46+
47+
@Override
48+
protected int getMaxOutputCount() {
49+
return 1;
50+
}
51+
52+
}

src/main/java/com/simibubi/create/compat/emi/recipes/CrushingEmiRecipe.java

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,25 @@
33
import com.simibubi.create.compat.emi.CreateEmiAnimations;
44
import com.simibubi.create.compat.emi.CreateEmiPlugin;
55
import com.simibubi.create.content.kinetics.crusher.AbstractCrushingRecipe;
6+
import com.simibubi.create.content.kinetics.crusher.CrushingRecipe;
7+
import com.simibubi.create.content.kinetics.millstone.MillingRecipe;
68
import com.simibubi.create.foundation.gui.AllGuiTextures;
79

810
import dev.emi.emi.api.widget.WidgetHolder;
9-
import net.minecraft.resources.ResourceLocation;
1011

1112
public class CrushingEmiRecipe extends CreateEmiRecipe<AbstractCrushingRecipe> {
1213

13-
public CrushingEmiRecipe(AbstractCrushingRecipe recipe) {
14+
private CrushingEmiRecipe(AbstractCrushingRecipe recipe) {
1415
super(CreateEmiPlugin.CRUSHING, recipe, 134, 110);
15-
ResourceLocation rid = recipe.getId();
16-
this.id = new ResourceLocation("emi", "create/crushing/" + rid.getNamespace() + "/" + rid.getPath());
16+
}
17+
18+
public CrushingEmiRecipe(CrushingRecipe recipe) {
19+
this((AbstractCrushingRecipe) recipe);
20+
}
21+
22+
public CrushingEmiRecipe(MillingRecipe recipe) {
23+
this((AbstractCrushingRecipe) recipe);
24+
this.id = CreateEmiPlugin.syntheticOf("crushing", recipe.getId());
1725
}
1826

1927
@Override

src/main/java/com/simibubi/create/compat/emi/recipes/DeployingEmiRecipe.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,10 +41,16 @@ public void addWidgets(WidgetHolder widgets) {
4141
}
4242

4343
public static DeployingEmiRecipe fromSandpaper(SandPaperPolishingRecipe recipe) {
44-
return new DeployingEmiRecipe(DeployerApplicationRecipe.convert(recipe));
44+
return synthetic(DeployerApplicationRecipe.convert(recipe));
4545
}
4646

4747
public static DeployingEmiRecipe fromItemApplication(ManualApplicationRecipe recipe) {
48-
return new DeployingEmiRecipe(ManualApplicationRecipe.asDeploying(recipe));
48+
return synthetic(ManualApplicationRecipe.asDeploying(recipe));
49+
}
50+
51+
private static DeployingEmiRecipe synthetic(DeployerApplicationRecipe recipe) {
52+
DeployingEmiRecipe emi = new DeployingEmiRecipe(recipe);
53+
emi.id = CreateEmiPlugin.synthetic(emi.id);
54+
return emi;
4955
}
5056
}

src/main/java/com/simibubi/create/compat/emi/recipes/MysteriousConversionEmiRecipe.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
import com.simibubi.create.AllBlocks;
88
import com.simibubi.create.AllItems;
99
import com.simibubi.create.compat.emi.CreateEmiPlugin;
10-
import com.simibubi.create.compat.rei.ConversionRecipe;
1110
import com.simibubi.create.foundation.gui.AllGuiTextures;
1211

1312
import dev.emi.emi.api.widget.WidgetHolder;

src/main/java/com/simibubi/create/compat/emi/recipes/basin/MixingEmiRecipe.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,10 @@ public class MixingEmiRecipe extends BasinEmiRecipe {
1212

1313
public MixingEmiRecipe(EmiRecipeCategory category, BasinRecipe recipe) {
1414
super(category, recipe, category != CreateEmiPlugin.AUTOMATIC_SHAPELESS);
15+
if (category == CreateEmiPlugin.AUTOMATIC_BREWING) {
16+
// these recipes are generated
17+
this.id = CreateEmiPlugin.synthetic(this.id);
18+
}
1519
}
1620

1721
@Override
Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
11
package com.simibubi.create.compat.emi.recipes.basin;
22

3+
import com.simibubi.create.compat.emi.CreateEmiPlugin;
34
import com.simibubi.create.content.processing.basin.BasinRecipe;
45

56
import dev.emi.emi.api.recipe.EmiRecipeCategory;
6-
import net.minecraft.resources.ResourceLocation;
77

88
public class ShapelessEmiRecipe extends MixingEmiRecipe {
99

1010
public ShapelessEmiRecipe(EmiRecipeCategory category, BasinRecipe recipe) {
1111
super(category, recipe);
12-
ResourceLocation id = recipe.getId();
13-
this.id = new ResourceLocation ("emi", "create/shapeless/" + id.getNamespace() + "/" + id.getPath());
12+
this.id = CreateEmiPlugin.syntheticOf("shapeless", recipe.getId());
1413
}
1514
}

src/main/java/com/simibubi/create/compat/emi/recipes/fan/FanBlastingEmiRecipe.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,14 @@
55

66
import net.createmod.catnip.gui.element.GuiGameElement;
77
import net.minecraft.client.gui.GuiGraphics;
8-
import net.minecraft.resources.ResourceLocation;
98
import net.minecraft.world.item.crafting.AbstractCookingRecipe;
109
import net.minecraft.world.level.material.Fluids;
1110

1211
public class FanBlastingEmiRecipe extends FanEmiRecipe<AbstractCookingRecipe> {
1312

1413
public FanBlastingEmiRecipe(AbstractCookingRecipe recipe) {
1514
super(CreateEmiPlugin.FAN_BLASTING, recipe);
16-
ResourceLocation rid = recipe.getId();
17-
this.id = new ResourceLocation("emi", "create/fan_blasting/" + rid.getNamespace() + "/" + rid.getPath());
15+
this.id = CreateEmiPlugin.syntheticOf("fan_blasting", recipe.getId());
1816
}
1917

2018
@Override

src/main/java/com/simibubi/create/compat/emi/recipes/fan/FanSmokingEmiRecipe.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,14 @@
55

66
import net.createmod.catnip.gui.element.GuiGameElement;
77
import net.minecraft.client.gui.GuiGraphics;
8-
import net.minecraft.resources.ResourceLocation;
98
import net.minecraft.world.item.crafting.SmokingRecipe;
109
import net.minecraft.world.level.block.Blocks;
1110

1211
public class FanSmokingEmiRecipe extends FanEmiRecipe<SmokingRecipe> {
1312

1413
public FanSmokingEmiRecipe(SmokingRecipe recipe) {
1514
super(CreateEmiPlugin.FAN_SMOKING, recipe);
16-
ResourceLocation rid = recipe.getId();
17-
this.id = new ResourceLocation("emi", "create/fan_smoking/" + rid.getNamespace() + "/" + rid.getPath());
15+
this.id = CreateEmiPlugin.syntheticOf("fan_smoking", recipe.getId());
1816
}
1917

2018
@Override

0 commit comments

Comments
 (0)