From 316a16ab9351c6b5a6fd3a1e11af841f4c49b5e0 Mon Sep 17 00:00:00 2001 From: Sara Freimer Date: Sun, 25 Aug 2024 10:35:26 -0500 Subject: [PATCH] Add support for defining aliases for items via JEI --- .../recipe_viewer/jei/AdditionsJEI.java | 27 ++++++ .../c10fcd8abbb6a520fc3ac2cf14b627d36958dd55 | 6 +- .../mekanism/assets/mekanism/lang/en_ud.json | 1 - .../mekanism/assets/mekanism/lang/en_us.json | 1 - .../client/lang/MekanismLangProvider.java | 1 - .../recipe_viewer/jei/GeneratorsJEI.java | 8 ++ .../recipe_viewer/alias/MekanismAliases.java | 9 +- .../jei/ChemicalStackRenderer.java | 5 -- .../recipe_viewer/jei/JEIAliasHelper.java | 89 +++++++++++++++++++ .../client/recipe_viewer/jei/MekanismJEI.java | 7 ++ .../java/mekanism/common/MekanismLang.java | 4 - .../client/recipe_viewer/jei/ToolsJEI.java | 8 ++ 12 files changed, 143 insertions(+), 23 deletions(-) create mode 100644 src/additions/java/mekanism/additions/client/recipe_viewer/jei/AdditionsJEI.java create mode 100644 src/main/java/mekanism/client/recipe_viewer/jei/JEIAliasHelper.java diff --git a/src/additions/java/mekanism/additions/client/recipe_viewer/jei/AdditionsJEI.java b/src/additions/java/mekanism/additions/client/recipe_viewer/jei/AdditionsJEI.java new file mode 100644 index 00000000000..a7d1dbb8fda --- /dev/null +++ b/src/additions/java/mekanism/additions/client/recipe_viewer/jei/AdditionsJEI.java @@ -0,0 +1,27 @@ +package mekanism.additions.client.recipe_viewer.jei; + +import mekanism.additions.client.recipe_viewer.aliases.AdditionsAliasMapping; +import mekanism.additions.common.MekanismAdditions; +import mekanism.client.recipe_viewer.jei.JEIAliasHelper; +import mezz.jei.api.IModPlugin; +import mezz.jei.api.JeiPlugin; +import mezz.jei.api.registration.IIngredientAliasRegistration; +import net.minecraft.resources.ResourceLocation; +import org.jetbrains.annotations.NotNull; + +@JeiPlugin +public class AdditionsJEI implements IModPlugin { + + @NotNull + @Override + public ResourceLocation getPluginUid() { + //Note: Can't use MekanismTools.rl, as JEI needs this in the constructor and the class may not be loaded yet. + // we can still reference the modid though because of constant inlining + return ResourceLocation.fromNamespaceAndPath(MekanismAdditions.MODID, "jei_plugin"); + } + + @Override + public void registerIngredientAliases(@NotNull IIngredientAliasRegistration registration) { + new AdditionsAliasMapping().addAliases(new JEIAliasHelper(registration)); + } +} \ No newline at end of file diff --git a/src/datagen/generated/mekanism/.cache/c10fcd8abbb6a520fc3ac2cf14b627d36958dd55 b/src/datagen/generated/mekanism/.cache/c10fcd8abbb6a520fc3ac2cf14b627d36958dd55 index 3c00264bce1..0787aa9ffec 100644 --- a/src/datagen/generated/mekanism/.cache/c10fcd8abbb6a520fc3ac2cf14b627d36958dd55 +++ b/src/datagen/generated/mekanism/.cache/c10fcd8abbb6a520fc3ac2cf14b627d36958dd55 @@ -1,5 +1,5 @@ -// 1.21.1 2024-08-23T17:22:03.3736661 Languages: en_us for mod: mekanism +// 1.21.1 2024-08-24T23:59:23.1423828 Languages: en_us for mod: mekanism 8d915354d84b3a4d60c65f9280fdd7ceca016c35 assets/mekanism/lang/en_au.json 8d915354d84b3a4d60c65f9280fdd7ceca016c35 assets/mekanism/lang/en_gb.json -04a6d56b0e21031ac0cb1610d71f47ba90d7f0d3 assets/mekanism/lang/en_ud.json -d48161169c06cd14adf0cd8f756b07148642f2b4 assets/mekanism/lang/en_us.json +28d2fb3189f404bc44f12679cf7835e080185937 assets/mekanism/lang/en_ud.json +52699badc3d935f327983b454e5299e066efd880 assets/mekanism/lang/en_us.json diff --git a/src/datagen/generated/mekanism/assets/mekanism/lang/en_ud.json b/src/datagen/generated/mekanism/assets/mekanism/lang/en_ud.json index 31bdea039b5..bd296e74c3c 100644 --- a/src/datagen/generated/mekanism/assets/mekanism/lang/en_ud.json +++ b/src/datagen/generated/mekanism/assets/mekanism/lang/en_ud.json @@ -3106,7 +3106,6 @@ "tooltip.mekanism.inventory": "%s :ʎɹoʇuǝʌuI", "tooltip.mekanism.item_amount": "%s :ʇunoɯɐ ɯǝʇI", "tooltip.mekanism.jei.amount.with.capacity": "ᗺɯ %2$s / %1$s", - "tooltip.mekanism.known_as": "%s sɐ uʍouʞ osꞁⱯ", "tooltip.mekanism.locked": "%s :ɯǝʇᴉ oʇ pǝʞɔoꞀ", "tooltip.mekanism.mode": "%s :ǝpoW", "tooltip.mekanism.mode.free_runners": "%s :ǝpoW sɹǝuunᴚ", diff --git a/src/datagen/generated/mekanism/assets/mekanism/lang/en_us.json b/src/datagen/generated/mekanism/assets/mekanism/lang/en_us.json index 21eaa999a6f..3c10ae75f97 100644 --- a/src/datagen/generated/mekanism/assets/mekanism/lang/en_us.json +++ b/src/datagen/generated/mekanism/assets/mekanism/lang/en_us.json @@ -3109,7 +3109,6 @@ "tooltip.mekanism.inventory": "Inventory: %1$s", "tooltip.mekanism.item_amount": "Item amount: %1$s", "tooltip.mekanism.jei.amount.with.capacity": "%1$s / %2$s mB", - "tooltip.mekanism.known_as": "Also known as %1$s", "tooltip.mekanism.locked": "Locked to item: %1$s", "tooltip.mekanism.mode": "Mode: %1$s", "tooltip.mekanism.mode.free_runners": "Runners Mode: %1$s", diff --git a/src/datagen/main/java/mekanism/client/lang/MekanismLangProvider.java b/src/datagen/main/java/mekanism/client/lang/MekanismLangProvider.java index 0abd428c26f..1d8dd9cf477 100644 --- a/src/datagen/main/java/mekanism/client/lang/MekanismLangProvider.java +++ b/src/datagen/main/java/mekanism/client/lang/MekanismLangProvider.java @@ -838,7 +838,6 @@ private void addAdvancements() { } private void addAliases() { - add(MekanismLang.ALSO_KNOWN_AS, "Also known as %1$s"); addAliases(MekanismAliases.values()); for (FactoryType type : EnumUtils.FACTORY_TYPES) { addAlias(type.getRegistryNameComponent(), type.getRegistryNameComponentCapitalized()); diff --git a/src/generators/java/mekanism/generators/client/recipe_viewer/jei/GeneratorsJEI.java b/src/generators/java/mekanism/generators/client/recipe_viewer/jei/GeneratorsJEI.java index 9b8f3cc16ac..5efad44fe11 100644 --- a/src/generators/java/mekanism/generators/client/recipe_viewer/jei/GeneratorsJEI.java +++ b/src/generators/java/mekanism/generators/client/recipe_viewer/jei/GeneratorsJEI.java @@ -1,9 +1,11 @@ package mekanism.generators.client.recipe_viewer.jei; import mekanism.client.recipe_viewer.jei.CatalystRegistryHelper; +import mekanism.client.recipe_viewer.jei.JEIAliasHelper; import mekanism.client.recipe_viewer.jei.MekanismJEI; import mekanism.client.recipe_viewer.jei.RecipeRegistryHelper; import mekanism.generators.client.recipe_viewer.GeneratorsRVRecipeType; +import mekanism.generators.client.recipe_viewer.alias.GeneratorsAliasMapping; import mekanism.generators.client.recipe_viewer.recipe.FissionRecipeViewerRecipe; import mekanism.generators.common.MekanismGenerators; import mekanism.generators.common.registries.GeneratorsBlocks; @@ -11,6 +13,7 @@ import mezz.jei.api.IModPlugin; import mezz.jei.api.JeiPlugin; import mezz.jei.api.helpers.IGuiHelper; +import mezz.jei.api.registration.IIngredientAliasRegistration; import mezz.jei.api.registration.IRecipeCatalystRegistration; import mezz.jei.api.registration.IRecipeCategoryRegistration; import mezz.jei.api.registration.IRecipeRegistration; @@ -54,6 +57,11 @@ public void registerRecipeCatalysts(@NotNull IRecipeCatalystRegistration registr CatalystRegistryHelper.register(registry, GeneratorsRVRecipeType.FISSION); } + @Override + public void registerIngredientAliases(@NotNull IIngredientAliasRegistration registration) { + new GeneratorsAliasMapping().addAliases(new JEIAliasHelper(registration)); + } + @Override public void registerRecipes(@NotNull IRecipeRegistration registry) { if (!MekanismJEI.shouldLoad()) { diff --git a/src/main/java/mekanism/client/recipe_viewer/alias/MekanismAliases.java b/src/main/java/mekanism/client/recipe_viewer/alias/MekanismAliases.java index be061680030..c50a8454c3d 100644 --- a/src/main/java/mekanism/client/recipe_viewer/alias/MekanismAliases.java +++ b/src/main/java/mekanism/client/recipe_viewer/alias/MekanismAliases.java @@ -1,9 +1,7 @@ package mekanism.client.recipe_viewer.alias; import mekanism.api.annotations.NothingNullByDefault; -import mekanism.api.text.IHasTranslationKey; import mekanism.common.Mekanism; -import mekanism.common.MekanismLang; import net.minecraft.Util; @NothingNullByDefault @@ -31,7 +29,7 @@ public enum MekanismAliases implements IAliasedTranslation { FLIGHT("flight", "Flight"), CREATIVE_FLIGHT("flight.creative", "Creative Flight"), //Chemicals - ETHENE_ETHYLENE(MekanismLang.ETHENE_ETHYLENE_ALIAS, "Ethylene"), + ETHENE_ETHYLENE("ethene.ethylene", "Ethylene"), //Machine MACHINE_SMELTING("machine.smelting", "Smelting"), MACHINE_ENRICHING("machine.enriching", "Enriching"), @@ -145,11 +143,6 @@ public enum MekanismAliases implements IAliasedTranslation { this.alias = alias; } - MekanismAliases(IHasTranslationKey key, String alias) { - this.key = key.getTranslationKey(); - this.alias = alias; - } - @Override public String getTranslationKey() { return key; diff --git a/src/main/java/mekanism/client/recipe_viewer/jei/ChemicalStackRenderer.java b/src/main/java/mekanism/client/recipe_viewer/jei/ChemicalStackRenderer.java index 171db0d661d..785fc58d831 100644 --- a/src/main/java/mekanism/client/recipe_viewer/jei/ChemicalStackRenderer.java +++ b/src/main/java/mekanism/client/recipe_viewer/jei/ChemicalStackRenderer.java @@ -14,7 +14,6 @@ import mekanism.client.gui.GuiUtils.TilingDirection; import mekanism.client.render.MekanismRenderer; import mekanism.common.MekanismLang; -import mekanism.common.registries.MekanismChemicals; import mekanism.common.util.ChemicalUtil; import mekanism.common.util.text.TextUtils; import mezz.jei.api.gui.builder.ITooltipBuilder; @@ -94,10 +93,6 @@ private void collectTooltips(ChemicalStack stack, TooltipFlag tooltipFlag, Consu Chemical chemical = stack.getChemical(); if (!chemical.isEmptyType()) { tooltipAdder.accept(TextComponentUtil.build(chemical)); - if (stack.getChemical() == MekanismChemicals.ETHENE.get()) { - //TODO - 1.22: Remove this - tooltipAdder.accept(MekanismLang.ALSO_KNOWN_AS.translateColored(EnumColor.GRAY, EnumColor.INDIGO, MekanismLang.ETHENE_ETHYLENE_ALIAS)); - } if (tooltipMode == TooltipMode.SHOW_AMOUNT_AND_CAPACITY) { tooltipAdder.accept(MekanismLang.JEI_AMOUNT_WITH_CAPACITY.translateColored(EnumColor.GRAY, TextUtils.format(stack.getAmount()), TextUtils.format(capacityMb))); } else if (tooltipMode == TooltipMode.SHOW_AMOUNT) { diff --git a/src/main/java/mekanism/client/recipe_viewer/jei/JEIAliasHelper.java b/src/main/java/mekanism/client/recipe_viewer/jei/JEIAliasHelper.java new file mode 100644 index 00000000000..da44e9c1542 --- /dev/null +++ b/src/main/java/mekanism/client/recipe_viewer/jei/JEIAliasHelper.java @@ -0,0 +1,89 @@ +package mekanism.client.recipe_viewer.jei; + +import java.util.Arrays; +import java.util.List; +import java.util.function.Function; +import java.util.stream.Collectors; +import mekanism.api.chemical.ChemicalStack; +import mekanism.api.providers.IChemicalProvider; +import mekanism.api.providers.IFluidProvider; +import mekanism.api.text.IHasTranslationKey; +import mekanism.client.recipe_viewer.alias.RVAliasHelper; +import mekanism.common.Mekanism; +import mekanism.common.util.RegistryUtils; +import mezz.jei.api.constants.VanillaTypes; +import mezz.jei.api.ingredients.IIngredientType; +import mezz.jei.api.neoforge.NeoForgeTypes; +import mezz.jei.api.registration.IIngredientAliasRegistration; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.ItemLike; +import net.neoforged.neoforge.fluids.FluidStack; +import net.neoforged.neoforge.fluids.FluidType; + +public class JEIAliasHelper implements RVAliasHelper { + + private static final Function ITEM_TO_STRING = stack -> stack.getItem().toString(); + private static final Function FLUID_TO_STRING = stack -> RegistryUtils.getName(stack.getFluid()).toString(); + private static final Function CHEMICAL_TO_STRING = stack -> stack.getChemical().getRegistryName().toString(); + + private final IIngredientAliasRegistration registration; + + public JEIAliasHelper(IIngredientAliasRegistration registration) { + this.registration = registration; + } + + @Override + public ItemStack ingredient(ItemLike itemLike) { + return new ItemStack(itemLike); + } + + @Override + public ItemStack ingredient(ItemStack item) { + return item; + } + + @Override + public FluidStack ingredient(IFluidProvider fluidProvider) { + return fluidProvider.getFluidStack(FluidType.BUCKET_VOLUME); + } + + @Override + public FluidStack ingredient(FluidStack fluid) { + return fluid; + } + + @Override + public ChemicalStack ingredient(IChemicalProvider chemicalProvider) { + return chemicalProvider.getStack(FluidType.BUCKET_VOLUME); + } + + @Override + public void addItemAliases(List stacks, IHasTranslationKey... aliases) { + addAliases(VanillaTypes.ITEM_STACK, stacks, ITEM_TO_STRING, aliases); + } + + @Override + public void addFluidAliases(List stacks, IHasTranslationKey... aliases) { + addAliases(NeoForgeTypes.FLUID_STACK, stacks, FLUID_TO_STRING, aliases); + } + + @Override + public void addChemicalAliases(List stacks, IHasTranslationKey... aliases) { + addAliases(MekanismJEI.TYPE_CHEMICAL, stacks, CHEMICAL_TO_STRING, aliases); + } + + private void addAliases(IIngredientType type, List stacks, Function ingredientToString, + IHasTranslationKey... aliases) { + if (aliases.length == 0) { + Mekanism.logger.warn("Expected to have at least one alias for ingredients of type: {}. Ingredients: {}", type.getUid(), stacks.stream() + .map(ingredientToString) + .collect(Collectors.joining(", ")) + ); + } else { + List aliasesAsString = Arrays.stream(aliases) + .map(IHasTranslationKey::getTranslationKey) + .toList(); + registration.addAliases(type, stacks, aliasesAsString); + } + } +} \ No newline at end of file diff --git a/src/main/java/mekanism/client/recipe_viewer/jei/MekanismJEI.java b/src/main/java/mekanism/client/recipe_viewer/jei/MekanismJEI.java index ca2cdfb0698..170fdec897b 100644 --- a/src/main/java/mekanism/client/recipe_viewer/jei/MekanismJEI.java +++ b/src/main/java/mekanism/client/recipe_viewer/jei/MekanismJEI.java @@ -11,6 +11,7 @@ import mekanism.client.gui.GuiMekanism; import mekanism.client.gui.robit.GuiRobitRepair; import mekanism.client.recipe_viewer.RecipeViewerUtils; +import mekanism.client.recipe_viewer.alias.MekanismAliasMapping; import mekanism.client.recipe_viewer.jei.machine.BoilerRecipeCategory; import mekanism.client.recipe_viewer.jei.machine.ChemicalChemicalToChemicalRecipeCategory; import mekanism.client.recipe_viewer.jei.machine.ChemicalCrystallizerRecipeCategory; @@ -62,6 +63,7 @@ import mezz.jei.api.recipe.RecipeType; import mezz.jei.api.recipe.transfer.IRecipeTransferHandlerHelper; import mezz.jei.api.registration.IGuiHandlerRegistration; +import mezz.jei.api.registration.IIngredientAliasRegistration; import mezz.jei.api.registration.IModIngredientRegistration; import mezz.jei.api.registration.IRecipeCatalystRegistration; import mezz.jei.api.registration.IRecipeCategoryRegistration; @@ -222,6 +224,11 @@ public void registerGuiHandlers(IGuiHandlerRegistration registry) { registry.addGhostIngredientHandler(GuiMekanism.class, new JeiGhostIngredientHandler<>()); } + @Override + public void registerIngredientAliases(IIngredientAliasRegistration registration) { + new MekanismAliasMapping().addAliases(new JEIAliasHelper(registration)); + } + @Override public void registerRecipes(IRecipeRegistration registry) { if (!shouldLoad()) { diff --git a/src/main/java/mekanism/common/MekanismLang.java b/src/main/java/mekanism/common/MekanismLang.java index ca05b5d09e8..63018a6699a 100644 --- a/src/main/java/mekanism/common/MekanismLang.java +++ b/src/main/java/mekanism/common/MekanismLang.java @@ -216,10 +216,6 @@ public enum MekanismLang implements ILangEntry { FLAMETHROWER_STORED("tooltip", "stored.flamethrower"), JETPACK_STORED("tooltip", "stored.jetpack"), DECAY_IMMUNE("tooltip", "decay_immune"), - //Aliases - ALSO_KNOWN_AS("tooltip", "known_as"), - //TODO - 1.22: When we no longer have JEI have to manually add the alias, we can move this to MekanismAliases - ETHENE_ETHYLENE_ALIAS("alias", "ethene.ethylene"), //Gui stuff HEIGHT("gui", "height"), WIDTH("gui", "width"), diff --git a/src/tools/java/mekanism/tools/client/recipe_viewer/jei/ToolsJEI.java b/src/tools/java/mekanism/tools/client/recipe_viewer/jei/ToolsJEI.java index 630c9d40736..8ec35c2f059 100644 --- a/src/tools/java/mekanism/tools/client/recipe_viewer/jei/ToolsJEI.java +++ b/src/tools/java/mekanism/tools/client/recipe_viewer/jei/ToolsJEI.java @@ -1,12 +1,15 @@ package mekanism.tools.client.recipe_viewer.jei; +import mekanism.client.recipe_viewer.jei.JEIAliasHelper; import mekanism.client.recipe_viewer.jei.MekanismJEI; import mekanism.client.recipe_viewer.jei.RecipeRegistryHelper; +import mekanism.tools.client.recipe_viewer.aliases.ToolsAliasMapping; import mekanism.tools.common.MekanismTools; import mekanism.tools.common.item.ItemMekanismShield; import mekanism.tools.common.registries.ToolsItems; import mezz.jei.api.IModPlugin; import mezz.jei.api.JeiPlugin; +import mezz.jei.api.registration.IIngredientAliasRegistration; import mezz.jei.api.registration.IRecipeRegistration; import net.minecraft.core.Holder; import net.minecraft.resources.ResourceLocation; @@ -26,6 +29,11 @@ public ResourceLocation getPluginUid() { return ResourceLocation.fromNamespaceAndPath(MekanismTools.MODID, "jei_plugin"); } + @Override + public void registerIngredientAliases(@NotNull IIngredientAliasRegistration registration) { + new ToolsAliasMapping().addAliases(new JEIAliasHelper(registration)); + } + @Override public void registerRecipes(@NotNull IRecipeRegistration registry) { if (MekanismJEI.shouldLoad()) {