From 208e4d66d988ecdbf89676a75e7752e65071204c Mon Sep 17 00:00:00 2001 From: Kogepan229 <73163994+Kogepan229@users.noreply.github.com> Date: Wed, 10 Jun 2026 15:44:42 +0900 Subject: [PATCH] Allow to copy Fluid Interface fluid config to Memory Card (#443) --- .../common/parts/PartFluidInterface.java | 16 ++++++++++ .../common/parts/PartFluidP2PInterface.java | 25 ++++++++++++++++ .../common/tile/TileFluidInterface.java | 16 ++++++++++ .../github/util/DualHostSettings.java | 30 +++++++++++++++++++ .../github/util/DualityFluidInterface.java | 10 +++++++ 5 files changed, 97 insertions(+) create mode 100644 src/main/java/com/glodblock/github/util/DualHostSettings.java diff --git a/src/main/java/com/glodblock/github/common/parts/PartFluidInterface.java b/src/main/java/com/glodblock/github/common/parts/PartFluidInterface.java index a28f1749..b89794de 100644 --- a/src/main/java/com/glodblock/github/common/parts/PartFluidInterface.java +++ b/src/main/java/com/glodblock/github/common/parts/PartFluidInterface.java @@ -24,6 +24,7 @@ import com.glodblock.github.inventory.AEFluidInventory; import com.glodblock.github.inventory.IAEFluidTank; import com.glodblock.github.inventory.IDualHost; import com.glodblock.github.loader.ItemAndBlockHolder; +import com.glodblock.github.util.DualHostSettings; import com.glodblock.github.util.DualityFluidInterface; import com.glodblock.github.util.Util; @@ -41,6 +42,7 @@ import appeng.helpers.ICustomButtonDataObject; import appeng.helpers.ICustomButtonProvider; import appeng.parts.misc.PartInterface; import appeng.tile.inventory.AppEngInternalAEInventory; +import appeng.util.SettingsFrom; import cpw.mods.fml.common.network.ByteBufUtils; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -156,6 +158,20 @@ public class PartFluidInterface extends PartInterface implements IDualHost, ICus getInternalFluid().writeToNBT(data, "FluidInv"); } + @Override + public void uploadSettings(@NotNull SettingsFrom from, @NotNull NBTTagCompound compound) { + super.uploadSettings(from, compound); + DualHostSettings.uploadSettings(this, compound); + } + + @Override + @NotNull + public NBTTagCompound downloadSettings(SettingsFrom from) { + NBTTagCompound output = super.downloadSettings(from); + DualHostSettings.downloadSettings(this, output); + return output; + } + @Override public int getInstalledUpgrades(final Upgrades u) { return getInterfaceDuality().getInstalledUpgrades(u); diff --git a/src/main/java/com/glodblock/github/common/parts/PartFluidP2PInterface.java b/src/main/java/com/glodblock/github/common/parts/PartFluidP2PInterface.java index d30e98ef..d9d6682d 100644 --- a/src/main/java/com/glodblock/github/common/parts/PartFluidP2PInterface.java +++ b/src/main/java/com/glodblock/github/common/parts/PartFluidP2PInterface.java @@ -25,6 +25,7 @@ import com.glodblock.github.inventory.AEFluidInventory; import com.glodblock.github.inventory.IAEFluidTank; import com.glodblock.github.inventory.IDualHost; import com.glodblock.github.loader.ItemAndBlockHolder; +import com.glodblock.github.util.DualHostSettings; import com.glodblock.github.util.DualityFluidInterface; import com.glodblock.github.util.Util; @@ -43,6 +44,7 @@ import appeng.parts.p2p.PartP2PInterface; import appeng.parts.p2p.PartP2PTunnel; import appeng.tile.inventory.AppEngInternalAEInventory; import appeng.util.Platform; +import appeng.util.SettingsFrom; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -71,6 +73,13 @@ public class PartFluidP2PInterface extends PartP2PInterface implements IDualHost return ItemAndBlockHolder.INTERFACE.getBlockTextureFromSide(0); } + @Override + public NBTTagCompound getMemoryCardData() { + NBTTagCompound output = super.getMemoryCardData(); + DualHostSettings.downloadSettings(this, output); + return output; + } + @Override public PartP2PTunnel applyMemoryCard(EntityPlayer player, IMemoryCard memoryCard, ItemStack is) { PartP2PTunnel newTunnel = super.applyMemoryCard(player, memoryCard, is); @@ -78,6 +87,7 @@ public class PartFluidP2PInterface extends PartP2PInterface implements IDualHost NBTTagCompound data = memoryCard.getData(is); if (newTunnel instanceof PartFluidP2PInterface p2PInterface) { p2PInterface.duality.getConfigManager().readFromNBT(data); + DualHostSettings.uploadSettings(p2PInterface, data); } return newTunnel; } @@ -90,9 +100,24 @@ public class PartFluidP2PInterface extends PartP2PInterface implements IDualHost IConfigManager config = fromInterface.duality.getConfigManager(); config.getSettings() .forEach(setting -> newDuality.getConfigManager().putSetting(setting, config.getSetting(setting))); + DualHostSettings.copySettings(this, fromInterface); } } + @Override + public void uploadSettings(@NotNull SettingsFrom from, @NotNull NBTTagCompound compound) { + super.uploadSettings(from, compound); + DualHostSettings.uploadSettings(this, compound); + } + + @Override + @NotNull + public NBTTagCompound downloadSettings(SettingsFrom from) { + NBTTagCompound output = super.downloadSettings(from); + DualHostSettings.downloadSettings(this, output); + return output; + } + @Override public TickingRequest getTickingRequest(IGridNode node) { TickingRequest item = duality.getTickingRequest(node); diff --git a/src/main/java/com/glodblock/github/common/tile/TileFluidInterface.java b/src/main/java/com/glodblock/github/common/tile/TileFluidInterface.java index d57f78d5..2b1bea6a 100644 --- a/src/main/java/com/glodblock/github/common/tile/TileFluidInterface.java +++ b/src/main/java/com/glodblock/github/common/tile/TileFluidInterface.java @@ -25,6 +25,7 @@ import com.glodblock.github.inventory.AEFluidInventory; import com.glodblock.github.inventory.IAEFluidTank; import com.glodblock.github.inventory.IDualHost; import com.glodblock.github.loader.ItemAndBlockHolder; +import com.glodblock.github.util.DualHostSettings; import com.glodblock.github.util.DualityFluidInterface; import com.glodblock.github.util.Util; @@ -47,6 +48,7 @@ import appeng.tile.TileEvent; import appeng.tile.events.TileEventType; import appeng.tile.inventory.AppEngInternalAEInventory; import appeng.tile.misc.TileInterface; +import appeng.util.SettingsFrom; import cpw.mods.fml.common.network.ByteBufUtils; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -187,6 +189,20 @@ public class TileFluidInterface extends TileInterface implements IDualHost, ICus return data; } + @Override + public void uploadSettings(SettingsFrom from, NBTTagCompound compound) { + super.uploadSettings(from, compound); + DualHostSettings.uploadSettings(this, compound); + } + + @Override + public NBTTagCompound downloadSettings(SettingsFrom from) { + NBTTagCompound output = super.downloadSettings(from); + output = output == null ? new NBTTagCompound() : output; + DualHostSettings.downloadSettings(this, output); + return output; + } + @Nullable protected ItemStack getItemFromTile(final Object obj) { if (obj instanceof TileFluidInterface) { diff --git a/src/main/java/com/glodblock/github/util/DualHostSettings.java b/src/main/java/com/glodblock/github/util/DualHostSettings.java new file mode 100644 index 00000000..ca1bc148 --- /dev/null +++ b/src/main/java/com/glodblock/github/util/DualHostSettings.java @@ -0,0 +1,30 @@ +package com.glodblock.github.util; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.util.Constants.NBT; + +import com.glodblock.github.inventory.IDualHost; + +public final class DualHostSettings { + + private static final String FLUID_CONFIG_KEY = "fluidConfig"; + + private DualHostSettings() {} + + public static void uploadSettings(IDualHost host, NBTTagCompound compound) { + if (compound.hasKey(FLUID_CONFIG_KEY, NBT.TAG_COMPOUND)) { + host.getDualityFluid().readConfigFromNBT(compound, FLUID_CONFIG_KEY); + host.getConfig(); + } + } + + public static void downloadSettings(IDualHost host, NBTTagCompound output) { + host.getDualityFluid().writeConfigToNBT(output, FLUID_CONFIG_KEY); + } + + public static void copySettings(IDualHost target, IDualHost source) { + NBTTagCompound data = new NBTTagCompound(); + downloadSettings(source, data); + uploadSettings(target, data); + } +} diff --git a/src/main/java/com/glodblock/github/util/DualityFluidInterface.java b/src/main/java/com/glodblock/github/util/DualityFluidInterface.java index 83de9300..c1605c48 100644 --- a/src/main/java/com/glodblock/github/util/DualityFluidInterface.java +++ b/src/main/java/com/glodblock/github/util/DualityFluidInterface.java @@ -147,6 +147,16 @@ public class DualityFluidInterface implements IGridTickable, IStorageMonitorable this.readConfig(); } + public void writeConfigToNBT(NBTTagCompound data, String name) { + this.config.writeToNBT(data, name); + } + + public void readConfigFromNBT(NBTTagCompound data, String name) { + this.config.readFromNBT(data, name); + this.readConfig(); + this.saveChanges(); + } + public AEFluidInventory getConfig() { return this.config; }