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).

This commit is contained in:
Sebastian Hartte
2020-06-29 17:13:04 +02:00
parent 57fa5576af
commit f943106419
@@ -23,7 +23,6 @@ import javax.annotation.Nullable;
import com.google.common.base.Preconditions; import com.google.common.base.Preconditions;
import net.minecraft.fluid.EmptyFluid;
import net.minecraft.fluid.Fluid; import net.minecraft.fluid.Fluid;
import net.minecraft.fluid.Fluids; import net.minecraft.fluid.Fluids;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
@@ -240,26 +239,24 @@ public final class AEFluidStack extends AEStack<IAEFluidStack> implements IAEFlu
public static IAEFluidStack fromPacket(final PacketBuffer buffer) { public static IAEFluidStack fromPacket(final PacketBuffer buffer) {
final boolean isCraftable = buffer.readBoolean(); 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 stackSize = buffer.readVarLong();
final long countRequestable = buffer.readVarLong(); final long countRequestable = buffer.readVarLong();
if (fluidStack.isEmpty()) { final AEFluidStack stack = new AEFluidStack(fluid, stackSize, tag);
return null; stack.setCountRequestable(countRequestable);
} stack.setCraftable(isCraftable);
return stack;
final AEFluidStack fluid = AEFluidStack.fromFluidStack(fluidStack);
fluid.setStackSize(stackSize);
fluid.setCountRequestable(countRequestable);
fluid.setCraftable(isCraftable);
return fluid;
} }
@Override @Override
public void writeToPacket(final PacketBuffer buffer) { public void writeToPacket(final PacketBuffer buffer) {
buffer.writeBoolean(this.isCraftable()); 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.getStackSize());
buffer.writeVarLong(this.getCountRequestable()); buffer.writeVarLong(this.getCountRequestable());
} }