From 06a5dafaaae00281725aa7138cee68fcc5def305 Mon Sep 17 00:00:00 2001 From: GaLicn <133291877+GaLicn@users.noreply.github.com> Date: Sat, 6 Sep 2025 16:17:17 +0800 Subject: [PATCH] =?UTF-8?q?mixin-jei=E5=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mixin/PickFromWirelessMixin.java | 8 ++-- .../EncodePatternTransferHandlerMixin.java | 40 ++++++------------- .../mixin/jei/EncodingHelperMixin.java | 6 +-- 3 files changed, 19 insertions(+), 35 deletions(-) diff --git a/src/main/java/com/extendedae_plus/mixin/PickFromWirelessMixin.java b/src/main/java/com/extendedae_plus/mixin/PickFromWirelessMixin.java index 56fe87f..53f88ce 100644 --- a/src/main/java/com/extendedae_plus/mixin/PickFromWirelessMixin.java +++ b/src/main/java/com/extendedae_plus/mixin/PickFromWirelessMixin.java @@ -1,6 +1,5 @@ package com.extendedae_plus.mixin; -import com.extendedae_plus.network.ModNetwork; import com.extendedae_plus.network.PickFromWirelessC2SPacket; import net.minecraft.client.Minecraft; import net.minecraft.client.player.LocalPlayer; @@ -10,13 +9,14 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.HitResult; import net.minecraft.world.phys.Vec3; +import net.neoforged.neoforge.network.PacketDistributor; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -// no client-side WCT gating; server will check presence (including Curios) +// no client-side WCT gating; server will check presence (including Curios) @Mixin(Minecraft.class) public class PickFromWirelessMixin { @@ -46,7 +46,7 @@ public class PickFromWirelessMixin { } if (!picked.isEmpty()) { // 若主手已拿同一物品(含标签),则仍然走 AE 拉取逻辑进行补充/合并 - if (!ItemStack.isSameItemSameTags(picked, this.player.getMainHandItem())) { + if (!ItemStack.isSameItemSameComponents(picked, this.player.getMainHandItem())) { int slot = this.player.getInventory().findSlotMatchingItem(picked); if (slot != -1) { return; // 交给原版 pickBlock 处理 @@ -63,7 +63,7 @@ public class PickFromWirelessMixin { // 不在客户端检查是否持有无线合成终端,由服务端权威校验(含 Curios 支持),以避免整合包环境下的软依赖与槽位问题 // 背包没有:发送到服务端处理(从 AE2 网络拉取)并拦截原版 Vec3 loc = bhr.getLocation(); - ModNetwork.CHANNEL.sendToServer(new PickFromWirelessC2SPacket(bhr.getBlockPos(), bhr.getDirection(), loc)); + PacketDistributor.sendToServer(new PickFromWirelessC2SPacket(bhr.getBlockPos(), bhr.getDirection(), loc)); ci.cancel(); } } diff --git a/src/main/java/com/extendedae_plus/mixin/jei/EncodePatternTransferHandlerMixin.java b/src/main/java/com/extendedae_plus/mixin/jei/EncodePatternTransferHandlerMixin.java index 820b3ce..805bb53 100644 --- a/src/main/java/com/extendedae_plus/mixin/jei/EncodePatternTransferHandlerMixin.java +++ b/src/main/java/com/extendedae_plus/mixin/jei/EncodePatternTransferHandlerMixin.java @@ -1,17 +1,16 @@ package com.extendedae_plus.mixin.jei; -import appeng.integration.modules.jei.transfer.EncodePatternTransferHandler; -import appeng.integration.modules.jeirei.EncodingHelper; +import appeng.integration.modules.itemlists.EncodingHelper; +import appeng.integration.modules.rei.transfer.EncodePatternTransferHandler; import appeng.menu.me.items.PatternEncodingTermMenu; import com.extendedae_plus.util.ExtendedAEPatternUploadUtil; -import mezz.jei.api.gui.ingredient.IRecipeSlotsView; -import mezz.jei.api.recipe.transfer.IRecipeTransferError; -import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.crafting.Recipe; +import net.minecraft.world.item.crafting.RecipeHolder; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import me.shedaniel.rei.api.common.display.Display; /** * 捕获通过 JEI 点击 + 填充到样板编码终端的处理配方,并记录其工艺名称(如“烧炼”)。 @@ -19,37 +18,22 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; @Mixin(value = EncodePatternTransferHandler.class, remap = false) public abstract class EncodePatternTransferHandlerMixin { - @Inject(method = "transferRecipe", at = @At("HEAD"), require = 0) + @Inject(method = "transferRecipe", at = @At("HEAD"), require = 0, remap = false) private void extendedae_plus$captureProcessingName(PatternEncodingTermMenu menu, - Object recipeBase, - IRecipeSlotsView slotsView, - Player player, - boolean maxTransfer, + RecipeHolder holder, + Display display, boolean doTransfer, - CallbackInfoReturnable cir) { + CallbackInfoReturnable cir) { if (!doTransfer) return; String name = null; - if (recipeBase instanceof Recipe recipe) { + Recipe recipe = holder != null ? holder.value() : null; + if (recipe != null) { // 仅记录处理配方(非 3x3 合成) if (EncodingHelper.isSupportedCraftingRecipe(recipe)) return; name = ExtendedAEPatternUploadUtil.mapRecipeTypeToSearchKey(recipe); - } else if (recipeBase != null && - "com.gregtechceu.gtceu.api.recipe.GTRecipe".equals(recipeBase.getClass().getName())) { - // 反射路径:GTCEu 专用,从 GTRecipeType 提取注册ID并映射为中文或path - name = ExtendedAEPatternUploadUtil.mapGTCEuRecipeToSearchKey(recipeBase); - } else if ("com.gregtechceu.gtceu.integration.jei.recipe.GTRecipeWrapper".equals(recipeBase.getClass().getName())) { - // 通过反射处理 GTCEu JEI 包装类,避免硬依赖 - try { - var field = recipeBase.getClass().getField("recipe"); // public final GTRecipe recipe; - Object inner = field.get(recipeBase); - // 反射路径:将内部 GTRecipe 以 Object 传入 - name = ExtendedAEPatternUploadUtil.mapGTCEuRecipeToSearchKey(inner); - } catch (Throwable ignored) { - // 反射失败则继续走通用回退 - } } else { - // 非原版 Recipe 的 JEI 条目,尝试从类名/包名推导关键词 - name = ExtendedAEPatternUploadUtil.deriveSearchKeyFromUnknownRecipe(recipeBase); + // 非原版 Recipe 的显示,尝试从 display 类名/包名推导关键词 + name = ExtendedAEPatternUploadUtil.deriveSearchKeyFromUnknownRecipe(display); } if (name != null && !name.isBlank()) { ExtendedAEPatternUploadUtil.setLastProcessingName(name); diff --git a/src/main/java/com/extendedae_plus/mixin/jei/EncodingHelperMixin.java b/src/main/java/com/extendedae_plus/mixin/jei/EncodingHelperMixin.java index 2fb05c0..eb563d3 100644 --- a/src/main/java/com/extendedae_plus/mixin/jei/EncodingHelperMixin.java +++ b/src/main/java/com/extendedae_plus/mixin/jei/EncodingHelperMixin.java @@ -3,12 +3,12 @@ package com.extendedae_plus.mixin.jei; import appeng.api.stacks.AEFluidKey; import appeng.api.stacks.AEItemKey; import appeng.api.stacks.AEKey; -import appeng.integration.modules.jeirei.EncodingHelper; +import appeng.integration.modules.itemlists.EncodingHelper; import appeng.menu.me.common.GridInventoryEntry; import appeng.menu.me.common.MEStorageMenu; import com.extendedae_plus.integration.jei.JeiRuntimeProxy; import mezz.jei.api.constants.VanillaTypes; -import mezz.jei.api.forge.ForgeTypes; +import mezz.jei.api.neoforge.NeoForgeTypes; import mezz.jei.api.ingredients.ITypedIngredient; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @@ -30,7 +30,7 @@ public class EncodingHelperMixin { List> list = JeiRuntimeProxy.getBookmarkList(); for (ITypedIngredient ingredient : list) { ingredient.getIngredient(VanillaTypes.ITEM_STACK).ifPresent(itemStack -> result.put(AEItemKey.of(itemStack), index.getAndDecrement())); - ingredient.getIngredient(ForgeTypes.FLUID_STACK).ifPresent(fluidStack -> result.put(AEFluidKey.of(fluidStack), index.getAndDecrement())); + ingredient.getIngredient(NeoForgeTypes.FLUID_STACK).ifPresent(fluidStack -> result.put(AEFluidKey.of(fluidStack), index.getAndDecrement())); } cir.setReturnValue(result); }