Copy terminal pins with memory cards (#1680)

Co-authored-by: UltraProdigy <187078471+UltraProdigy@users.noreply.github.com>
This commit is contained in:
DreamYao520andUltraProdigy authored and GitHub committed 2026-10-04 07:30:59 +00:00
1 parent e31d7dae3f
commit e69c59ccd7
2 files changed
+40 -1

No files matched your search

@@ -5,6 +5,9 @@ import java.util.Arrays;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import net.minecraftforge.common.util.Constants.NBT;
import appeng.api.config.PinsRows;
import appeng.api.storage.data.IAEStack;
@@ -15,7 +18,7 @@ import appeng.core.sync.packets.PacketPinsUpdate;
public class PinsHandler {
private final PinsHolder holder;
private final PinList pinsInv;
private PinList pinsInv;
private PinsRows craftingPinsRows;
private PinsRows playerPinsRows;
private final EntityPlayer player;
@@ -125,6 +128,34 @@ public class PinsHandler {
return playerPinsRows;
}
public void writeToNBT(NBTTagCompound data) {
final NBTTagCompound pinsData = new NBTTagCompound();
holder.writeToNBT(pinsData, "pins");
final NBTTagList pins = pinsData.getTagList("pins", NBT.TAG_COMPOUND);
for (int i = 0; i < pins.tagCount(); i++) {
final NBTTagCompound playerPins = pins.getCompoundTagAt(i);
if (player.getPersistentID().toString().equals(playerPins.getString("playerId"))) {
data.setTag("pins", playerPins);
break;
}
}
}
public void readFromNBT(NBTTagCompound data) {
final NBTTagCompound playerPins = (NBTTagCompound) data.getCompoundTag("pins").copy();
playerPins.setString("playerId", player.getPersistentID().toString());
final NBTTagList pins = new NBTTagList();
pins.appendTag(playerPins);
final NBTTagCompound pinsData = new NBTTagCompound();
pinsData.setTag("pins", pins);
holder.readFromNBT(pinsData, "pins");
pinsInv = holder.getPinsInv(player);
craftingPinsRows = holder.getCraftingPinsRows(player);
playerPinsRows = holder.getPlayerPinsRows(player);
needUpdate = true;
holder.markDirty();
}
/** Returns the full pins array (TOTAL_SLOTS) for the client. */
public IAEStack<?>[] getEnabledPins() {
if (needUpdate) update();
@@ -53,6 +53,7 @@ import appeng.api.parts.IPartHost;
import appeng.api.parts.IPartRenderHelper;
import appeng.api.parts.ISimplifiedBundle;
import appeng.api.parts.PartItemStack;
import appeng.api.storage.ITerminalPins;
import appeng.api.storage.ITerminalTypeFilterProvider;
import appeng.api.storage.StorageName;
import appeng.api.util.AECableType;
@@ -446,6 +447,9 @@ public abstract class AEBasePart implements IPart, IGridProxyable, IActionHost,
filters.getFiltersMap().putAll(provider.getTypeFilter(player));
filters.writeToNBT(data);
}
if (this instanceof ITerminalPins terminal) {
terminal.getPinsHandler(player).writeToNBT(data);
}
memoryCard.setMemoryCardContents(memCardIS, name, data);
if (this.getInventoryByName("upgrades") instanceof UpgradeInventory ui)
@@ -476,6 +480,10 @@ public abstract class AEBasePart implements IPart, IGridProxyable, IActionHost,
provider.getTypeFilter(player).putAll(filters.getFiltersMap());
provider.saveTypeFilter();
}
if (this instanceof ITerminalPins terminal && data.hasKey("pins", NBT.TAG_COMPOUND)) {
terminal.getPinsHandler(player).readFromNBT(data);
this.getHost().markForSave();
}
// After insertUpgrades for the same reason as above
if (this instanceof IInterfaceHost iHost) {