public ModFluid InsertFluid(int slot, ModFluid fluid, bool simulate = false) { if (fluid == null) { return(null); } ValidateSlotIndex(slot); if (!IsFluidValid(this, slot, fluid)) { return(fluid); } ModFluid existing = Fluids[slot]; int limit = GetVolumeLimit(slot); if (existing != null) { if (!fluid.Equals(existing)) { return(fluid); } limit -= existing.volume; } if (limit <= 0) { return(fluid); } bool reachedLimit = fluid.volume > limit; if (!simulate) { if (existing == null) { Fluids[slot] = reachedLimit ? CopyFluidWithSize(fluid, limit) : fluid; } else { this.Grow(slot, reachedLimit ? limit : fluid.volume); } OnContentsChanged(slot); } return(reachedLimit ? CopyFluidWithSize(fluid, fluid.volume - limit) : null); }