From f9431064194039fab2e0cff852214f8b71e158c5 Mon Sep 17 00:00:00 2001 From: Sebastian Hartte Date: Mon, 29 Jun 2020 17:13:04 +0200 Subject: [PATCH] Fix serialization of 0-amount fluidstacks which is required for properly updating an ME inventory where an existing fluid stack should be fully removed. (I.e. Taking out the last amount of a given fluid via a terminal). --- .../java/appeng/fluids/util/AEFluidStack.java | 21 ++++++++----------- 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/src/main/java/appeng/fluids/util/AEFluidStack.java b/src/main/java/appeng/fluids/util/AEFluidStack.java index 841f82e83..5355cf08d 100644 --- a/src/main/java/appeng/fluids/util/AEFluidStack.java +++ b/src/main/java/appeng/fluids/util/AEFluidStack.java @@ -23,7 +23,6 @@ import javax.annotation.Nullable; import com.google.common.base.Preconditions; -import net.minecraft.fluid.EmptyFluid; import net.minecraft.fluid.Fluid; import net.minecraft.fluid.Fluids; import net.minecraft.item.ItemStack; @@ -240,26 +239,24 @@ public final class AEFluidStack extends AEStack implements IAEFlu public static IAEFluidStack fromPacket(final PacketBuffer buffer) { final boolean isCraftable = buffer.readBoolean(); - final FluidStack fluidStack = buffer.readFluidStack(); + Fluid fluid = buffer.readRegistryIdUnsafe(ForgeRegistries.FLUIDS); + CompoundNBT tag = buffer.readCompoundTag(); final long stackSize = buffer.readVarLong(); final long countRequestable = buffer.readVarLong(); - if (fluidStack.isEmpty()) { - return null; - } - - final AEFluidStack fluid = AEFluidStack.fromFluidStack(fluidStack); - fluid.setStackSize(stackSize); - fluid.setCountRequestable(countRequestable); - fluid.setCraftable(isCraftable); - return fluid; + final AEFluidStack stack = new AEFluidStack(fluid, stackSize, tag); + stack.setCountRequestable(countRequestable); + stack.setCraftable(isCraftable); + return stack; } @Override public void writeToPacket(final PacketBuffer buffer) { buffer.writeBoolean(this.isCraftable()); - buffer.writeFluidStack(this.getFluidStack()); + // Cannot use writeFluidStack here because for FluidStacks with amount==0, it will not write the fluid + buffer.writeRegistryIdUnsafe(ForgeRegistries.FLUIDS, fluid); + buffer.writeCompoundTag(getFluidStack().getTag()); buffer.writeVarLong(this.getStackSize()); buffer.writeVarLong(this.getCountRequestable()); }