diff --git a/src/main/java/appeng/api/implementations/blockentities/ICraftingMachine.java b/src/main/java/appeng/api/implementations/blockentities/ICraftingMachine.java index bbc12a417a0..d6a79a74f78 100644 --- a/src/main/java/appeng/api/implementations/blockentities/ICraftingMachine.java +++ b/src/main/java/appeng/api/implementations/blockentities/ICraftingMachine.java @@ -57,7 +57,7 @@ static ICraftingMachine of(Level level, BlockPos pos, Direction side) { } /** - * Describe how this machine is displayed & grouped in the pattern access terminal. + * Describe how this machine is displayed and grouped in the pattern access terminal. */ PatternContainerGroup getCraftingMachineInfo(); diff --git a/src/main/java/appeng/blockentity/misc/ChargerRecipes.java b/src/main/java/appeng/blockentity/misc/ChargerRecipes.java index cf561e894db..eb35ec21730 100644 --- a/src/main/java/appeng/blockentity/misc/ChargerRecipes.java +++ b/src/main/java/appeng/blockentity/misc/ChargerRecipes.java @@ -6,12 +6,13 @@ import net.minecraft.world.item.crafting.RecipeHolder; import net.minecraft.world.level.Level; +import appeng.recipes.AERecipeTypes; import appeng.recipes.handlers.ChargerRecipe; public class ChargerRecipes { public static Iterable> getRecipes(Level level) { - return level.getRecipeManager().byType(ChargerRecipe.TYPE); + return level.getRecipeManager().byType(AERecipeTypes.CHARGER); } @Nullable diff --git a/src/main/java/appeng/blockentity/misc/InscriberRecipes.java b/src/main/java/appeng/blockentity/misc/InscriberRecipes.java index e8156d88ffc..22fdda3abf9 100644 --- a/src/main/java/appeng/blockentity/misc/InscriberRecipes.java +++ b/src/main/java/appeng/blockentity/misc/InscriberRecipes.java @@ -29,6 +29,7 @@ import appeng.api.ids.AEComponents; import appeng.core.definitions.AEItems; +import appeng.recipes.AERecipeTypes; import appeng.recipes.handlers.InscriberProcessType; import appeng.recipes.handlers.InscriberRecipe; @@ -45,7 +46,7 @@ private InscriberRecipes() { * Returns an unmodifiable view of all registered inscriber recipes. */ public static Iterable> getRecipes(Level level) { - return level.getRecipeManager().byType(InscriberRecipe.TYPE); + return level.getRecipeManager().byType(AERecipeTypes.INSCRIBER); } @Nullable diff --git a/src/main/java/appeng/client/guidebook/compiler/tags/RecipeCompiler.java b/src/main/java/appeng/client/guidebook/compiler/tags/RecipeCompiler.java index f561913ce4a..af81285f70d 100644 --- a/src/main/java/appeng/client/guidebook/compiler/tags/RecipeCompiler.java +++ b/src/main/java/appeng/client/guidebook/compiler/tags/RecipeCompiler.java @@ -25,9 +25,7 @@ import appeng.client.guidebook.document.block.recipes.LytTransformRecipe; import appeng.libs.mdast.mdx.model.MdxJsxElementFields; import appeng.libs.mdast.model.MdAstNode; -import appeng.recipes.handlers.ChargerRecipe; -import appeng.recipes.handlers.InscriberRecipe; -import appeng.recipes.transform.TransformRecipe; +import appeng.recipes.AERecipeTypes; import appeng.util.Platform; /** @@ -38,9 +36,9 @@ public class RecipeCompiler extends BlockTagCompiler { new RecipeTypeMapping<>(RecipeType.CRAFTING, LytCraftingRecipe::new), new RecipeTypeMapping<>(RecipeType.SMELTING, LytSmeltingRecipe::new), new RecipeTypeMapping<>(RecipeType.SMITHING, LytSmithingRecipe::new), - new RecipeTypeMapping<>(InscriberRecipe.TYPE, LytInscriberRecipe::new), - new RecipeTypeMapping<>(ChargerRecipe.TYPE, LytChargerRecipe::new), - new RecipeTypeMapping<>(TransformRecipe.TYPE, LytTransformRecipe::new)); + new RecipeTypeMapping<>(AERecipeTypes.INSCRIBER, LytInscriberRecipe::new), + new RecipeTypeMapping<>(AERecipeTypes.CHARGER, LytChargerRecipe::new), + new RecipeTypeMapping<>(AERecipeTypes.TRANSFORM, LytTransformRecipe::new)); @Override public Set getTagNames() { diff --git a/src/main/java/appeng/core/AppEngBase.java b/src/main/java/appeng/core/AppEngBase.java index 2049b6cc368..1b1a8c14eac 100644 --- a/src/main/java/appeng/core/AppEngBase.java +++ b/src/main/java/appeng/core/AppEngBase.java @@ -21,8 +21,6 @@ import java.util.Collection; import java.util.Collections; -import appeng.recipes.AERecipeSerializers; -import appeng.recipes.AERecipeTypes; import com.mojang.brigadier.CommandDispatcher; import org.jetbrains.annotations.Nullable; @@ -86,6 +84,8 @@ import appeng.init.internal.InitUpgrades; import appeng.init.worldgen.InitStructures; import appeng.integration.Integrations; +import appeng.recipes.AERecipeSerializers; +import appeng.recipes.AERecipeTypes; import appeng.server.AECommand; import appeng.server.services.ChunkLoadingService; import appeng.server.testworld.GameTestPlotAdapter; diff --git a/src/main/java/appeng/integration/modules/emi/AppEngEmiPlugin.java b/src/main/java/appeng/integration/modules/emi/AppEngEmiPlugin.java index bed9e1c0f1c..a2fbbf0fe9b 100644 --- a/src/main/java/appeng/integration/modules/emi/AppEngEmiPlugin.java +++ b/src/main/java/appeng/integration/modules/emi/AppEngEmiPlugin.java @@ -43,11 +43,8 @@ import appeng.menu.me.items.CraftingTermMenu; import appeng.menu.me.items.PatternEncodingTermMenu; import appeng.menu.me.items.WirelessCraftingTermMenu; -import appeng.recipes.entropy.EntropyRecipe; +import appeng.recipes.AERecipeTypes; import appeng.recipes.game.StorageCellUpgradeRecipe; -import appeng.recipes.handlers.ChargerRecipe; -import appeng.recipes.handlers.InscriberRecipe; -import appeng.recipes.transform.TransformRecipe; @EmiEntrypoint public class AppEngEmiPlugin implements EmiPlugin { @@ -82,13 +79,13 @@ public void register(EmiRegistry registry) { // Inscriber registry.addCategory(EmiInscriberRecipe.CATEGORY); registry.addWorkstation(EmiInscriberRecipe.CATEGORY, EmiStack.of(AEBlocks.INSCRIBER)); - adaptRecipeType(registry, InscriberRecipe.TYPE, EmiInscriberRecipe::new); + adaptRecipeType(registry, AERecipeTypes.INSCRIBER, EmiInscriberRecipe::new); // Charger registry.addCategory(EmiChargerRecipe.CATEGORY); registry.addWorkstation(EmiChargerRecipe.CATEGORY, EmiStack.of(AEBlocks.CHARGER)); registry.addWorkstation(EmiChargerRecipe.CATEGORY, EmiStack.of(AEBlocks.CRANK)); - adaptRecipeType(registry, ChargerRecipe.TYPE, EmiChargerRecipe::new); + adaptRecipeType(registry, AERecipeTypes.CHARGER, EmiChargerRecipe::new); // Special upgrade recipes adaptSpecialRecipes(registry, StorageCellUpgradeRecipe.class, this::convertStorageCellUpgradeRecipe); @@ -106,11 +103,11 @@ public void register(EmiRegistry registry) { // Entropy Manipulator registry.addCategory(EmiEntropyRecipe.CATEGORY); registry.addWorkstation(EmiEntropyRecipe.CATEGORY, EmiStack.of(AEItems.ENTROPY_MANIPULATOR)); - adaptRecipeType(registry, EntropyRecipe.TYPE, EmiEntropyRecipe::new); + adaptRecipeType(registry, AERecipeTypes.ENTROPY, EmiEntropyRecipe::new); // In-World Transformation registry.addCategory(EmiTransformRecipe.CATEGORY); - adaptRecipeType(registry, TransformRecipe.TYPE, EmiTransformRecipe::new); + adaptRecipeType(registry, AERecipeTypes.TRANSFORM, EmiTransformRecipe::new); // Facades if (AEConfig.instance().isEnableFacadeRecipesInRecipeViewer()) { diff --git a/src/main/java/appeng/integration/modules/rei/EntropyRecipeDisplay.java b/src/main/java/appeng/integration/modules/rei/EntropyRecipeDisplay.java index c29faa18a11..f2cb3c049e2 100644 --- a/src/main/java/appeng/integration/modules/rei/EntropyRecipeDisplay.java +++ b/src/main/java/appeng/integration/modules/rei/EntropyRecipeDisplay.java @@ -19,7 +19,6 @@ import me.shedaniel.rei.api.client.entry.renderer.EntryRenderer; import me.shedaniel.rei.api.client.gui.widgets.Tooltip; import me.shedaniel.rei.api.client.gui.widgets.TooltipContext; -import me.shedaniel.rei.api.client.util.ClientEntryStacks; import me.shedaniel.rei.api.common.category.CategoryIdentifier; import me.shedaniel.rei.api.common.display.Display; import me.shedaniel.rei.api.common.entry.EntryIngredient; @@ -75,13 +74,13 @@ public EntropyRecipeDisplay(RecipeHolder holder) { this.outputs = List.copyOf(outputs); } - private static EntryStack makeConsumed(EntryStack entryStack) { + private static EntryStack makeConsumed(EntryStack entryStack) { entryStack = entryStack.copy(); entryStack.tooltip(ItemModText.CONSUMED.text().withStyle(ChatFormatting.RED, ChatFormatting.BOLD)); - ClientEntryStacks.setRenderer(entryStack, new EntryRenderer>() { + entryStack.withRenderer(new EntryRenderer<>() { @Override - public void render(EntryStack> entry, GuiGraphics graphics, Rectangle bounds, int mouseX, + public void render(EntryStack entry, GuiGraphics graphics, Rectangle bounds, int mouseX, int mouseY, float delta) { var baseRenderer = entry.getDefinition().getRenderer(); baseRenderer.render(entry, graphics, bounds, mouseX, mouseY, delta); @@ -90,7 +89,7 @@ public void render(EntryStack> entry, GuiGraphics graphics, Rectan } @Override - public @Nullable Tooltip getTooltip(EntryStack> entry, TooltipContext context) { + public @Nullable Tooltip getTooltip(EntryStack entry, TooltipContext context) { var baseRenderer = entry.getDefinition().getRenderer(); return baseRenderer.getTooltip(entry, context); } @@ -148,7 +147,7 @@ private static EntryStack createIngredient(Block block, Fluid fluid) { AELog.warn("Don't know how to get the source fluid for %s", fluid); entryStack = EntryStacks.of(fluid); } - ClientEntryStacks.setTooltipProcessor(entryStack, EntropyRecipeDisplay::addFlowingToTooltip); + entryStack.tooltipProcessor(EntropyRecipeDisplay::addFlowingToTooltip); return entryStack; } else { return EntryStacks.of(fluid); diff --git a/src/main/java/appeng/integration/modules/rei/ReiPlugin.java b/src/main/java/appeng/integration/modules/rei/ReiPlugin.java index ed6cbf56822..9618ca58ce2 100644 --- a/src/main/java/appeng/integration/modules/rei/ReiPlugin.java +++ b/src/main/java/appeng/integration/modules/rei/ReiPlugin.java @@ -23,6 +23,7 @@ import java.util.List; import java.util.stream.Collectors; +import appeng.recipes.AERecipeTypes; import net.minecraft.client.renderer.Rect2i; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; @@ -129,10 +130,10 @@ public void registerDisplays(DisplayRegistry registry) { return; } - registry.registerRecipeFiller(InscriberRecipe.class, InscriberRecipe.TYPE, InscriberRecipeDisplay::new); - registry.registerRecipeFiller(ChargerRecipe.class, ChargerRecipe.TYPE, ChargerDisplay::new); - registry.registerRecipeFiller(TransformRecipe.class, TransformRecipe.TYPE, TransformRecipeWrapper::new); - registry.registerRecipeFiller(EntropyRecipe.class, EntropyRecipe.TYPE, EntropyRecipeDisplay::new); + registry.registerRecipeFiller(InscriberRecipe.class, AERecipeTypes.INSCRIBER, InscriberRecipeDisplay::new); + registry.registerRecipeFiller(ChargerRecipe.class, AERecipeTypes.CHARGER, ChargerDisplay::new); + registry.registerRecipeFiller(TransformRecipe.class, AERecipeTypes.TRANSFORM, TransformRecipeWrapper::new); + registry.registerRecipeFiller(EntropyRecipe.class, AERecipeTypes.ENTROPY, EntropyRecipeDisplay::new); registry.registerRecipeFiller(StorageCellUpgradeRecipe.class, RecipeType.CRAFTING, this::convertStorageCellUpgradeRecipe); @@ -209,6 +210,7 @@ public void registerCollapsibleEntries(CollapsibleEntryRegistry registry) { } } + @SuppressWarnings("unchecked") @Override public void registerExclusionZones(ExclusionZones zones) { if (CompatLayerHelper.IS_LOADED) { diff --git a/src/main/java/appeng/integration/modules/rei/TransformCategory.java b/src/main/java/appeng/integration/modules/rei/TransformCategory.java index 103f9c51b84..f6f0cba8ee0 100644 --- a/src/main/java/appeng/integration/modules/rei/TransformCategory.java +++ b/src/main/java/appeng/integration/modules/rei/TransformCategory.java @@ -140,9 +140,7 @@ private Collection> getCatalystForRendering(TransformRec */ private static EntryStack makeCustomRenderingFluidEntry(Fluid fluid) { var fluidStack = EntryStacks.of(fluid); - ClientEntryStacks.setRenderer(fluidStack, entryStack -> { - return new FluidBlockRenderer(); - }); + fluidStack.withRenderer(entryStack -> new FluidBlockRenderer()); return fluidStack; } diff --git a/src/main/java/appeng/items/tools/powered/MatterCannonItem.java b/src/main/java/appeng/items/tools/powered/MatterCannonItem.java index f573135b614..1d1b8d9ae9c 100644 --- a/src/main/java/appeng/items/tools/powered/MatterCannonItem.java +++ b/src/main/java/appeng/items/tools/powered/MatterCannonItem.java @@ -22,6 +22,7 @@ import java.util.Optional; import java.util.Set; +import appeng.recipes.AERecipeTypes; import org.jetbrains.annotations.Nullable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -440,7 +441,7 @@ private float getPenetration(AEItemKey what) { return 0; } - var recipes = server.getRecipeManager().byType(MatterCannonAmmo.TYPE); + var recipes = server.getRecipeManager().byType(AERecipeTypes.MATTER_CANNON_AMMO); for (var holder : recipes) { var ammoRecipe = holder.value(); if (what.matches(ammoRecipe.getAmmo())) { diff --git a/src/main/java/appeng/recipes/AERecipeSerializers.java b/src/main/java/appeng/recipes/AERecipeSerializers.java index 1b924ba45ab..72dd87e6705 100644 --- a/src/main/java/appeng/recipes/AERecipeSerializers.java +++ b/src/main/java/appeng/recipes/AERecipeSerializers.java @@ -1,28 +1,21 @@ package appeng.recipes; +import net.minecraft.core.registries.Registries; +import net.minecraft.world.item.crafting.RecipeSerializer; +import net.neoforged.neoforge.registries.DeferredRegister; + import appeng.core.AppEng; import appeng.core.definitions.AEItems; import appeng.items.parts.FacadeItem; -import appeng.recipes.entropy.EntropyRecipe; import appeng.recipes.entropy.EntropyRecipeSerializer; -import appeng.recipes.game.AddItemUpgradeRecipe; import appeng.recipes.game.AddItemUpgradeRecipeSerializer; import appeng.recipes.game.FacadeRecipe; -import appeng.recipes.game.RemoveItemUpgradeRecipe; import appeng.recipes.game.RemoveItemUpgradeRecipeSerializer; -import appeng.recipes.game.StorageCellUpgradeRecipe; import appeng.recipes.game.StorageCellUpgradeRecipeSerializer; -import appeng.recipes.handlers.ChargerRecipe; import appeng.recipes.handlers.ChargerRecipeSerializer; -import appeng.recipes.handlers.InscriberRecipe; import appeng.recipes.handlers.InscriberRecipeSerializer; -import appeng.recipes.mattercannon.MatterCannonAmmo; import appeng.recipes.mattercannon.MatterCannonAmmoSerializer; -import appeng.recipes.transform.TransformRecipe; import appeng.recipes.transform.TransformRecipeSerializer; -import net.minecraft.core.registries.Registries; -import net.minecraft.world.item.crafting.RecipeSerializer; -import net.neoforged.neoforge.registries.DeferredRegister; public final class AERecipeSerializers { private AERecipeSerializers() { diff --git a/src/main/java/appeng/recipes/AERecipeTypes.java b/src/main/java/appeng/recipes/AERecipeTypes.java index c2f6181b2fc..6ededf84f6b 100644 --- a/src/main/java/appeng/recipes/AERecipeTypes.java +++ b/src/main/java/appeng/recipes/AERecipeTypes.java @@ -1,15 +1,16 @@ package appeng.recipes; +import net.minecraft.core.registries.Registries; +import net.minecraft.world.item.crafting.Recipe; +import net.minecraft.world.item.crafting.RecipeType; +import net.neoforged.neoforge.registries.DeferredRegister; + import appeng.core.AppEng; import appeng.recipes.entropy.EntropyRecipe; import appeng.recipes.handlers.ChargerRecipe; import appeng.recipes.handlers.InscriberRecipe; import appeng.recipes.mattercannon.MatterCannonAmmo; import appeng.recipes.transform.TransformRecipe; -import net.minecraft.core.registries.Registries; -import net.minecraft.world.item.crafting.Recipe; -import net.minecraft.world.item.crafting.RecipeType; -import net.neoforged.neoforge.registries.DeferredRegister; public final class AERecipeTypes { private AERecipeTypes() { diff --git a/src/main/java/appeng/recipes/entropy/EntropyRecipe.java b/src/main/java/appeng/recipes/entropy/EntropyRecipe.java index 15c34c09a8d..086b826eaba 100644 --- a/src/main/java/appeng/recipes/entropy/EntropyRecipe.java +++ b/src/main/java/appeng/recipes/entropy/EntropyRecipe.java @@ -22,7 +22,6 @@ import java.util.Map; import java.util.Optional; -import appeng.recipes.AERecipeTypes; import com.google.common.collect.Maps; import com.mojang.serialization.Codec; import com.mojang.serialization.MapCodec; @@ -56,6 +55,7 @@ import appeng.core.AppEng; import appeng.items.tools.powered.EntropyManipulatorItem; +import appeng.recipes.AERecipeTypes; /** * A special recipe used for the {@link EntropyManipulatorItem}. diff --git a/src/main/java/appeng/recipes/game/FacadeRecipe.java b/src/main/java/appeng/recipes/game/FacadeRecipe.java index 218d40535e7..c5f6fe62830 100644 --- a/src/main/java/appeng/recipes/game/FacadeRecipe.java +++ b/src/main/java/appeng/recipes/game/FacadeRecipe.java @@ -18,10 +18,6 @@ package appeng.recipes.game; -import appeng.core.definitions.AEItems; -import appeng.core.definitions.AEParts; -import appeng.core.definitions.ItemDefinition; -import appeng.items.parts.FacadeItem; import net.minecraft.core.HolderLookup; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.crafting.CraftingBookCategory; @@ -31,8 +27,14 @@ import net.minecraft.world.item.crafting.SimpleCraftingRecipeSerializer; import net.minecraft.world.level.Level; +import appeng.core.definitions.AEItems; +import appeng.core.definitions.AEParts; +import appeng.core.definitions.ItemDefinition; +import appeng.items.parts.FacadeItem; + public final class FacadeRecipe extends CustomRecipe { - public static RecipeSerializer SERIALIZER = new SimpleCraftingRecipeSerializer<>((category) -> new FacadeRecipe(category, AEItems.FACADE.get())); + public static RecipeSerializer SERIALIZER = new SimpleCraftingRecipeSerializer<>( + (category) -> new FacadeRecipe(category, AEItems.FACADE.get())); private final ItemDefinition anchor = AEParts.CABLE_ANCHOR; private final FacadeItem facade; @@ -49,9 +51,9 @@ public boolean matches(CraftingInput inv, Level level) { private ItemStack getOutput(CraftingInput inv, boolean createFacade) { if (inv.width() == 3 && inv.height() == 3 && inv.getItem(0).isEmpty() && inv.getItem(2).isEmpty() - && inv.getItem(6).isEmpty() && inv.getItem(8).isEmpty()) { + && inv.getItem(6).isEmpty() && inv.getItem(8).isEmpty()) { if (this.anchor.is(inv.getItem(1)) && this.anchor.is(inv.getItem(3)) - && this.anchor.is(inv.getItem(5)) && this.anchor.is(inv.getItem(7))) { + && this.anchor.is(inv.getItem(5)) && this.anchor.is(inv.getItem(7))) { final ItemStack facades = this.facade.createFacadeForItem(inv.getItem(4), !createFacade); if (!facades.isEmpty() && createFacade) { facades.setCount(4); diff --git a/src/main/java/appeng/recipes/handlers/ChargerRecipe.java b/src/main/java/appeng/recipes/handlers/ChargerRecipe.java index 450353ede84..09336e8154b 100644 --- a/src/main/java/appeng/recipes/handlers/ChargerRecipe.java +++ b/src/main/java/appeng/recipes/handlers/ChargerRecipe.java @@ -1,6 +1,5 @@ package appeng.recipes.handlers; -import appeng.recipes.AERecipeTypes; import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; @@ -18,6 +17,7 @@ import net.minecraft.world.level.Level; import appeng.core.AppEng; +import appeng.recipes.AERecipeTypes; public class ChargerRecipe implements Recipe { @Deprecated(forRemoval = true, since = "1.21.1") diff --git a/src/main/java/appeng/recipes/handlers/InscriberRecipe.java b/src/main/java/appeng/recipes/handlers/InscriberRecipe.java index 0733702eb95..424441ed85f 100644 --- a/src/main/java/appeng/recipes/handlers/InscriberRecipe.java +++ b/src/main/java/appeng/recipes/handlers/InscriberRecipe.java @@ -20,7 +20,6 @@ import java.util.Objects; -import appeng.recipes.AERecipeTypes; import com.mojang.serialization.Codec; import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; @@ -40,6 +39,7 @@ import net.neoforged.neoforge.network.codec.NeoForgeStreamCodecs; import appeng.core.AppEng; +import appeng.recipes.AERecipeTypes; public class InscriberRecipe implements Recipe { diff --git a/src/main/java/appeng/recipes/mattercannon/MatterCannonAmmo.java b/src/main/java/appeng/recipes/mattercannon/MatterCannonAmmo.java index b6c547dfabe..26eca7c99ae 100644 --- a/src/main/java/appeng/recipes/mattercannon/MatterCannonAmmo.java +++ b/src/main/java/appeng/recipes/mattercannon/MatterCannonAmmo.java @@ -20,7 +20,6 @@ import java.util.Objects; -import appeng.recipes.AERecipeTypes; import com.google.common.base.Preconditions; import com.mojang.serialization.Codec; import com.mojang.serialization.MapCodec; @@ -47,6 +46,7 @@ import net.neoforged.neoforge.common.conditions.TagEmptyCondition; import appeng.core.AppEng; +import appeng.recipes.AERecipeTypes; /** * Defines a type of ammo that can be used for the {@link appeng.items.tools.powered.MatterCannonItem}. diff --git a/src/main/java/appeng/recipes/transform/TransformRecipe.java b/src/main/java/appeng/recipes/transform/TransformRecipe.java index 10dbdd10ab4..8c7219ba577 100644 --- a/src/main/java/appeng/recipes/transform/TransformRecipe.java +++ b/src/main/java/appeng/recipes/transform/TransformRecipe.java @@ -1,6 +1,5 @@ package appeng.recipes.transform; -import appeng.recipes.AERecipeTypes; import com.mojang.serialization.DataResult; import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; @@ -22,6 +21,7 @@ import appeng.blockentity.qnb.QuantumBridgeBlockEntity; import appeng.core.AppEng; import appeng.core.definitions.AEItems; +import appeng.recipes.AERecipeTypes; public final class TransformRecipe implements Recipe { @Deprecated(forRemoval = true, since = "1.21.1")