diff options
author | Connor-Colenso <52056774+Connor-Colenso@users.noreply.github.com> | 2022-10-12 15:57:26 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-10-12 15:57:26 +0100 |
commit | b5711d85aae1b89e9979de5625a0a73a499b0920 (patch) | |
tree | 43a3aa4ae75251c96245a012badf8a184cfdcc2c /src | |
parent | 56e23d871d01a027dad7864504fe4ac81f0e254e (diff) | |
parent | 0e46852d83a588fbe876ecb2a5f58e9c18360aa7 (diff) | |
download | GT5-Unofficial-b5711d85aae1b89e9979de5625a0a73a499b0920.tar.gz GT5-Unofficial-b5711d85aae1b89e9979de5625a0a73a499b0920.tar.bz2 GT5-Unofficial-b5711d85aae1b89e9979de5625a0a73a499b0920.zip |
Merge pull request #107 from GTNewHorizons/fix/log-spam
Properly fix ender fluid container not saving stuff
Diffstat (limited to 'src')
-rw-r--r-- | src/main/java/com/github/technus/tectech/mechanics/enderStorage/EnderFluidContainer.java | 66 |
1 files changed, 44 insertions, 22 deletions
diff --git a/src/main/java/com/github/technus/tectech/mechanics/enderStorage/EnderFluidContainer.java b/src/main/java/com/github/technus/tectech/mechanics/enderStorage/EnderFluidContainer.java index e7ec1b6dd7..d7afb7d5ea 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/enderStorage/EnderFluidContainer.java +++ b/src/main/java/com/github/technus/tectech/mechanics/enderStorage/EnderFluidContainer.java @@ -1,45 +1,37 @@ package com.github.technus.tectech.mechanics.enderStorage; +import com.github.technus.tectech.TecTech; +import java.io.DataInputStream; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; import java.io.Serializable; +import net.minecraft.nbt.CompressedStreamTools; import net.minecraft.nbt.NBTTagCompound; import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidRegistry; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.FluidTankInfo; import net.minecraftforge.fluids.IFluidHandler; public class EnderFluidContainer implements IFluidHandler, Serializable { - private static final int CAPACITY = 64000; - - @Deprecated() - private int fluidID = -1; - - @Deprecated() - private int fluidQuantity = 0; + private static final long serialVersionUID = 2L; + private static final int SERIALIZE_TYPE_WITH_NBT = 0; + private static final int SERIALIZE_TYPE_WITHOUT_NBT = 1; + private static final int SERIALIZE_TYPE_NULL = 2; - private NBTTagCompound fluid; + private static final int CAPACITY = 64000; + private transient FluidStack fluidStack; public EnderFluidContainer() {} private FluidStack getFluidStack() { - FluidStack fluidStack = null; - if (fluidID >= 0) { - fluid = new FluidStack(fluidID, fluidQuantity).writeToNBT(new NBTTagCompound()); - fluidID = -1; - fluidQuantity = 0; - } - if (fluid != null) { - fluidStack = FluidStack.loadFluidStackFromNBT(fluid); - } return fluidStack; } private void setFluidStack(FluidStack fluidStack) { - if (fluidStack != null) { - fluid = fluidStack.writeToNBT(new NBTTagCompound()); - } else { - fluid = null; - } + this.fluidStack = fluidStack; } @Override @@ -104,4 +96,34 @@ public class EnderFluidContainer implements IFluidHandler, Serializable { public FluidTankInfo[] getTankInfo(ForgeDirection forgeDirection) { return new FluidTankInfo[] {new FluidTankInfo(getFluidStack(), CAPACITY)}; } + + private void writeObject(ObjectOutputStream out) throws IOException { + if (fluidStack != null) { + out.writeByte(fluidStack.tag != null ? SERIALIZE_TYPE_WITH_NBT : SERIALIZE_TYPE_WITHOUT_NBT); + if (fluidStack.tag != null) CompressedStreamTools.write(fluidStack.tag, out); + out.writeUTF(fluidStack.getFluid().getName()); + out.writeInt(fluidStack.amount); + } else { + out.writeByte(SERIALIZE_TYPE_NULL); + } + } + + private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException { + byte type = in.readByte(); + NBTTagCompound tag = null; + switch (type) { + case SERIALIZE_TYPE_WITH_NBT: + tag = CompressedStreamTools.read(new DataInputStream(in)); + case SERIALIZE_TYPE_WITHOUT_NBT: + fluidStack = FluidRegistry.getFluidStack(in.readUTF(), in.readInt()); + break; + case SERIALIZE_TYPE_NULL: + fluidStack = null; + break; + default: + TecTech.LOGGER.error("Something very wrong... got a fluid container with state " + type); + fluidStack = null; + } + if (fluidStack != null) fluidStack.tag = tag; + } } |