mixin-jei包
This commit is contained in:
parent
f51ca1b7f4
commit
06a5dafaaa
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<IRecipeTransferError> cir) {
|
||||
CallbackInfoReturnable<me.shedaniel.rei.api.client.registry.transfer.TransferHandler.Result> 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);
|
||||
|
|
|
|||
|
|
@ -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<? extends ITypedIngredient<?>> 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);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user