diff --git a/src/main/java/com/extendedae_plus/network/provider/ReturnLastPatternC2SPacket.java b/src/main/java/com/extendedae_plus/network/provider/ReturnLastPatternC2SPacket.java index 706172e..37942fd 100644 --- a/src/main/java/com/extendedae_plus/network/provider/ReturnLastPatternC2SPacket.java +++ b/src/main/java/com/extendedae_plus/network/provider/ReturnLastPatternC2SPacket.java @@ -2,17 +2,23 @@ package com.extendedae_plus.network.provider; import appeng.api.crafting.PatternDetailsHelper; import appeng.api.inventories.InternalInventory; +import appeng.api.networking.IGrid; +import appeng.api.networking.IGridNode; import appeng.helpers.patternprovider.PatternContainer; import appeng.menu.implementations.PatternAccessTermMenu; import appeng.menu.me.items.PatternEncodingTermMenu; import com.extendedae_plus.util.PatternTerminalUtil; import com.extendedae_plus.util.uploadPattern.ProviderUploadUtil; + +import com.glodblock.github.extendedae.common.tileentities.matrix.TileAssemblerMatrixPattern; +import com.extendedae_plus.content.matrix.PatternCorePlusBlockEntity; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.item.ItemStack; import net.minecraftforge.network.NetworkEvent; import java.util.List; +import java.util.Set; import java.util.function.Supplier; /** @@ -37,6 +43,39 @@ public class ReturnLastPatternC2SPacket { if (lastProviderId == Long.MIN_VALUE) { return; // Nothing to return } + + // Special ID for Assembly Matrix + if (lastProviderId == -999999L) { + if (player.containerMenu instanceof PatternEncodingTermMenu encMenu) { + IGridNode node = encMenu.getNetworkNode(); + if (node != null && node.getGrid() != null) { + IGrid grid = node.getGrid(); + // Get all matrix pattern inventories + try { + Set allTiles = grid.getMachines(TileAssemblerMatrixPattern.class); + for (TileAssemblerMatrixPattern tile : allTiles) { + if (tile != null && tile.isFormed() && tile.getMainNode().isActive()) { + InternalInventory inv = tile.getTerminalPatternInventory(); + if (inv != null && returnPatternFromInventory(player, inv)) { + return; + } + } + } + + Set myAllTiles = grid.getMachines(PatternCorePlusBlockEntity.class); + for (PatternCorePlusBlockEntity tile : myAllTiles) { + if (tile != null && tile.isFormed() && tile.getMainNode().isActive()) { + InternalInventory inv = tile.getTerminalPatternInventory(); + if (inv != null && returnPatternFromInventory(player, inv)) { + return; + } + } + } + } catch (Exception ignored) {} + } + } + return; + } PatternContainer targetContainer = null; @@ -73,22 +112,27 @@ public class ReturnLastPatternC2SPacket { } InternalInventory inv = targetContainer.getTerminalPatternInventory(); - if (inv == null || inv.size() <= 0) return; - - // Find the highest slot with an encoded pattern - for (int slot = inv.size() - 1; slot >= 0; slot--) { - ItemStack stack = inv.getStackInSlot(slot); - if (!stack.isEmpty() && PatternDetailsHelper.isEncodedPattern(stack)) { - ItemStack extracted = inv.extractItem(slot, 1, false); - if (!extracted.isEmpty()) { - if (!player.getInventory().add(extracted)) { - player.drop(extracted, false); - } - return; // Found and returned - } - } + if (inv != null && inv.size() > 0) { + returnPatternFromInventory(player, inv); } }); ctx.setPacketHandled(true); } + + private static boolean returnPatternFromInventory(ServerPlayer player, InternalInventory inv) { + // Find the highest slot with an encoded pattern + for (int slot = inv.size() - 1; slot >= 0; slot--) { + ItemStack stack = inv.getStackInSlot(slot); + if (!stack.isEmpty() && PatternDetailsHelper.isEncodedPattern(stack)) { + ItemStack extracted = inv.extractItem(slot, 1, false); + if (!extracted.isEmpty()) { + if (!player.getInventory().add(extracted)) { + player.drop(extracted, false); + } + return true; // Found and returned + } + } + } + return false; + } } diff --git a/src/main/java/com/extendedae_plus/util/uploadPattern/MatrixUploadUtil.java b/src/main/java/com/extendedae_plus/util/uploadPattern/MatrixUploadUtil.java index 8a0fc48..2dc54e1 100644 --- a/src/main/java/com/extendedae_plus/util/uploadPattern/MatrixUploadUtil.java +++ b/src/main/java/com/extendedae_plus/util/uploadPattern/MatrixUploadUtil.java @@ -132,6 +132,7 @@ public final class MatrixUploadUtil { if (remain.getCount() < pattern.getCount()) { // 上传成功 sendPlayerMessage(player, Component.translatable("extendedae_plus.upload_to_matrix.success")); + player.getPersistentData().putLong("eap_last_uploaded_provider_id", -999999L); return true; } } @@ -146,7 +147,7 @@ public final class MatrixUploadUtil { /** * 在给定 AE Grid 中收集所有已成型且在线的装配矩阵“样板核心”的用于外部插入的内部库存 */ - private static List findAllMatrixPatternInventories(IGrid grid) { + public static List findAllMatrixPatternInventories(IGrid grid) { List result = new ArrayList<>(); if (grid == null) return result; @@ -242,6 +243,7 @@ public final class MatrixUploadUtil { stack.shrink(inserted); if (stack.isEmpty()) encodedSlot.set(ItemStack.EMPTY); sendPlayerMessage(player, Component.translatable("extendedae_plus.upload_to_matrix.success")); + player.getPersistentData().putLong("eap_last_uploaded_provider_id", -999999L); } }